[
  {
    "path": ".gitattributes",
    "content": "*.pbxproj merge=union\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: Bug report\ndescription: Create a report to help us improve\nlabels: 'bug'\n\nbody:\n  - type: textarea\n    attributes:\n      label: Description\n      description: >-\n        A clear and concise description of what the bug is.\n    validations:\n      required: true\n      \n  - type: textarea\n    attributes:\n      label: To Reproduce\n      description: >-\n        Steps to reproduce the behavior.\n      value: |\n        1. Go to '...'\n        2. Click on '....'\n        3. Scroll down to '....'\n        4. See error\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Expected behavior\n      description: >-\n        A clear and concise description of what you expected to happen.\n\n  - type: input\n    attributes:\n      label: FSNotes version\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: macOS/iOS version\n    validations:\n      required: true\n      \n  - type: textarea\n    attributes:\n      label: Additional context\n      description: >-\n        Add any other context about the problem here.\n"
  },
  {
    "path": ".gitignore",
    "content": "Pods\n*.xcuserstate\nxcuserdata\nPodfile.lock\nFSNotes.xcworkspace/xcshareddata/*\nFSNotes.xcworkspace/xcuserdata/*\nFSNotes.xcodeproj/xcuserdata/*\n"
  },
  {
    "path": ".swiftlint.yml",
    "content": "included: # paths to include during linting. `--path` is ignored if present.\n  - FSNotesCore\nexcluded: # paths to ignore during linting. Takes precedence over `included`.\n  - Pods\n\nline_length:\n  warning: 220\n\ndisabled_rules: \n  - implicit_getter\n  - identifier_name\n\ncyclomatic_complexity: 20\nfunction_body_length: 100\nfile_length: 1000\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: swift\nos: osx\nosx_image: xcode11.5\nxcode_workspace: FSNotes.xcworkspace\n\nbefore_install:\n    - pod install --repo-update\n\nenv:\n    - SCHEME=FSNotes SDK=macosx\n    - SCHEME=\"FSNotes iOS\" SDK=iphonesimulator\n\nscript: xcodebuild -workspace FSNotes.xcworkspace -scheme \"$SCHEME\" build -sdk $SDK ONLY_ACTIVE_ARCH=NO -UseModernBuildSystem=NO -quiet\n\nbranches:\n    only: [master]\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at fluder (at) icloud (dot) com. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "FSNotes/.bartycrouch.toml",
    "content": "[update]\ntasks = [\"interfaces\", \"code\", \"transform\", \"normalize\"]\n\n[update.interfaces]\npaths = [\".\"]\ndefaultToBase = true\nignoreEmptyStrings = false\nunstripped = false\n\n[update.code]\ncodePaths = [\".\"]\nlocalizablePaths = [\".\"]\ndefaultToKeys = true\nadditive = true\nunstripped = false\nplistArguments = true\n\n[update.transform]\ncodePaths = [\".\"]\nlocalizablePaths = [\".\"]\ntransformer = \"foundation\"\nsupportedLanguageEnumPath = \".\"\ntypeName = \"BartyCrouch\"\ntranslateMethodName = \"translate\"\n\n[update.normalize]\npaths = [\".\"]\nsourceLocale = \"en\"\nharmonizeWithSource = true\nsortByKeys = true\n\n[lint]\npaths = [\".\"]\nduplicateKeys = false\nemptyValues = true\n"
  },
  {
    "path": "FSNotes/AboutViewController.swift",
    "content": "//\n//  AboutViewController.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 5/10/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass AboutViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {\n    \n    @IBOutlet weak var translatorsList: NSTableView!\n    \n    private var languages = [\n        \"Deutsch 🇩🇪\",\n        \"Ukrainian🇺🇦\",\n        \"Spanish 🇪🇸\",\n        \"Arabic 🇮🇶\",\n        \"Chinese 🇨🇳\",\n        \"Korean 🇰🇷\",\n        \"French 🇫🇷\",\n        \"Dutch 🇳🇱\",\n        \"Portuguese 🇵🇹\",\n        \"Italian 🇮🇹\",\n        \"Hebrew 🇮🇱\",\n        \"Chinese 🇨🇳\",\n        \"Portuguese 🇵🇹\",\n        \"Czech 🇨🇿\",\n        \"Hindi 🇮🇳\",\n        \"Turkish 🇹🇷\",\n        \"Chinese 🇹🇼🇭🇰🇲🇴\"\n    ]\n    \n    private var authors = [\n        \"Michael Barzmann\",\n        \"Olena Hlushchenko ♥️\",\n        \"aonez (aone@keka.io)\",\n        \"Ayad (@ayad0net)\",\n        \"Pertim (macwk.com@gmail.com)\",\n        \"Wonsup Yoon (pusnow@kaist.ac.kr)\",\n        \"Simon Jornet (github.com/jornetsimon)\",\n        \"Chris Hendriks (github.com/olikilo)\",\n        \"reddit.com/user/endallbeallknowitall\",\n        \"Leonardo Bartoletti - leodmc88@gmail.com\",\n        \"Will Pazner (github.com/pazner)\",\n        \"Holton Jiang (github.com/holton-jiang)\",\n        \"Vanessa C. (github.com/VChristinne)\",\n        \"Max Akrman (github.com/isametry)\",\n        \"Aagman (stscpns@gmail.com)\",\n        \"Bünyamin Erol (bunyaminerol.com.tr)\",\n        \"Wen Xiang (imwwx@icloud.com)\"\n    ]\n    \n    override func viewDidLoad() {\n        if let dictionary = Bundle.main.infoDictionary,\n            let ver = dictionary[\"CFBundleShortVersionString\"] as? String,\n            let build = dictionary[\"CFBundleVersion\"] as? String {\n            versionLabel.stringValue = \"Version \\(ver) (\\(build))\"\n            versionLabel.isSelectable = true\n        }\n        \n        translatorsList.delegate = self\n        translatorsList.dataSource = self\n    }\n\n    @IBOutlet weak var versionLabel: NSTextField!\n    \n    @IBAction func openContributorsPage(_ sender: Any) {\n        let url = URL(string: \"https://github.com/glushchenko/fsnotes/graphs/contributors\")!\n        NSWorkspace.shared.open(url)\n    }\n    \n    func numberOfRows(in tableView: NSTableView) -> Int {\n        return languages.count\n    }\n        \n    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {\n        let result  = tableView.makeView(withIdentifier: (tableColumn?.identifier)!, owner: self) as! NSTableCellView\n        if  tableColumn?.identifier.rawValue == \"table.about.0\" {\n            result.textField?.stringValue = languages[row]\n        } else {\n            result.textField?.stringValue = authors[row]\n        }\n        return result\n    }\n}\n"
  },
  {
    "path": "FSNotes/AboutWindowController.swift",
    "content": "//\n//  AboutWindowController.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 5/10/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass AboutWindowController: NSWindowController, NSWindowDelegate {\n\n    override func windowDidLoad() {\n        super.windowDidLoad()\n        self.window?.delegate = self\n        self.window?.title = \"About\"\n    }\n}\n"
  },
  {
    "path": "FSNotes/AppDelegate+URLRoutes.swift",
    "content": "//\n//  AppDelegate+URLRoutes.swift\n//  FSNotes\n//\n//  Created by Jeff Hanbury on 13/04/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport Cocoa\n\n\nextension AppDelegate {\n    \n    enum HandledSchemes: String {\n        case fsnotes = \"fsnotes\"\n        case nv = \"nv\"\n        case nvALT = \"nvalt\"\n        case file = \"file\"\n    }\n    \n    enum FSNotesRoutes: String {\n        case find = \"find\"\n        case new = \"new\"\n        case open = \"open\"\n    }\n    \n    enum NvALTRoutes: String {\n        case find = \"find\"\n        case blank = \"\"\n        case make = \"make\"\n    }\n    \n    func application(_ application: NSApplication, open urls: [URL]) {\n        guard var url = urls.first,\n            let scheme = url.scheme\n            else { return }\n\n        let path = url.absoluteString.escapePlus()\n        if let escaped = URL(string: path) {\n            url = escaped\n        }\n\n        switch scheme {\n        case HandledSchemes.file.rawValue:\n            if nil != ViewController.shared() {\n                self.importNotes(urls: urls)\n            } else {\n                self.urls = urls\n            }\n        case HandledSchemes.fsnotes.rawValue:\n            FSNotesRouter(url)\n        case HandledSchemes.nv.rawValue,\n             HandledSchemes.nvALT.rawValue:\n            NvALTRouter(url)\n        default:\n            break\n        }\n    }\n\n    func importNotes(urls: [URL]) {\n        guard let vc = ViewController.shared() else { return }\n\n        var importedNote: Note? = nil\n        var sidebarIndex: Int? = nil\n\n        for url in urls {\n            if let items = vc.sidebarOutlineView.sidebarItems, let note = Storage.shared().getBy(url: url) {\n                if let sidebarItem = items.first(where: { ($0 as? SidebarItem)?.project == note.project || $0 as? Project == note.project }) {\n                    sidebarIndex = vc.sidebarOutlineView.row(forItem: sidebarItem)\n                    importedNote = note\n                }\n            } else if let project = Storage.shared().getDefault() {\n                let newUrl = vc.copy(project: project, url: url)\n\n                UserDataService.instance.focusOnImport = newUrl\n                UserDataService.instance.skipSidebarSelection = true\n            }\n        }\n\n        if let note = importedNote, let si = sidebarIndex {\n            vc.sidebarOutlineView.selectRowIndexes([si], byExtendingSelection: false)\n\n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.35, execute: {\n                vc.notesTableView.setSelected(note: note)\n            })\n        }\n    }\n    \n    // MARK: - FSNotes routes\n    \n    func FSNotesRouter(_ url: URL) {\n        guard let directive = url.host else { return }\n        \n        switch directive {\n        case FSNotesRoutes.find.rawValue:\n            RouteFSNotesFind(url)\n        case FSNotesRoutes.new.rawValue:\n            RouteFSNotesNew(url)\n        case FSNotesRoutes.open.rawValue:\n            RouteFSNotesOpen(url)\n        default:\n            break\n        }\n    }\n    \n    /// Handles URLs with the tag fsnotes://open/?tag=test\n    /// Handles URLs with the tag fsnotes://open/?title=Open+Or+Create+If+Not+Exist\n    ///\n    func RouteFSNotesOpen(_ url: URL) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if let tag = url[\"tag\"]?.removingPercentEncoding {\n            vc.sidebarOutlineView.select(tag: tag)\n            return\n        }\n        \n        if let title = url[\"title\"]?.removingPercentEncoding {\n            if let note = Storage.shared().getBy(titleOrName: title) {\n                if let txt = url[\"txt\"] {\n                    \n                    // Append txt\n                    note.append(string: NSMutableAttributedString(string: txt + \"\\n\\n\"))\n                    _ = note.save()\n                    \n                    // Set last range\n                    note.setSelectedRange(range: NSRange(location: note.content.length, length: 0))\n                }\n                \n                // Reset UI and focus\n                vc.cleanSearchAndEditArea(shouldBecomeFirstResponder: false, completion: { () -> Void in\n                    vc.notesTableView.selectRowAndSidebarItem(note: note)\n                    \n                    NSApp.mainWindow?.makeFirstResponder(vc.editor)\n                    vc.notesTableView.saveNavigationHistory(note: note)\n                })\n                \n            // Create NEW\n            } else {\n                RouteFSNotesNew(url)\n            }\n        }\n    }\n    \n    /// Handles URLs with the path /find/searchstring1%20searchstring2\n    func RouteFSNotesFind(_ url: URL) {\n        guard ViewController.shared() != nil else {\n            self.url = url\n            return\n        }\n\n        search(url: url)\n    }\n\n    public func search(url: URL) {\n        guard let vc = ViewController.shared() else { return }\n\n        var lastPath = url.lastPathComponent\n\n        if let wikiURL = url[\"id\"] {\n            if let note = Storage.shared().getBy(titleOrName: wikiURL) {\n                vc.cleanSearchAndEditArea(shouldBecomeFirstResponder: false, completion: { () -> Void in\n                    vc.notesTableView.selectRowAndSidebarItem(note: note)\n                    NSApp.mainWindow?.makeFirstResponder(vc.editor)\n                    vc.notesTableView.saveNavigationHistory(note: note)\n                })\n                return\n            } else {\n                lastPath = wikiURL\n                vc.search.window?.makeFirstResponder(vc.search)\n            }\n        }\n\n        search(query: lastPath)\n    }\n\n    func search(query: String) {\n        guard let controller = ViewController.shared() else { return }\n\n        let searchQuery = SearchQuery()\n        searchQuery.type = .All\n        searchQuery.setFilter(query)\n\n        controller.storage.setSearchQuery(value: searchQuery)\n        controller.updateTable() {\n            DispatchQueue.main.async {\n                controller.search.stringValue = query\n\n                if let note = controller.notesTableView.getNoteList().first {\n                    if note.title.lowercased() == query.lowercased() {\n                        controller.notesTableView.saveNavigationHistory(note: note)\n                        controller.notesTableView.setSelected(note: note)\n                        controller.view.window?.makeFirstResponder(controller.editor)\n                    } else {\n                        controller.search.suggestAutocomplete(note, filter: query)\n                    }\n                }\n            }\n        }\n    }\n    \n    /// Handles URLs with the following paths:\n    ///   - fsnotes://make/?title=URI-escaped-title&html=URI-escaped-HTML-data\n    ///   - fsnotes://make/?title=URI-escaped-title&txt=URI-escaped-plain-text\n    ///   - fsnotes://make/?txt=URI-escaped-plain-text\n    ///\n    /// The three possible parameters (title, txt, html) are all optional.\n    ///\n    func RouteFSNotesNew(_ url: URL) {\n        let newWindow = url[\"open\"] != nil\n        let folderName = url[\"folder\"]\n                \n        var title = \"\"\n        var body = \"\"\n        \n        if let titleParam = url[\"title\"] {\n            title = titleParam\n        }\n        \n        if let txtParam = url[\"txt\"] {\n            body = txtParam\n        } else if let htmlParam = url[\"html\"] {\n            body = htmlParam\n        }\n        \n        guard let vc = ViewController.shared() else {\n            self.newName = title\n            self.newContent = body\n            self.newWindow = newWindow\n            self.folderName = folderName\n            return\n        }\n        \n        guard let note = vc.createNote(name: title, content: body, folderName: folderName, openInNewWindow: newWindow),\n              newWindow else { return }\n        \n        vc.openInNewWindow(note: note)\n    }\n\n    // MARK: - nvALT routes, for compatibility\n    \n    func NvALTRouter(_ url: URL) {\n        guard let directive = url.host else { return }\n        \n        switch directive {\n        case NvALTRoutes.find.rawValue:\n            RouteNvAltFind(url)\n        case NvALTRoutes.make.rawValue:\n            RouteNvAltMake(url)\n        default:\n            RouteNvAltBlank(url)\n            break\n        }\n    }\n    \n    /// Handle URLs in the format nv://find/searchstring1%20searchstring2\n    ///\n    /// Note: this route is identical to the corresponding FSNotes route.\n    ///\n    func RouteNvAltFind(_ url: URL) {\n        RouteFSNotesFind(url)\n    }\n    \n    /// Handle URLs in the format nv://note%20title\n    ///\n    /// Note: this route is an alias to the /find route above.\n    ///\n    func RouteNvAltBlank(_ url: URL) {\n        let pathWithFind = url.absoluteString.replacingOccurrences(of: \"://\", with: \"://find/\")\n        guard let newURL = URL(string: pathWithFind) else { return }\n        \n        RouteFSNotesFind(newURL)\n    }\n    \n    /// Handle URLs in the format:\n    ///\n    ///   - nv://make/?title=URI-escaped-title&html=URI-escaped-HTML-data&tags=URI-escaped-tag-string\n    ///   - nv://make/?title=URI-escaped-title&txt=URI-escaped-plain-text\n    ///   - nv://make/?txt=URI-escaped-plain-text\n    ///\n    /// The four possible parameters (title, txt, html and tags) are all optional.\n    ///\n    func RouteNvAltMake(_ url: URL) {\n        let newWindow = url[\"open\"] != nil\n        \n        var title = \"\"\n        var body = \"\"\n        \n        if let titleParam = url[\"title\"] {\n            title = titleParam\n        }\n        \n        if let txtParam = url[\"txt\"] {\n            body = txtParam\n        }\n        else if let htmlParam = url[\"html\"] {\n            body = htmlParam\n        }\n        \n        if let tagsParam = url[\"tags\"] {\n            body = body.appending(\"\\n\\nnvALT tags: \\(tagsParam)\")\n        }\n        \n        guard let vc = ViewController.shared() else {\n            self.newName = title\n            self.newContent = body\n            self.newWindow = newWindow\n            return\n        }\n        \n        guard let note = vc.createNote(name: title, content: body, openInNewWindow: newWindow),\n              newWindow else { return }\n        \n        vc.openInNewWindow(note: note)\n    }\n}\n"
  },
  {
    "path": "FSNotes/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/20/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport UserNotifications\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {\n    var prefsWindowController: PrefsWindowController?\n    var aboutWindowController: AboutWindowController?\n    var statusItem: NSStatusItem?\n\n    public var urls: [URL]? = nil\n    public var url: URL? = nil\n    public var newName: String? = nil\n    public var newContent: String? = nil\n    public var folderName: String? = nil\n    public var newWindow: Bool = false\n\n    public static var mainWindowController: MainWindowController?\n    public static var noteWindows = [NSWindowController]()\n    \n    public static var appTitle: String {\n        let name = Bundle.main.object(forInfoDictionaryKey: \"CFBundleDisplayName\") as? String\n        return name ?? Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as! String\n    }\n    \n    public static var gitProgress: GitProgress?\n\n    func applicationWillFinishLaunching(_ notification: Notification) {\n        checkStorageChanges()\n        loadDockIcon()\n        \n        if UserDefaultsManagement.showInMenuBar {\n            constructMenu()\n        }\n        \n        if !UserDefaultsManagement.showDockIcon {\n            let transformState = ProcessApplicationTransformState(kProcessTransformToUIElementApplication)\n            var psn = ProcessSerialNumber(highLongOfPSN: 0, lowLongOfPSN: UInt32(kCurrentProcess))\n            TransformProcessType(&psn, transformState)\n\n            NSApp.setActivationPolicy(.accessory)\n        }\n    }\n\n    func applicationDidFinishLaunching(_ aNotification: Notification) {\n        // Ensure the font panel is closed when the app starts, in case it was\n        // left open when the app quit.\n        NSFontManager.shared.fontPanel(false)?.orderOut(self)\n\n        applyAppearance()\n\n        #if CLOUD_RELATED_BLOCK\n        if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent(\"Documents\").standardized {\n            \n            if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) {\n                do {\n                    try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil)\n                } catch {\n                    print(\"Home directory creation: \\(error)\")\n                }\n            }\n        }\n        #endif\n\n        if UserDefaultsManagement.storagePath == nil {\n            self.requestStorageDirectory()\n            return\n        }\n\n        let storyboard = NSStoryboard(name: \"Main\", bundle: nil)\n        \n        guard let mainWC = storyboard.instantiateController(withIdentifier: \"MainWindowController\") as? MainWindowController else {\n            fatalError(\"Error getting main window controller\")\n        }\n        \n        AppDelegate.mainWindowController = mainWC\n        mainWC.window?.makeKeyAndOrderFront(nil)\n    }\n        \n    func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {\n        if (!flag) {\n            AppDelegate.mainWindowController?.makeNew()\n        }\n                \n        return true\n    }\n\n    func applicationWillTerminate(_ notification: Notification) {\n        UserDefaultsManagement.crashedLastTime = false\n        \n        AppDelegate.saveWindowsState()\n        \n        Storage.shared().saveUploadPaths()\n        \n        let webkitPreview = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"wkPreview\")\n        try? FileManager.default.removeItem(at: webkitPreview)\n\n        let printDir = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Print\")\n        try? FileManager.default.removeItem(at: printDir)\n\n        let encryption = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Encryption\")\n        try? FileManager.default.removeItem(at: encryption)\n\n        var temporary = URL(fileURLWithPath: NSTemporaryDirectory())\n        temporary.appendPathComponent(\"ThumbnailsBig\")\n        try? FileManager.default.removeItem(at: temporary)\n\n        let storyboard = NSStoryboard(name: \"Main\", bundle: nil)\n        guard let mainWC = storyboard.instantiateController(withIdentifier: \"MainWindowController\") as? MainWindowController else {\n            return\n        }\n\n        if let x = mainWC.window?.frame.origin.x, let y = mainWC.window?.frame.origin.y {\n            UserDefaultsManagement.lastScreenX = Int(x)\n            UserDefaultsManagement.lastScreenY = Int(y)\n        }\n        \n        Storage.shared().saveProjectsCache()\n        \n        print(\"Termination end, crash status: \\(UserDefaultsManagement.crashedLastTime)\")\n    }\n    \n    private static func saveWindowsState() {\n        var result = [[String: Any]]()\n                \n        let noteWindows = self.noteWindows.sorted(by: { $0.window!.orderedIndex > $1.window!.orderedIndex })\n        for windowController in noteWindows {\n            if let frame = windowController.window?.frame,\n               let data = try? NSKeyedArchiver.archivedData(withRootObject: frame, requiringSecureCoding: true),\n               let controller = windowController.contentViewController as? NoteViewController,\n                   let note = controller.editor.note {\n\n\n                let key = windowController.window?.isKeyWindow == true\n\n                result.append([\"frame\": data, \"preview\": controller.editor.isPreviewEnabled(), \"url\": note.url, \"main\": false, \"key\": key])\n            }\n        }\n        \n        // Main frame\n        if let vc = ViewController.shared(), let note = vc.editor?.note, let mainFrame = vc.view.window?.frame,\n           let data = try? NSKeyedArchiver.archivedData(withRootObject: mainFrame, requiringSecureCoding: true) {\n\n            let key = vc.view.window?.isKeyWindow == true\n            \n            result.append([\"frame\": data, \"preview\": vc.editor.isPreviewEnabled(), \"url\": note.url, \"main\": true, \"key\": key])\n        }\n    \n        let projectsData = try? NSKeyedArchiver.archivedData(withRootObject: result, requiringSecureCoding: true)\n        if let documentDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first {\n            try? projectsData?.write(to: documentDir.appendingPathComponent(\"editors.settings\"))\n        }\n    }\n    \n    private func applyAppearance() {\n        if UserDefaultsManagement.appearanceType == .Dark {\n            NSApp.appearance = NSAppearance.init(named: NSAppearance.Name.darkAqua)\n            UserDataService.instance.isDark = true\n        }\n\n        if UserDefaultsManagement.appearanceType == .Light {\n            NSApp.appearance = NSAppearance.init(named: NSAppearance.Name.aqua)\n            UserDataService.instance.isDark = false\n        }\n\n        if UserDefaultsManagement.appearanceType == .System, NSAppearance.current.isDark {\n            UserDataService.instance.isDark = true\n        }\n    }\n    \n    private func restartApp() {\n        guard let resourcePath = Bundle.main.resourcePath else { return }\n        \n        let url = URL(fileURLWithPath: resourcePath)\n        let path = url.deletingLastPathComponent().deletingLastPathComponent().absoluteString\n        let task = Process()\n        \n        task.launchPath = \"/usr/bin/open\"\n        task.arguments = [path]\n        task.launch()\n        \n        exit(0)\n    }\n    \n    private func requestStorageDirectory() {\n        var directoryURL: URL? = nil\n        if let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {\n            directoryURL = URL(fileURLWithPath: path)\n        }\n        \n        let panel = NSOpenPanel()\n        panel.directoryURL = directoryURL\n        panel.allowsMultipleSelection = false\n        panel.canChooseDirectories = true\n        panel.canChooseFiles = false\n        panel.canCreateDirectories = true\n        panel.message = \"Please select default storage directory\"\n        panel.begin { (result) -> Void in\n            if result == .OK {\n                guard let url = panel.url else {\n                    return\n                }\n                \n                let bookmarks = SandboxBookmark.sharedInstance()\n                bookmarks.save(url: url)\n\n                UserDefaultsManagement.storageType = .custom\n                UserDefaultsManagement.customStoragePath = url.path\n                \n                self.restartApp()\n            } else {\n                exit(EXIT_SUCCESS)\n            }\n        }\n    }\n    \n    func constructMenu() {\n        statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)\n\n        if let button = statusItem?.button, let image = NSImage(named: \"menuBar\") {\n            image.size.width = 20\n            image.size.height = 20\n            button.image = image\n        }\n\n        statusItem?.button?.action = #selector(AppDelegate.clickStatusBarItem(sender:))\n        statusItem?.button?.sendAction(on: [.leftMouseUp, .rightMouseUp])\n    }\n\n    public func attachMenu() {\n        let menu = NSMenu()\n        menu.addItem(NSMenuItem(title: NSLocalizedString(\"New Note\", comment: \"\"), action: #selector(AppDelegate.new(_:)), keyEquivalent: \"n\"))\n\n        let newWindow = NSMenuItem(title: NSLocalizedString(\"New Note in New Window\", comment: \"\"), action: #selector(AppDelegate.createInNewWindow(_:)), keyEquivalent: \"n\")\n        var modifier = NSEvent.modifierFlags\n        modifier.insert(.command)\n        modifier.insert(.shift)\n        newWindow.keyEquivalentModifierMask = modifier\n        menu.addItem(newWindow)\n\n        menu.addItem(NSMenuItem.separator())\n        menu.addItem(NSMenuItem(title: NSLocalizedString(\"Search and create\", comment: \"\"), action: #selector(AppDelegate.searchAndCreate(_:)), keyEquivalent: \"l\"))\n        menu.addItem(NSMenuItem(title: NSLocalizedString(\"Settings\", comment: \"\"), action: #selector(AppDelegate.openPreferences(_:)), keyEquivalent: \",\"))\n\n        let lock = NSMenuItem(title: NSLocalizedString(\"Lock All Encrypted\", comment: \"\"), action: #selector(ViewController.shared()?.lockAll(_:)), keyEquivalent: \"l\")\n        lock.keyEquivalentModifierMask = [.command, .shift]\n        menu.addItem(lock)\n\n        menu.addItem(NSMenuItem.separator())\n        menu.addItem(NSMenuItem(title: NSLocalizedString(\"Quit FSNotes\", comment: \"\"), action: #selector(NSApplication.terminate(_:)), keyEquivalent: \"q\"))\n\n        menu.delegate = self\n        statusItem?.menu = menu\n    }\n\n    @objc func clickStatusBarItem(sender: NSStatusItem) {\n        let event = NSApp.currentEvent!\n\n        if event.type == NSEvent.EventType.leftMouseUp {\n            \n            // Hide active not hidden and not miniaturized\n            if !NSApp.isHidden && NSApp.isActive {\n                if let mainWindow = AppDelegate.mainWindowController?.window, !mainWindow.isMiniaturized {\n                    NSApp.hide(nil)\n                    return\n                }\n            }\n            \n            NSApp.unhide(nil)\n            NSApp.activate(ignoringOtherApps: true)\n            \n            AppDelegate.mainWindowController?.window?.makeKeyAndOrderFront(nil)\n            ViewController.shared()?.search.becomeFirstResponder()\n            \n            return\n        }\n\n        attachMenu()\n\n        DispatchQueue.main.async {\n            if let statusItem = self.statusItem, let button = statusItem.button {\n                statusItem.menu?.popUp(positioning: nil, at: NSPoint(x: button.frame.origin.x, y: button.frame.height + 10), in: button)\n            }\n        }\n    }\n\n    func menuDidClose(_ menu: NSMenu) {\n        statusItem?.menu = nil\n    }\n    \n    // MARK: IBActions\n    \n    @IBAction func openMainWindow(_ sender: Any) {\n        AppDelegate.mainWindowController?.makeNew()\n    }\n    \n    @IBAction func openHelp(_ sender: Any) {\n        NSWorkspace.shared.open(URL(string: \"https://github.com/glushchenko/fsnotes/wiki\")!)\n    }\n\n    @IBAction func openReportsAndRequests(_ sender: Any) {\n        NSWorkspace.shared.open(URL(string: \"https://github.com/glushchenko/fsnotes/issues/new/choose\")!)\n    }\n\n    @IBAction func openSite(_ sender: Any) {\n        NSWorkspace.shared.open(URL(string: \"https://fsnot.es\")!)\n    }\n    \n    @IBAction func openPreferences(_ sender: Any?) {\n        if prefsWindowController == nil {\n            let storyboard = NSStoryboard(name: \"Main\", bundle: nil)\n            \n            prefsWindowController = storyboard.instantiateController(withIdentifier: \"Preferences\") as? PrefsWindowController\n        }\n        \n        guard let prefsWindowController = prefsWindowController else { return }\n        \n        prefsWindowController.showWindow(nil)\n        prefsWindowController.window?.makeKeyAndOrderFront(prefsWindowController)\n        \n        NSApp.activate(ignoringOtherApps: true)\n    }\n    \n    @IBAction func new(_ sender: Any?) {\n        AppDelegate.mainWindowController?.makeNew()\n        NSApp.activate(ignoringOtherApps: true)\n        ViewController.shared()?.fileMenuNewNote(self)\n    }\n    \n    @IBAction func createInNewWindow(_ sender: Any?) {\n        AppDelegate.mainWindowController?.makeNew()\n        NSApp.activate(ignoringOtherApps: true)\n        ViewController.shared()?.createInNewWindow(self)\n    }\n    \n    @IBAction func searchAndCreate(_ sender: Any?) {\n        AppDelegate.mainWindowController?.makeNew()\n        NSApp.activate(ignoringOtherApps: true)\n        \n        guard let vc = ViewController.shared() else { return }\n        \n        DispatchQueue.main.async {\n            vc.search.window?.makeFirstResponder(vc.search)\n        }\n    }\n    \n    @IBAction func removeMenuBar(_ sender: Any?) {\n        guard let statusItem = statusItem else { return }\n        NSStatusBar.system.removeStatusItem(statusItem)\n    }\n    \n    @IBAction func addMenuBar(_ sender: Any?) {\n        constructMenu()\n    }\n\n    @IBAction func showAboutWindow(_ sender: AnyObject) {\n        if aboutWindowController == nil {\n            let storyboard = NSStoryboard(name: \"Main\", bundle: nil)\n\n            aboutWindowController = storyboard.instantiateController(withIdentifier: \"About\") as? AboutWindowController\n        }\n\n        guard let aboutWindowController = aboutWindowController else { return }\n\n        aboutWindowController.showWindow(nil)\n        aboutWindowController.window?.makeKeyAndOrderFront(aboutWindowController)\n\n        NSApp.activate(ignoringOtherApps: true)\n    }\n\n    public func loadDockIcon() {\n        var image: Image?\n\n        switch UserDefaultsManagement.dockIcon {\n        case 0:\n            image = NSImage(named: \"modern\")\n            break\n        case 1:\n            image = NSImage(named: \"AppIconClassic\")\n            break\n        default:\n            break\n        }\n\n        guard let im = image else { return }\n\n        let appDockTile = NSApplication.shared.dockTile\n        if #available(OSX 10.12, *) {\n            appDockTile.contentView = NSImageView(image: im)\n        }\n\n        appDockTile.display()\n    }\n\n    private func checkStorageChanges() {\n        if Storage.shared().shouldMovePrompt,\n            let local = UserDefaultsManagement.localDocumentsContainer,\n            let iCloudDrive = UserDefaultsManagement.iCloudDocumentsContainer\n        {\n            let message = NSLocalizedString(\"We are detect that you are install FSNotes from Mac App Store with default storage in iCloud Drive, do you want to move old database in iCloud Drive?\", comment: \"\")\n\n            promptToMoveDatabase(from: local, to: iCloudDrive, messageText: message)\n        }\n    }\n\n    public func promptToMoveDatabase(from currentURL: URL, to url : URL, messageText: String) {\n        let alert = NSAlert()\n        alert.messageText = messageText\n        alert.informativeText =\n            NSLocalizedString(\"Otherwise, the database of your notes will be available at: \", comment: \"\") + currentURL.path\n\n        alert.alertStyle = .warning\n        alert.addButton(withTitle: NSLocalizedString(\"No\", comment: \"\"))\n        alert.addButton(withTitle: NSLocalizedString(\"Yes\", comment: \"\"))\n\n        if alert.runModal() == .alertSecondButtonReturn {\n            move(from: currentURL, to: url)\n\n            let localTrash = currentURL.appendingPathComponent(\"Trash\", isDirectory: true)\n            let cloudTrash = url.appendingPathComponent(\"Trash\", isDirectory: true)\n\n            move(from: localTrash, to: cloudTrash)\n        }\n    }\n\n    private func move(from currentURL: URL, to url: URL) {\n        if let list = try? FileManager.default.contentsOfDirectory(at: currentURL, includingPropertiesForKeys: nil, options: .init()) {\n\n            if !FileManager.default.fileExists(atPath: currentURL.path) {\n                return\n            }\n\n            if !FileManager.default.fileExists(atPath: url.path) {\n                try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)\n            }\n\n            for item in list {\n                let fileName = item.lastPathComponent\n\n                do {\n                    let dst = url.appendingPathComponent(fileName)\n                    try FileManager.default.moveItem(at: item, to: dst)\n                } catch {\n\n                    if [\"Trash\", \"Welcome\"].contains(fileName) {\n                        continue\n                    }\n\n                    let exist = NSAlert()\n                    var message = NSLocalizedString(\"We can not move \\\"{DST_PATH}\\\" because this item already exist in selected destination.\", comment: \"\")\n\n                    message = message.replacingOccurrences(of: \"{DST_PATH}\", with: item.path)\n\n                    exist.messageText = message\n                    exist.addButton(withTitle: NSLocalizedString(\"OK\", comment: \"\"))\n                    exist.runModal()\n                }\n            }\n        }\n    }\n\n    func application(_ application: NSApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void) -> Bool {\n\n        ViewController.shared()?.restoreUserActivityState(userActivity)\n\n        return true\n    }\n\n    func application(_ application: NSApplication, willContinueUserActivityWithType userActivityType: String) -> Bool {\n\n        return true\n    }\n    \n    func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {\n        return true\n    }\n    \n    public static func getEditTextViews() -> [EditTextView] {\n        var views = getOpenedEditTextViews()\n                \n        if let controller = mainWindowController?.contentViewController as? ViewController {\n            views.append(controller.editor)\n        }\n        \n        return views\n    }\n    \n    public static func getOpenedEditTextViews() -> [EditTextView] {\n        var views = [EditTextView]()\n        \n        for window in noteWindows {\n            if let controller = window.contentViewController as? NoteViewController {\n                views.append(controller.editor)\n            }\n        }\n        \n        return views\n    }\n}\n"
  },
  {
    "path": "FSNotes/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"24506\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"macosx\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"24506\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Application-->\n        <scene sceneID=\"JPo-4y-FX3\">\n            <objects>\n                <application id=\"hnw-xV-0zn\" sceneMemberID=\"viewController\">\n                    <menu key=\"mainMenu\" title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n                        <items>\n                            <menuItem title=\"FSNotes\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"FSNotes\" systemMenu=\"apple\" identifier=\"fsnotesMenu\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About FSNotes\" image=\"info.circle\" catalog=\"system\" id=\"5kV-Vb-QxS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"showAboutWindow:\" target=\"Ady-hI-5gd\" id=\"N5Z-Au-8xg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                                        <menuItem title=\"Preferences…\" image=\"gearshape\" catalog=\"system\" keyEquivalent=\",\" id=\"BOF-NM-1cW\">\n                                            <connections>\n                                                <action selector=\"openPreferences:\" target=\"Voe-Tx-rLC\" id=\"inL-8g-wqE\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Lock All Encrypted\" image=\"lock\" catalog=\"system\" keyEquivalent=\"L\" identifier=\"fsnotes.lock\" id=\"GrP-W1-7ZQ\">\n                                            <connections>\n                                                <action selector=\"lockAll:\" target=\"Ady-hI-5gd\" id=\"13I-PF-JJb\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"KF2-I2-ZON\"/>\n                                        <menuItem image=\"trash\" catalog=\"system\" identifier=\"fsnotes.emptyBin\" id=\"G9H-Lg-TXE\">\n                                            <string key=\"keyEquivalent\" base64-UTF8=\"YES\">\nCA\n</string>\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"emptyTrash:\" target=\"L4m-js-agn\" id=\"d27-Z5-1ap\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                                        <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                                        <menuItem title=\"Hide FSNotes\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                            <connections>\n                                                <action selector=\"hide:\" target=\"Ady-hI-5gd\" id=\"PnN-Uc-m68\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"hideOtherApplications:\" target=\"Ady-hI-5gd\" id=\"VT4-aY-XCT\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"unhideAllApplications:\" target=\"Ady-hI-5gd\" id=\"Dhg-Le-xox\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                                        <menuItem title=\"Quit FSNotes\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                            <connections>\n                                                <action selector=\"terminate:\" target=\"Ady-hI-5gd\" id=\"Te7-pn-YzF\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"File\" id=\"SeY-r8-n3w\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"File\" identifier=\"fileMenu\" id=\"uMZ-sI-7ja\">\n                                    <items>\n                                        <menuItem title=\"Close\" image=\"xmark\" catalog=\"system\" keyEquivalent=\"w\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.close\" id=\"kIy-TN-XMS\">\n                                            <connections>\n                                                <action selector=\"performClose:\" target=\"Ady-hI-5gd\" id=\"kc5-tb-yP0\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"k4G-pB-1AO\"/>\n                                        <menuItem title=\"Import\" image=\"square.and.arrow.down\" catalog=\"system\" keyEquivalent=\"O\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.import\" id=\"O8Z-cg-XnH\">\n                                            <connections>\n                                                <action selector=\"importNote:\" target=\"Ady-hI-5gd\" id=\"r4z-z3-fFc\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Add External Folder...\" image=\"folder\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.attach\" id=\"S8Z-Js-fwB\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"createFolder:\" target=\"Ady-hI-5gd\" id=\"fZJ-Cq-oSM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Commit &amp; Push\" image=\"arrow.clockwise.circle\" catalog=\"system\" keyEquivalent=\"s\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.backup\" id=\"iIP-wI-OaZ\">\n                                            <connections>\n                                                <action selector=\"saveRevision:\" target=\"Ady-hI-5gd\" id=\"K8t-sd-0yE\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"gcI-QI-pM4\"/>\n                                        <menuItem title=\"New\" image=\"note.text\" catalog=\"system\" keyEquivalent=\"n\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.new\" id=\"2Ci-Yj-aWK\">\n                                            <connections>\n                                                <action selector=\"fileMenuNewNote:\" target=\"L4m-js-agn\" id=\"N33-Jf-oOg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"New Note in New Window  \" image=\"macwindow.badge.plus\" catalog=\"system\" keyEquivalent=\"N\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.newInNewWindow\" id=\"2Vh-rt-1kc\">\n                                            <connections>\n                                                <action selector=\"createInNewWindow:\" target=\"Ady-hI-5gd\" id=\"fVv-cz-Kms\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"New Folder\" image=\"folder\" catalog=\"system\" keyEquivalent=\"n\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.createFolder\" id=\"SrH-fe-Hog\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"createFolder:\" target=\"Ady-hI-5gd\" id=\"zjY-Sq-KJa\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"pvu-vt-MCq\"/>\n                                        <menuItem title=\"Search and Create\" image=\"magnifyingglass\" catalog=\"system\" keyEquivalent=\"l\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.searchAndCreate\" id=\"hPY-aY-QOE\">\n                                            <connections>\n                                                <action selector=\"searchAndCreate:\" target=\"L4m-js-agn\" id=\"ChM-Mj-Rdf\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"DJZ-Sf-cos\"/>\n                                        <menuItem title=\"Open Note in New Window\" image=\"macwindow.on.rectangle\" catalog=\"system\" keyEquivalent=\"o\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.open\" id=\"HmK-lp-ASv\">\n                                            <connections>\n                                                <action selector=\"openWindow:\" target=\"Ady-hI-5gd\" id=\"HOV-Ja-fKS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Duplicate\" image=\"document.on.document\" catalog=\"system\" keyEquivalent=\"d\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.duplicate\" id=\"pnm-dP-GKO\">\n                                            <connections>\n                                                <action selector=\"duplicate:\" target=\"Ady-hI-5gd\" id=\"9eI-Pe-IRx\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Rename\" image=\"pencil\" catalog=\"system\" keyEquivalent=\"r\" mirroring=\"NO\" identifier=\"fileMenu.rename\" id=\"jLq-8F-n0X\">\n                                            <connections>\n                                                <action selector=\"fsRenameItem:\" target=\"Ady-hI-5gd\" id=\"nob-G6-CIE\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Force Delete\" image=\"delete.right\" catalog=\"system\" alternate=\"YES\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.forceRemove\" id=\"zd2-Rs-DPm\">\n                                            <string key=\"keyEquivalent\" base64-UTF8=\"YES\">\nCA\n</string>\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"forceDeleteNote:\" target=\"Ady-hI-5gd\" id=\"RHd-Iz-8iM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Pin/Unpin\" image=\"pin\" catalog=\"system\" keyEquivalent=\"8\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.togglePin\" id=\"You-zo-rbl\">\n                                            <connections>\n                                                <action selector=\"pinMenu:\" target=\"Ady-hI-5gd\" id=\"5kK-KD-hhk\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Decrypt\" image=\"lock.slash\" catalog=\"system\" keyEquivalent=\"l\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.decrypt\" id=\"fkH-Wf-n87\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"fsDecryptItem:\" target=\"Ady-hI-5gd\" id=\"VnY-0f-Osd\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Lock/Unlock\" image=\"lock\" catalog=\"system\" keyEquivalent=\"l\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.toggleLock\" id=\"RSs-wb-GNg\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"fsToggleLockItem:\" target=\"Ady-hI-5gd\" id=\"J64-eG-cRe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open External\" image=\"iphone.and.arrow.right.outward\" catalog=\"system\" keyEquivalent=\"e\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.external\" id=\"7MT-fy-lXN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"editorMenu:\" target=\"Ady-hI-5gd\" id=\"bT1-dL-ioY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Reveal in Finder\" image=\"doc.viewfinder\" catalog=\"system\" keyEquivalent=\"R\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.reveal\" id=\"rXU-X3-UjC\">\n                                            <connections>\n                                                <action selector=\"fsRevealItem:\" target=\"Ady-hI-5gd\" id=\"Tlf-Bz-pRQ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"uk8-Oi-IxM\"/>\n                                        <menuItem title=\"Share\" image=\"square.and.arrow.up\" catalog=\"system\" id=\"eCt-xc-KgN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Share\" identifier=\"shareMenu\" id=\"LKs-o1-uhL\">\n                                                <items>\n                                                    <menuItem title=\"Copy URL\" localization=\"NO\" mirroring=\"NO\" identifier=\"shareMenu.copyURL\" id=\"Rg2-j1-Foz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"copyURL:\" target=\"Ady-hI-5gd\" id=\"aX7-ly-HOE\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Copy Title\" keyEquivalent=\"c\" localization=\"NO\" mirroring=\"NO\" identifier=\"shareMenu.copyTitle\" id=\"5LV-Vi-n79\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyTitle:\" target=\"Ady-hI-5gd\" id=\"a1Z-Iq-V4h\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Create Web Page\" keyEquivalent=\"u\" localization=\"NO\" mirroring=\"NO\" identifier=\"shareMenu.uploadOverSSH\" id=\"vZO-Tx-X1j\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"uploadWebNote:\" target=\"Ady-hI-5gd\" id=\"kGh-7X-iq3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Delete Web Page\" tag=\"100\" keyEquivalent=\"u\" localization=\"NO\" mirroring=\"NO\" identifier=\"shareMenu.removeOverSSH\" id=\"PzH-8q-38O\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"removeWebNote:\" target=\"Ady-hI-5gd\" id=\"nSU-Xz-O4T\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"wQ9-qT-qnU\"/>\n                                        <menuItem title=\"Move\" image=\"move.3d\" catalog=\"system\" keyEquivalent=\"T\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.move\" id=\"CvG-Kp-kdK\">\n                                            <connections>\n                                                <action selector=\"moveMenu:\" target=\"Ady-hI-5gd\" id=\"gIh-8j-qKG\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"History\" image=\"clock\" catalog=\"system\" keyEquivalent=\"H\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.history\" id=\"Snd-dJ-uj5\">\n                                            <connections>\n                                                <action selector=\"historyMenu:\" target=\"Ady-hI-5gd\" id=\"VPf-oO-JCe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"zV0-3n-jVp\"/>\n                                        <menuItem title=\"Print\" image=\"printer\" catalog=\"system\" keyEquivalent=\"p\" localization=\"NO\" mirroring=\"NO\" identifier=\"fileMenu.print\" id=\"OV0-om-POJ\">\n                                            <connections>\n                                                <action selector=\"printNotes:\" target=\"Ady-hI-5gd\" id=\"aq9-E9-nEe\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Edit\" identifier=\"editMenu\" id=\"W48-6f-4Dl\">\n                                    <items>\n                                        <menuItem title=\"Undo\" image=\"arrow.uturn.backward\" catalog=\"system\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                            <connections>\n                                                <action selector=\"undo:\" target=\"Ady-hI-5gd\" id=\"M6e-cu-g7V\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Redo\" image=\"arrow.uturn.forward\" catalog=\"system\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                            <connections>\n                                                <action selector=\"redo:\" target=\"Ady-hI-5gd\" id=\"oIA-Rs-6OD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                                        <menuItem title=\"Cut\" image=\"scissors\" catalog=\"system\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                            <connections>\n                                                <action selector=\"cut:\" target=\"Ady-hI-5gd\" id=\"YJe-68-I9s\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy\" image=\"document.on.document\" catalog=\"system\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                            <connections>\n                                                <action selector=\"copy:\" target=\"Ady-hI-5gd\" id=\"lq4-pB-TEE\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste\" image=\"document.on.clipboard\" catalog=\"system\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                            <connections>\n                                                <action selector=\"paste:\" target=\"Ady-hI-5gd\" id=\"UvS-8e-Qdg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste and Match Style\" image=\"document.on.clipboard.fill\" catalog=\"system\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteAsPlainText:\" target=\"Ady-hI-5gd\" id=\"cEh-KX-wJQ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Delete\" image=\"trash\" catalog=\"system\" id=\"pa3-QI-u2k\">\n                                            <string key=\"keyEquivalent\" base64-UTF8=\"YES\">\nCA\n</string>\n                                            <connections>\n                                                <action selector=\"delete:\" target=\"Ady-hI-5gd\" id=\"0Mk-Ml-PaM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Select All\" image=\"filemenu.and.selection\" catalog=\"system\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                            <connections>\n                                                <action selector=\"selectAll:\" target=\"Ady-hI-5gd\" id=\"VNm-Mi-diN\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                                        <menuItem title=\"Find\" image=\"magnifyingglass\" catalog=\"system\" id=\"4EN-yA-p0u\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Find\" identifier=\"findMenu\" id=\"1b7-l0-nxx\">\n                                                <items>\n                                                    <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" identifier=\"findMenu.find\" id=\"Xz5-n4-O0W\">\n                                                        <connections>\n                                                            <action selector=\"textFinder:\" target=\"Ady-hI-5gd\" id=\"2Cg-JO-owM\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" identifier=\"findMenu.findAndReplace\" id=\"YEy-JH-Tfz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"textFinder:\" target=\"Ady-hI-5gd\" id=\"0qw-zr-Yhp\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" identifier=\"findMenu.next\" id=\"q09-fT-Sye\">\n                                                        <connections>\n                                                            <action selector=\"textFinder:\" target=\"Ady-hI-5gd\" id=\"fIz-Br-Zj3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" identifier=\"findMenu.prev\" id=\"OwM-mh-QMV\">\n                                                        <connections>\n                                                            <action selector=\"textFinder:\" target=\"Ady-hI-5gd\" id=\"gEq-hu-Qc3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" identifier=\"findMenu.selectionToFind\" id=\"buJ-ug-pKt\">\n                                                        <connections>\n                                                            <action selector=\"textFinder:\" target=\"Ady-hI-5gd\" id=\"pyk-IL-ame\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"centerSelectionInVisibleArea:\" target=\"Ady-hI-5gd\" id=\"IOG-6D-g5B\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Spelling and Grammar\" image=\"graduationcap\" catalog=\"system\" id=\"Dv1-io-Yv7\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Spelling and Grammar\" identifier=\"spelling\" id=\"3IN-sU-3Bg\">\n                                                <items>\n                                                    <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                                        <connections>\n                                                            <action selector=\"showGuessPanel:\" target=\"Ady-hI-5gd\" id=\"vFj-Ks-hy3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                                        <connections>\n                                                            <action selector=\"checkSpelling:\" target=\"Ady-hI-5gd\" id=\"fz7-VC-reM\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                                    <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleContinuousSpellChecking:\" target=\"Ady-hI-5gd\" id=\"7w6-Qz-0kB\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleGrammarChecking:\" target=\"Ady-hI-5gd\" id=\"muD-Qn-j4w\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"Ady-hI-5gd\" id=\"2lM-Qi-WAP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Substitutions\" image=\"textformat.subscript\" catalog=\"system\" id=\"9ic-FL-obx\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Substitutions\" identifier=\"substitutions\" id=\"FeM-D8-WVr\">\n                                                <items>\n                                                    <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"orderFrontSubstitutionsPanel:\" target=\"Ady-hI-5gd\" id=\"oku-mr-iSq\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                                    <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleSmartInsertDelete:\" target=\"Ady-hI-5gd\" id=\"3IJ-Se-DZD\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"Ady-hI-5gd\" id=\"ptq-xd-QOA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDashSubstitution:\" target=\"Ady-hI-5gd\" id=\"oCt-pO-9gS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticLinkDetection:\" target=\"Ady-hI-5gd\" id=\"Gip-E3-Fov\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDataDetection:\" target=\"Ady-hI-5gd\" id=\"R1I-Nq-Kbl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticTextReplacement:\" target=\"Ady-hI-5gd\" id=\"DvP-Fe-Py6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Transformations\" image=\"textformat.abc\" catalog=\"system\" id=\"2oI-Rn-ZJC\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                                <items>\n                                                    <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"uppercaseWord:\" target=\"Ady-hI-5gd\" id=\"sPh-Tk-edu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowercaseWord:\" target=\"Ady-hI-5gd\" id=\"iUZ-b5-hil\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"capitalizeWord:\" target=\"Ady-hI-5gd\" id=\"26H-TL-nsh\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Speech\" image=\"waveform\" catalog=\"system\" id=\"xrE-MZ-jX0\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                                <items>\n                                                    <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"startSpeaking:\" target=\"Ady-hI-5gd\" id=\"654-Ng-kyl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"stopSpeaking:\" target=\"Ady-hI-5gd\" id=\"dX8-6p-jy9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Format\" identifier=\"formatMenu\" id=\"GEO-Iw-cKr\">\n                                    <items>\n                                        <menuItem title=\"Bold\" image=\"bold\" catalog=\"system\" keyEquivalent=\"b\" id=\"LTw-w4-tEo\">\n                                            <connections>\n                                                <action selector=\"boldMenu:\" target=\"Ady-hI-5gd\" id=\"iEg-Ph-IUa\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Italic\" image=\"italic\" catalog=\"system\" keyEquivalent=\"i\" id=\"k32-YP-yyI\">\n                                            <connections>\n                                                <action selector=\"italicMenu:\" target=\"Ady-hI-5gd\" id=\"NfW-nJ-p7S\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Strikethrough\" image=\"strikethrough\" catalog=\"system\" keyEquivalent=\"y\" id=\"EK1-kN-kK3\">\n                                            <connections>\n                                                <action selector=\"strikeMenu:\" target=\"Ady-hI-5gd\" id=\"ez5-KB-i65\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"pUR-Y1-6Rc\"/>\n                                        <menuItem title=\"Headers\" image=\"textformat.size.smaller\" catalog=\"system\" id=\"Pzb-TG-43d\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Headers\" id=\"UMi-Hx-Z1c\">\n                                                <items>\n                                                    <menuItem title=\"Header 1\" keyEquivalent=\"1\" identifier=\"format.h1\" id=\"jRm-BN-BNK\">\n                                                        <connections>\n                                                            <action selector=\"headerMenu:\" target=\"Ady-hI-5gd\" id=\"ZMG-7U-hDJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Header 2\" keyEquivalent=\"2\" identifier=\"format.h2\" id=\"cYB-6U-8ac\">\n                                                        <connections>\n                                                            <action selector=\"headerMenu:\" target=\"Ady-hI-5gd\" id=\"uk8-PE-ezN\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Header 3\" keyEquivalent=\"3\" identifier=\"format.h3\" id=\"Lmy-lE-9MZ\">\n                                                        <connections>\n                                                            <action selector=\"headerMenu:\" target=\"Ady-hI-5gd\" id=\"7T9-eU-evK\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Header 4\" keyEquivalent=\"4\" identifier=\"format.h4\" id=\"GhL-6I-558\">\n                                                        <connections>\n                                                            <action selector=\"headerMenu:\" target=\"Ady-hI-5gd\" id=\"xL5-Mc-FpK\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Header 5\" keyEquivalent=\"5\" identifier=\"format.h5\" id=\"DWe-bx-jfM\">\n                                                        <connections>\n                                                            <action selector=\"headerMenu:\" target=\"Ady-hI-5gd\" id=\"VQ0-l4-gu2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Header 6\" keyEquivalent=\"6\" identifier=\"format.h6\" id=\"cq7-SM-dez\">\n                                                        <connections>\n                                                            <action selector=\"headerMenu:\" target=\"Ady-hI-5gd\" id=\"Ma4-If-e1Y\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"axj-Yd-h2p\"/>\n                                        <menuItem title=\"List\" image=\"list.bullet\" catalog=\"system\" keyEquivalent=\"l\" id=\"1sM-9Q-KeG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"insertList:\" target=\"Ady-hI-5gd\" id=\"6EM-1j-yZn\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Ordered List\" image=\"list.number\" catalog=\"system\" keyEquivalent=\"L\" id=\"8cf-5K-KZh\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"insertOrderedList:\" target=\"Ady-hI-5gd\" id=\"mSc-hh-Emb\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Toggle Todo\" image=\"checklist\" catalog=\"system\" keyEquivalent=\"t\" identifier=\"format.todo\" id=\"n0M-SN-fzg\">\n                                            <connections>\n                                                <action selector=\"todo:\" target=\"Ady-hI-5gd\" id=\"tNn-G1-JVu\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Clear Completed Todos\" image=\"checklist.unchecked\" catalog=\"system\" keyEquivalent=\"t\" id=\"BoD-Jy-zeE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"clearCompletedTodos:\" target=\"Ady-hI-5gd\" id=\"9Vo-lw-EsW\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"p1N-Ks-tWf\"/>\n                                        <menuItem title=\"Link\" image=\"link\" catalog=\"system\" keyEquivalent=\"i\" identifier=\"format.link\" id=\"xfW-7n-cIw\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"linkMenu:\" target=\"Ady-hI-5gd\" id=\"V6q-no-eC3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Image or File\" image=\"paperclip\" catalog=\"system\" keyEquivalent=\"I\" identifier=\"format.image\" id=\"yx6-SW-3vn\">\n                                            <connections>\n                                                <action selector=\"insertFileOrImage:\" target=\"Ady-hI-5gd\" id=\"2EE-rd-dsJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Code Block\" image=\"swift\" catalog=\"system\" keyEquivalent=\"c\" identifier=\"format.codeBlock\" id=\"OOL-dM-zIE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"insertCodeBlock:\" target=\"Ady-hI-5gd\" id=\"dB1-yF-DnW\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Code Span\" image=\"chevron.left.forwardslash.chevron.right\" catalog=\"system\" keyEquivalent=\"C\" identifier=\"format.codeSpan\" id=\"Ukg-MO-eaB\">\n                                            <connections>\n                                                <action selector=\"insertCodeSpan:\" target=\"Ady-hI-5gd\" id=\"zP1-Kg-gh9\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Quote\" image=\"quote.bubble\" catalog=\"system\" keyEquivalent=\"U\" id=\"X3S-sG-ykW\">\n                                            <connections>\n                                                <action selector=\"insertQuote:\" target=\"Ady-hI-5gd\" id=\"CsH-RU-eV9\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"WikiLinks\" image=\"link.badge.plus\" catalog=\"system\" keyEquivalent=\"9\" id=\"hqQ-4C-VJL\">\n                                            <connections>\n                                                <action selector=\"wikiLinks:\" target=\"Ady-hI-5gd\" id=\"gT7-1q-B11\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"mrY-K0-JGH\"/>\n                                        <menuItem title=\"Move Item\" image=\"move.3d\" catalog=\"system\" id=\"3fK-Ap-A5p\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Move Item\" id=\"zRJ-Z2-Lsa\">\n                                                <items>\n                                                    <menuItem title=\"Shift Left\" keyEquivalent=\"[\" id=\"DeU-hy-pvi\">\n                                                        <connections>\n                                                            <action selector=\"shiftLeft:\" target=\"Ady-hI-5gd\" id=\"fP7-F6-api\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Shift Right\" keyEquivalent=\"]\" id=\"IPu-Ll-IBE\">\n                                                        <connections>\n                                                            <action selector=\"shiftRight:\" target=\"Ady-hI-5gd\" id=\"kJe-pA-OMN\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Move Selected Lines Down\" keyEquivalent=\"\" id=\"STm-3f-GNu\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"moveSelectedLinesDown:\" target=\"Ady-hI-5gd\" id=\"7r8-RI-N3B\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Move Selected Lines Up\" keyEquivalent=\"\" id=\"yMK-aK-OV2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"moveSelectedLinesUp:\" target=\"Ady-hI-5gd\" id=\"BR0-Oc-4LZ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"View\" identifier=\"viewMenu\" id=\"HyV-fh-RgO\">\n                                    <items>\n                                        <menuItem title=\"Toggle Preview\" image=\"eye\" catalog=\"system\" keyEquivalent=\"/\" id=\"PdU-Em-Ugm\">\n                                            <connections>\n                                                <action selector=\"togglePreview:\" target=\"Ady-hI-5gd\" id=\"62m-Nl-zcS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Preview MathJax\" image=\"x.squareroot\" catalog=\"system\" keyEquivalent=\"/\" identifier=\"previewMathJax\" id=\"KIz-OO-IQT\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleMathJax:\" target=\"Ady-hI-5gd\" id=\"KrN-I7-17C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"BackLinks\" image=\"link.circle\" catalog=\"system\" keyEquivalent=\"b\" id=\"1cO-zi-naR\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"showBackLinks:\" target=\"Ady-hI-5gd\" id=\"aGr-tc-O21\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"sLG-sQ-Yi1\"/>\n                                        <menuItem title=\"Hide/Show Note List\" image=\"sidebar.squares.leading\" catalog=\"system\" keyEquivalent=\"B\" identifier=\"view.toggleNoteList\" id=\"WHt-T4-l9c\">\n                                            <connections>\n                                                <action selector=\"toggleNoteList:\" target=\"L4m-js-agn\" id=\"G22-P2-hks\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide/Show Sidebar\" image=\"sidebar.left\" catalog=\"system\" keyEquivalent=\"s\" identifier=\"view.toggleSidebar\" id=\"DCh-5P-PZe\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleSidebar:\" target=\"L4m-js-agn\" id=\"MRM-fh-zTo\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"2A1-iA-fhx\"/>\n                                        <menuItem title=\"Back\" image=\"backward\" catalog=\"system\" keyEquivalent=\"[\" identifier=\"viewMenu.historyBack\" id=\"qNE-oZ-zJr\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"prevHistory:\" target=\"L4m-js-agn\" id=\"o7w-Hu-ldI\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Forward\" image=\"forward\" catalog=\"system\" keyEquivalent=\"]\" identifier=\"viewMenu.historyForward\" id=\"oQE-3t-6pa\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"nextHistory:\" target=\"L4m-js-agn\" id=\"D4W-nU-AEU\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"iip-ri-cBa\"/>\n                                        <menuItem title=\"Move Down in the Notes List\" image=\"arrowshape.down\" catalog=\"system\" keyEquivalent=\"j\" id=\"BtV-Z4-7Vq\">\n                                            <connections>\n                                                <action selector=\"noteDown:\" target=\"Ady-hI-5gd\" id=\"WHy-qc-OvH\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Move Up in the Notes List\" image=\"arrowshape.up\" catalog=\"system\" keyEquivalent=\"k\" id=\"Hqu-Sx-xgo\">\n                                            <connections>\n                                                <action selector=\"noteUp:\" target=\"Ady-hI-5gd\" id=\"gfc-6f-Jom\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                                        <menuItem title=\"Move Down in the Sidebar\" image=\"arrow.down.circle\" catalog=\"system\" keyEquivalent=\"J\" identifier=\"folderMenu.down\" id=\"vrs-XL-lyE\">\n                                            <connections>\n                                                <action selector=\"sidebarDown:\" target=\"Ady-hI-5gd\" id=\"87t-Yf-dii\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Move Up in the Sidebar\" image=\"arrow.up.circle\" catalog=\"system\" keyEquivalent=\"K\" identifier=\"folderMenu.up\" id=\"sdE-ZM-6cq\">\n                                            <connections>\n                                                <action selector=\"sidebarUp:\" target=\"Ady-hI-5gd\" id=\"8dT-Az-Nv2\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"Ljl-jP-3qX\"/>\n                                        <menuItem title=\"Sort By\" image=\"arrow.up.arrow.down\" catalog=\"system\" id=\"rHB-xF-GgG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Sort By\" identifier=\"viewSortBy\" id=\"05n-RU-nOV\">\n                                                <items>\n                                                    <menuItem title=\"Modification Date\" tag=\"1\" identifier=\"SB.modificationDate\" id=\"dCc-l5-XB2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sortBy:\" target=\"L4m-js-agn\" id=\"UCf-WH-qOL\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Creation Date\" tag=\"2\" identifier=\"SB.creationDate\" id=\"eTL-dh-GvM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sortBy:\" target=\"L4m-js-agn\" id=\"2Jk-Qh-1MD\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Title\" tag=\"3\" identifier=\"SB.title\" id=\"1qV-pJ-ZQT\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sortBy:\" target=\"L4m-js-agn\" id=\"Diu-Vl-cVb\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Show in Sidebar\" image=\"rectangle.expand.vertical\" catalog=\"system\" id=\"O9f-Lf-HF6\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Show in Sidebar\" identifier=\"showInSidebar\" id=\"xjf-5G-e5Q\">\n                                                <items>\n                                                    <menuItem title=\"Notes\" state=\"on\" tag=\"2\" id=\"xPz-yo-VwM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sidebarItemVisibility:\" target=\"L4m-js-agn\" id=\"9eO-fj-M9I\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Inbox\" state=\"on\" tag=\"1\" id=\"IHG-4U-pF1\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sidebarItemVisibility:\" target=\"Ady-hI-5gd\" id=\"fCX-Hw-xKB\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Todo\" state=\"on\" tag=\"3\" id=\"e0G-y0-N0C\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sidebarItemVisibility:\" target=\"L4m-js-agn\" id=\"vD4-T3-64C\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Untagged\" state=\"on\" tag=\"6\" id=\"BX0-nb-tVk\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sidebarItemVisibility:\" target=\"L4m-js-agn\" id=\"Je9-DX-4lc\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Trash\" state=\"on\" tag=\"5\" id=\"RdI-N4-pR2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"sidebarItemVisibility:\" target=\"L4m-js-agn\" id=\"Vrr-NC-FPf\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"J7t-Zu-WdP\"/>\n                                        <menuItem title=\"Actual Size\" image=\"arrow.counterclockwise\" catalog=\"system\" keyEquivalent=\"0\" identifier=\"viewMenu.actualSize\" id=\"LFw-De-3DP\">\n                                            <connections>\n                                                <action selector=\"actualSize:\" target=\"Ady-hI-5gd\" id=\"YdB-qs-3rs\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom In\" image=\"plus.magnifyingglass\" catalog=\"system\" keyEquivalent=\"+\" id=\"NZK-ki-p6Z\">\n                                            <connections>\n                                                <action selector=\"zoomIn:\" target=\"Ady-hI-5gd\" id=\"wMo-ve-Eil\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom Out\" image=\"minus.magnifyingglass\" catalog=\"system\" keyEquivalent=\"-\" id=\"gYQ-MC-Xwt\">\n                                            <connections>\n                                                <action selector=\"zoomOut:\" target=\"Ady-hI-5gd\" id=\"r5g-eg-lj6\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"XWg-CY-0hh\"/>\n                                        <menuItem title=\"Enter Full Screen\" image=\"arrow.up.left.and.arrow.down.right\" catalog=\"system\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleFullScreen:\" target=\"Ady-hI-5gd\" id=\"dU3-MA-1Rq\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Window\" id=\"SdL-vK-KjH\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" identifier=\"windowMenu\" id=\"MlK-p2-CxF\">\n                                    <items>\n                                        <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"A5V-Wm-if2\">\n                                            <connections>\n                                                <action selector=\"performMiniaturize:\" target=\"Ady-hI-5gd\" id=\"JEs-m4-uJy\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom\" id=\"FQV-5x-ffs\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"performZoom:\" target=\"Ady-hI-5gd\" id=\"Wrc-W7-8lh\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"f4P-YX-ans\"/>\n                                        <menuItem title=\"Main Window\" keyEquivalent=\"\\\" id=\"qZf-Xp-kDW\">\n                                            <connections>\n                                                <action selector=\"openMainWindow:\" target=\"Voe-Tx-rLC\" id=\"wG8-zv-K7f\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"DHU-Ji-YT6\"/>\n                                        <menuItem title=\"Bring All to Front\" id=\"s6A-tQ-Sbe\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"arrangeInFront:\" target=\"Ady-hI-5gd\" id=\"zFj-Sz-Cbg\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                                    <items>\n                                        <menuItem title=\"FSNotes Help\" image=\"questionmark.circle\" catalog=\"system\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                            <connections>\n                                                <action selector=\"openHelp:\" target=\"Voe-Tx-rLC\" id=\"CHO-se-CJA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Report Bugs or Feature Requests\" image=\"ladybug\" catalog=\"system\" id=\"Q9n-yE-Ul0\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"openReportsAndRequests:\" target=\"Ady-hI-5gd\" id=\"V1D-1X-awT\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Official Site\" image=\"link\" catalog=\"system\" id=\"cfe-sv-2gm\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"openSite:\" target=\"Voe-Tx-rLC\" id=\"A75-hX-lIa\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"PrD-fu-P6m\"/>\n                    </connections>\n                </application>\n                <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"FSNotes\" customModuleProvider=\"target\"/>\n                <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n                <customObject id=\"N0L-g4-qwj\" customClass=\"EditTextView\" customModule=\"FSNotes\" customModuleProvider=\"target\"/>\n                <customObject id=\"L4m-js-agn\" customClass=\"ViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                    <connections>\n                        <outlet property=\"showInSidebar\" destination=\"O9f-Lf-HF6\" id=\"kDJ-q5-nnU\"/>\n                        <outlet property=\"sortByOutlet\" destination=\"rHB-xF-GgG\" id=\"Z3o-fD-Poh\"/>\n                    </connections>\n                </customObject>\n                <customObject id=\"3kq-Pd-JKK\" customClass=\"SidebarCellView\" customModule=\"FSNotes\" customModuleProvider=\"target\"/>\n                <customObject id=\"yxb-XH-bXh\" customClass=\"SidebarOutlineView\" customModule=\"FSNotes\" customModuleProvider=\"target\"/>\n                <customObject id=\"Ady-hI-5gd\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n                <userDefaultsController representsSharedInstance=\"YES\" id=\"rlq-iU-PD6\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-291\" y=\"-501\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"mVP-iC-cBD\">\n            <objects>\n                <windowController storyboardIdentifier=\"Preferences\" showSeguePresentationStyle=\"single\" id=\"Ozi-at-KZg\" customClass=\"PrefsWindowController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"Preferences\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" visibleAtLaunch=\"NO\" frameAutosaveName=\"PrefsWindow\" animationBehavior=\"default\" id=\"ldu-U8-PD1\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"196\" y=\"240\" width=\"513\" height=\"270\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1792\" height=\"1097\"/>\n                        <connections>\n                            <outlet property=\"delegate\" destination=\"Ozi-at-KZg\" id=\"jdS-QV-DS0\"/>\n                        </connections>\n                    </window>\n                    <connections>\n                        <segue destination=\"tR0-Uj-4tB\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"yDP-1O-iOj\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"NeV-iG-RmF\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"755\" y=\"80\"/>\n        </scene>\n        <!--Preferences-->\n        <scene sceneID=\"jPb-fQ-VKL\">\n            <objects>\n                <tabViewController title=\"Preferences\" selectedTabViewItemIndex=\"0\" tabStyle=\"toolbar\" id=\"tR0-Uj-4tB\" customClass=\"PrefsViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tabViewItems>\n                        <tabViewItem identifier=\"\" image=\"prefsGeneral\" id=\"rNR-GY-ptT\" userLabel=\"General\">\n                            <nil key=\"label\"/>\n                        </tabViewItem>\n                        <tabViewItem identifier=\"ui\" image=\"prefsLayout\" id=\"sue-zm-fiI\" userLabel=\"Layout\"/>\n                        <tabViewItem image=\"prefsEditor\" id=\"1OI-UI-JVH\" userLabel=\"Editor\"/>\n                        <tabViewItem identifier=\"security\" image=\"privacy\" id=\"eYm-FV-50h\" userLabel=\"Security\"/>\n                        <tabViewItem label=\"Git\" identifier=\"git\" image=\"prefsGit\" id=\"wxM-bE-TE9\"/>\n                        <tabViewItem label=\"Web\" identifier=\"web\" image=\"prefsWeb\" id=\"Ng2-HH-bmY\" userLabel=\"Web\"/>\n                        <tabViewItem identifier=\"advanced\" image=\"prefsAdvanced\" id=\"0v6-hJ-g1F\" userLabel=\"Advanced\">\n                            <nil key=\"label\"/>\n                        </tabViewItem>\n                    </tabViewItems>\n                    <tabView key=\"tabView\" autoresizesSubviews=\"NO\" allowsTruncatedLabels=\"NO\" type=\"noTabsNoBorder\" id=\"db4-eL-XEQ\">\n                        <rect key=\"frame\" x=\"675\" y=\"-450\" width=\"450\" height=\"300\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <font key=\"font\" metaFont=\"menu\" size=\"14\"/>\n                    </tabView>\n                    <connections>\n                        <outlet property=\"advancedTabViewItem\" destination=\"0v6-hJ-g1F\" id=\"fkv-5e-W3u\"/>\n                        <outlet property=\"editorTabViewItem\" destination=\"1OI-UI-JVH\" id=\"VIK-r5-1g0\"/>\n                        <outlet property=\"generalTabViewItem\" destination=\"rNR-GY-ptT\" id=\"ks6-RP-bh1\"/>\n                        <outlet property=\"gitTabViewItem\" destination=\"wxM-bE-TE9\" id=\"eqH-R3-Qyb\"/>\n                        <outlet property=\"libraryTabViewItem\" destination=\"sue-zm-fiI\" id=\"PhQ-e7-ZK7\"/>\n                        <outlet property=\"securityTabViewItem\" destination=\"eYm-FV-50h\" id=\"E9A-Wf-dJb\"/>\n                        <outlet property=\"webTabViewItem\" destination=\"Ng2-HH-bmY\" id=\"Yfx-1v-kow\"/>\n                        <segue destination=\"NHv-lG-vxt\" kind=\"relationship\" relationship=\"tabItems\" id=\"AHk-7F-en6\"/>\n                        <segue destination=\"P2a-yk-5Rx\" kind=\"relationship\" relationship=\"tabItems\" id=\"HER-xL-S6y\"/>\n                        <segue destination=\"ssC-ed-19K\" kind=\"relationship\" relationship=\"tabItems\" id=\"ppI-q9-PJm\"/>\n                        <segue destination=\"PXw-YJ-q6A\" kind=\"relationship\" relationship=\"tabItems\" id=\"lxO-6V-7BP\"/>\n                        <segue destination=\"2un-du-hJz\" kind=\"relationship\" relationship=\"tabItems\" id=\"KnF-bE-uZD\"/>\n                        <segue destination=\"X76-X8-PbG\" kind=\"relationship\" relationship=\"tabItems\" id=\"Q4A-W6-Oyn\"/>\n                        <segue destination=\"mvt-gI-iG0\" kind=\"relationship\" relationship=\"tabItems\" id=\"qYM-eH-890\"/>\n                    </connections>\n                </tabViewController>\n                <customObject id=\"9E2-Js-TDw\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n                <userDefaultsController id=\"qTX-G9-cKe\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1343\" y=\"45\"/>\n        </scene>\n        <!--General-->\n        <scene sceneID=\"8BR-f0-7JZ\">\n            <objects>\n                <viewController title=\"General\" id=\"NHv-lG-vxt\" customClass=\"PreferencesGeneralViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"4Xk-4f-czc\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"468\" height=\"571\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rjd-D6-Jj2\" customClass=\"MASShortcutView\">\n                                <rect key=\"frame\" x=\"255\" y=\"104\" width=\"178\" height=\"25\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"25\" id=\"Cvw-f5-Zb0\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"178\" id=\"wsm-9W-2qC\"/>\n                                </constraints>\n                            </customView>\n                            <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"XYa-Po-O09\" customClass=\"MASShortcutView\">\n                                <rect key=\"frame\" x=\"35\" y=\"104\" width=\"169\" height=\"25\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"169\" id=\"If5-ek-85k\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"25\" id=\"uHR-VQ-LaB\"/>\n                                </constraints>\n                            </customView>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"81L-hB-Mc1\">\n                                <rect key=\"frame\" x=\"33\" y=\"525\" width=\"426\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Default Storage:\" id=\"fmS-eE-nne\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"XZf-Ag-G2L\">\n                                <rect key=\"frame\" x=\"359\" y=\"489\" width=\"81\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Change\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"nBn-aV-7mt\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeDefaultStorage:\" target=\"NHv-lG-vxt\" id=\"LS1-05-YQG\"/>\n                                </connections>\n                            </button>\n                            <pathControl horizontalHuggingPriority=\"100\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"1\" allowsExpansionToolTips=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dkg-Hb-c1w\">\n                                <rect key=\"frame\" x=\"35\" y=\"495\" width=\"323\" height=\"22\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"100\" id=\"10Y-Pk-0Xu\"/>\n                                </constraints>\n                                <pathCell key=\"cell\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" id=\"3NY-lU-xWa\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <url key=\"url\" string=\"file://localhost/Applications/\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </pathCell>\n                            </pathControl>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4Kr-dW-0Jm\">\n                                <rect key=\"frame\" x=\"20\" y=\"472\" width=\"452\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TXq-y1-xzw\">\n                                <rect key=\"frame\" x=\"253\" y=\"137\" width=\"152\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Save clipboard shortcut:\" id=\"gbE-yH-ECm\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bMo-2z-4jT\">\n                                <rect key=\"frame\" x=\"33\" y=\"137\" width=\"105\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Search shortcut:\" id=\"a6n-hz-V8D\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UaP-4D-ZNN\">\n                                <rect key=\"frame\" x=\"33\" y=\"237\" width=\"279\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Focus on search bar when ESC is pressed\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"Vwq-Ek-K2v\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"searchFocusOnESC:\" target=\"NHv-lG-vxt\" id=\"tvd-sF-9ty\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"e7K-T3-Vtb\">\n                                <rect key=\"frame\" x=\"20\" y=\"316\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BIH-5M-4PT\">\n                                <rect key=\"frame\" x=\"20\" y=\"171\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <popUpButton verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"P8W-WS-MSI\">\n                                <rect key=\"frame\" x=\"243\" y=\"432\" width=\"107\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\"TextBundle\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" tag=\"3\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"MCR-1v-3Wc\" id=\"u6Y-Is-Nwm\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"kGi-nO-Y2a\">\n                                        <items>\n                                            <menuItem title=\"TextBundle\" state=\"on\" tag=\"3\" id=\"MCR-1v-3Wc\"/>\n                                            <menuItem title=\"None\" tag=\"1\" id=\"xxB-ic-LFu\"/>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"fileContainer:\" target=\"NHv-lG-vxt\" id=\"7gU-Lr-OUP\"/>\n                                </connections>\n                            </popUpButton>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cyw-aB-0wY\">\n                                <rect key=\"frame\" x=\"156\" y=\"438\" width=\"67\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Container:\" id=\"mXw-d9-js5\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField identifier=\"openInExternalEditor\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7Hz-R4-h7D\">\n                                <rect key=\"frame\" x=\"246\" y=\"371\" width=\"187\" height=\"21\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" state=\"on\" borderStyle=\"bezel\" placeholderString=\"TextEdit\" drawsBackground=\"YES\" id=\"1XY-bI-DX7\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"externalEditor:\" target=\"NHv-lG-vxt\" id=\"7GF-3g-9zI\"/>\n                                    <binding destination=\"gPl-hR-49I\" name=\"value\" keyPath=\"values.externalEditorApp\" id=\"0j3-ee-7f3\"/>\n                                </connections>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1vW-Wi-nGt\">\n                                <rect key=\"frame\" x=\"76\" y=\"374\" width=\"147\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Open in External Editor:\" id=\"zcY-e5-gKs\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <popUpButton verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Qf2-ns-Osr\">\n                                <rect key=\"frame\" x=\"243\" y=\"400\" width=\"106\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\".markdown\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"HK7-Qq-ilB\" id=\"SNo-Pc-VFy\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"5cf-YK-mN9\">\n                                        <items>\n                                            <menuItem title=\".markdown\" state=\"on\" id=\"HK7-Qq-ilB\"/>\n                                            <menuItem title=\".md\" id=\"bCL-eg-DgP\"/>\n                                            <menuItem title=\".txt\" id=\"TfH-z4-HHY\"/>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"defaultExtension:\" target=\"NHv-lG-vxt\" id=\"Pgm-OZ-qRz\"/>\n                                </connections>\n                            </popUpButton>\n                            <popUpButton verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UbX-Sa-Jtd\">\n                                <rect key=\"frame\" x=\"243\" y=\"335\" width=\"194\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\"Autoname by Title (30s)\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" tag=\"5\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"y5T-sb-gw4\" id=\"3k2-O8-Jza\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"Ilk-gp-eEJ\">\n                                        <items>\n                                            <menuItem title=\"Autoname by Title (30s)\" state=\"on\" tag=\"5\" id=\"y5T-sb-gw4\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"Auto Rename By Title\" tag=\"1\" id=\"wW6-4n-sve\"/>\n                                            <menuItem title=\"Format: UUID\" id=\"cmH-fQ-bVK\"/>\n                                            <menuItem title=\"Format: Untitled Note\" tag=\"2\" id=\"IWL-lp-G1M\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"Format: yyyyMMddHHmmss\" tag=\"3\" id=\"aVa-yH-IpC\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"Format: yyyy-MM-dd hh.mm.ss a\" tag=\"4\" id=\"qn1-vy-8oB\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"filesNaming:\" target=\"NHv-lG-vxt\" id=\"dK7-H3-kSu\"/>\n                                </connections>\n                            </popUpButton>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JjB-78-ifK\">\n                                <rect key=\"frame\" x=\"137\" y=\"342\" width=\"86\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Files Naming:\" id=\"FS0-ZJ-WvJ\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0MX-CO-c4Y\">\n                                <rect key=\"frame\" x=\"172\" y=\"406\" width=\"51\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Format:\" id=\"ctD-Qn-kDS\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1T1-iH-jib\">\n                                <rect key=\"frame\" x=\"33\" y=\"68\" width=\"74\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Quick note:\" id=\"yNE-Yn-AWj\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"B3F-c9-AP8\" customClass=\"MASShortcutView\">\n                                <rect key=\"frame\" x=\"35\" y=\"35\" width=\"169\" height=\"25\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"25\" id=\"s6k-MV-VCi\"/>\n                                </constraints>\n                            </customView>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"187-a6-mAR\">\n                                <rect key=\"frame\" x=\"33\" y=\"215\" width=\"284\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Automatic iCloud Drive conflicts resolution\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"t3f-wS-BqN\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"automaticConflictsResolution:\" target=\"NHv-lG-vxt\" id=\"zsj-xy-jJK\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Akc-AN-R9w\">\n                                <rect key=\"frame\" x=\"33\" y=\"193\" width=\"278\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Use TextBundle info.json to store c/mtime\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"nTf-oq-7k2\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"saveTextBundleMetaData:\" target=\"NHv-lG-vxt\" id=\"ox9-V3-f1m\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uTG-yn-jge\">\n                                <rect key=\"frame\" x=\"33\" y=\"259\" width=\"297\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Note auto selection when body text matched\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"ZqK-gu-KdQ\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"textMatchAutoSelection:\" target=\"NHv-lG-vxt\" id=\"qlh-wK-MIV\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qW8-n9-YAx\">\n                                <rect key=\"frame\" x=\"33\" y=\"281\" width=\"328\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Hide FSNotes when activating another application\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"M29-fW-FJa\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeHideOnDeactivate:\" target=\"NHv-lG-vxt\" id=\"vhB-yD-KJt\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oAW-vX-xph\">\n                                <rect key=\"frame\" x=\"253\" y=\"68\" width=\"182\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Activate:\" id=\"0o7-iB-dtg\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"b4Q-10-yq8\" customClass=\"MASShortcutView\">\n                                <rect key=\"frame\" x=\"255\" y=\"35\" width=\"178\" height=\"25\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"178\" id=\"0RV-2z-TtT\"/>\n                                </constraints>\n                            </customView>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"7Hz-R4-h7D\" firstAttribute=\"leading\" secondItem=\"1vW-Wi-nGt\" secondAttribute=\"trailing\" constant=\"25\" id=\"1Px-GF-v1A\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"rjd-D6-Jj2\" secondAttribute=\"trailing\" constant=\"35\" id=\"4EG-2q-Wy4\"/>\n                            <constraint firstItem=\"rjd-D6-Jj2\" firstAttribute=\"top\" secondItem=\"TXq-y1-xzw\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"5d4-GJ-axU\"/>\n                            <constraint firstItem=\"XYa-Po-O09\" firstAttribute=\"top\" secondItem=\"bMo-2z-4jT\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"7iT-Ba-g7S\"/>\n                            <constraint firstItem=\"bMo-2z-4jT\" firstAttribute=\"top\" secondItem=\"BIH-5M-4PT\" secondAttribute=\"bottom\" constant=\"20\" id=\"7pF-DH-9ts\"/>\n                            <constraint firstItem=\"B3F-c9-AP8\" firstAttribute=\"trailing\" secondItem=\"XYa-Po-O09\" secondAttribute=\"trailing\" id=\"8mP-a1-l2Q\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"b4Q-10-yq8\" secondAttribute=\"trailing\" constant=\"35\" id=\"AvH-lI-bwd\"/>\n                            <constraint firstItem=\"Akc-AN-R9w\" firstAttribute=\"leading\" secondItem=\"187-a6-mAR\" secondAttribute=\"leading\" id=\"CjW-VG-Ez8\"/>\n                            <constraint firstItem=\"qW8-n9-YAx\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"35\" id=\"DhD-rj-JUt\"/>\n                            <constraint firstItem=\"Cyw-aB-0wY\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"F8e-cT-4nC\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"81L-hB-Mc1\" secondAttribute=\"trailing\" constant=\"11\" id=\"FWR-0L-QkT\"/>\n                            <constraint firstItem=\"1vW-Wi-nGt\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"HRT-0a-6w7\"/>\n                            <constraint firstItem=\"XZf-Ag-G2L\" firstAttribute=\"centerY\" secondItem=\"dkg-Hb-c1w\" secondAttribute=\"centerY\" id=\"IWB-ar-OkH\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"TXq-y1-xzw\" secondAttribute=\"trailing\" constant=\"35\" id=\"J5R-MR-9PH\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"P8W-WS-MSI\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"JVx-Rc-KGH\"/>\n                            <constraint firstItem=\"UbX-Sa-Jtd\" firstAttribute=\"firstBaseline\" secondItem=\"JjB-78-ifK\" secondAttribute=\"firstBaseline\" id=\"JyW-lo-2O0\"/>\n                            <constraint firstItem=\"P8W-WS-MSI\" firstAttribute=\"leading\" secondItem=\"Cyw-aB-0wY\" secondAttribute=\"trailing\" constant=\"25\" id=\"K4m-6p-4Ys\"/>\n                            <constraint firstItem=\"4Kr-dW-0Jm\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"KAC-HP-TqR\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"qW8-n9-YAx\" secondAttribute=\"trailing\" constant=\"35\" id=\"LXA-gs-LZg\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"UbX-Sa-Jtd\" secondAttribute=\"trailing\" constant=\"35\" id=\"M4E-yE-pX1\"/>\n                            <constraint firstItem=\"UaP-4D-ZNN\" firstAttribute=\"top\" secondItem=\"uTG-yn-jge\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"Nao-g3-xgn\"/>\n                            <constraint firstItem=\"qW8-n9-YAx\" firstAttribute=\"top\" secondItem=\"e7K-T3-Vtb\" secondAttribute=\"bottom\" constant=\"20\" id=\"OY4-tg-MIm\"/>\n                            <constraint firstItem=\"P8W-WS-MSI\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"centerX\" constant=\"12\" id=\"OnF-Gy-ztC\"/>\n                            <constraint firstItem=\"1T1-iH-jib\" firstAttribute=\"top\" secondItem=\"XYa-Po-O09\" secondAttribute=\"bottom\" constant=\"20\" id=\"OuF-xZ-5S8\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"BIH-5M-4PT\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"Q1y-B8-pHU\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"uTG-yn-jge\" secondAttribute=\"trailing\" constant=\"35\" id=\"QOM-gZ-Dh0\"/>\n                            <constraint firstItem=\"oAW-vX-xph\" firstAttribute=\"top\" secondItem=\"rjd-D6-Jj2\" secondAttribute=\"bottom\" constant=\"20\" id=\"QkD-1h-537\"/>\n                            <constraint firstItem=\"Akc-AN-R9w\" firstAttribute=\"top\" secondItem=\"187-a6-mAR\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"R27-V8-AdN\"/>\n                            <constraint firstItem=\"Qf2-ns-Osr\" firstAttribute=\"centerY\" secondItem=\"0MX-CO-c4Y\" secondAttribute=\"centerY\" id=\"RLu-ch-v2c\"/>\n                            <constraint firstItem=\"b4Q-10-yq8\" firstAttribute=\"trailing\" secondItem=\"oAW-vX-xph\" secondAttribute=\"trailing\" id=\"RNL-EQ-YMb\"/>\n                            <constraint firstItem=\"Qf2-ns-Osr\" firstAttribute=\"leading\" secondItem=\"0MX-CO-c4Y\" secondAttribute=\"trailing\" constant=\"25\" id=\"RWh-v8-p4O\"/>\n                            <constraint firstItem=\"XZf-Ag-G2L\" firstAttribute=\"leading\" secondItem=\"dkg-Hb-c1w\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"RjQ-Go-XgZ\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"b4Q-10-yq8\" secondAttribute=\"bottom\" constant=\"35\" id=\"Rvy-u6-vHK\"/>\n                            <constraint firstItem=\"UbX-Sa-Jtd\" firstAttribute=\"leading\" secondItem=\"JjB-78-ifK\" secondAttribute=\"trailing\" constant=\"25\" id=\"SRJ-V6-CRJ\"/>\n                            <constraint firstItem=\"0MX-CO-c4Y\" firstAttribute=\"top\" secondItem=\"Cyw-aB-0wY\" secondAttribute=\"bottom\" constant=\"16\" id=\"Tx1-0O-4iU\"/>\n                            <constraint firstItem=\"B3F-c9-AP8\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"35\" id=\"VZ8-Qx-dMf\"/>\n                            <constraint firstItem=\"bMo-2z-4jT\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"35\" id=\"Wjx-iB-fU4\"/>\n                            <constraint firstItem=\"TXq-y1-xzw\" firstAttribute=\"firstBaseline\" secondItem=\"bMo-2z-4jT\" secondAttribute=\"firstBaseline\" id=\"XG1-9H-dIr\"/>\n                            <constraint firstItem=\"81L-hB-Mc1\" firstAttribute=\"top\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"top\" constant=\"30\" id=\"XKj-Go-RBM\"/>\n                            <constraint firstItem=\"Cyw-aB-0wY\" firstAttribute=\"top\" secondItem=\"4Kr-dW-0Jm\" secondAttribute=\"bottom\" constant=\"20\" id=\"XbJ-Tz-ACd\"/>\n                            <constraint firstItem=\"BIH-5M-4PT\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"Yck-fc-VKn\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"XZf-Ag-G2L\" secondAttribute=\"trailing\" constant=\"35\" id=\"Zxv-L8-7ak\"/>\n                            <constraint firstItem=\"1vW-Wi-nGt\" firstAttribute=\"top\" secondItem=\"0MX-CO-c4Y\" secondAttribute=\"bottom\" constant=\"16\" id=\"ZzC-Nz-BlA\"/>\n                            <constraint firstItem=\"TXq-y1-xzw\" firstAttribute=\"leading\" secondItem=\"rjd-D6-Jj2\" secondAttribute=\"leading\" id=\"a2E-l8-Myr\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Akc-AN-R9w\" secondAttribute=\"trailing\" constant=\"35\" id=\"aQA-SY-zTb\"/>\n                            <constraint firstItem=\"JjB-78-ifK\" firstAttribute=\"trailing\" secondItem=\"1vW-Wi-nGt\" secondAttribute=\"trailing\" id=\"b5I-tU-QMY\"/>\n                            <constraint firstItem=\"UbX-Sa-Jtd\" firstAttribute=\"trailing\" secondItem=\"7Hz-R4-h7D\" secondAttribute=\"trailing\" id=\"bL9-gf-K4r\"/>\n                            <constraint firstItem=\"dkg-Hb-c1w\" firstAttribute=\"leading\" secondItem=\"81L-hB-Mc1\" secondAttribute=\"leading\" id=\"bgQ-px-vLb\"/>\n                            <constraint firstItem=\"e7K-T3-Vtb\" firstAttribute=\"top\" secondItem=\"UbX-Sa-Jtd\" secondAttribute=\"bottom\" constant=\"20\" id=\"dIC-Qb-4iy\"/>\n                            <constraint firstItem=\"187-a6-mAR\" firstAttribute=\"leading\" secondItem=\"UaP-4D-ZNN\" secondAttribute=\"leading\" id=\"dgB-wx-7kc\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"187-a6-mAR\" secondAttribute=\"trailing\" constant=\"35\" id=\"eEc-3r-7g0\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"7Hz-R4-h7D\" secondAttribute=\"trailing\" constant=\"35\" id=\"ehY-et-Nz0\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"UaP-4D-ZNN\" secondAttribute=\"trailing\" constant=\"35\" id=\"f2F-B7-7hH\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"B3F-c9-AP8\" secondAttribute=\"bottom\" constant=\"35\" id=\"feu-I4-VMb\"/>\n                            <constraint firstItem=\"0MX-CO-c4Y\" firstAttribute=\"trailing\" secondItem=\"Cyw-aB-0wY\" secondAttribute=\"trailing\" id=\"g49-cs-WqE\"/>\n                            <constraint firstItem=\"JjB-78-ifK\" firstAttribute=\"top\" secondItem=\"1vW-Wi-nGt\" secondAttribute=\"bottom\" constant=\"16\" id=\"g4H-bP-ffd\"/>\n                            <constraint firstItem=\"P8W-WS-MSI\" firstAttribute=\"centerY\" secondItem=\"Cyw-aB-0wY\" secondAttribute=\"centerY\" id=\"geN-Nk-NKC\"/>\n                            <constraint firstItem=\"b4Q-10-yq8\" firstAttribute=\"leading\" secondItem=\"oAW-vX-xph\" secondAttribute=\"leading\" id=\"gzK-ua-xLU\"/>\n                            <constraint firstItem=\"b4Q-10-yq8\" firstAttribute=\"top\" secondItem=\"oAW-vX-xph\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"hhR-5T-sdU\"/>\n                            <constraint firstItem=\"dkg-Hb-c1w\" firstAttribute=\"top\" secondItem=\"81L-hB-Mc1\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"iCp-he-DMb\"/>\n                            <constraint firstItem=\"JjB-78-ifK\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"ijN-p7-YPG\"/>\n                            <constraint firstItem=\"1T1-iH-jib\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"35\" id=\"l82-ol-rAX\"/>\n                            <constraint firstItem=\"B3F-c9-AP8\" firstAttribute=\"top\" secondItem=\"1T1-iH-jib\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"lH6-E4-5O4\"/>\n                            <constraint firstItem=\"UaP-4D-ZNN\" firstAttribute=\"leading\" secondItem=\"qW8-n9-YAx\" secondAttribute=\"leading\" id=\"lxg-a3-oOA\"/>\n                            <constraint firstItem=\"e7K-T3-Vtb\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"mRB-Pp-CPW\"/>\n                            <constraint firstItem=\"uTG-yn-jge\" firstAttribute=\"top\" secondItem=\"qW8-n9-YAx\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"mfC-r3-ohE\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"4Kr-dW-0Jm\" secondAttribute=\"trailing\" constant=\"-4\" id=\"n79-9A-pPE\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Qf2-ns-Osr\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"ni1-yl-rbf\"/>\n                            <constraint firstItem=\"XYa-Po-O09\" firstAttribute=\"leading\" secondItem=\"bMo-2z-4jT\" secondAttribute=\"leading\" id=\"oVH-58-dGa\"/>\n                            <constraint firstItem=\"BIH-5M-4PT\" firstAttribute=\"top\" secondItem=\"Akc-AN-R9w\" secondAttribute=\"bottom\" constant=\"20\" id=\"phH-vC-hYS\"/>\n                            <constraint firstItem=\"dkg-Hb-c1w\" firstAttribute=\"leading\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"35\" id=\"ps6-UX-PGe\"/>\n                            <constraint firstItem=\"4Kr-dW-0Jm\" firstAttribute=\"top\" secondItem=\"dkg-Hb-c1w\" secondAttribute=\"bottom\" constant=\"20\" id=\"q98-nm-CRR\"/>\n                            <constraint firstItem=\"0MX-CO-c4Y\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"4Xk-4f-czc\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"sF2-OW-MBx\"/>\n                            <constraint firstItem=\"187-a6-mAR\" firstAttribute=\"top\" secondItem=\"UaP-4D-ZNN\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"ss9-0K-Jlm\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"e7K-T3-Vtb\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"uCD-Gg-boQ\"/>\n                            <constraint firstItem=\"1vW-Wi-nGt\" firstAttribute=\"trailing\" secondItem=\"0MX-CO-c4Y\" secondAttribute=\"trailing\" id=\"vyF-e3-TtX\"/>\n                            <constraint firstItem=\"7Hz-R4-h7D\" firstAttribute=\"firstBaseline\" secondItem=\"1vW-Wi-nGt\" secondAttribute=\"firstBaseline\" id=\"xNe-4T-VFA\"/>\n                            <constraint firstItem=\"uTG-yn-jge\" firstAttribute=\"leading\" secondItem=\"qW8-n9-YAx\" secondAttribute=\"leading\" id=\"zxz-hL-scm\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"activateShortcut\" destination=\"b4Q-10-yq8\" id=\"dFf-dH-P0o\"/>\n                        <outlet property=\"automaticConflictsResolution\" destination=\"187-a6-mAR\" id=\"VAS-8V-m6d\"/>\n                        <outlet property=\"defaultExtension\" destination=\"Qf2-ns-Osr\" id=\"jAT-C4-8fh\"/>\n                        <outlet property=\"defaultStoragePath\" destination=\"dkg-Hb-c1w\" id=\"ly3-HH-jj3\"/>\n                        <outlet property=\"externalEditorApp\" destination=\"7Hz-R4-h7D\" id=\"2xL-OW-e8B\"/>\n                        <outlet property=\"fileContainer\" destination=\"P8W-WS-MSI\" id=\"bSq-48-iHc\"/>\n                        <outlet property=\"filesNaming\" destination=\"UbX-Sa-Jtd\" id=\"3L6-jh-WAB\"/>\n                        <outlet property=\"hideOnDeactivate\" destination=\"qW8-n9-YAx\" id=\"g1U-XI-JGU\"/>\n                        <outlet property=\"newNoteshortcutView\" destination=\"rjd-D6-Jj2\" id=\"Adh-7m-agR\"/>\n                        <outlet property=\"quickNote\" destination=\"B3F-c9-AP8\" id=\"VI1-A8-kXk\"/>\n                        <outlet property=\"saveTextBundleMetaData\" destination=\"Akc-AN-R9w\" id=\"Xcl-DD-egH\"/>\n                        <outlet property=\"searchFocusOnESC\" destination=\"UaP-4D-ZNN\" id=\"SX9-jC-ect\"/>\n                        <outlet property=\"searchNotesShortcut\" destination=\"XYa-Po-O09\" id=\"EWj-n1-bzn\"/>\n                        <outlet property=\"showInMenuBar\" destination=\"ax0-sQ-dzy\" id=\"nPC-Ke-oHy\"/>\n                        <outlet property=\"textMatchAutoSelection\" destination=\"uTG-yn-jge\" id=\"f4H-hJ-RvZ\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"o4P-dg-Cec\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n                <userDefaultsController id=\"gPl-hR-49I\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"726\" y=\"732.5\"/>\n        </scene>\n        <!--Layout-->\n        <scene sceneID=\"vmk-ef-Yif\">\n            <objects>\n                <viewController title=\"Layout\" id=\"P2a-yk-5Rx\" customClass=\"PreferencesUserInterfaceViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" horizontalHuggingPriority=\"100\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GGR-Nj-xCY\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"550\" height=\"345\"/>\n                        <subviews>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9b2-ti-sGJ\">\n                                <rect key=\"frame\" x=\"20\" y=\"236\" width=\"510\" height=\"5\"/>\n                            </box>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FFS-iV-L6i\">\n                                <rect key=\"frame\" x=\"33\" y=\"100\" width=\"105\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Hide preview\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"F6G-ua-MNX\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changePreview:\" target=\"P2a-yk-5Rx\" id=\"1AT-gZ-zaj\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kBX-OV-8sO\">\n                                <rect key=\"frame\" x=\"33\" y=\"122\" width=\"152\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Hide images preview\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"6AI-tL-TDI\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"hideImagesPreview:\" target=\"P2a-yk-5Rx\" id=\"yb9-xh-UFF\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MAi-TG-JXR\">\n                                <rect key=\"frame\" x=\"162\" y=\"294\" width=\"115\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Note List Spacing:\" id=\"bXK-wP-sZc\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Hy2-6l-V6s\">\n                                <rect key=\"frame\" x=\"33\" y=\"78\" width=\"85\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Hide date\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"e15-ps-th1\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"hideDate:\" target=\"P2a-yk-5Rx\" id=\"ppm-oh-GQv\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GN8-Yw-N26\">\n                                <rect key=\"frame\" x=\"161\" y=\"262\" width=\"116\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Preview Font Size:\" id=\"xJQ-ch-Xlp\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Yn6-yP-tkd\">\n                                <rect key=\"frame\" x=\"33\" y=\"56\" width=\"122\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"First line as title\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"tMJ-Dj-OZc\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"firstLineAsTitle:\" target=\"P2a-yk-5Rx\" id=\"xpg-88-OBx\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"thJ-9r-qKd\">\n                                <rect key=\"frame\" x=\"20\" y=\"157\" width=\"510\" height=\"5\"/>\n                            </box>\n                            <slider verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"X4v-hO-tFb\">\n                                <rect key=\"frame\" x=\"298\" y=\"286\" width=\"154\" height=\"28\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"150\" id=\"Xyd-Vk-ueZ\"/>\n                                </constraints>\n                                <sliderCell key=\"cell\" continuous=\"YES\" state=\"on\" alignment=\"left\" maxValue=\"65\" tickMarkPosition=\"above\" sliderType=\"linear\" id=\"hkY-Mc-VIz\">\n                                    <connections>\n                                        <binding destination=\"feO-BX-gQb\" name=\"value\" keyPath=\"values.cellSpacing\" id=\"Ixh-K9-pnZ\"/>\n                                    </connections>\n                                </sliderCell>\n                                <connections>\n                                    <action selector=\"changeCellSpacing:\" target=\"P2a-yk-5Rx\" id=\"24G-de-vQk\"/>\n                                </connections>\n                            </slider>\n                            <popUpButton verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"h8R-h7-V5R\">\n                                <rect key=\"frame\" x=\"297\" y=\"255\" width=\"88\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\"Small\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" tag=\"11\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"8AQ-IN-Edm\" id=\"Wo8-7N-6sB\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"h03-jd-8ll\">\n                                        <items>\n                                            <menuItem title=\"Big\" tag=\"13\" id=\"cUI-cw-eo5\"/>\n                                            <menuItem title=\"Medium\" tag=\"12\" id=\"DcN-1g-hEi\"/>\n                                            <menuItem title=\"Small\" state=\"on\" tag=\"11\" id=\"8AQ-IN-Edm\"/>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"changePreviewFontSize:\" target=\"P2a-yk-5Rx\" id=\"peK-BX-xIu\"/>\n                                </connections>\n                            </popUpButton>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BWu-lt-Hmt\">\n                                <rect key=\"frame\" x=\"33\" y=\"201\" width=\"136\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Show icon in dock\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"bJv-E9-bwW\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"showDockIcon:\" target=\"P2a-yk-5Rx\" id=\"MOg-XN-LXw\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ax0-sQ-dzy\">\n                                <rect key=\"frame\" x=\"33\" y=\"179\" width=\"164\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Show icon in menu bar\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"SSY-US-gmJ\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"showInMenuBar:\" target=\"P2a-yk-5Rx\" id=\"Ie7-i4-4bm\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4gq-Ny-8kZ\">\n                                <rect key=\"frame\" x=\"33\" y=\"34\" width=\"206\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Arrange note list above editor\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"Ws8-ql-C52\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"horizontalOrientation:\" target=\"P2a-yk-5Rx\" id=\"jgb-f7-Qie\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"kBX-OV-8sO\" firstAttribute=\"leading\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"leading\" constant=\"35\" id=\"1Xz-yx-yJY\"/>\n                            <constraint firstItem=\"4gq-Ny-8kZ\" firstAttribute=\"leading\" secondItem=\"Yn6-yP-tkd\" secondAttribute=\"leading\" id=\"2ny-5B-EKG\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"4gq-Ny-8kZ\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"3Tx-Gi-Vl9\"/>\n                            <constraint firstItem=\"GN8-Yw-N26\" firstAttribute=\"top\" secondItem=\"MAi-TG-JXR\" secondAttribute=\"bottom\" constant=\"16\" id=\"5WH-gS-efP\"/>\n                            <constraint firstItem=\"h8R-h7-V5R\" firstAttribute=\"leading\" secondItem=\"GN8-Yw-N26\" secondAttribute=\"trailing\" constant=\"25\" id=\"755-3t-yXM\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"thJ-9r-qKd\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"9DZ-IE-xnQ\"/>\n                            <constraint firstItem=\"FFS-iV-L6i\" firstAttribute=\"leading\" secondItem=\"kBX-OV-8sO\" secondAttribute=\"leading\" id=\"9Vk-O1-Gw0\"/>\n                            <constraint firstItem=\"ax0-sQ-dzy\" firstAttribute=\"leading\" secondItem=\"BWu-lt-Hmt\" secondAttribute=\"leading\" id=\"9fh-G3-nKW\"/>\n                            <constraint firstItem=\"Yn6-yP-tkd\" firstAttribute=\"leading\" secondItem=\"Hy2-6l-V6s\" secondAttribute=\"leading\" id=\"BOL-TI-Qnj\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"4gq-Ny-8kZ\" secondAttribute=\"bottom\" constant=\"35\" id=\"DAN-1V-Dpo\"/>\n                            <constraint firstItem=\"BWu-lt-Hmt\" firstAttribute=\"top\" secondItem=\"9b2-ti-sGJ\" secondAttribute=\"bottom\" constant=\"20\" id=\"H6i-af-SIR\"/>\n                            <constraint firstItem=\"4gq-Ny-8kZ\" firstAttribute=\"top\" secondItem=\"Yn6-yP-tkd\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"HlI-v1-5rk\"/>\n                            <constraint firstItem=\"thJ-9r-qKd\" firstAttribute=\"top\" secondItem=\"ax0-sQ-dzy\" secondAttribute=\"bottom\" constant=\"20\" id=\"ICs-MT-tFX\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"9b2-ti-sGJ\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"JeV-Ik-fQo\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"h8R-h7-V5R\" secondAttribute=\"trailing\" constant=\"35\" id=\"KPN-gr-sZx\"/>\n                            <constraint firstItem=\"X4v-hO-tFb\" firstAttribute=\"centerY\" secondItem=\"MAi-TG-JXR\" secondAttribute=\"centerY\" id=\"KcZ-YY-xH5\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"ax0-sQ-dzy\" secondAttribute=\"trailing\" constant=\"223\" id=\"Kr0-nw-Rgx\"/>\n                            <constraint firstItem=\"FFS-iV-L6i\" firstAttribute=\"top\" secondItem=\"kBX-OV-8sO\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"R5n-u4-z2g\"/>\n                            <constraint firstItem=\"BWu-lt-Hmt\" firstAttribute=\"leading\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"leading\" constant=\"35\" id=\"T0c-Gb-3Ra\"/>\n                            <constraint firstItem=\"MAi-TG-JXR\" firstAttribute=\"top\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"top\" constant=\"35\" id=\"TTp-bP-fOm\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"BWu-lt-Hmt\" secondAttribute=\"trailing\" constant=\"251\" id=\"Tjz-rm-KA4\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"FFS-iV-L6i\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"UYU-pg-OGA\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Hy2-6l-V6s\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"VBP-ry-ssb\"/>\n                            <constraint firstItem=\"9b2-ti-sGJ\" firstAttribute=\"top\" secondItem=\"h8R-h7-V5R\" secondAttribute=\"bottom\" constant=\"20\" id=\"Vby-Rc-07A\"/>\n                            <constraint firstItem=\"X4v-hO-tFb\" firstAttribute=\"leading\" secondItem=\"MAi-TG-JXR\" secondAttribute=\"trailing\" constant=\"25\" id=\"cJK-rm-4cP\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Yn6-yP-tkd\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"eSt-TT-Z2A\"/>\n                            <constraint firstItem=\"kBX-OV-8sO\" firstAttribute=\"top\" secondItem=\"thJ-9r-qKd\" secondAttribute=\"bottom\" constant=\"20\" id=\"fav-MJ-PDz\"/>\n                            <constraint firstItem=\"Yn6-yP-tkd\" firstAttribute=\"top\" secondItem=\"Hy2-6l-V6s\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"g0e-nZ-vm9\"/>\n                            <constraint firstItem=\"MAi-TG-JXR\" firstAttribute=\"trailing\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"centerX\" id=\"gRB-fp-a1Z\"/>\n                            <constraint firstItem=\"Hy2-6l-V6s\" firstAttribute=\"leading\" secondItem=\"FFS-iV-L6i\" secondAttribute=\"leading\" id=\"hRV-nX-MwL\"/>\n                            <constraint firstItem=\"ax0-sQ-dzy\" firstAttribute=\"top\" secondItem=\"BWu-lt-Hmt\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"iNe-MI-PQr\"/>\n                            <constraint firstItem=\"h8R-h7-V5R\" firstAttribute=\"leading\" secondItem=\"X4v-hO-tFb\" secondAttribute=\"leading\" id=\"jJe-FC-2wT\"/>\n                            <constraint firstItem=\"h8R-h7-V5R\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"X4v-hO-tFb\" secondAttribute=\"leading\" id=\"k8N-MA-peX\"/>\n                            <constraint firstItem=\"GN8-Yw-N26\" firstAttribute=\"trailing\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"centerX\" id=\"pkA-hQ-wlD\"/>\n                            <constraint firstItem=\"h8R-h7-V5R\" firstAttribute=\"firstBaseline\" secondItem=\"GN8-Yw-N26\" secondAttribute=\"firstBaseline\" id=\"qz0-AQ-dQb\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"kBX-OV-8sO\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"svc-hM-Y19\"/>\n                            <constraint firstItem=\"thJ-9r-qKd\" firstAttribute=\"leading\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"vY7-YB-8eK\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"X4v-hO-tFb\" secondAttribute=\"trailing\" constant=\"35\" id=\"wmz-wR-azH\"/>\n                            <constraint firstItem=\"9b2-ti-sGJ\" firstAttribute=\"leading\" secondItem=\"GGR-Nj-xCY\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"wzq-RG-rqN\"/>\n                            <constraint firstItem=\"Hy2-6l-V6s\" firstAttribute=\"top\" secondItem=\"FFS-iV-L6i\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"z5l-B7-eVh\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"cellSpacing\" destination=\"X4v-hO-tFb\" id=\"r4Y-4Z-kV3\"/>\n                        <outlet property=\"firstLineAsTitle\" destination=\"Yn6-yP-tkd\" id=\"Ap9-EI-2Tb\"/>\n                        <outlet property=\"hideDate\" destination=\"Hy2-6l-V6s\" id=\"Tfc-Ur-PnR\"/>\n                        <outlet property=\"hideImagesPreview\" destination=\"kBX-OV-8sO\" id=\"tgI-8X-Re0\"/>\n                        <outlet property=\"hidePreview\" destination=\"FFS-iV-L6i\" id=\"6e2-Xa-nly\"/>\n                        <outlet property=\"horizontalOrientation\" destination=\"4gq-Ny-8kZ\" id=\"bY1-PL-UlA\"/>\n                        <outlet property=\"previewFontSize\" destination=\"h8R-h7-V5R\" id=\"yTV-Pf-FSJ\"/>\n                        <outlet property=\"showDockIcon\" destination=\"BWu-lt-Hmt\" id=\"ttK-Oh-uLh\"/>\n                        <outlet property=\"showInMenuBar\" destination=\"ax0-sQ-dzy\" id=\"vW6-kA-hRk\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"7Tr-yU-uWi\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n                <userDefaultsController id=\"feO-BX-gQb\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1368\" y=\"609\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"R2V-B0-nI4\">\n            <objects>\n                <windowController storyboardIdentifier=\"MainWindowController\" id=\"B8D-0N-5wS\" customClass=\"MainWindowController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"FSNotes\" allowsToolTipsWhenApplicationIsInactive=\"NO\" restorable=\"NO\" releasedWhenClosed=\"NO\" frameAutosaveName=\"MainWindow\" animationBehavior=\"default\" tabbingMode=\"disallowed\" titlebarAppearsTransparent=\"YES\" id=\"IQv-IB-iLA\" customClass=\"MainWindow\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\" texturedBackground=\"YES\" fullSizeContentView=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"196\" y=\"240\" width=\"900\" height=\"600\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1680\" height=\"1027\"/>\n                        <connections>\n                            <outlet property=\"delegate\" destination=\"B8D-0N-5wS\" id=\"98r-iN-zZc\"/>\n                        </connections>\n                    </window>\n                    <connections>\n                        <segue destination=\"XfG-lQ-9wD\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"cq2-FE-JQM\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"Oky-zY-oP4\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-73\" y=\"-85\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"hIz-AP-VOD\">\n            <objects>\n                <viewController id=\"XfG-lQ-9wD\" customClass=\"ViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" wantsLayer=\"YES\" id=\"m2S-Jp-Qdl\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"951\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <splitView arrangesAllSubviews=\"NO\" dividerStyle=\"thin\" vertical=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dO0-pK-Ktm\" customClass=\"SidebarSplitView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"951\" height=\"600\"/>\n                                <subviews>\n                                    <customView autoresizesSubviews=\"NO\" misplaced=\"YES\" id=\"5sB-7J-vgE\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"144\" height=\"600\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <subviews>\n                                            <scrollView fixedFrame=\"YES\" borderType=\"none\" autohidesScrollers=\"YES\" horizontalLineScroll=\"52\" horizontalPageScroll=\"10\" verticalLineScroll=\"52\" verticalPageScroll=\"10\" usesPredominantAxisScrolling=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BdT-Ac-GAV\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"144\" height=\"600\"/>\n                                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                <clipView key=\"contentView\" drawsBackground=\"NO\" id=\"ceg-yR-Ncf\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"144\" height=\"600\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                    <subviews>\n                                                        <outlineView verticalHuggingPriority=\"750\" allowsExpansionToolTips=\"YES\" columnAutoresizingStyle=\"lastColumnOnly\" autosaveColumns=\"NO\" rowHeight=\"50\" rowSizeStyle=\"automatic\" viewBased=\"YES\" indentationPerLevel=\"16\" autosaveExpandedItems=\"YES\" outlineTableColumn=\"Gwp-vX-YaR\" id=\"urA-eK-bWB\" customClass=\"SidebarOutlineView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"144\" height=\"562\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                            <size key=\"intercellSpacing\" width=\"3\" height=\"2\"/>\n                                                            <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                            <color key=\"gridColor\" name=\"gridColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                            <tableColumns>\n                                                                <tableColumn width=\"112\" minWidth=\"16\" maxWidth=\"1000\" id=\"Gwp-vX-YaR\">\n                                                                    <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\" title=\"Library\">\n                                                                        <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                        <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    </tableHeaderCell>\n                                                                    <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" title=\"Text Cell\" id=\"SFY-jB-hva\">\n                                                                        <font key=\"font\" metaFont=\"system\"/>\n                                                                        <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    </textFieldCell>\n                                                                    <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                                                    <prototypeCellViews>\n                                                                        <tableCellView identifier=\"DataCell\" id=\"I0q-sX-uBq\" customClass=\"SidebarCellView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                                            <rect key=\"frame\" x=\"11\" y=\"1\" width=\"121\" height=\"50\"/>\n                                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                                            <subviews>\n                                                                                <imageView wantsLayer=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1dd-W4-MiY\">\n                                                                                    <rect key=\"frame\" x=\"3\" y=\"17\" width=\"17\" height=\"17\"/>\n                                                                                    <constraints>\n                                                                                        <constraint firstAttribute=\"width\" constant=\"17\" id=\"0qQ-T4-gWW\"/>\n                                                                                        <constraint firstAttribute=\"height\" constant=\"17\" id=\"lze-fP-ZIg\"/>\n                                                                                    </constraints>\n                                                                                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" imageScaling=\"proportionallyDown\" id=\"WHo-8O-PFO\"/>\n                                                                                </imageView>\n                                                                                <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kTp-qw-RCd\">\n                                                                                    <rect key=\"frame\" x=\"23\" y=\"17\" width=\"97\" height=\"16\"/>\n                                                                                    <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" sendsActionOnEndEditing=\"YES\" id=\"2ZQ-YX-F9M\">\n                                                                                        <font key=\"font\" metaFont=\"system\"/>\n                                                                                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                    </textFieldCell>\n                                                                                    <attributedString key=\"userComments\">\n                                                                                        <fragment content=\"#bc-ignore!\"/>\n                                                                                    </attributedString>\n                                                                                    <connections>\n                                                                                        <action selector=\"projectName:\" target=\"I0q-sX-uBq\" id=\"Mx3-zh-Tac\"/>\n                                                                                    </connections>\n                                                                                </textField>\n                                                                            </subviews>\n                                                                            <constraints>\n                                                                                <constraint firstItem=\"1dd-W4-MiY\" firstAttribute=\"leading\" secondItem=\"I0q-sX-uBq\" secondAttribute=\"leading\" constant=\"3\" id=\"KTq-ca-aXt\"/>\n                                                                                <constraint firstItem=\"kTp-qw-RCd\" firstAttribute=\"leading\" secondItem=\"1dd-W4-MiY\" secondAttribute=\"trailing\" constant=\"5\" id=\"bav-Au-PqY\"/>\n                                                                                <constraint firstItem=\"kTp-qw-RCd\" firstAttribute=\"centerY\" secondItem=\"I0q-sX-uBq\" secondAttribute=\"centerY\" id=\"fox-W9-Kiy\"/>\n                                                                                <constraint firstItem=\"1dd-W4-MiY\" firstAttribute=\"centerY\" secondItem=\"I0q-sX-uBq\" secondAttribute=\"centerY\" id=\"slG-ke-sdb\"/>\n                                                                                <constraint firstAttribute=\"trailing\" secondItem=\"kTp-qw-RCd\" secondAttribute=\"trailing\" constant=\"3\" id=\"uQs-RT-dHB\"/>\n                                                                            </constraints>\n                                                                            <connections>\n                                                                                <outlet property=\"icon\" destination=\"1dd-W4-MiY\" id=\"cb4-9r-kd2\"/>\n                                                                                <outlet property=\"label\" destination=\"kTp-qw-RCd\" id=\"72n-qf-ujw\"/>\n                                                                                <outlet property=\"textField\" destination=\"kTp-qw-RCd\" id=\"2KP-pc-Kir\"/>\n                                                                            </connections>\n                                                                        </tableCellView>\n                                                                        <tableCellView identifier=\"HeaderCell\" id=\"xN2-Aa-G21\" customClass=\"SidebarHeaderCellView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                                            <rect key=\"frame\" x=\"11\" y=\"53\" width=\"121\" height=\"40\"/>\n                                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                                            <subviews>\n                                                                                <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"250\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"a5J-Ua-Hnz\">\n                                                                                    <rect key=\"frame\" x=\"1\" y=\"12\" width=\"81\" height=\"16\"/>\n                                                                                    <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" sendsActionOnEndEditing=\"YES\" alignment=\"left\" title=\"iCloud Drive\" id=\"aX0-yU-aew\">\n                                                                                        <font key=\"font\" metaFont=\"systemSemibold\" size=\"13\"/>\n                                                                                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                    </textFieldCell>\n                                                                                    <attributedString key=\"userComments\">\n                                                                                        <fragment content=\"#bc-ignore!\"/>\n                                                                                    </attributedString>\n                                                                                </textField>\n                                                                                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ep1-Vk-rvO\">\n                                                                                    <rect key=\"frame\" x=\"3\" y=\"12\" width=\"17\" height=\"17\"/>\n                                                                                    <constraints>\n                                                                                        <constraint firstAttribute=\"height\" constant=\"17\" id=\"2pH-HP-D6m\"/>\n                                                                                        <constraint firstAttribute=\"width\" constant=\"17\" id=\"ahX-BP-lWY\"/>\n                                                                                    </constraints>\n                                                                                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" id=\"tF1-ih-lWS\"/>\n                                                                                </imageView>\n                                                                            </subviews>\n                                                                            <constraints>\n                                                                                <constraint firstItem=\"a5J-Ua-Hnz\" firstAttribute=\"centerY\" secondItem=\"xN2-Aa-G21\" secondAttribute=\"centerY\" id=\"3xr-WL-gvd\"/>\n                                                                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"a5J-Ua-Hnz\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"B0X-ZD-bfn\"/>\n                                                                                <constraint firstItem=\"ep1-Vk-rvO\" firstAttribute=\"leading\" secondItem=\"xN2-Aa-G21\" secondAttribute=\"leading\" constant=\"3\" id=\"dQI-kA-EMe\"/>\n                                                                                <constraint firstItem=\"ep1-Vk-rvO\" firstAttribute=\"centerY\" secondItem=\"xN2-Aa-G21\" secondAttribute=\"centerY\" id=\"eB4-Zv-R9l\"/>\n                                                                                <constraint firstItem=\"a5J-Ua-Hnz\" firstAttribute=\"leading\" secondItem=\"xN2-Aa-G21\" secondAttribute=\"leading\" constant=\"3\" id=\"rV2-yu-dpv\"/>\n                                                                            </constraints>\n                                                                            <connections>\n                                                                                <outlet property=\"icon\" destination=\"ep1-Vk-rvO\" id=\"7Sj-rZ-I6G\"/>\n                                                                                <outlet property=\"label\" destination=\"a5J-Ua-Hnz\" id=\"Bke-02-Pi1\"/>\n                                                                            </connections>\n                                                                        </tableCellView>\n                                                                    </prototypeCellViews>\n                                                                </tableColumn>\n                                                            </tableColumns>\n                                                            <connections>\n                                                                <outlet property=\"menu\" destination=\"nuz-kc-UUC\" id=\"AQ8-BJ-kcn\"/>\n                                                            </connections>\n                                                        </outlineView>\n                                                    </subviews>\n                                                    <nil key=\"backgroundColor\"/>\n                                                    <edgeInsets key=\"contentInsets\" left=\"0.0\" right=\"0.0\" top=\"38\" bottom=\"0.0\"/>\n                                                </clipView>\n                                                <edgeInsets key=\"scrollerInsets\" left=\"0.0\" right=\"0.0\" top=\"38\" bottom=\"0.0\"/>\n                                                <scroller key=\"horizontalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" doubleValue=\"0.23935756602005698\" horizontal=\"YES\" id=\"hZT-KZ-qyF\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"584\" width=\"144\" height=\"16\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                </scroller>\n                                                <scroller key=\"verticalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"NO\" id=\"su1-Ap-Xqc\">\n                                                    <rect key=\"frame\" x=\"-16\" y=\"10\" width=\"16\" height=\"0.0\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                </scroller>\n                                            </scrollView>\n                                            <customView clipsToBounds=\"YES\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vp7-cq-QSI\" customClass=\"OutlineHeaderView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"560\" width=\"144\" height=\"40\"/>\n                                                <subviews>\n                                                    <box misplaced=\"YES\" boxType=\"custom\" borderType=\"none\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"l75-ic-hjm\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"144\" height=\"40\"/>\n                                                        <view key=\"contentView\" id=\"IC4-vl-P2r\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"144\" height=\"40\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                        </view>\n                                                        <color key=\"fillColor\" name=\"windowBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    </box>\n                                                </subviews>\n                                                <constraints>\n                                                    <constraint firstItem=\"l75-ic-hjm\" firstAttribute=\"top\" secondItem=\"vp7-cq-QSI\" secondAttribute=\"top\" id=\"61i-47-0DS\"/>\n                                                    <constraint firstAttribute=\"height\" constant=\"40\" id=\"9sA-Ak-h1e\"/>\n                                                    <constraint firstAttribute=\"bottom\" secondItem=\"l75-ic-hjm\" secondAttribute=\"bottom\" id=\"Sky-NF-cd8\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"l75-ic-hjm\" secondAttribute=\"trailing\" id=\"U7g-d3-tVU\"/>\n                                                    <constraint firstItem=\"l75-ic-hjm\" firstAttribute=\"leading\" secondItem=\"vp7-cq-QSI\" secondAttribute=\"leading\" id=\"rfK-qX-KDe\"/>\n                                                </constraints>\n                                            </customView>\n                                        </subviews>\n                                        <constraints>\n                                            <constraint firstItem=\"vp7-cq-QSI\" firstAttribute=\"top\" secondItem=\"5sB-7J-vgE\" secondAttribute=\"top\" id=\"Xgz-yp-rlQ\"/>\n                                            <constraint firstItem=\"vp7-cq-QSI\" firstAttribute=\"trailing\" secondItem=\"5sB-7J-vgE\" secondAttribute=\"trailing\" id=\"ZNY-ja-tha\"/>\n                                            <constraint firstItem=\"vp7-cq-QSI\" firstAttribute=\"leading\" secondItem=\"5sB-7J-vgE\" secondAttribute=\"leading\" id=\"eGb-8z-ori\"/>\n                                            <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"400\" id=\"tmy-ZK-4qh\"/>\n                                        </constraints>\n                                    </customView>\n                                    <splitView fixedFrame=\"YES\" arrangesAllSubviews=\"NO\" autosaveName=\"\" dividerStyle=\"thin\" vertical=\"YES\" id=\"yWu-3F-P62\" customClass=\"EditorSplitView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"145\" y=\"0.0\" width=\"806\" height=\"600\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <subviews>\n                                            <customView autoresizesSubviews=\"NO\" id=\"8ej-mX-KM6\" customClass=\"SidebarNotesView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"237\" height=\"600\"/>\n                                                <autoresizingMask key=\"autoresizingMask\" flexibleMinY=\"YES\"/>\n                                                <subviews>\n                                                    <box boxType=\"custom\" borderType=\"none\" titlePosition=\"noTitle\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xRe-j4-nd1\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"562\" width=\"237\" height=\"38\"/>\n                                                        <view key=\"contentView\" id=\"FRu-rM-Vo5\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"237\" height=\"38\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                        </view>\n                                                        <color key=\"fillColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    </box>\n                                                    <searchField wantsLayer=\"YES\" focusRingType=\"none\" verticalHuggingPriority=\"750\" textCompletion=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bd7-O3-GQF\" customClass=\"SearchTextField\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                        <rect key=\"frame\" x=\"8\" y=\"570\" width=\"187\" height=\"22\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"22\" id=\"Ptr-z2-0T0\"/>\n                                                        </constraints>\n                                                        <searchFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" borderStyle=\"bezel\" placeholderString=\"Search or create\" usesSingleLineMode=\"YES\" bezelStyle=\"round\" sendsSearchStringImmediately=\"YES\" sendsWholeSearchString=\"YES\" recentsAutosaveName=\"recentFSearch\" id=\"B7t-9v-bSk\">\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        </searchFieldCell>\n                                                    </searchField>\n                                                    <scrollView focusRingType=\"none\" borderType=\"none\" autohidesScrollers=\"YES\" horizontalLineScroll=\"116\" horizontalPageScroll=\"10\" verticalLineScroll=\"116\" verticalPageScroll=\"10\" hasHorizontalScroller=\"NO\" usesPredominantAxisScrolling=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kzf-Jh-YEb\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"45\" width=\"237\" height=\"517\"/>\n                                                        <clipView key=\"contentView\" focusRingType=\"none\" drawsBackground=\"NO\" id=\"MtJ-BC-rZB\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"237\" height=\"517\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                            <subviews>\n                                                                <tableView focusRingType=\"none\" verticalHuggingPriority=\"750\" allowsExpansionToolTips=\"YES\" columnAutoresizingStyle=\"lastColumnOnly\" columnResizing=\"NO\" autosaveColumns=\"NO\" rowHeight=\"115\" rowSizeStyle=\"automatic\" viewBased=\"YES\" id=\"8X8-yh-5EA\" customClass=\"NotesTableView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"237\" height=\"517\"/>\n                                                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                                    <size key=\"intercellSpacing\" width=\"1\" height=\"1\"/>\n                                                                    <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    <tableViewGridLines key=\"gridStyleMask\" horizontal=\"YES\"/>\n                                                                    <color key=\"gridColor\" name=\"gridColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    <tableColumns>\n                                                                        <tableColumn editable=\"NO\" width=\"205\" maxWidth=\"2000\" id=\"aKf-mj-22P\">\n                                                                            <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\">\n                                                                                <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                            </tableHeaderCell>\n                                                                            <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" title=\"Text Cell\" id=\"NiN-n8-Y4W\">\n                                                                                <font key=\"font\" metaFont=\"system\"/>\n                                                                                <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                            </textFieldCell>\n                                                                            <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                                                            <prototypeCellViews>\n                                                                                <tableCellView identifier=\"NoteCellView\" id=\"8qL-z4-nzh\" customClass=\"NoteCellView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                                                    <rect key=\"frame\" x=\"10\" y=\"0.0\" width=\"216\" height=\"115\"/>\n                                                                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                                                    <subviews>\n                                                                                        <textField identifier=\"cellDate\" autoresizesSubviews=\"NO\" focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"abw-Lq-K7d\" propertyAccessControl=\"nonLocalizable\">\n                                                                                            <rect key=\"frame\" x=\"165\" y=\"99\" width=\"48\" height=\"16\"/>\n                                                                                            <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"2/23/11\" id=\"9w3-fa-di3\">\n                                                                                                <font key=\"font\" metaFont=\"system\"/>\n                                                                                                <color key=\"textColor\" name=\"tertiaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                                <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                                <connections>\n                                                                                                    <binding destination=\"8qL-z4-nzh\" name=\"value\" keyPath=\"objectValue.getDateForLabel\" id=\"VH2-T1-K75\"/>\n                                                                                                </connections>\n                                                                                            </textFieldCell>\n                                                                                            <attributedString key=\"userComments\">\n                                                                                                <fragment content=\"#bc-ignore!\"/>\n                                                                                            </attributedString>\n                                                                                        </textField>\n                                                                                        <imageView identifier=\"pin\" hidden=\"YES\" wantsLayer=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9h5-Ob-Nej\">\n                                                                                            <rect key=\"frame\" x=\"3\" y=\"96\" width=\"23\" height=\"23\"/>\n                                                                                            <constraints>\n                                                                                                <constraint firstAttribute=\"height\" constant=\"23\" id=\"QQS-Ef-avR\"/>\n                                                                                                <constraint firstAttribute=\"width\" constant=\"23\" id=\"hpI-x0-6Kw\"/>\n                                                                                            </constraints>\n                                                                                            <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"pin\" id=\"MIi-Yg-aUg\"/>\n                                                                                        </imageView>\n                                                                                        <textField autoresizesSubviews=\"NO\" focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"EXQ-Ld-D5r\" customClass=\"PreviewTextField\" customModule=\"FSNotes\" customModuleProvider=\"target\" propertyAccessControl=\"nonLocalizable\">\n                                                                                            <rect key=\"frame\" x=\"24\" y=\"80\" width=\"52\" height=\"16\"/>\n                                                                                            <textFieldCell key=\"cell\" continuous=\"YES\" sendsActionOnEndEditing=\"YES\" title=\"Preview\" id=\"EC3-YF-sGZ\">\n                                                                                                <font key=\"font\" metaFont=\"system\"/>\n                                                                                                <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                                <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                            </textFieldCell>\n                                                                                            <attributedString key=\"userComments\">\n                                                                                                <fragment content=\"#bc-ignore!\"/>\n                                                                                            </attributedString>\n                                                                                        </textField>\n                                                                                        <imageView wantsLayer=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dN9-ig-hka\">\n                                                                                            <rect key=\"frame\" x=\"26\" y=\"26\" width=\"48\" height=\"48\"/>\n                                                                                            <constraints>\n                                                                                                <constraint firstAttribute=\"height\" constant=\"48\" id=\"3Ol-IX-621\"/>\n                                                                                                <constraint firstAttribute=\"width\" constant=\"48\" id=\"GsQ-af-FtG\"/>\n                                                                                            </constraints>\n                                                                                            <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" id=\"fmy-oz-7CX\"/>\n                                                                                        </imageView>\n                                                                                        <imageView wantsLayer=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ggY-RT-nIM\">\n                                                                                            <rect key=\"frame\" x=\"80\" y=\"26\" width=\"48\" height=\"48\"/>\n                                                                                            <constraints>\n                                                                                                <constraint firstAttribute=\"width\" constant=\"48\" id=\"cyJ-09-oaf\"/>\n                                                                                                <constraint firstAttribute=\"height\" constant=\"48\" id=\"eym-WE-ixq\"/>\n                                                                                            </constraints>\n                                                                                            <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" id=\"nOa-en-atB\"/>\n                                                                                        </imageView>\n                                                                                        <imageView wantsLayer=\"YES\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HZg-Mu-dwG\">\n                                                                                            <rect key=\"frame\" x=\"135\" y=\"26\" width=\"48\" height=\"48\"/>\n                                                                                            <constraints>\n                                                                                                <constraint firstAttribute=\"height\" constant=\"48\" id=\"XSB-Gr-9r6\"/>\n                                                                                                <constraint firstAttribute=\"width\" constant=\"48\" id=\"dcv-nB-b3U\"/>\n                                                                                            </constraints>\n                                                                                            <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" id=\"oaj-cY-2Rf\"/>\n                                                                                        </imageView>\n                                                                                        <textField identifier=\"cellName\" autoresizesSubviews=\"NO\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UvD-jB-7Ok\" customClass=\"NameTextField\" customModule=\"FSNotes\" customModuleProvider=\"target\" propertyAccessControl=\"nonLocalizable\">\n                                                                                            <rect key=\"frame\" x=\"24\" y=\"99\" width=\"40\" height=\"16\"/>\n                                                                                            <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" sendsActionOnEndEditing=\"YES\" state=\"on\" alignment=\"left\" title=\"Name\" usesSingleLineMode=\"YES\" id=\"y7T-Rc-etT\">\n                                                                                                <font key=\"font\" metaFont=\"system\"/>\n                                                                                                <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                                <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                                            </textFieldCell>\n                                                                                            <attributedString key=\"userComments\">\n                                                                                                <fragment content=\"#bc-ignore!\"/>\n                                                                                            </attributedString>\n                                                                                            <connections>\n                                                                                                <action selector=\"fileName:\" target=\"XfG-lQ-9wD\" id=\"ZV9-vc-kbh\"/>\n                                                                                            </connections>\n                                                                                        </textField>\n                                                                                    </subviews>\n                                                                                    <constraints>\n                                                                                        <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"EXQ-Ld-D5r\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"3CN-df-5Zy\"/>\n                                                                                        <constraint firstItem=\"UvD-jB-7Ok\" firstAttribute=\"top\" secondItem=\"8qL-z4-nzh\" secondAttribute=\"top\" id=\"AtV-FX-Ffi\"/>\n                                                                                        <constraint firstItem=\"dN9-ig-hka\" firstAttribute=\"leading\" secondItem=\"8qL-z4-nzh\" secondAttribute=\"leading\" constant=\"26\" id=\"HkF-Wx-cmF\"/>\n                                                                                        <constraint firstItem=\"9h5-Ob-Nej\" firstAttribute=\"leading\" secondItem=\"8qL-z4-nzh\" secondAttribute=\"leading\" constant=\"3\" id=\"URX-w7-IXX\"/>\n                                                                                        <constraint firstItem=\"ggY-RT-nIM\" firstAttribute=\"top\" secondItem=\"EXQ-Ld-D5r\" secondAttribute=\"bottom\" constant=\"6\" identifier=\"secondImageTop\" id=\"b8F-pV-5lI\"/>\n                                                                                        <constraint firstItem=\"EXQ-Ld-D5r\" firstAttribute=\"top\" secondItem=\"UvD-jB-7Ok\" secondAttribute=\"bottom\" constant=\"3\" id=\"bwH-CQ-N0h\"/>\n                                                                                        <constraint firstItem=\"HZg-Mu-dwG\" firstAttribute=\"top\" secondItem=\"EXQ-Ld-D5r\" secondAttribute=\"bottom\" constant=\"6\" identifier=\"thirdImageTop\" id=\"fKE-hI-3xN\"/>\n                                                                                        <constraint firstItem=\"abw-Lq-K7d\" firstAttribute=\"top\" secondItem=\"8qL-z4-nzh\" secondAttribute=\"top\" id=\"hKA-pJ-rpa\"/>\n                                                                                        <constraint firstItem=\"dN9-ig-hka\" firstAttribute=\"top\" secondItem=\"EXQ-Ld-D5r\" secondAttribute=\"bottom\" constant=\"6\" identifier=\"firstImageTop\" id=\"iQt-3H-FJ4\"/>\n                                                                                        <constraint firstAttribute=\"trailing\" secondItem=\"abw-Lq-K7d\" secondAttribute=\"trailing\" constant=\"5\" id=\"ngR-5z-x5I\"/>\n                                                                                        <constraint firstItem=\"ggY-RT-nIM\" firstAttribute=\"leading\" secondItem=\"dN9-ig-hka\" secondAttribute=\"trailing\" constant=\"6\" id=\"ou4-gb-PeG\"/>\n                                                                                        <constraint firstItem=\"HZg-Mu-dwG\" firstAttribute=\"leading\" secondItem=\"ggY-RT-nIM\" secondAttribute=\"trailing\" constant=\"7\" id=\"rtM-JI-JMl\"/>\n                                                                                        <constraint firstItem=\"abw-Lq-K7d\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"UvD-jB-7Ok\" secondAttribute=\"trailing\" constant=\"5\" id=\"sjw-Vc-jfj\"/>\n                                                                                        <constraint firstItem=\"UvD-jB-7Ok\" firstAttribute=\"centerY\" secondItem=\"9h5-Ob-Nej\" secondAttribute=\"centerY\" id=\"wzH-I8-PoT\"/>\n                                                                                        <constraint firstItem=\"EXQ-Ld-D5r\" firstAttribute=\"leading\" secondItem=\"8qL-z4-nzh\" secondAttribute=\"leading\" constant=\"26\" id=\"xyO-Sr-YNv\"/>\n                                                                                        <constraint firstItem=\"UvD-jB-7Ok\" firstAttribute=\"leading\" secondItem=\"8qL-z4-nzh\" secondAttribute=\"leading\" constant=\"26\" id=\"z9R-oc-Yoe\"/>\n                                                                                    </constraints>\n                                                                                    <connections>\n                                                                                        <outlet property=\"date\" destination=\"abw-Lq-K7d\" id=\"k6D-i6-nTL\"/>\n                                                                                        <outlet property=\"imagePreview\" destination=\"dN9-ig-hka\" id=\"dJv-Oi-fT1\"/>\n                                                                                        <outlet property=\"imagePreviewSecond\" destination=\"ggY-RT-nIM\" id=\"1wn-fb-yk7\"/>\n                                                                                        <outlet property=\"imagePreviewThird\" destination=\"HZg-Mu-dwG\" id=\"Xtp-LG-tcv\"/>\n                                                                                        <outlet property=\"name\" destination=\"UvD-jB-7Ok\" id=\"5Mo-lm-FHk\"/>\n                                                                                        <outlet property=\"pin\" destination=\"9h5-Ob-Nej\" id=\"vPu-Ic-vSj\"/>\n                                                                                        <outlet property=\"preview\" destination=\"EXQ-Ld-D5r\" id=\"aS2-51-odI\"/>\n                                                                                        <outlet property=\"titleConstraint\" destination=\"sjw-Vc-jfj\" id=\"LtK-jM-upC\"/>\n                                                                                    </connections>\n                                                                                </tableCellView>\n                                                                            </prototypeCellViews>\n                                                                        </tableColumn>\n                                                                    </tableColumns>\n                                                                    <connections>\n                                                                        <outlet property=\"menu\" destination=\"AaK-Xd-i52\" id=\"yGM-be-YIO\"/>\n                                                                    </connections>\n                                                                </tableView>\n                                                            </subviews>\n                                                            <nil key=\"backgroundColor\"/>\n                                                        </clipView>\n                                                        <edgeInsets key=\"contentInsets\" left=\"0.0\" right=\"0.0\" top=\"0.0\" bottom=\"0.0\"/>\n                                                        <scroller key=\"horizontalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"YES\" id=\"ePX-Un-u4d\">\n                                                            <rect key=\"frame\" x=\"-100\" y=\"-100\" width=\"190\" height=\"15\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                                        </scroller>\n                                                        <scroller key=\"verticalScroller\" hidden=\"YES\" wantsLayer=\"YES\" focusRingType=\"none\" verticalHuggingPriority=\"750\" horizontal=\"NO\" id=\"TQp-cU-heo\">\n                                                            <rect key=\"frame\" x=\"-100\" y=\"-100\" width=\"16\" height=\"567\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                                        </scroller>\n                                                    </scrollView>\n                                                    <button imageHugsTitle=\"YES\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TiA-aF-Uev\">\n                                                        <rect key=\"frame\" x=\"202\" y=\"543\" width=\"28\" height=\"76\"/>\n                                                        <buttonCell key=\"cell\" type=\"roundRect\" bezelStyle=\"roundedRect\" image=\"new_note_button\" imagePosition=\"overlaps\" alignment=\"center\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Y7B-FM-tuq\">\n                                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                        </buttonCell>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"width\" constant=\"28\" id=\"q4S-bz-l8F\"/>\n                                                        </constraints>\n                                                        <connections>\n                                                            <action selector=\"fileMenuNewNote:\" target=\"XfG-lQ-9wD\" id=\"4o2-hM-kTQ\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <textField hidden=\"YES\" focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"tVX-CX-9O1\" customClass=\"ClickableTextField\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"292\" width=\"236\" height=\"16\"/>\n                                                        <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" widthSizable=\"YES\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" heightSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                                                        <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"center\" title=\"Locked\" id=\"1Kl-ap-nkv\">\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                            <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        </textFieldCell>\n                                                    </textField>\n                                                    <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nVd-Zp-Vjx\" customClass=\"NotesCounterView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"237\" height=\"45\"/>\n                                                        <subviews>\n                                                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xOb-jd-sez\">\n                                                                <rect key=\"frame\" x=\"13\" y=\"10\" width=\"39\" height=\"16\"/>\n                                                                <constraints>\n                                                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"35\" id=\"sNc-PP-deS\"/>\n                                                                </constraints>\n                                                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" id=\"EIT-bC-qcp\">\n                                                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                </textFieldCell>\n                                                            </textField>\n                                                        </subviews>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"bottom\" secondItem=\"xOb-jd-sez\" secondAttribute=\"bottom\" constant=\"10\" id=\"8k2-JI-JNA\"/>\n                                                            <constraint firstItem=\"xOb-jd-sez\" firstAttribute=\"leading\" secondItem=\"nVd-Zp-Vjx\" secondAttribute=\"leading\" constant=\"15\" id=\"XA4-0D-JfT\"/>\n                                                            <constraint firstAttribute=\"height\" constant=\"45\" id=\"eLj-20-oK1\"/>\n                                                        </constraints>\n                                                        <userDefinedRuntimeAttributes>\n                                                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"backgroundColor\">\n                                                                <color key=\"value\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                            </userDefinedRuntimeAttribute>\n                                                        </userDefinedRuntimeAttributes>\n                                                    </customView>\n                                                </subviews>\n                                                <constraints>\n                                                    <constraint firstItem=\"TiA-aF-Uev\" firstAttribute=\"leading\" secondItem=\"bd7-O3-GQF\" secondAttribute=\"trailing\" constant=\"7\" id=\"0kI-rM-bW0\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"nVd-Zp-Vjx\" secondAttribute=\"trailing\" id=\"2P8-hb-ts2\"/>\n                                                    <constraint firstItem=\"Kzf-Jh-YEb\" firstAttribute=\"top\" secondItem=\"xRe-j4-nd1\" secondAttribute=\"bottom\" id=\"539-aY-crm\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"TiA-aF-Uev\" secondAttribute=\"trailing\" constant=\"7\" id=\"Bwk-QM-Hza\"/>\n                                                    <constraint firstItem=\"xRe-j4-nd1\" firstAttribute=\"top\" secondItem=\"8ej-mX-KM6\" secondAttribute=\"top\" id=\"SSi-2X-GuI\"/>\n                                                    <constraint firstItem=\"nVd-Zp-Vjx\" firstAttribute=\"leading\" secondItem=\"8ej-mX-KM6\" secondAttribute=\"leading\" id=\"TvC-md-0Sn\"/>\n                                                    <constraint firstAttribute=\"bottom\" secondItem=\"nVd-Zp-Vjx\" secondAttribute=\"bottom\" id=\"VzX-kD-0C2\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"xRe-j4-nd1\" secondAttribute=\"trailing\" id=\"aji-rg-UYK\"/>\n                                                    <constraint firstItem=\"nVd-Zp-Vjx\" firstAttribute=\"top\" secondItem=\"Kzf-Jh-YEb\" secondAttribute=\"bottom\" id=\"d92-f0-7dC\"/>\n                                                    <constraint firstItem=\"bd7-O3-GQF\" firstAttribute=\"leading\" secondItem=\"8ej-mX-KM6\" secondAttribute=\"leading\" priority=\"2\" constant=\"8\" id=\"fJK-am-Cfu\"/>\n                                                    <constraint firstItem=\"Kzf-Jh-YEb\" firstAttribute=\"leading\" secondItem=\"8ej-mX-KM6\" secondAttribute=\"leading\" id=\"lGx-ze-4gU\"/>\n                                                    <constraint firstItem=\"bd7-O3-GQF\" firstAttribute=\"top\" secondItem=\"8ej-mX-KM6\" secondAttribute=\"top\" constant=\"8\" id=\"nXO-Fh-8nv\"/>\n                                                    <constraint firstItem=\"TiA-aF-Uev\" firstAttribute=\"centerY\" secondItem=\"bd7-O3-GQF\" secondAttribute=\"centerY\" id=\"pTm-L3-mZO\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"Kzf-Jh-YEb\" secondAttribute=\"trailing\" id=\"vRz-kK-vLv\"/>\n                                                    <constraint firstItem=\"xRe-j4-nd1\" firstAttribute=\"leading\" secondItem=\"8ej-mX-KM6\" secondAttribute=\"leading\" id=\"xIy-MR-UUn\"/>\n                                                    <constraint firstItem=\"Kzf-Jh-YEb\" firstAttribute=\"top\" secondItem=\"bd7-O3-GQF\" secondAttribute=\"bottom\" constant=\"8\" id=\"z4N-Ag-s6x\"/>\n                                                </constraints>\n                                            </customView>\n                                            <customView autoresizesSubviews=\"NO\" misplaced=\"YES\" id=\"at7-wA-VAS\" customClass=\"EditorView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                <rect key=\"frame\" x=\"238\" y=\"0.0\" width=\"568\" height=\"600\"/>\n                                                <autoresizingMask key=\"autoresizingMask\"/>\n                                                <subviews>\n                                                    <scrollView misplaced=\"YES\" borderType=\"none\" autohidesScrollers=\"YES\" horizontalLineScroll=\"10\" horizontalPageScroll=\"10\" verticalLineScroll=\"10\" verticalPageScroll=\"10\" hasHorizontalScroller=\"NO\" usesPredominantAxisScrolling=\"NO\" horizontalScrollElasticity=\"none\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qJO-7f-vkL\" customClass=\"EditorScrollView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"37\" width=\"568\" height=\"525\"/>\n                                                        <clipView key=\"contentView\" focusRingType=\"none\" drawsBackground=\"NO\" copiesOnScroll=\"NO\" id=\"FJ2-Yo-v0A\">\n                                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"568\" height=\"525\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                            <subviews>\n                                                                <textView verticallyResizable=\"YES\" usesFontPanel=\"YES\" findStyle=\"panel\" allowsDocumentBackgroundColorChange=\"YES\" allowsUndo=\"YES\" allowsImageEditing=\"YES\" usesRuler=\"YES\" allowsNonContiguousLayout=\"YES\" quoteSubstitution=\"YES\" linkDetection=\"YES\" dataDetection=\"YES\" dashSubstitution=\"YES\" textReplacement=\"YES\" smartInsertDelete=\"YES\" id=\"cmZ-KL-T9k\" customClass=\"EditTextView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"568\" height=\"525\"/>\n                                                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                                    <color key=\"textColor\" name=\"textColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    <color key=\"backgroundColor\" name=\"mainBackground\"/>\n                                                                    <size key=\"minSize\" width=\"568\" height=\"525\"/>\n                                                                    <size key=\"maxSize\" width=\"636\" height=\"10000000\"/>\n                                                                    <color key=\"insertionPointColor\" name=\"textColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                </textView>\n                                                            </subviews>\n                                                            <edgeInsets key=\"contentInsets\" left=\"0.0\" right=\"0.0\" top=\"0.0\" bottom=\"0.0\"/>\n                                                        </clipView>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"200\" id=\"1Ss-OK-0sm\"/>\n                                                        </constraints>\n                                                        <edgeInsets key=\"contentInsets\" left=\"0.0\" right=\"0.0\" top=\"0.0\" bottom=\"0.0\"/>\n                                                        <scroller key=\"horizontalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" doubleValue=\"1\" horizontal=\"YES\" id=\"0fC-ae-uwb\">\n                                                            <rect key=\"frame\" x=\"-100\" y=\"-100\" width=\"380\" height=\"16\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                                        </scroller>\n                                                        <scroller key=\"verticalScroller\" hidden=\"YES\" wantsLayer=\"YES\" focusRingType=\"none\" verticalHuggingPriority=\"750\" controlSize=\"small\" horizontal=\"NO\" id=\"TNj-kl-fKh\">\n                                                            <rect key=\"frame\" x=\"554\" y=\"0.0\" width=\"14\" height=\"495\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                                        </scroller>\n                                                    </scrollView>\n                                                    <customView misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xSU-Mk-2F1\" customClass=\"TitleBarView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"562\" width=\"568\" height=\"38\"/>\n                                                        <subviews>\n                                                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"1\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rZx-hk-GcJ\" customClass=\"TitleTextField\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                                                <rect key=\"frame\" x=\"139\" y=\"11\" width=\"35\" height=\"16\"/>\n                                                                <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" enabled=\"NO\" sendsActionOnEndEditing=\"YES\" alignment=\"center\" title=\"Title\" drawsBackground=\"YES\" id=\"O9K-a1-3eu\">\n                                                                    <font key=\"font\" metaFont=\"system\"/>\n                                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    <color key=\"backgroundColor\" name=\"mainBackground\"/>\n                                                                </textFieldCell>\n                                                                <connections>\n                                                                    <outlet property=\"delegate\" destination=\"XfG-lQ-9wD\" id=\"ikK-Ty-iHC\"/>\n                                                                </connections>\n                                                            </textField>\n                                                            <customView horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"249\" misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ua8-RE-q01\">\n                                                                <rect key=\"frame\" x=\"470\" y=\"0.0\" width=\"98\" height=\"38\"/>\n                                                                <subviews>\n                                                                    <stackView distribution=\"fill\" orientation=\"horizontal\" alignment=\"top\" spacing=\"9\" horizontalStackHuggingPriority=\"249.99998474121094\" verticalStackHuggingPriority=\"249.99998474121094\" horizontalCompressionResistancePriority=\"1000\" detachesHiddenViews=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"shI-kr-3o8\">\n                                                                        <rect key=\"frame\" x=\"12\" y=\"11\" width=\"66\" height=\"16\"/>\n                                                                        <subviews>\n                                                                            <button translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ote-7U-BZm\">\n                                                                                <rect key=\"frame\" x=\"0.0\" y=\"-2.5\" width=\"16.5\" height=\"22\"/>\n                                                                                <buttonCell key=\"cell\" type=\"square\" bezelStyle=\"shadowlessSquare\" image=\"NSLockUnlockedTemplate\" imagePosition=\"only\" alignment=\"center\" imageScaling=\"proportionallyUpOrDown\" inset=\"2\" id=\"aHW-dK-rqB\">\n                                                                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                                                                    <font key=\"font\" metaFont=\"system\"/>\n                                                                                </buttonCell>\n                                                                                <constraints>\n                                                                                    <constraint firstAttribute=\"height\" constant=\"16\" id=\"KX9-jI-cyF\"/>\n                                                                                    <constraint firstAttribute=\"width\" constant=\"16\" id=\"fyl-XF-faY\"/>\n                                                                                </constraints>\n                                                                                <connections>\n                                                                                    <action selector=\"toggleNotesLock:\" target=\"rPt-NT-nkU\" id=\"3gl-Ik-HTx\"/>\n                                                                                </connections>\n                                                                            </button>\n                                                                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Bn7-FD-jzc\">\n                                                                                <rect key=\"frame\" x=\"25\" y=\"-2\" width=\"16.5\" height=\"20\"/>\n                                                                                <buttonCell key=\"cell\" type=\"bevel\" bezelStyle=\"regularSquare\" image=\"NSQuickLookTemplate\" imagePosition=\"only\" alignment=\"center\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Yk7-v6-QmI\">\n                                                                                    <behavior key=\"behavior\" pushIn=\"YES\" changeContents=\"YES\" lightByContents=\"YES\"/>\n                                                                                    <font key=\"font\" metaFont=\"system\"/>\n                                                                                    <connections>\n                                                                                        <action selector=\"togglePreview:\" target=\"rPt-NT-nkU\" id=\"OlJ-kk-v0k\"/>\n                                                                                    </connections>\n                                                                                </buttonCell>\n                                                                                <constraints>\n                                                                                    <constraint firstAttribute=\"width\" constant=\"16\" id=\"cL1-PF-gSQ\"/>\n                                                                                    <constraint firstAttribute=\"height\" constant=\"16\" id=\"mhf-Ok-C0D\"/>\n                                                                                </constraints>\n                                                                            </button>\n                                                                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oDB-Y6-20P\">\n                                                                                <rect key=\"frame\" x=\"50\" y=\"-3\" width=\"16.5\" height=\"25\"/>\n                                                                                <buttonCell key=\"cell\" type=\"bevel\" bezelStyle=\"rounded\" image=\"NSShareTemplate\" imagePosition=\"only\" alignment=\"center\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"vLT-o6-WGO\">\n                                                                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                                                                    <font key=\"font\" metaFont=\"system\"/>\n                                                                                </buttonCell>\n                                                                                <constraints>\n                                                                                    <constraint firstAttribute=\"width\" constant=\"16\" id=\"FOv-xI-qeM\"/>\n                                                                                    <constraint firstAttribute=\"height\" constant=\"16\" id=\"cQg-Gn-wlM\"/>\n                                                                                </constraints>\n                                                                                <connections>\n                                                                                    <action selector=\"shareSheet:\" target=\"rPt-NT-nkU\" id=\"Kfd-pJ-Bqc\"/>\n                                                                                </connections>\n                                                                            </button>\n                                                                        </subviews>\n                                                                        <constraints>\n                                                                            <constraint firstItem=\"Ote-7U-BZm\" firstAttribute=\"centerY\" secondItem=\"shI-kr-3o8\" secondAttribute=\"centerY\" id=\"46U-0f-02D\"/>\n                                                                            <constraint firstItem=\"oDB-Y6-20P\" firstAttribute=\"centerY\" secondItem=\"shI-kr-3o8\" secondAttribute=\"centerY\" id=\"m6N-dE-xpU\"/>\n                                                                            <constraint firstItem=\"Bn7-FD-jzc\" firstAttribute=\"centerY\" secondItem=\"shI-kr-3o8\" secondAttribute=\"centerY\" id=\"nho-lq-yZa\"/>\n                                                                        </constraints>\n                                                                        <visibilityPriorities>\n                                                                            <integer value=\"1000\"/>\n                                                                            <integer value=\"1000\"/>\n                                                                            <integer value=\"1000\"/>\n                                                                        </visibilityPriorities>\n                                                                        <customSpacing>\n                                                                            <real value=\"3.4028234663852886e+38\"/>\n                                                                            <real value=\"3.4028234663852886e+38\"/>\n                                                                            <real value=\"3.4028234663852886e+38\"/>\n                                                                        </customSpacing>\n                                                                    </stackView>\n                                                                </subviews>\n                                                                <constraints>\n                                                                    <constraint firstItem=\"shI-kr-3o8\" firstAttribute=\"centerY\" secondItem=\"Ua8-RE-q01\" secondAttribute=\"centerY\" id=\"AVX-pD-7Dr\"/>\n                                                                    <constraint firstAttribute=\"trailing\" secondItem=\"shI-kr-3o8\" secondAttribute=\"trailing\" constant=\"12\" id=\"PPb-lX-xlt\"/>\n                                                                    <constraint firstItem=\"shI-kr-3o8\" firstAttribute=\"leading\" secondItem=\"Ua8-RE-q01\" secondAttribute=\"leading\" constant=\"12\" id=\"pyO-IT-LKf\"/>\n                                                                </constraints>\n                                                            </customView>\n                                                        </subviews>\n                                                        <constraints>\n                                                            <constraint firstItem=\"rZx-hk-GcJ\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"xSU-Mk-2F1\" secondAttribute=\"leading\" constant=\"85\" id=\"1I0-Qm-T21\"/>\n                                                            <constraint firstItem=\"rZx-hk-GcJ\" firstAttribute=\"centerY\" secondItem=\"xSU-Mk-2F1\" secondAttribute=\"centerY\" id=\"3lf-bf-dJA\"/>\n                                                            <constraint firstItem=\"rZx-hk-GcJ\" firstAttribute=\"centerX\" secondItem=\"xSU-Mk-2F1\" secondAttribute=\"centerX\" id=\"L0y-rf-Cem\"/>\n                                                            <constraint firstAttribute=\"trailing\" secondItem=\"Ua8-RE-q01\" secondAttribute=\"trailing\" id=\"Uos-hm-kn6\"/>\n                                                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"rZx-hk-GcJ\" secondAttribute=\"trailing\" constant=\"85\" id=\"ZjM-uT-4wC\"/>\n                                                            <constraint firstItem=\"Ua8-RE-q01\" firstAttribute=\"top\" secondItem=\"xSU-Mk-2F1\" secondAttribute=\"top\" id=\"esv-qQ-apf\"/>\n                                                            <constraint firstAttribute=\"bottom\" secondItem=\"Ua8-RE-q01\" secondAttribute=\"bottom\" id=\"nac-xp-D3Y\"/>\n                                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"uht-o4-cfz\"/>\n                                                        </constraints>\n                                                    </customView>\n                                                    <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FvZ-Tf-26e\">\n                                                        <rect key=\"frame\" x=\"110\" y=\"297\" width=\"93\" height=\"16\"/>\n                                                        <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"None Selected\" id=\"Gg5-NO-KIQ\">\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                            <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        </textFieldCell>\n                                                    </textField>\n                                                    <customView misplaced=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CPU-ij-IKt\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"568\" height=\"45\"/>\n                                                        <subviews>\n                                                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2wI-jF-KzC\">\n                                                                <rect key=\"frame\" x=\"13\" y=\"10\" width=\"73\" height=\"16\"/>\n                                                                <constraints>\n                                                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"69\" id=\"jii-h2-sj7\"/>\n                                                                </constraints>\n                                                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" id=\"3Cm-1Y-e1D\">\n                                                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                </textFieldCell>\n                                                            </textField>\n                                                        </subviews>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"45\" id=\"9A6-2x-DoV\"/>\n                                                            <constraint firstAttribute=\"bottom\" secondItem=\"2wI-jF-KzC\" secondAttribute=\"bottom\" constant=\"10\" id=\"AGL-2k-iwm\"/>\n                                                            <constraint firstItem=\"2wI-jF-KzC\" firstAttribute=\"leading\" secondItem=\"CPU-ij-IKt\" secondAttribute=\"leading\" constant=\"15\" id=\"P8C-5i-ddw\"/>\n                                                        </constraints>\n                                                    </customView>\n                                                </subviews>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"300\" id=\"8Ne-do-Q9o\"/>\n                                                    <constraint firstItem=\"xSU-Mk-2F1\" firstAttribute=\"leading\" secondItem=\"at7-wA-VAS\" secondAttribute=\"leading\" id=\"CQ0-DY-aM0\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"qJO-7f-vkL\" secondAttribute=\"trailing\" id=\"GZ2-jz-8Ue\"/>\n                                                    <constraint firstItem=\"qJO-7f-vkL\" firstAttribute=\"top\" secondItem=\"xSU-Mk-2F1\" secondAttribute=\"bottom\" id=\"NMQ-Tc-leL\"/>\n                                                    <constraint firstItem=\"xSU-Mk-2F1\" firstAttribute=\"top\" secondItem=\"at7-wA-VAS\" secondAttribute=\"top\" id=\"Nm9-X5-Q67\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"xSU-Mk-2F1\" secondAttribute=\"trailing\" id=\"Te8-se-icR\"/>\n                                                    <constraint firstItem=\"CPU-ij-IKt\" firstAttribute=\"top\" secondItem=\"qJO-7f-vkL\" secondAttribute=\"bottom\" constant=\"2\" id=\"U4c-ky-F5D\"/>\n                                                    <constraint firstItem=\"FvZ-Tf-26e\" firstAttribute=\"centerX\" secondItem=\"qJO-7f-vkL\" secondAttribute=\"centerX\" id=\"dTL-Hs-9Bn\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"CPU-ij-IKt\" secondAttribute=\"trailing\" id=\"ehP-8s-0nD\"/>\n                                                    <constraint firstAttribute=\"bottom\" secondItem=\"CPU-ij-IKt\" secondAttribute=\"bottom\" id=\"hlM-zU-BSy\"/>\n                                                    <constraint firstItem=\"qJO-7f-vkL\" firstAttribute=\"leading\" secondItem=\"at7-wA-VAS\" secondAttribute=\"leading\" id=\"inr-29-Y1D\"/>\n                                                    <constraint firstItem=\"FvZ-Tf-26e\" firstAttribute=\"centerY\" secondItem=\"qJO-7f-vkL\" secondAttribute=\"centerY\" id=\"mTC-Rr-1yL\"/>\n                                                    <constraint firstItem=\"CPU-ij-IKt\" firstAttribute=\"leading\" secondItem=\"at7-wA-VAS\" secondAttribute=\"leading\" id=\"rqI-ZH-8Gm\"/>\n                                                </constraints>\n                                            </customView>\n                                        </subviews>\n                                        <holdingPriorities>\n                                            <real value=\"240\"/>\n                                            <real value=\"1\"/>\n                                        </holdingPriorities>\n                                    </splitView>\n                                </subviews>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"200\" id=\"gS8-dF-Fzu\"/>\n                                </constraints>\n                                <holdingPriorities>\n                                    <real value=\"250\"/>\n                                    <real value=\"1\"/>\n                                </holdingPriorities>\n                            </splitView>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"dO0-pK-Ktm\" firstAttribute=\"top\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"top\" id=\"81h-T0-oCs\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"dO0-pK-Ktm\" secondAttribute=\"bottom\" id=\"FPP-5f-XJi\"/>\n                            <constraint firstItem=\"dO0-pK-Ktm\" firstAttribute=\"leading\" secondItem=\"m2S-Jp-Qdl\" secondAttribute=\"leading\" id=\"IBN-0m-3dV\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"dO0-pK-Ktm\" secondAttribute=\"trailing\" id=\"m3d-jL-yKi\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"counter\" destination=\"2wI-jF-KzC\" id=\"idm-XG-ZqO\"/>\n                        <outlet property=\"editAreaScroll\" destination=\"qJO-7f-vkL\" id=\"X69-yq-N67\"/>\n                        <outlet property=\"editor\" destination=\"cmZ-KL-T9k\" id=\"sJd-5P-0mf\"/>\n                        <outlet property=\"lockUnlock\" destination=\"Ote-7U-BZm\" id=\"DXV-am-jEC\"/>\n                        <outlet property=\"lockedFolder\" destination=\"tVX-CX-9O1\" id=\"Bxr-LB-gf8\"/>\n                        <outlet property=\"menuChangeCreationDate\" destination=\"QdU-og-lQH\" id=\"3h3-dh-83s\"/>\n                        <outlet property=\"newNoteButton\" destination=\"TiA-aF-Uev\" id=\"RLL-yl-PiF\"/>\n                        <outlet property=\"nonSelectedLabel\" destination=\"FvZ-Tf-26e\" id=\"fa6-EA-riA\"/>\n                        <outlet property=\"noteMenu\" destination=\"AaK-Xd-i52\" id=\"t41-7H-k7N\"/>\n                        <outlet property=\"notesCounter\" destination=\"xOb-jd-sez\" id=\"57q-6u-ogh\"/>\n                        <outlet property=\"notesCounterViewHeight\" destination=\"eLj-20-oK1\" id=\"XEb-eo-asA\"/>\n                        <outlet property=\"notesListCustomView\" destination=\"8ej-mX-KM6\" id=\"yDe-gf-AHy\"/>\n                        <outlet property=\"notesScrollView\" destination=\"Kzf-Jh-YEb\" id=\"u8R-Hy-KjV\"/>\n                        <outlet property=\"notesTableView\" destination=\"8X8-yh-5EA\" id=\"pGL-Nn-LM0\"/>\n                        <outlet property=\"outlineHeader\" destination=\"vp7-cq-QSI\" id=\"iK6-z5-GgC\"/>\n                        <outlet property=\"previewButton\" destination=\"Bn7-FD-jzc\" id=\"RxQ-Au-NBr\"/>\n                        <outlet property=\"search\" destination=\"bd7-O3-GQF\" id=\"HjC-CH-gRR\"/>\n                        <outlet property=\"searchTopConstraint\" destination=\"nXO-Fh-8nv\" id=\"p8r-Pf-fo8\"/>\n                        <outlet property=\"shareButton\" destination=\"oDB-Y6-20P\" id=\"8bV-gW-UaW\"/>\n                        <outlet property=\"sidebarOutlineView\" destination=\"urA-eK-bWB\" id=\"ytX-z3-4Mi\"/>\n                        <outlet property=\"sidebarScrollView\" destination=\"BdT-Ac-GAV\" id=\"XbT-MU-nJA\"/>\n                        <outlet property=\"sidebarSplitView\" destination=\"dO0-pK-Ktm\" id=\"2FH-Og-FOV\"/>\n                        <outlet property=\"splitView\" destination=\"yWu-3F-P62\" id=\"IYq-T3-4b1\"/>\n                        <outlet property=\"titleBarAdditionalView\" destination=\"Ua8-RE-q01\" id=\"CfN-3p-UH3\"/>\n                        <outlet property=\"titleBarView\" destination=\"xSU-Mk-2F1\" id=\"lbu-pA-1Hs\"/>\n                        <outlet property=\"titleLabel\" destination=\"rZx-hk-GcJ\" id=\"wKj-zD-Ovz\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"rPt-NT-nkU\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n                <menu id=\"AaK-Xd-i52\">\n                    <items>\n                        <menuItem title=\"Open\" image=\"macwindow.on.rectangle\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.open\" id=\"u88-5C-vTe\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"openWindow:\" target=\"rPt-NT-nkU\" id=\"OwA-Zj-vgW\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Duplicate\" image=\"document.on.document\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.duplicate\" id=\"E6I-n5-dsi\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"duplicate:\" target=\"rPt-NT-nkU\" id=\"hUh-qX-nAT\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Rename\" image=\"pencil\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.rename\" id=\"XBB-Sr-T1D\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"renameMenu:\" target=\"XfG-lQ-9wD\" id=\"iYK-OA-0IW\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Delete\" image=\"delete.right\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.delete\" id=\"fHG-zk-g0k\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"delete:\" target=\"rPt-NT-nkU\" id=\"fyr-do-SuJ\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Pin/Unpin\" image=\"pin\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.togglePin\" id=\"jFN-Dp-LON\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"pinMenu:\" target=\"rPt-NT-nkU\" id=\"EyW-HI-rr9\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Decrypt\" image=\"lock.slash\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.decrypt\" id=\"5gL-j7-Zq8\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"removeNoteEncryption:\" target=\"rPt-NT-nkU\" id=\"5ga-uK-aSH\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Lock/Unlock\" image=\"lock\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.toggleLock\" id=\"kg2-3u-V99\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"toggleNotesLock:\" target=\"rPt-NT-nkU\" id=\"tK5-CH-cx8\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Open External\" image=\"iphone.and.arrow.right.outward\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.external\" id=\"3tV-h0-YEb\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"editorMenu:\" target=\"rPt-NT-nkU\" id=\"0ta-2C-c0S\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Reveal in Finder\" image=\"doc.viewfinder\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.reveal\" id=\"xSO-lW-k8f\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"finderMenu:\" target=\"rPt-NT-nkU\" id=\"HN5-My-jcv\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem isSeparatorItem=\"YES\" id=\"Fj3-MU-qJ9\"/>\n                        <menuItem title=\"Change Creation Date\" image=\"calendar\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.date\" id=\"QdU-og-lQH\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <attributedString key=\"userComments\">\n                                <fragment content=\"#bc-ignore!\"/>\n                            </attributedString>\n                            <connections>\n                                <action selector=\"changeCreationDate:\" target=\"rPt-NT-nkU\" id=\"R4F-Ug-M9Q\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Toggle Container\" image=\"storefront\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.toggleContainer\" id=\"y4W-TV-iZ3\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"toggleContainer:\" target=\"rPt-NT-nkU\" id=\"10h-VM-5y7\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem isSeparatorItem=\"YES\" id=\"06c-Up-wPq\"/>\n                        <menuItem title=\"Copy URL\" image=\"link\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.copyURL\" id=\"uQ1-ej-ufE\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"copyURL:\" target=\"rPt-NT-nkU\" id=\"zCA-0T-c96\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Copy Title\" image=\"document.on.document\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.copyTitle\" id=\"3kn-9C-fsB\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"copyTitle:\" target=\"rPt-NT-nkU\" id=\"Fwy-yp-nPd\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Create Web Page\" image=\"globe\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.uploadOverSSH\" id=\"oL6-fG-vHv\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"uploadWebNote:\" target=\"XfG-lQ-9wD\" id=\"Ea2-MI-Eqh\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Delete Web Page\" image=\"globe.badge.chevron.backward\" catalog=\"system\" tag=\"100\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.removeOverSSH\" id=\"K4N-le-FPU\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"removeWebNote:\" target=\"XfG-lQ-9wD\" id=\"nC3-xh-zYb\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem isSeparatorItem=\"YES\" id=\"fYh-FK-PdD\"/>\n                        <menuItem title=\"Print\" image=\"printer\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.print\" id=\"nCW-CZ-qC7\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"printNotes:\" target=\"rPt-NT-nkU\" id=\"f6C-X6-WZP\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem isSeparatorItem=\"YES\" id=\"FCO-gg-UBw\"/>\n                        <menuItem title=\"History\" image=\"clock\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"popup.history\" id=\"xPh-BC-Xxl\">\n                            <menu key=\"submenu\" title=\"History\" identifier=\"noteMenu.history\" id=\"auW-wa-jbc\"/>\n                        </menuItem>\n                    </items>\n                </menu>\n                <menu id=\"nuz-kc-UUC\">\n                    <items>\n                        <menuItem title=\"Create Folder\" image=\"folder\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.create\" id=\"3zv-SD-lSX\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"createFolder:\" target=\"rPt-NT-nkU\" id=\"mR3-Pv-r9c\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Rename Folder\" image=\"pencil\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.rename\" id=\"fzU-ZR-Ubv\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"renameFolderMenu:\" target=\"rPt-NT-nkU\" id=\"P1a-Na-Ngh\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Delete Folder\" image=\"delete.right\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.delete\" id=\"RwR-P0-ycK\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"delete:\" target=\"rPt-NT-nkU\" id=\"PAc-6r-Uzz\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Decrypt Folder\" image=\"lock.slash\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.decrypt\" id=\"dqy-22-ETG\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"removeFolderEncryption:\" target=\"rPt-NT-nkU\" id=\"Sdf-28-9zt\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Lock Folder\" image=\"lock\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.toggleLock\" id=\"w7R-OL-Nfh\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"toggleFolderLock:\" target=\"rPt-NT-nkU\" id=\"yCw-y6-dbe\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Reveal in Finder\" image=\"doc.viewfinder\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.reveal\" id=\"goN-LO-L7l\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"revealInFinder:\" target=\"rPt-NT-nkU\" id=\"o9s-WD-Vqu\"/>\n                            </connections>\n                        </menuItem>\n                        <menuItem title=\"Show Options\" image=\"folder.badge.gear\" catalog=\"system\" localization=\"NO\" mirroring=\"NO\" identifier=\"folderPopup.options\" id=\"qs2-5J-Q3n\">\n                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                            <connections>\n                                <action selector=\"openProjectViewSettings:\" target=\"rPt-NT-nkU\" id=\"kzR-77-haW\"/>\n                            </connections>\n                        </menuItem>\n                    </items>\n                </menu>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-72.5\" y=\"680\"/>\n        </scene>\n        <!--Master Password View Controller-->\n        <scene sceneID=\"6kq-pY-Hei\">\n            <objects>\n                <viewController storyboardIdentifier=\"MasterPasswordViewController\" id=\"6ub-n9-nIJ\" customClass=\"MasterPasswordViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"9jJ-7H-xQA\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"343\" height=\"266\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <secureTextField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Zy5-Pt-uvR\">\n                                <rect key=\"frame\" x=\"140\" y=\"226\" width=\"183\" height=\"21\"/>\n                                <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"WmH-4O-3xn\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <allowedInputSourceLocales>\n                                        <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                    </allowedInputSourceLocales>\n                                </secureTextFieldCell>\n                            </secureTextField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ICS-c1-sh7\">\n                                <rect key=\"frame\" x=\"18\" y=\"228\" width=\"116\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Current Password:\" id=\"7me-g8-vOq\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UtO-2w-mhe\">\n                                <rect key=\"frame\" x=\"22\" y=\"146\" width=\"112\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Repeat Password:\" id=\"PLH-LL-geH\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Is4-Lj-vJz\">\n                                <rect key=\"frame\" x=\"101\" y=\"105\" width=\"33\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Hint:\" id=\"ioc-u5-XRA\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9Qs-KA-Pou\">\n                                <rect key=\"frame\" x=\"241\" y=\"13\" width=\"89\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Change\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"frt-CF-STi\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"change:\" target=\"6ub-n9-nIJ\" id=\"iJr-SQ-Wpf\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"69b-H3-sPW\">\n                                <rect key=\"frame\" x=\"37\" y=\"188\" width=\"97\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"New Password:\" id=\"iNK-dg-n5E\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8za-hV-CXv\">\n                                <rect key=\"frame\" x=\"159\" y=\"13\" width=\"84\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Cancel\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"GcP-oI-0b4\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <string key=\"keyEquivalent\" base64-UTF8=\"YES\">\nGw\n</string>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"close:\" target=\"6ub-n9-nIJ\" id=\"GgP-Mw-yz4\"/>\n                                </connections>\n                            </button>\n                            <secureTextField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"n4l-45-dCD\">\n                                <rect key=\"frame\" x=\"140\" y=\"186\" width=\"183\" height=\"21\"/>\n                                <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"rog-05-msC\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <allowedInputSourceLocales>\n                                        <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                    </allowedInputSourceLocales>\n                                </secureTextFieldCell>\n                            </secureTextField>\n                            <secureTextField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VFu-ZY-RoK\">\n                                <rect key=\"frame\" x=\"140\" y=\"144\" width=\"183\" height=\"21\"/>\n                                <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"L9i-Do-dNi\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <allowedInputSourceLocales>\n                                        <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                    </allowedInputSourceLocales>\n                                </secureTextFieldCell>\n                            </secureTextField>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"250\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AoT-tS-iQH\">\n                                <rect key=\"frame\" x=\"140\" y=\"61\" width=\"183\" height=\"60\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"60\" id=\"3fK-HR-39O\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" state=\"on\" borderStyle=\"bezel\" drawsBackground=\"YES\" id=\"HDT-kS-v25\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"8za-hV-CXv\" firstAttribute=\"width\" secondItem=\"9Qs-KA-Pou\" secondAttribute=\"width\" multiplier=\"0.933333\" id=\"054-IU-jjr\"/>\n                            <constraint firstItem=\"AoT-tS-iQH\" firstAttribute=\"leading\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"leading\" id=\"0SJ-Mv-3y3\"/>\n                            <constraint firstItem=\"VFu-ZY-RoK\" firstAttribute=\"trailing\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"trailing\" id=\"1Jg-Tr-aFb\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"1Y6-CX-Boh\"/>\n                            <constraint firstItem=\"ICS-c1-sh7\" firstAttribute=\"leading\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" priority=\"10\" constant=\"20\" symbolic=\"YES\" id=\"5eN-65-fOE\"/>\n                            <constraint firstItem=\"VFu-ZY-RoK\" firstAttribute=\"centerY\" secondItem=\"UtO-2w-mhe\" secondAttribute=\"centerY\" id=\"6JQ-eB-AmX\"/>\n                            <constraint firstItem=\"UtO-2w-mhe\" firstAttribute=\"leading\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" priority=\"10\" constant=\"20\" symbolic=\"YES\" id=\"6jC-ma-OUE\"/>\n                            <constraint firstItem=\"VFu-ZY-RoK\" firstAttribute=\"leading\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"leading\" id=\"75s-Ok-eSu\"/>\n                            <constraint firstItem=\"AoT-tS-iQH\" firstAttribute=\"trailing\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"trailing\" id=\"AVU-Ma-i3B\"/>\n                            <constraint firstItem=\"Zy5-Pt-uvR\" firstAttribute=\"leading\" secondItem=\"ICS-c1-sh7\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"B9k-pc-9Dh\"/>\n                            <constraint firstItem=\"Is4-Lj-vJz\" firstAttribute=\"leading\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" priority=\"10\" constant=\"20\" symbolic=\"YES\" id=\"BWw-tN-9AE\"/>\n                            <constraint firstItem=\"UtO-2w-mhe\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"BoP-bv-rw9\"/>\n                            <constraint firstItem=\"n4l-45-dCD\" firstAttribute=\"trailing\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"trailing\" id=\"Ckq-pf-Eig\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"9Qs-KA-Pou\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"ITz-Vz-9qB\"/>\n                            <constraint firstItem=\"69b-H3-sPW\" firstAttribute=\"leading\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" priority=\"10\" constant=\"20\" symbolic=\"YES\" id=\"JvW-3a-YYa\"/>\n                            <constraint firstItem=\"VFu-ZY-RoK\" firstAttribute=\"leading\" secondItem=\"UtO-2w-mhe\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"ONA-LC-w2C\"/>\n                            <constraint firstItem=\"Is4-Lj-vJz\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"Oht-MC-dIf\"/>\n                            <constraint firstItem=\"n4l-45-dCD\" firstAttribute=\"centerY\" secondItem=\"69b-H3-sPW\" secondAttribute=\"centerY\" id=\"Vot-2j-vcU\"/>\n                            <constraint firstItem=\"8za-hV-CXv\" firstAttribute=\"leading\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" constant=\"166\" id=\"YO0-eY-k7d\"/>\n                            <constraint firstItem=\"ICS-c1-sh7\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"YP8-o3-ye1\"/>\n                            <constraint firstItem=\"ICS-c1-sh7\" firstAttribute=\"top\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"top\" constant=\"22\" id=\"Yca-FR-eA1\"/>\n                            <constraint firstItem=\"AoT-tS-iQH\" firstAttribute=\"leading\" secondItem=\"Is4-Lj-vJz\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"boq-CZ-8Gs\"/>\n                            <constraint firstItem=\"AoT-tS-iQH\" firstAttribute=\"top\" secondItem=\"Is4-Lj-vJz\" secondAttribute=\"top\" id=\"dwy-eE-gaf\"/>\n                            <constraint firstItem=\"Zy5-Pt-uvR\" firstAttribute=\"centerY\" secondItem=\"ICS-c1-sh7\" secondAttribute=\"centerY\" id=\"gNc-Ev-H70\"/>\n                            <constraint firstItem=\"69b-H3-sPW\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"9jJ-7H-xQA\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"gQD-tr-10I\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"8za-hV-CXv\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"gzn-UA-44G\"/>\n                            <constraint firstItem=\"n4l-45-dCD\" firstAttribute=\"leading\" secondItem=\"69b-H3-sPW\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"kMC-Dy-TLA\"/>\n                            <constraint firstItem=\"9Qs-KA-Pou\" firstAttribute=\"leading\" secondItem=\"8za-hV-CXv\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"qCr-Ev-lqk\"/>\n                            <constraint firstItem=\"69b-H3-sPW\" firstAttribute=\"top\" secondItem=\"ICS-c1-sh7\" secondAttribute=\"bottom\" constant=\"24\" id=\"s8O-ti-mY1\"/>\n                            <constraint firstItem=\"9Qs-KA-Pou\" firstAttribute=\"trailing\" secondItem=\"AoT-tS-iQH\" secondAttribute=\"trailing\" id=\"tta-YK-KEQ\"/>\n                            <constraint firstItem=\"Is4-Lj-vJz\" firstAttribute=\"top\" secondItem=\"UtO-2w-mhe\" secondAttribute=\"bottom\" constant=\"25\" id=\"vmm-5D-CGz\"/>\n                            <constraint firstItem=\"n4l-45-dCD\" firstAttribute=\"leading\" secondItem=\"Zy5-Pt-uvR\" secondAttribute=\"leading\" id=\"wgu-2X-D7g\"/>\n                            <constraint firstItem=\"UtO-2w-mhe\" firstAttribute=\"top\" secondItem=\"69b-H3-sPW\" secondAttribute=\"bottom\" constant=\"26\" id=\"yPN-LZ-w31\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"currentPassword\" destination=\"Zy5-Pt-uvR\" id=\"zfy-Ur-Dfu\"/>\n                        <outlet property=\"hint\" destination=\"AoT-tS-iQH\" id=\"HnV-bX-OMf\"/>\n                        <outlet property=\"newPassword\" destination=\"n4l-45-dCD\" id=\"EKJ-5A-hCC\"/>\n                        <outlet property=\"repeatedPassword\" destination=\"VFu-ZY-RoK\" id=\"B32-bB-W2E\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"AWw-ow-pbw\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1491\" y=\"-252\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"jsp-rc-Q9r\">\n            <objects>\n                <windowController storyboardIdentifier=\"About\" id=\"fsj-A7-rSt\" customClass=\"AboutWindowController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"Window\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" visibleAtLaunch=\"NO\" frameAutosaveName=\"\" animationBehavior=\"default\" id=\"qod-hp-9wd\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\"/>\n                        <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"196\" y=\"240\" width=\"480\" height=\"270\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1792\" height=\"1097\"/>\n                        <attributedString key=\"userComments\">\n                            <fragment content=\"#bc-ignore!\"/>\n                        </attributedString>\n                        <connections>\n                            <outlet property=\"delegate\" destination=\"fsj-A7-rSt\" id=\"MQB-GZ-L3v\"/>\n                        </connections>\n                    </window>\n                    <connections>\n                        <segue destination=\"6OZ-zZ-7EL\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"xap-r3-HAh\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"5yP-4F-Hxb\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-936\" y=\"600\"/>\n        </scene>\n        <!--About View Controller-->\n        <scene sceneID=\"bm4-A4-SJq\">\n            <objects>\n                <viewController id=\"6OZ-zZ-7EL\" customClass=\"AboutViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" misplaced=\"YES\" id=\"stc-Pf-K3l\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"481\" height=\"544\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <imageView toolTip=\"In memory of Mars. ? - 25.08.2022\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TKE-yB-wPs\" customClass=\"AboutImageView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"253\" y=\"461\" width=\"67\" height=\"70\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"70\" id=\"TuC-Fg-xJn\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"67\" id=\"VIF-nP-g4S\"/>\n                                </constraints>\n                                <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"AppIconModern\" id=\"FCd-Ar-efh\"/>\n                            </imageView>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uwq-Wq-Zsn\">\n                                <rect key=\"frame\" x=\"253\" y=\"400\" width=\"67\" height=\"17\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"center\" title=\"FSNotes\" id=\"gWb-su-EdI\">\n                                    <font key=\"font\" metaFont=\"systemBold\" size=\"14\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </textField>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"250\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3f9-vz-qWm\">\n                                <rect key=\"frame\" x=\"135\" y=\"300\" width=\"304\" height=\"32\"/>\n                                <textFieldCell key=\"cell\" selectable=\"YES\" alignment=\"center\" id=\"0f7-Za-V0B\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <string key=\"title\">Copyright © 2017-2024 Oleksandr Hlushchenko.\nAll rights reserved.</string>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <attributedString key=\"userComments\">\n                                        <fragment content=\"#bc-ignore!\"/>\n                                    </attributedString>\n                                </textFieldCell>\n                            </textField>\n                            <button focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FPM-RD-i0c\">\n                                <rect key=\"frame\" x=\"214\" y=\"425\" width=\"146\" height=\"16\"/>\n                                <buttonCell key=\"cell\" type=\"bevel\" title=\"🔗fsnotes/contributors\" bezelStyle=\"regularSquare\" alignment=\"center\" focusRingType=\"none\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"jQ1-6K-9ar\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                                <connections>\n                                    <action selector=\"openContributorsPage:\" target=\"6OZ-zZ-7EL\" id=\"lH1-Ed-dtl\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JMy-4k-NeF\">\n                                <rect key=\"frame\" x=\"18\" y=\"20\" width=\"537\" height=\"32\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"center\" id=\"sWS-bo-99f\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <string key=\"title\">Dylan Seeger — https://www.lovably.com\nOlena Hlushcneko</string>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jxd-6e-5CJ\">\n                                <rect key=\"frame\" x=\"244\" y=\"60\" width=\"85\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Icons design:\" id=\"FKf-Ph-LiA\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Md6-vL-c1a\">\n                                <rect key=\"frame\" x=\"249\" y=\"264\" width=\"76\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Translators:\" id=\"13t-eQ-kOr\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2QL-BH-sCT\">\n                                <rect key=\"frame\" x=\"20\" y=\"381\" width=\"533\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gR1-Um-ivy\">\n                                <rect key=\"frame\" x=\"260\" y=\"347\" width=\"54\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"center\" title=\"Version\" id=\"ELw-Y4-DV0\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <scrollView autohidesScrollers=\"YES\" horizontalLineScroll=\"24\" horizontalPageScroll=\"10\" verticalLineScroll=\"24\" verticalPageScroll=\"10\" usesPredominantAxisScrolling=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2Mi-Tc-usi\">\n                                <rect key=\"frame\" x=\"20\" y=\"96\" width=\"533\" height=\"160\"/>\n                                <clipView key=\"contentView\" drawsBackground=\"NO\" id=\"ncf-mP-Txi\">\n                                    <rect key=\"frame\" x=\"1\" y=\"1\" width=\"531\" height=\"158\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                    <subviews>\n                                        <tableView verticalHuggingPriority=\"750\" allowsExpansionToolTips=\"YES\" columnAutoresizingStyle=\"lastColumnOnly\" tableStyle=\"fullWidth\" alternatingRowBackgroundColors=\"YES\" multipleSelection=\"NO\" autosaveColumns=\"NO\" rowHeight=\"24\" rowSizeStyle=\"automatic\" viewBased=\"YES\" id=\"dxm-ar-pH7\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"531\" height=\"158\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                            <size key=\"intercellSpacing\" width=\"17\" height=\"0.0\"/>\n                                            <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"gridColor\" name=\"gridColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <tableColumns>\n                                                <tableColumn identifier=\"table.about.0\" width=\"116.5\" minWidth=\"40\" maxWidth=\"1000\" id=\"8C6-wv-c5i\">\n                                                    <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\">\n                                                        <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    </tableHeaderCell>\n                                                    <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" title=\"Text Cell\" id=\"RtS-EA-VK2\">\n                                                        <font key=\"font\" metaFont=\"system\"/>\n                                                        <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    </textFieldCell>\n                                                    <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                                    <prototypeCellViews>\n                                                        <tableCellView id=\"oLK-nL-PkJ\">\n                                                            <rect key=\"frame\" x=\"8\" y=\"0.0\" width=\"114\" height=\"24\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                            <subviews>\n                                                                <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"250\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rTR-WK-LFY\">\n                                                                    <rect key=\"frame\" x=\"0.0\" y=\"4\" width=\"115\" height=\"16\"/>\n                                                                    <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" sendsActionOnEndEditing=\"YES\" title=\"Table View Cell\" id=\"9Gu-fA-XLk\">\n                                                                        <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                                                        <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    </textFieldCell>\n                                                                </textField>\n                                                            </subviews>\n                                                            <constraints>\n                                                                <constraint firstItem=\"rTR-WK-LFY\" firstAttribute=\"centerY\" secondItem=\"oLK-nL-PkJ\" secondAttribute=\"centerY\" id=\"CCb-iV-uX2\"/>\n                                                                <constraint firstItem=\"rTR-WK-LFY\" firstAttribute=\"centerX\" secondItem=\"oLK-nL-PkJ\" secondAttribute=\"centerX\" id=\"GOU-K2-QQA\"/>\n                                                                <constraint firstItem=\"rTR-WK-LFY\" firstAttribute=\"leading\" secondItem=\"oLK-nL-PkJ\" secondAttribute=\"leading\" constant=\"2\" id=\"I2H-as-qll\"/>\n                                                            </constraints>\n                                                            <connections>\n                                                                <outlet property=\"textField\" destination=\"rTR-WK-LFY\" id=\"fcR-hc-wlV\"/>\n                                                            </connections>\n                                                        </tableCellView>\n                                                    </prototypeCellViews>\n                                                </tableColumn>\n                                                <tableColumn identifier=\"table.about.1\" width=\"385.5\" minWidth=\"40\" maxWidth=\"1000\" id=\"Kap-cy-IbZ\">\n                                                    <tableHeaderCell key=\"headerCell\" lineBreakMode=\"truncatingTail\" borderStyle=\"border\">\n                                                        <color key=\"textColor\" name=\"headerTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        <color key=\"backgroundColor\" name=\"headerColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    </tableHeaderCell>\n                                                    <textFieldCell key=\"dataCell\" lineBreakMode=\"truncatingTail\" selectable=\"YES\" editable=\"YES\" title=\"Text Cell\" id=\"Eho-1T-xjz\">\n                                                        <font key=\"font\" metaFont=\"system\"/>\n                                                        <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                        <color key=\"backgroundColor\" name=\"controlBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    </textFieldCell>\n                                                    <tableColumnResizingMask key=\"resizingMask\" resizeWithTable=\"YES\" userResizable=\"YES\"/>\n                                                    <prototypeCellViews>\n                                                        <tableCellView id=\"Svh-Z4-DD5\">\n                                                            <rect key=\"frame\" x=\"139.5\" y=\"0.0\" width=\"383\" height=\"24\"/>\n                                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                                            <subviews>\n                                                                <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"250\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JRs-Lb-Adc\">\n                                                                    <rect key=\"frame\" x=\"0.0\" y=\"4\" width=\"383\" height=\"16\"/>\n                                                                    <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" sendsActionOnEndEditing=\"YES\" title=\"Table View Cell\" id=\"zoX-MN-b3x\">\n                                                                        <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                                                        <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                                    </textFieldCell>\n                                                                </textField>\n                                                            </subviews>\n                                                            <constraints>\n                                                                <constraint firstItem=\"JRs-Lb-Adc\" firstAttribute=\"centerX\" secondItem=\"Svh-Z4-DD5\" secondAttribute=\"centerX\" id=\"DbH-IN-EfN\"/>\n                                                                <constraint firstItem=\"JRs-Lb-Adc\" firstAttribute=\"centerY\" secondItem=\"Svh-Z4-DD5\" secondAttribute=\"centerY\" id=\"nwc-Ep-GXy\"/>\n                                                                <constraint firstItem=\"JRs-Lb-Adc\" firstAttribute=\"leading\" secondItem=\"Svh-Z4-DD5\" secondAttribute=\"leading\" constant=\"2\" id=\"pvH-1D-cK8\"/>\n                                                            </constraints>\n                                                            <connections>\n                                                                <outlet property=\"textField\" destination=\"JRs-Lb-Adc\" id=\"sa7-Lt-EnA\"/>\n                                                            </connections>\n                                                        </tableCellView>\n                                                    </prototypeCellViews>\n                                                </tableColumn>\n                                            </tableColumns>\n                                        </tableView>\n                                    </subviews>\n                                    <nil key=\"backgroundColor\"/>\n                                </clipView>\n                                <scroller key=\"horizontalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"YES\" id=\"PCs-t5-9ug\">\n                                    <rect key=\"frame\" x=\"1\" y=\"143\" width=\"441\" height=\"16\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                </scroller>\n                                <scroller key=\"verticalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"NO\" id=\"bvv-u1-Zg1\">\n                                    <rect key=\"frame\" x=\"224\" y=\"17\" width=\"15\" height=\"102\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                </scroller>\n                            </scrollView>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"FPM-RD-i0c\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"2f9-id-fUU\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"2Mi-Tc-usi\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"2xy-BZ-wHs\"/>\n                            <constraint firstItem=\"2QL-BH-sCT\" firstAttribute=\"leading\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"4cG-VB-eCh\"/>\n                            <constraint firstItem=\"TKE-yB-wPs\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"5VI-48-ioW\"/>\n                            <constraint firstItem=\"Jxd-6e-5CJ\" firstAttribute=\"top\" secondItem=\"2Mi-Tc-usi\" secondAttribute=\"bottom\" constant=\"20\" id=\"BQX-KU-ZHG\"/>\n                            <constraint firstItem=\"2QL-BH-sCT\" firstAttribute=\"top\" secondItem=\"uwq-Wq-Zsn\" secondAttribute=\"bottom\" constant=\"16\" id=\"BaW-em-oH4\"/>\n                            <constraint firstItem=\"Md6-vL-c1a\" firstAttribute=\"top\" secondItem=\"3f9-vz-qWm\" secondAttribute=\"bottom\" constant=\"20\" id=\"CfJ-hC-AS8\"/>\n                            <constraint firstItem=\"gR1-Um-ivy\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"GKq-fB-gWs\"/>\n                            <constraint firstItem=\"TKE-yB-wPs\" firstAttribute=\"top\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"top\" constant=\"13\" id=\"Hg0-Sa-0ZB\"/>\n                            <constraint firstItem=\"2Mi-Tc-usi\" firstAttribute=\"leading\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"KCs-on-Wsr\"/>\n                            <constraint firstItem=\"JMy-4k-NeF\" firstAttribute=\"top\" secondItem=\"Jxd-6e-5CJ\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"P6f-1d-y85\"/>\n                            <constraint firstItem=\"Jxd-6e-5CJ\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"TOB-jx-Nqb\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"2QL-BH-sCT\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"YU7-iw-CCn\"/>\n                            <constraint firstItem=\"3f9-vz-qWm\" firstAttribute=\"top\" secondItem=\"gR1-Um-ivy\" secondAttribute=\"bottom\" constant=\"15\" id=\"YVZ-SO-JSu\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"JMy-4k-NeF\" secondAttribute=\"bottom\" constant=\"20\" id=\"bA6-PZ-PS9\"/>\n                            <constraint firstItem=\"uwq-Wq-Zsn\" firstAttribute=\"top\" secondItem=\"FPM-RD-i0c\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"c0f-hZ-9K2\"/>\n                            <constraint firstItem=\"Md6-vL-c1a\" firstAttribute=\"centerX\" secondItem=\"3f9-vz-qWm\" secondAttribute=\"centerX\" id=\"c3V-lL-Gvd\"/>\n                            <constraint firstItem=\"3f9-vz-qWm\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"dWl-91-q3h\"/>\n                            <constraint firstItem=\"gR1-Um-ivy\" firstAttribute=\"top\" secondItem=\"2QL-BH-sCT\" secondAttribute=\"bottom\" constant=\"20\" id=\"qZv-RJ-GSL\"/>\n                            <constraint firstItem=\"JMy-4k-NeF\" firstAttribute=\"leading\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"rTe-iY-kPv\"/>\n                            <constraint firstItem=\"2Mi-Tc-usi\" firstAttribute=\"top\" secondItem=\"Md6-vL-c1a\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"suL-uP-a3x\"/>\n                            <constraint firstItem=\"FPM-RD-i0c\" firstAttribute=\"top\" secondItem=\"TKE-yB-wPs\" secondAttribute=\"bottom\" constant=\"20\" id=\"y5J-pG-TNV\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"JMy-4k-NeF\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"yvA-TW-nuT\"/>\n                            <constraint firstItem=\"2QL-BH-sCT\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"ywb-tv-FeH\"/>\n                            <constraint firstItem=\"uwq-Wq-Zsn\" firstAttribute=\"centerX\" secondItem=\"stc-Pf-K3l\" secondAttribute=\"centerX\" id=\"zvB-hO-Jq4\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"translatorsList\" destination=\"dxm-ar-pH7\" id=\"X7t-pp-55R\"/>\n                        <outlet property=\"versionLabel\" destination=\"gR1-Um-ivy\" id=\"UX5-sP-eKa\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"1bs-mz-4PY\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-920\" y=\"1199\"/>\n        </scene>\n        <!--Project Settings View Controller-->\n        <scene sceneID=\"dYK-AI-vld\">\n            <objects>\n                <viewController storyboardIdentifier=\"ProjectSettingsViewController\" id=\"JOV-dV-hyG\" customClass=\"ProjectSettingsViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"MgV-BT-LsD\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"530\" height=\"593\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <button identifier=\"creationDate\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VM6-1W-eJP\">\n                                <rect key=\"frame\" x=\"118\" y=\"497\" width=\"108\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Creation date\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"PY8-lr-5qr\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"sortBy:\" target=\"JOV-dV-hyG\" id=\"ntI-JD-w1A\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lRQ-kL-8RA\">\n                                <rect key=\"frame\" x=\"118\" y=\"541\" width=\"188\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"None (Use global settings)\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"oer-ZB-VOx\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"sortBy:\" target=\"JOV-dV-hyG\" id=\"b3k-ez-3cw\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"opy-8T-bfQ\">\n                                <rect key=\"frame\" x=\"20\" y=\"453\" width=\"490\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yJO-Hj-7Bf\">\n                                <rect key=\"frame\" x=\"39\" y=\"419\" width=\"63\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Direction:\" id=\"QxK-39-9yF\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xlx-2b-uqS\">\n                                <rect key=\"frame\" x=\"20\" y=\"374\" width=\"490\" height=\"5\"/>\n                            </box>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9Ag-KN-R7v\">\n                                <rect key=\"frame\" x=\"20\" y=\"295\" width=\"490\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"i67-zB-31s\">\n                                <rect key=\"frame\" x=\"43\" y=\"340\" width=\"59\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Visibility:\" id=\"jrj-ea-xmm\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cFW-mP-L5G\">\n                                <rect key=\"frame\" x=\"49\" y=\"542\" width=\"53\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Sort By:\" id=\"4cz-zj-dkH\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lhi-dw-WFN\">\n                                <rect key=\"frame\" x=\"433\" y=\"28\" width=\"69\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Close\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"7GB-y2-EMo\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"close:\" target=\"JOV-dV-hyG\" id=\"2bK-e1-O6V\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"modificationDate\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qfE-2B-PiS\">\n                                <rect key=\"frame\" x=\"118\" y=\"519\" width=\"132\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Modification date\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"GCG-C6-9cg\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"sortBy:\" target=\"JOV-dV-hyG\" id=\"K4l-H0-YUF\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"desc\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HIU-aj-0cI\">\n                                <rect key=\"frame\" x=\"118\" y=\"396\" width=\"98\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Descending\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"TCI-Xs-mwm\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"sortDirection:\" target=\"JOV-dV-hyG\" id=\"tHk-pU-Gfm\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"asc\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cG6-mW-iPi\">\n                                <rect key=\"frame\" x=\"118\" y=\"418\" width=\"90\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Ascending\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"EYG-WM-BFN\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"sortDirection:\" target=\"JOV-dV-hyG\" id=\"enk-hU-GOu\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pbJ-GR-hHs\">\n                                <rect key=\"frame\" x=\"118\" y=\"260\" width=\"146\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Use first line as title\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"kbK-Um-cQk\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"firstLineAsTitle:\" target=\"JOV-dV-hyG\" id=\"6tE-fm-7hd\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DQw-2B-ocF\">\n                                <rect key=\"frame\" x=\"118\" y=\"339\" width=\"263\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Show notes in &quot;Notes&quot; and &quot;Todo&quot; lists\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"Zzw-01-JH7\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"showNotesInMainList:\" target=\"JOV-dV-hyG\" id=\"g1q-7q-gte\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"title\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"G4r-zr-CMm\">\n                                <rect key=\"frame\" x=\"118\" y=\"475\" width=\"53\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Title\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"LPT-uW-BtF\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"sortBy:\" target=\"JOV-dV-hyG\" id=\"tq9-Nn-S8l\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Mi8-2x-rJD\">\n                                <rect key=\"frame\" x=\"118\" y=\"317\" width=\"200\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Show nested folders content\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"f33-1h-Hvh\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"showNestedFoldersContent:\" target=\"JOV-dV-hyG\" id=\"TWp-Ha-Q5a\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KzG-ff-Fkn\">\n                                <rect key=\"frame\" x=\"20\" y=\"238\" width=\"490\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eOj-jC-ndy\">\n                                <rect key=\"frame\" x=\"33\" y=\"261\" width=\"69\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Notes List:\" id=\"Scc-aD-CFQ\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0l4-ai-Rvk\" userLabel=\"GitView\">\n                                <rect key=\"frame\" x=\"20\" y=\"80\" width=\"490\" height=\"150\"/>\n                                <subviews>\n                                    <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DBd-jE-0Oa\">\n                                        <rect key=\"frame\" x=\"33\" y=\"39\" width=\"78\" height=\"16\"/>\n                                        <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Origin:\" id=\"Atd-Fs-Chq\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textFieldCell>\n                                    </textField>\n                                    <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YZl-XE-oZw\">\n                                        <rect key=\"frame\" x=\"33\" y=\"70\" width=\"78\" height=\"16\"/>\n                                        <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Passphrase:\" id=\"WsG-JA-VQd\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textFieldCell>\n                                    </textField>\n                                    <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"OCO-lO-Kf7\">\n                                        <rect key=\"frame\" x=\"33\" y=\"129\" width=\"91\" height=\"16\"/>\n                                        <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"center\" title=\"Git repository\" id=\"ybG-au-Sf4\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textFieldCell>\n                                    </textField>\n                                    <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qrS-Vp-k0u\">\n                                        <rect key=\"frame\" x=\"33\" y=\"98\" width=\"78\" height=\"16\"/>\n                                        <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" placeholderString=\"no key\" id=\"iQ9-lm-lFb\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textFieldCell>\n                                    </textField>\n                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bTF-nA-DuP\">\n                                        <rect key=\"frame\" x=\"137\" y=\"89\" width=\"101\" height=\"32\"/>\n                                        <buttonCell key=\"cell\" type=\"push\" title=\"Private key\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"LZ2-uY-6YK\">\n                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                        </buttonCell>\n                                        <connections>\n                                            <action selector=\"privateKey:\" target=\"JOV-dV-hyG\" id=\"pMp-Dz-Bbc\"/>\n                                        </connections>\n                                    </button>\n                                    <textField focusRingType=\"none\" verticalHuggingPriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Az0-Zg-c5o\">\n                                        <rect key=\"frame\" x=\"144\" y=\"10\" width=\"69\" height=\"16\"/>\n                                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" sendsActionOnEndEditing=\"YES\" alignment=\"center\" placeholderString=\"empty log\" drawsBackground=\"YES\" id=\"v9k-wu-2xL\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textFieldCell>\n                                    </textField>\n                                    <textField identifier=\"gitOrigin\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qPm-BY-8GE\">\n                                        <rect key=\"frame\" x=\"144\" y=\"36\" width=\"311\" height=\"21\"/>\n                                        <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"git@github.com:glushchenko/example.git\" drawsBackground=\"YES\" id=\"PJ2-3m-IGm\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textFieldCell>\n                                        <connections>\n                                            <action selector=\"origin:\" target=\"JOV-dV-hyG\" id=\"2zI-5v-CvI\"/>\n                                        </connections>\n                                    </textField>\n                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"RHj-at-082\">\n                                        <rect key=\"frame\" x=\"379\" y=\"1\" width=\"83\" height=\"32\"/>\n                                        <buttonCell key=\"cell\" type=\"push\" title=\"Remove\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"1Uk-jy-0qP\">\n                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                        </buttonCell>\n                                        <color key=\"bezelColor\" name=\"systemRedColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        <connections>\n                                            <action selector=\"removeRepository:\" target=\"JOV-dV-hyG\" id=\"MTO-eK-a56\"/>\n                                        </connections>\n                                    </button>\n                                    <secureTextField identifier=\"gitPassphrase\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HFW-4A-pjo\">\n                                        <rect key=\"frame\" x=\"144\" y=\"67\" width=\"186\" height=\"21\"/>\n                                        <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"passphrase\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"xyK-fE-4CD\">\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                            <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <allowedInputSourceLocales>\n                                                <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                            </allowedInputSourceLocales>\n                                        </secureTextFieldCell>\n                                        <connections>\n                                            <action selector=\"passphrase:\" target=\"JOV-dV-hyG\" id=\"h57-1I-BPD\"/>\n                                        </connections>\n                                    </secureTextField>\n                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vdD-ho-NJq\">\n                                        <rect key=\"frame\" x=\"298\" y=\"1\" width=\"83\" height=\"32\"/>\n                                        <buttonCell key=\"cell\" type=\"push\" title=\"Clone\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"7iL-1X-EtS\">\n                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                        </buttonCell>\n                                        <connections>\n                                            <action selector=\"clonePull:\" target=\"JOV-dV-hyG\" id=\"RfM-a7-gSD\"/>\n                                        </connections>\n                                    </button>\n                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TTV-op-DRY\">\n                                        <rect key=\"frame\" x=\"236\" y=\"89\" width=\"101\" height=\"32\"/>\n                                        <buttonCell key=\"cell\" type=\"push\" title=\"Reset\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"o2f-1e-Dvp\">\n                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                            <font key=\"font\" metaFont=\"system\"/>\n                                        </buttonCell>\n                                        <connections>\n                                            <action selector=\"resetKey:\" target=\"JOV-dV-hyG\" id=\"g3p-Ks-vLe\"/>\n                                        </connections>\n                                    </button>\n                                    <progressIndicator maxValue=\"100\" indeterminate=\"YES\" controlSize=\"small\" style=\"spinning\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zhQ-Wh-naA\">\n                                        <rect key=\"frame\" x=\"93\" y=\"10\" width=\"16\" height=\"16\"/>\n                                    </progressIndicator>\n                                </subviews>\n                                <constraints>\n                                    <constraint firstItem=\"qPm-BY-8GE\" firstAttribute=\"centerY\" secondItem=\"DBd-jE-0Oa\" secondAttribute=\"centerY\" id=\"4fk-1D-jC6\"/>\n                                    <constraint firstItem=\"HFW-4A-pjo\" firstAttribute=\"centerY\" secondItem=\"YZl-XE-oZw\" secondAttribute=\"centerY\" id=\"7od-Zb-rJk\"/>\n                                    <constraint firstItem=\"RHj-at-082\" firstAttribute=\"leading\" secondItem=\"vdD-ho-NJq\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"94N-MV-1tv\"/>\n                                    <constraint firstItem=\"qPm-BY-8GE\" firstAttribute=\"leading\" secondItem=\"bTF-nA-DuP\" secondAttribute=\"leading\" id=\"DNO-lH-T73\"/>\n                                    <constraint firstItem=\"Az0-Zg-c5o\" firstAttribute=\"centerY\" secondItem=\"zhQ-Wh-naA\" secondAttribute=\"centerY\" id=\"Dcp-R4-IIr\"/>\n                                    <constraint firstItem=\"TTV-op-DRY\" firstAttribute=\"trailing\" secondItem=\"HFW-4A-pjo\" secondAttribute=\"trailing\" id=\"FCN-KV-AyF\"/>\n                                    <constraint firstItem=\"qPm-BY-8GE\" firstAttribute=\"top\" secondItem=\"HFW-4A-pjo\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"GcQ-rC-Hcc\"/>\n                                    <constraint firstItem=\"vdD-ho-NJq\" firstAttribute=\"centerY\" secondItem=\"Az0-Zg-c5o\" secondAttribute=\"centerY\" id=\"JwU-o4-dvA\"/>\n                                    <constraint firstItem=\"RHj-at-082\" firstAttribute=\"trailing\" secondItem=\"qPm-BY-8GE\" secondAttribute=\"trailing\" id=\"L6v-Oy-bge\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"Az0-Zg-c5o\" secondAttribute=\"bottom\" constant=\"10\" id=\"NQf-L4-iS1\"/>\n                                    <constraint firstItem=\"DBd-jE-0Oa\" firstAttribute=\"leading\" secondItem=\"0l4-ai-Rvk\" secondAttribute=\"leading\" constant=\"35\" id=\"Nvk-Mv-3Bf\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"qPm-BY-8GE\" secondAttribute=\"trailing\" constant=\"35\" id=\"O2b-kM-igo\"/>\n                                    <constraint firstItem=\"RHj-at-082\" firstAttribute=\"width\" secondItem=\"vdD-ho-NJq\" secondAttribute=\"width\" id=\"QGW-hI-znx\"/>\n                                    <constraint firstItem=\"zhQ-Wh-naA\" firstAttribute=\"trailing\" secondItem=\"DBd-jE-0Oa\" secondAttribute=\"trailing\" id=\"TkC-zV-IBK\"/>\n                                    <constraint firstItem=\"qrS-Vp-k0u\" firstAttribute=\"top\" secondItem=\"OCO-lO-Kf7\" secondAttribute=\"bottom\" constant=\"15\" id=\"X7n-2g-DhG\"/>\n                                    <constraint firstItem=\"HFW-4A-pjo\" firstAttribute=\"leading\" secondItem=\"bTF-nA-DuP\" secondAttribute=\"leading\" id=\"Yzn-6e-aAk\"/>\n                                    <constraint firstItem=\"qrS-Vp-k0u\" firstAttribute=\"leading\" secondItem=\"0l4-ai-Rvk\" secondAttribute=\"leading\" constant=\"35\" id=\"a6g-F6-wUf\"/>\n                                    <constraint firstItem=\"HFW-4A-pjo\" firstAttribute=\"top\" secondItem=\"bTF-nA-DuP\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"csj-hL-4zk\"/>\n                                    <constraint firstItem=\"Az0-Zg-c5o\" firstAttribute=\"top\" secondItem=\"qPm-BY-8GE\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"gGX-JO-2J3\"/>\n                                    <constraint firstItem=\"DBd-jE-0Oa\" firstAttribute=\"trailing\" secondItem=\"qrS-Vp-k0u\" secondAttribute=\"trailing\" id=\"gNc-2x-81F\"/>\n                                    <constraint firstItem=\"RHj-at-082\" firstAttribute=\"centerY\" secondItem=\"Az0-Zg-c5o\" secondAttribute=\"centerY\" id=\"hIf-c2-DwU\"/>\n                                    <constraint firstItem=\"Az0-Zg-c5o\" firstAttribute=\"leading\" secondItem=\"qPm-BY-8GE\" secondAttribute=\"leading\" id=\"hbo-m1-THw\"/>\n                                    <constraint firstItem=\"TTV-op-DRY\" firstAttribute=\"width\" secondItem=\"bTF-nA-DuP\" secondAttribute=\"width\" id=\"kq0-41-q07\"/>\n                                    <constraint firstItem=\"vdD-ho-NJq\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Az0-Zg-c5o\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"lNg-F6-QFA\"/>\n                                    <constraint firstItem=\"YZl-XE-oZw\" firstAttribute=\"trailing\" secondItem=\"qrS-Vp-k0u\" secondAttribute=\"trailing\" id=\"n0l-si-3MF\"/>\n                                    <constraint firstItem=\"OCO-lO-Kf7\" firstAttribute=\"top\" secondItem=\"0l4-ai-Rvk\" secondAttribute=\"top\" constant=\"5\" id=\"nBJ-cK-yWc\"/>\n                                    <constraint firstItem=\"YZl-XE-oZw\" firstAttribute=\"leading\" secondItem=\"0l4-ai-Rvk\" secondAttribute=\"leading\" constant=\"35\" id=\"pmQ-hR-un9\"/>\n                                    <constraint firstItem=\"bTF-nA-DuP\" firstAttribute=\"centerY\" secondItem=\"qrS-Vp-k0u\" secondAttribute=\"centerY\" id=\"pmc-b3-QzN\"/>\n                                    <constraint firstItem=\"TTV-op-DRY\" firstAttribute=\"centerY\" secondItem=\"qrS-Vp-k0u\" secondAttribute=\"centerY\" id=\"py2-aJ-Hoc\"/>\n                                    <constraint firstItem=\"OCO-lO-Kf7\" firstAttribute=\"leading\" secondItem=\"0l4-ai-Rvk\" secondAttribute=\"leading\" constant=\"35\" id=\"rBT-fL-a2o\"/>\n                                    <constraint firstItem=\"TTV-op-DRY\" firstAttribute=\"leading\" secondItem=\"bTF-nA-DuP\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"vBq-06-Kak\"/>\n                                    <constraint firstItem=\"bTF-nA-DuP\" firstAttribute=\"leading\" secondItem=\"qrS-Vp-k0u\" secondAttribute=\"trailing\" constant=\"35\" id=\"veD-B6-jDi\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"150\" id=\"y4h-z9-5Bn\"/>\n                                </constraints>\n                            </customView>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"eOj-jC-ndy\" firstAttribute=\"leading\" secondItem=\"MgV-BT-LsD\" secondAttribute=\"leading\" constant=\"35\" id=\"0h7-jj-nf1\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"DQw-2B-ocF\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"2Cq-gV-DJM\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"pbJ-GR-hHs\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"4Fe-0i-FW0\"/>\n                            <constraint firstItem=\"opy-8T-bfQ\" firstAttribute=\"leading\" secondItem=\"MgV-BT-LsD\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"4i5-5U-xYf\"/>\n                            <constraint firstItem=\"KzG-ff-Fkn\" firstAttribute=\"leading\" secondItem=\"MgV-BT-LsD\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"4jT-a2-SBX\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"KzG-ff-Fkn\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"6LQ-YH-Kk8\"/>\n                            <constraint firstItem=\"yJO-Hj-7Bf\" firstAttribute=\"top\" secondItem=\"opy-8T-bfQ\" secondAttribute=\"bottom\" constant=\"20\" id=\"AWS-Hw-coS\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Mi8-2x-rJD\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"Adc-hR-fGi\"/>\n                            <constraint firstItem=\"Mi8-2x-rJD\" firstAttribute=\"top\" secondItem=\"DQw-2B-ocF\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"Aih-rS-fw0\"/>\n                            <constraint firstItem=\"9Ag-KN-R7v\" firstAttribute=\"leading\" secondItem=\"MgV-BT-LsD\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"BqT-se-lOr\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"HIU-aj-0cI\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"CQA-xM-V8s\"/>\n                            <constraint firstItem=\"9Ag-KN-R7v\" firstAttribute=\"top\" secondItem=\"Mi8-2x-rJD\" secondAttribute=\"bottom\" constant=\"20\" id=\"DZG-p0-4r5\"/>\n                            <constraint firstItem=\"eOj-jC-ndy\" firstAttribute=\"trailing\" secondItem=\"i67-zB-31s\" secondAttribute=\"trailing\" id=\"Eoq-Ca-gYc\"/>\n                            <constraint firstItem=\"0l4-ai-Rvk\" firstAttribute=\"leading\" secondItem=\"KzG-ff-Fkn\" secondAttribute=\"leading\" id=\"HUa-Bw-5sL\"/>\n                            <constraint firstItem=\"Mi8-2x-rJD\" firstAttribute=\"leading\" secondItem=\"DQw-2B-ocF\" secondAttribute=\"leading\" id=\"HiY-81-gwL\"/>\n                            <constraint firstItem=\"VM6-1W-eJP\" firstAttribute=\"top\" secondItem=\"qfE-2B-PiS\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"Hur-79-TmG\"/>\n                            <constraint firstItem=\"KzG-ff-Fkn\" firstAttribute=\"top\" secondItem=\"eOj-jC-ndy\" secondAttribute=\"bottom\" constant=\"20\" id=\"JB1-Ff-0XL\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"qfE-2B-PiS\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"Oa5-sL-45X\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"G4r-zr-CMm\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"PpF-l8-gs6\"/>\n                            <constraint firstItem=\"eOj-jC-ndy\" firstAttribute=\"top\" secondItem=\"9Ag-KN-R7v\" secondAttribute=\"bottom\" constant=\"20\" id=\"QCV-ta-RJE\"/>\n                            <constraint firstItem=\"lRQ-kL-8RA\" firstAttribute=\"firstBaseline\" secondItem=\"cFW-mP-L5G\" secondAttribute=\"firstBaseline\" id=\"Suh-7U-ZGt\"/>\n                            <constraint firstItem=\"DQw-2B-ocF\" firstAttribute=\"firstBaseline\" secondItem=\"i67-zB-31s\" secondAttribute=\"firstBaseline\" id=\"T18-Id-5Tv\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Xlx-2b-uqS\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"TBs-6d-4ip\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"VM6-1W-eJP\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"USZ-Nw-DyD\"/>\n                            <constraint firstItem=\"cFW-mP-L5G\" firstAttribute=\"top\" secondItem=\"MgV-BT-LsD\" secondAttribute=\"top\" constant=\"35\" id=\"Umk-36-jqP\"/>\n                            <constraint firstItem=\"HIU-aj-0cI\" firstAttribute=\"top\" secondItem=\"cG6-mW-iPi\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"V7U-iW-zli\"/>\n                            <constraint firstItem=\"G4r-zr-CMm\" firstAttribute=\"top\" secondItem=\"VM6-1W-eJP\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"V9u-Uy-bdW\"/>\n                            <constraint firstItem=\"HIU-aj-0cI\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"VtX-IY-5C2\"/>\n                            <constraint firstItem=\"i67-zB-31s\" firstAttribute=\"top\" secondItem=\"Xlx-2b-uqS\" secondAttribute=\"bottom\" constant=\"20\" id=\"X1L-PK-llV\"/>\n                            <constraint firstItem=\"qfE-2B-PiS\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"YwQ-QN-A4d\"/>\n                            <constraint firstItem=\"cG6-mW-iPi\" firstAttribute=\"firstBaseline\" secondItem=\"yJO-Hj-7Bf\" secondAttribute=\"firstBaseline\" id=\"aoF-4s-EFg\"/>\n                            <constraint firstItem=\"VM6-1W-eJP\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"bTU-8n-RcF\"/>\n                            <constraint firstItem=\"G4r-zr-CMm\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"dkV-nk-nwX\"/>\n                            <constraint firstItem=\"DQw-2B-ocF\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"eun-dt-QFG\"/>\n                            <constraint firstItem=\"0l4-ai-Rvk\" firstAttribute=\"top\" secondItem=\"KzG-ff-Fkn\" secondAttribute=\"bottom\" constant=\"10\" id=\"f2V-bA-R9r\"/>\n                            <constraint firstItem=\"opy-8T-bfQ\" firstAttribute=\"top\" secondItem=\"G4r-zr-CMm\" secondAttribute=\"bottom\" constant=\"20\" id=\"fyS-iE-hHU\"/>\n                            <constraint firstItem=\"Xlx-2b-uqS\" firstAttribute=\"top\" secondItem=\"HIU-aj-0cI\" secondAttribute=\"bottom\" constant=\"20\" id=\"gO9-ZD-i3P\"/>\n                            <constraint firstItem=\"lRQ-kL-8RA\" firstAttribute=\"leading\" secondItem=\"cFW-mP-L5G\" secondAttribute=\"trailing\" constant=\"20\" id=\"gYk-s2-p82\"/>\n                            <constraint firstItem=\"yJO-Hj-7Bf\" firstAttribute=\"trailing\" secondItem=\"cFW-mP-L5G\" secondAttribute=\"trailing\" id=\"hzF-F8-83a\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"jFN-9f-Z1Z\"/>\n                            <constraint firstItem=\"0l4-ai-Rvk\" firstAttribute=\"trailing\" secondItem=\"KzG-ff-Fkn\" secondAttribute=\"trailing\" id=\"kW0-Nd-SZe\"/>\n                            <constraint firstItem=\"pbJ-GR-hHs\" firstAttribute=\"firstBaseline\" secondItem=\"eOj-jC-ndy\" secondAttribute=\"firstBaseline\" id=\"kcQ-qy-6Ey\"/>\n                            <constraint firstItem=\"qfE-2B-PiS\" firstAttribute=\"top\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"l94-9A-sf8\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"lhi-dw-WFN\" secondAttribute=\"bottom\" constant=\"35\" id=\"muc-tv-HAK\"/>\n                            <constraint firstItem=\"pbJ-GR-hHs\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"oPb-9M-mG3\"/>\n                            <constraint firstItem=\"Xlx-2b-uqS\" firstAttribute=\"leading\" secondItem=\"MgV-BT-LsD\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"pN0-Lg-aUw\"/>\n                            <constraint firstItem=\"cG6-mW-iPi\" firstAttribute=\"leading\" secondItem=\"lRQ-kL-8RA\" secondAttribute=\"leading\" id=\"qch-1p-XhA\"/>\n                            <constraint firstItem=\"i67-zB-31s\" firstAttribute=\"trailing\" secondItem=\"yJO-Hj-7Bf\" secondAttribute=\"trailing\" id=\"raY-iU-Ted\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"lhi-dw-WFN\" secondAttribute=\"trailing\" constant=\"35\" id=\"tP8-7w-rxR\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"cG6-mW-iPi\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"tSP-rf-sDG\"/>\n                            <constraint firstItem=\"lhi-dw-WFN\" firstAttribute=\"top\" secondItem=\"0l4-ai-Rvk\" secondAttribute=\"bottom\" constant=\"25\" id=\"wkV-tP-CWT\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"9Ag-KN-R7v\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"xoZ-jL-Bsj\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"opy-8T-bfQ\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"z5P-xO-cch\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"cloneButton\" destination=\"vdD-ho-NJq\" id=\"ovk-Rc-8NE\"/>\n                        <outlet property=\"creationDate\" destination=\"VM6-1W-eJP\" id=\"2gs-eQ-fiQ\"/>\n                        <outlet property=\"directionASC\" destination=\"cG6-mW-iPi\" id=\"7o9-GP-Mck\"/>\n                        <outlet property=\"directionDESC\" destination=\"HIU-aj-0cI\" id=\"x94-Ms-POU\"/>\n                        <outlet property=\"firstLineAsTitle\" destination=\"pbJ-GR-hHs\" id=\"ue5-hc-jLA\"/>\n                        <outlet property=\"gitView\" destination=\"0l4-ai-Rvk\" id=\"b9J-pk-HLI\"/>\n                        <outlet property=\"gitViewHeight\" destination=\"y4h-z9-5Bn\" id=\"ZD0-kf-YuX\"/>\n                        <outlet property=\"keyStatus\" destination=\"qrS-Vp-k0u\" id=\"cww-aB-UuB\"/>\n                        <outlet property=\"logTextField\" destination=\"Az0-Zg-c5o\" id=\"MLg-K0-H5D\"/>\n                        <outlet property=\"modificationDate\" destination=\"qfE-2B-PiS\" id=\"GzG-Jq-tKk\"/>\n                        <outlet property=\"nestedFoldersContent\" destination=\"Mi8-2x-rJD\" id=\"PgD-aR-zj8\"/>\n                        <outlet property=\"origin\" destination=\"qPm-BY-8GE\" id=\"ZFj-QS-HIh\"/>\n                        <outlet property=\"passphrase\" destination=\"HFW-4A-pjo\" id=\"Uzy-YY-cV8\"/>\n                        <outlet property=\"progressIndicator\" destination=\"zhQ-Wh-naA\" id=\"36v-kw-c7J\"/>\n                        <outlet property=\"removeButton\" destination=\"RHj-at-082\" id=\"aVH-Y0-4tc\"/>\n                        <outlet property=\"showInAll\" destination=\"DQw-2B-ocF\" id=\"Sti-yU-e3J\"/>\n                        <outlet property=\"sortByGlobal\" destination=\"lRQ-kL-8RA\" id=\"7az-vA-Nhu\"/>\n                        <outlet property=\"titleButton\" destination=\"G4r-zr-CMm\" id=\"yw8-7Y-QMx\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"j8d-ec-ZDb\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-961\" y=\"-53\"/>\n        </scene>\n        <!--Git-->\n        <scene sceneID=\"1eZ-Wz-jcm\">\n            <objects>\n                <viewController title=\"Git\" id=\"2un-du-hJz\" customClass=\"PreferencesGitViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"ffx-Mm-mqT\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"468\" height=\"596\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"751\" verticalCompressionResistancePriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6jj-hR-ROP\">\n                                <rect key=\"frame\" x=\"33\" y=\"167\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Git repository:\" id=\"Qkz-nR-Fh5\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TTi-gR-3SW\">\n                                <rect key=\"frame\" x=\"176\" y=\"122\" width=\"69\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Set\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"juB-By-EsE\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"privateKey:\" target=\"2un-du-hJz\" id=\"tbQ-NJ-Hvb\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"w1K-65-6eZ\">\n                                <rect key=\"frame\" x=\"33\" y=\"83\" width=\"144\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Origin for main project:\" id=\"L20-FT-VZz\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <secureTextField identifier=\"gitPassphraseMain\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Y9p-ND-X8k\">\n                                <rect key=\"frame\" x=\"183\" y=\"104\" width=\"250\" height=\"21\"/>\n                                <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"passphrase\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"rzB-ln-uyl\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <allowedInputSourceLocales>\n                                        <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                    </allowedInputSourceLocales>\n                                </secureTextFieldCell>\n                                <connections>\n                                    <action selector=\"passphrase:\" target=\"2un-du-hJz\" id=\"mZD-r9-mGb\"/>\n                                </connections>\n                            </secureTextField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yPi-3d-3aE\">\n                                <rect key=\"frame\" x=\"99\" y=\"107\" width=\"78\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Passphrase:\" id=\"NcS-0N-6uU\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <pathControl verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"250\" allowsExpansionToolTips=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Su7-am-ZzF\">\n                                <rect key=\"frame\" x=\"35\" y=\"462\" width=\"323\" height=\"22\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"226\" id=\"uxu-12-5JL\"/>\n                                </constraints>\n                                <pathCell key=\"cell\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" id=\"JDg-Kg-pSb\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <url key=\"url\" string=\"file://localhost/Applications/\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </pathCell>\n                            </pathControl>\n                            <button horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Nxs-E7-HiW\">\n                                <rect key=\"frame\" x=\"359\" y=\"456\" width=\"81\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Change\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"7xA-9l-dja\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeGitStorage:\" target=\"2un-du-hJz\" id=\"bBG-oB-FJY\"/>\n                                </connections>\n                            </button>\n                            <button horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MJR-Nj-qpL\">\n                                <rect key=\"frame\" x=\"28\" y=\"415\" width=\"124\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Show in Finder\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"gra-E2-dYh\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"showFinder:\" target=\"2un-du-hJz\" id=\"OTg-rF-O3R\"/>\n                                </connections>\n                            </button>\n                            <button horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"j6S-7D-dXz\">\n                                <rect key=\"frame\" x=\"150\" y=\"415\" width=\"137\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Show in Terminal\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"o6a-px-wp7\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"showTerminal:\" target=\"2un-du-hJz\" id=\"WvY-Pt-zlF\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ey5-Rw-Svp\">\n                                <rect key=\"frame\" x=\"20\" y=\"363\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jg2-oT-Bcf\">\n                                <rect key=\"frame\" x=\"33\" y=\"329\" width=\"137\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Automatic Snapshots:\" id=\"P31-Ka-9HV\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xp9-26-JdA\">\n                                <rect key=\"frame\" x=\"192\" y=\"263\" width=\"48\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"48\" id=\"nqr-NP-AFB\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" title=\"1\" drawsBackground=\"YES\" id=\"kqJ-Fr-EeB\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <attributedString key=\"userComments\">\n                                        <fragment content=\"#bc-ignore!\"/>\n                                    </attributedString>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"changeSnapshotIntervalByHours:\" target=\"2un-du-hJz\" id=\"Z67-L5-UVd\"/>\n                                </connections>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"H46-qe-euU\">\n                                <rect key=\"frame\" x=\"253\" y=\"266\" width=\"47\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"hour at\" id=\"2Iq-vN-V2w\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"N8Z-se-hEF\">\n                                <rect key=\"frame\" x=\"33\" y=\"545\" width=\"83\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Repositories:\" id=\"ASf-hd-2fT\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button identifier=\"manual\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dRB-iE-HKk\">\n                                <rect key=\"frame\" x=\"33\" y=\"287\" width=\"133\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Back up manually\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" state=\"on\" inset=\"2\" id=\"Ze0-SZ-STw\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"backupMethod:\" target=\"2un-du-hJz\" id=\"dsx-Rd-S4c\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"schedule\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lK7-QU-fN2\">\n                                <rect key=\"frame\" x=\"33\" y=\"265\" width=\"144\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Commit/Push every\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"sAn-Wm-FfY\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"backupMethod:\" target=\"2un-du-hJz\" id=\"IoY-lD-QVk\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"e0E-YB-Oq8\">\n                                <rect key=\"frame\" x=\"313\" y=\"263\" width=\"47\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"47\" id=\"2nb-Ab-ZEA\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" title=\"5\" drawsBackground=\"YES\" id=\"oeL-rE-fXz\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <attributedString key=\"userComments\">\n                                        <fragment content=\"#bc-ignore!\"/>\n                                    </attributedString>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"changeSnapshotsIntervalByMinutes:\" target=\"2un-du-hJz\" id=\"LnI-G4-xun\"/>\n                                </connections>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"100\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bqG-mw-WZF\">\n                                <rect key=\"frame\" x=\"373\" y=\"266\" width=\"53\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"minutes\" id=\"Bri-cl-z86\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7WC-IR-nhp\">\n                                <rect key=\"frame\" x=\"33\" y=\"225\" width=\"63\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Pull every\" id=\"tZ6-GT-LxK\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mzn-Yp-WXt\">\n                                <rect key=\"frame\" x=\"109\" y=\"222\" width=\"72\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"72\" id=\"IC2-2A-oJu\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" title=\"10\" drawsBackground=\"YES\" id=\"ZDl-8b-mam\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"pullInterval:\" target=\"2un-du-hJz\" id=\"umv-YF-Ws0\"/>\n                                </connections>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bar-ZF-HRI\">\n                                <rect key=\"frame\" x=\"20\" y=\"201\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <button tag=\"1\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sW2-Jy-o1S\">\n                                <rect key=\"frame\" x=\"33\" y=\"503\" width=\"315\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Separate .git in project dir (except iCloud Drive)\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"dop-ho-N26\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"separateRepo:\" target=\"2un-du-hJz\" id=\"J2y-eK-kWD\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uox-cj-0Ej\">\n                                <rect key=\"frame\" x=\"33\" y=\"385\" width=\"236\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Ask commit message on note save\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"VJs-0B-jGe\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"askCommitMessage:\" target=\"2un-du-hJz\" id=\"Irc-TQ-1Sb\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"F32-gY-oeO\">\n                                <rect key=\"frame\" x=\"243\" y=\"122\" width=\"69\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Reset\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"HPa-9J-5dS\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"resetKey:\" target=\"2un-du-hJz\" id=\"xfM-lq-AEl\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mdH-mJ-n7l\">\n                                <rect key=\"frame\" x=\"133\" y=\"131\" width=\"44\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" placeholderString=\"no key\" id=\"doI-Mu-yZG\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FjG-Kz-Df1\">\n                                <rect key=\"frame\" x=\"357\" y=\"28\" width=\"83\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Remove\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"cQ8-sF-a4g\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <color key=\"bezelColor\" name=\"systemRedColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                <connections>\n                                    <action selector=\"removeRepository:\" target=\"2un-du-hJz\" id=\"cec-Nn-5zY\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VOe-4f-fe5\">\n                                <rect key=\"frame\" x=\"35\" y=\"37\" width=\"69\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" sendsActionOnEndEditing=\"YES\" alignment=\"center\" placeholderString=\"empty log\" drawsBackground=\"YES\" id=\"a1w-ll-Djh\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <progressIndicator maxValue=\"100\" indeterminate=\"YES\" controlSize=\"small\" style=\"spinning\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qiU-dD-B9z\">\n                                <rect key=\"frame\" x=\"112\" y=\"37\" width=\"30\" height=\"16\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"30\" id=\"awb-KD-AQU\"/>\n                                </constraints>\n                            </progressIndicator>\n                            <textField identifier=\"gitOriginMain\" focusRingType=\"none\" verticalHuggingPriority=\"749\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jo4-zQ-htF\">\n                                <rect key=\"frame\" x=\"183\" y=\"80\" width=\"250\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"250\" id=\"GIN-TI-XsX\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"git@github.com:username/repo.git\" drawsBackground=\"YES\" id=\"4Sj-5v-Clo\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"origin:\" target=\"2un-du-hJz\" id=\"QpP-rf-dgh\"/>\n                                </connections>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZU7-AI-4gb\">\n                                <rect key=\"frame\" x=\"194\" y=\"225\" width=\"56\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"seconds\" id=\"Gbf-V7-5Ra\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L90-ti-Wjx\">\n                                <rect key=\"frame\" x=\"276\" y=\"28\" width=\"83\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Clone\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Ri7-Yr-qyB\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"clonePull:\" target=\"2un-du-hJz\" id=\"uaM-ft-w4H\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"MJR-Nj-qpL\" firstAttribute=\"top\" secondItem=\"Su7-am-ZzF\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"0Fl-27-02x\"/>\n                            <constraint firstItem=\"Su7-am-ZzF\" firstAttribute=\"top\" secondItem=\"sW2-Jy-o1S\" secondAttribute=\"bottom\" constant=\"20\" id=\"0Gi-nX-ttR\"/>\n                            <constraint firstItem=\"6jj-hR-ROP\" firstAttribute=\"top\" secondItem=\"bar-ZF-HRI\" secondAttribute=\"bottom\" constant=\"20\" id=\"0UU-I8-eNo\"/>\n                            <constraint firstItem=\"uox-cj-0Ej\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"1BX-FO-0pS\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"ey5-Rw-Svp\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"1LF-bc-JMz\"/>\n                            <constraint firstItem=\"L90-ti-Wjx\" firstAttribute=\"top\" secondItem=\"Jo4-zQ-htF\" secondAttribute=\"bottom\" constant=\"25\" id=\"2Kk-OQ-hKr\"/>\n                            <constraint firstItem=\"mzn-Yp-WXt\" firstAttribute=\"leading\" secondItem=\"7WC-IR-nhp\" secondAttribute=\"trailing\" constant=\"15\" id=\"2u8-AQ-4BY\"/>\n                            <constraint firstItem=\"Nxs-E7-HiW\" firstAttribute=\"leading\" secondItem=\"Su7-am-ZzF\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"5MX-wL-e2i\"/>\n                            <constraint firstItem=\"sW2-Jy-o1S\" firstAttribute=\"top\" secondItem=\"N8Z-se-hEF\" secondAttribute=\"bottom\" constant=\"25\" id=\"5yS-G6-HHy\"/>\n                            <constraint firstItem=\"mdH-mJ-n7l\" firstAttribute=\"trailing\" secondItem=\"yPi-3d-3aE\" secondAttribute=\"trailing\" id=\"9D5-pJ-0fX\"/>\n                            <constraint firstItem=\"H46-qe-euU\" firstAttribute=\"centerY\" secondItem=\"Xp9-26-JdA\" secondAttribute=\"centerY\" id=\"9TS-QY-GEB\"/>\n                            <constraint firstItem=\"Y9p-ND-X8k\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"yPi-3d-3aE\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"Aio-xU-ouz\"/>\n                            <constraint firstItem=\"H46-qe-euU\" firstAttribute=\"leading\" secondItem=\"Xp9-26-JdA\" secondAttribute=\"trailing\" constant=\"15\" id=\"Bw1-d1-8yq\"/>\n                            <constraint firstItem=\"7WC-IR-nhp\" firstAttribute=\"top\" secondItem=\"lK7-QU-fN2\" secondAttribute=\"bottom\" constant=\"25\" id=\"EE3-Mo-Qzr\"/>\n                            <constraint firstItem=\"bar-ZF-HRI\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"EGu-cP-jhg\"/>\n                            <constraint firstItem=\"ey5-Rw-Svp\" firstAttribute=\"top\" secondItem=\"uox-cj-0Ej\" secondAttribute=\"bottom\" constant=\"20\" id=\"EU5-uc-jbA\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"jg2-oT-Bcf\" secondAttribute=\"trailing\" constant=\"35\" id=\"G2P-ve-Bcm\"/>\n                            <constraint firstItem=\"ZU7-AI-4gb\" firstAttribute=\"centerY\" secondItem=\"7WC-IR-nhp\" secondAttribute=\"centerY\" id=\"HMa-yr-eRy\"/>\n                            <constraint firstItem=\"j6S-7D-dXz\" firstAttribute=\"leading\" secondItem=\"MJR-Nj-qpL\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"HRI-Tp-2PN\"/>\n                            <constraint firstItem=\"Xp9-26-JdA\" firstAttribute=\"centerY\" secondItem=\"lK7-QU-fN2\" secondAttribute=\"centerY\" id=\"HTU-NW-1z3\"/>\n                            <constraint firstItem=\"e0E-YB-Oq8\" firstAttribute=\"leading\" secondItem=\"H46-qe-euU\" secondAttribute=\"trailing\" constant=\"15\" id=\"Hyj-9r-eIa\"/>\n                            <constraint firstItem=\"lK7-QU-fN2\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"I2q-S0-61f\"/>\n                            <constraint firstItem=\"yPi-3d-3aE\" firstAttribute=\"top\" secondItem=\"mdH-mJ-n7l\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"JaI-Tt-KQc\"/>\n                            <constraint firstItem=\"bar-ZF-HRI\" firstAttribute=\"top\" secondItem=\"7WC-IR-nhp\" secondAttribute=\"bottom\" constant=\"21\" id=\"Kei-52-OB1\"/>\n                            <constraint firstItem=\"lK7-QU-fN2\" firstAttribute=\"leading\" secondItem=\"dRB-iE-HKk\" secondAttribute=\"leading\" id=\"L7L-JP-NZq\"/>\n                            <constraint firstItem=\"6jj-hR-ROP\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"Mmm-Dt-s5U\"/>\n                            <constraint firstItem=\"FjG-Kz-Df1\" firstAttribute=\"centerY\" secondItem=\"L90-ti-Wjx\" secondAttribute=\"centerY\" id=\"NHP-vE-t7p\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"bar-ZF-HRI\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"NYp-3d-7Au\"/>\n                            <constraint firstItem=\"mdH-mJ-n7l\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"ORa-Mr-iFo\"/>\n                            <constraint firstItem=\"bqG-mw-WZF\" firstAttribute=\"leading\" secondItem=\"e0E-YB-Oq8\" secondAttribute=\"trailing\" constant=\"15\" id=\"PEq-E8-ryQ\"/>\n                            <constraint firstItem=\"e0E-YB-Oq8\" firstAttribute=\"centerY\" secondItem=\"H46-qe-euU\" secondAttribute=\"centerY\" id=\"PI0-Xz-JFx\"/>\n                            <constraint firstItem=\"mdH-mJ-n7l\" firstAttribute=\"top\" secondItem=\"6jj-hR-ROP\" secondAttribute=\"bottom\" constant=\"20\" id=\"PNi-wv-KXA\"/>\n                            <constraint firstItem=\"FjG-Kz-Df1\" firstAttribute=\"width\" secondItem=\"L90-ti-Wjx\" secondAttribute=\"width\" id=\"QNT-dG-m4t\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"6jj-hR-ROP\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"QhZ-5J-Kb5\"/>\n                            <constraint firstItem=\"mzn-Yp-WXt\" firstAttribute=\"centerY\" secondItem=\"7WC-IR-nhp\" secondAttribute=\"centerY\" id=\"RXT-VC-tdk\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"j6S-7D-dXz\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"SQr-vH-Jip\"/>\n                            <constraint firstItem=\"qiU-dD-B9z\" firstAttribute=\"leading\" secondItem=\"VOe-4f-fe5\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"SSI-MS-pql\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"sW2-Jy-o1S\" secondAttribute=\"trailing\" constant=\"35\" id=\"T55-lp-p9k\"/>\n                            <constraint firstItem=\"MJR-Nj-qpL\" firstAttribute=\"leading\" secondItem=\"Su7-am-ZzF\" secondAttribute=\"leading\" id=\"Tdg-VP-EgD\"/>\n                            <constraint firstItem=\"dRB-iE-HKk\" firstAttribute=\"leading\" secondItem=\"jg2-oT-Bcf\" secondAttribute=\"leading\" id=\"TuR-pT-rpL\"/>\n                            <constraint firstItem=\"j6S-7D-dXz\" firstAttribute=\"centerY\" secondItem=\"MJR-Nj-qpL\" secondAttribute=\"centerY\" id=\"UGF-dX-5dt\"/>\n                            <constraint firstItem=\"FjG-Kz-Df1\" firstAttribute=\"leading\" secondItem=\"L90-ti-Wjx\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"UYV-VM-Tdr\"/>\n                            <constraint firstItem=\"ZU7-AI-4gb\" firstAttribute=\"leading\" secondItem=\"mzn-Yp-WXt\" secondAttribute=\"trailing\" constant=\"15\" id=\"UgK-Ep-N20\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"N8Z-se-hEF\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"W8I-Yc-8C7\"/>\n                            <constraint firstItem=\"FjG-Kz-Df1\" firstAttribute=\"centerY\" secondItem=\"VOe-4f-fe5\" secondAttribute=\"centerY\" id=\"WFY-Bq-R4L\"/>\n                            <constraint firstItem=\"w1K-65-6eZ\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"WMz-P9-shp\"/>\n                            <constraint firstItem=\"L90-ti-Wjx\" firstAttribute=\"centerY\" secondItem=\"qiU-dD-B9z\" secondAttribute=\"centerY\" id=\"Xjk-RY-Cir\"/>\n                            <constraint firstItem=\"jg2-oT-Bcf\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"XpQ-j5-PVc\"/>\n                            <constraint firstItem=\"ey5-Rw-Svp\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"YEu-2u-w6w\"/>\n                            <constraint firstItem=\"lK7-QU-fN2\" firstAttribute=\"top\" secondItem=\"dRB-iE-HKk\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"Yte-vB-KYX\"/>\n                            <constraint firstItem=\"jg2-oT-Bcf\" firstAttribute=\"top\" secondItem=\"ey5-Rw-Svp\" secondAttribute=\"bottom\" constant=\"20\" id=\"bQJ-Fb-Mnz\"/>\n                            <constraint firstItem=\"N8Z-se-hEF\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"cRz-qV-q6g\"/>\n                            <constraint firstItem=\"yPi-3d-3aE\" firstAttribute=\"trailing\" secondItem=\"mdH-mJ-n7l\" secondAttribute=\"trailing\" id=\"dHV-FQ-60E\"/>\n                            <constraint firstItem=\"Jo4-zQ-htF\" firstAttribute=\"trailing\" secondItem=\"Y9p-ND-X8k\" secondAttribute=\"trailing\" id=\"eTJ-I8-LpA\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"ZU7-AI-4gb\" secondAttribute=\"trailing\" constant=\"35\" id=\"f18-wy-4dD\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"uox-cj-0Ej\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"fHA-uo-1Nr\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"L90-ti-Wjx\" secondAttribute=\"bottom\" constant=\"35\" id=\"fbg-nq-27F\"/>\n                            <constraint firstItem=\"w1K-65-6eZ\" firstAttribute=\"top\" secondItem=\"yPi-3d-3aE\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"hG2-YE-o83\"/>\n                            <constraint firstItem=\"TTi-gR-3SW\" firstAttribute=\"centerY\" secondItem=\"mdH-mJ-n7l\" secondAttribute=\"centerY\" id=\"hcU-gh-Qq2\"/>\n                            <constraint firstItem=\"Jo4-zQ-htF\" firstAttribute=\"leading\" secondItem=\"TTi-gR-3SW\" secondAttribute=\"leading\" id=\"i1H-C0-yna\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Nxs-E7-HiW\" secondAttribute=\"trailing\" constant=\"35\" id=\"jhg-wq-NxI\"/>\n                            <constraint firstItem=\"uox-cj-0Ej\" firstAttribute=\"top\" secondItem=\"MJR-Nj-qpL\" secondAttribute=\"bottom\" constant=\"20\" id=\"jhp-lT-Ll8\"/>\n                            <constraint firstItem=\"Nxs-E7-HiW\" firstAttribute=\"centerY\" secondItem=\"Su7-am-ZzF\" secondAttribute=\"centerY\" id=\"k1v-S1-2c0\"/>\n                            <constraint firstItem=\"F32-gY-oeO\" firstAttribute=\"centerY\" secondItem=\"TTi-gR-3SW\" secondAttribute=\"centerY\" id=\"kzz-Ye-uak\"/>\n                            <constraint firstItem=\"VOe-4f-fe5\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"lCV-vv-tN1\"/>\n                            <constraint firstItem=\"FjG-Kz-Df1\" firstAttribute=\"trailing\" secondItem=\"Jo4-zQ-htF\" secondAttribute=\"trailing\" id=\"mJa-dy-UPa\"/>\n                            <constraint firstItem=\"F32-gY-oeO\" firstAttribute=\"width\" secondItem=\"TTi-gR-3SW\" secondAttribute=\"width\" id=\"oRB-xB-7Yy\"/>\n                            <constraint firstItem=\"Jo4-zQ-htF\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"w1K-65-6eZ\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"qGF-I4-DWD\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Jo4-zQ-htF\" secondAttribute=\"trailing\" constant=\"35\" id=\"qGo-ku-e2S\"/>\n                            <constraint firstItem=\"Xp9-26-JdA\" firstAttribute=\"leading\" secondItem=\"lK7-QU-fN2\" secondAttribute=\"trailing\" constant=\"15\" id=\"smq-zT-nAA\"/>\n                            <constraint firstItem=\"N8Z-se-hEF\" firstAttribute=\"top\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"top\" constant=\"35\" id=\"u25-2C-ZNc\"/>\n                            <constraint firstItem=\"dRB-iE-HKk\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"usL-pA-PKw\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"dRB-iE-HKk\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"uvT-ZY-JAo\"/>\n                            <constraint firstItem=\"F32-gY-oeO\" firstAttribute=\"leading\" secondItem=\"TTi-gR-3SW\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"v5B-if-XQ6\"/>\n                            <constraint firstItem=\"Jo4-zQ-htF\" firstAttribute=\"leading\" secondItem=\"Y9p-ND-X8k\" secondAttribute=\"leading\" id=\"vYt-dN-vTa\"/>\n                            <constraint firstItem=\"Jo4-zQ-htF\" firstAttribute=\"top\" secondItem=\"Y9p-ND-X8k\" secondAttribute=\"bottom\" constant=\"3\" id=\"wtq-Fo-Lfy\"/>\n                            <constraint firstItem=\"Su7-am-ZzF\" firstAttribute=\"leading\" secondItem=\"N8Z-se-hEF\" secondAttribute=\"leading\" id=\"wwm-dc-8iK\"/>\n                            <constraint firstItem=\"w1K-65-6eZ\" firstAttribute=\"trailing\" secondItem=\"yPi-3d-3aE\" secondAttribute=\"trailing\" id=\"xRw-fG-jBD\"/>\n                            <constraint firstItem=\"Y9p-ND-X8k\" firstAttribute=\"centerY\" secondItem=\"yPi-3d-3aE\" secondAttribute=\"centerY\" id=\"y1e-uO-CjJ\"/>\n                            <constraint firstItem=\"7WC-IR-nhp\" firstAttribute=\"leading\" secondItem=\"lK7-QU-fN2\" secondAttribute=\"leading\" id=\"yBe-qz-Vc5\"/>\n                            <constraint firstItem=\"bqG-mw-WZF\" firstAttribute=\"centerY\" secondItem=\"e0E-YB-Oq8\" secondAttribute=\"centerY\" id=\"yCH-I8-Gso\"/>\n                            <constraint firstItem=\"yPi-3d-3aE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"yjV-ev-6pJ\"/>\n                            <constraint firstItem=\"TTi-gR-3SW\" firstAttribute=\"leading\" secondItem=\"mdH-mJ-n7l\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"yno-rA-6xF\"/>\n                            <constraint firstItem=\"sW2-Jy-o1S\" firstAttribute=\"leading\" secondItem=\"ffx-Mm-mqT\" secondAttribute=\"leading\" constant=\"35\" id=\"zAc-Kd-IlU\"/>\n                            <constraint firstItem=\"dRB-iE-HKk\" firstAttribute=\"top\" secondItem=\"jg2-oT-Bcf\" secondAttribute=\"bottom\" constant=\"25\" id=\"zIh-mO-QLe\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"askCommitMessage\" destination=\"uox-cj-0Ej\" id=\"Mrv-uw-66m\"/>\n                        <outlet property=\"backupBySchedule\" destination=\"lK7-QU-fN2\" id=\"n8L-r0-7eA\"/>\n                        <outlet property=\"backupManually\" destination=\"dRB-iE-HKk\" id=\"bqM-xd-1uX\"/>\n                        <outlet property=\"cloneButton\" destination=\"L90-ti-Wjx\" id=\"RYn-d0-itv\"/>\n                        <outlet property=\"keyStatus\" destination=\"mdH-mJ-n7l\" id=\"l0Q-Cn-lH0\"/>\n                        <outlet property=\"logTextField\" destination=\"VOe-4f-fe5\" id=\"gQF-DA-9Yh\"/>\n                        <outlet property=\"minutes\" destination=\"e0E-YB-Oq8\" id=\"3bO-Wk-beG\"/>\n                        <outlet property=\"origin\" destination=\"Jo4-zQ-htF\" id=\"aBu-xK-yMc\"/>\n                        <outlet property=\"passphrase\" destination=\"Y9p-ND-X8k\" id=\"dgU-CQ-6aH\"/>\n                        <outlet property=\"progressIndicator\" destination=\"qiU-dD-B9z\" id=\"2en-pJ-daI\"/>\n                        <outlet property=\"pullInterval\" destination=\"mzn-Yp-WXt\" id=\"13K-4H-Vae\"/>\n                        <outlet property=\"removeButton\" destination=\"FjG-Kz-Df1\" id=\"9zU-Up-2Ai\"/>\n                        <outlet property=\"repositoriesPath\" destination=\"Su7-am-ZzF\" id=\"4AZ-hI-VCx\"/>\n                        <outlet property=\"separateDotGit\" destination=\"sW2-Jy-o1S\" id=\"pdc-Qj-1Ig\"/>\n                        <outlet property=\"snapshotsTextField\" destination=\"Xp9-26-JdA\" id=\"MSe-y8-wYR\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"sHj-M9-56t\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3276\" y=\"744\"/>\n        </scene>\n        <!--Editor-->\n        <scene sceneID=\"cwg-C1-p0s\">\n            <objects>\n                <viewController title=\"Editor\" id=\"ssC-ed-19K\" customClass=\"PreferencesEditorViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"GY1-6c-5uL\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"468\" height=\"555\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"B1k-4N-l26\">\n                                <rect key=\"frame\" x=\"134\" y=\"514\" width=\"4\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" id=\"vNg-wB-rdP\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2ZF-VY-6Ij\">\n                                <rect key=\"frame\" x=\"20\" y=\"238\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UiV-vt-WHK\">\n                                <rect key=\"frame\" x=\"33\" y=\"504\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Code Theme:\" id=\"6F0-Cb-DVX\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <popUpButton verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xZA-pB-1nm\">\n                                <rect key=\"frame\" x=\"144\" y=\"498\" width=\"99\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\"atom-one\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"ME1-My-h4q\" id=\"ai1-t2-fc1\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"OOr-cO-sjv\">\n                                        <items>\n                                            <menuItem title=\"github\" localization=\"NO\" mirroring=\"NO\" id=\"v1K-9W-2aB\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"solarized\" localization=\"NO\" mirroring=\"NO\" id=\"SpX-N8-9td\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"atom-one\" state=\"on\" localization=\"NO\" mirroring=\"NO\" id=\"ME1-My-h4q\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"markdownCodeThemeAction:\" target=\"ssC-ed-19K\" id=\"ZEP-34-8PC\"/>\n                                </connections>\n                            </popUpButton>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rmv-ik-PYa\">\n                                <rect key=\"frame\" x=\"33\" y=\"476\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Code Font:\" id=\"63m-us-3j9\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"5\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"B07-UG-KXb\">\n                                <rect key=\"frame\" x=\"147\" y=\"473\" width=\"237\" height=\"21\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" alignment=\"center\" title=\"Code Font\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"Shc-VO-eTc\" customClass=\"VerticallyAlignedTextFieldCell\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BAc-kR-eMo\">\n                                <rect key=\"frame\" x=\"20\" y=\"391\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cj1-ab-Sv6\">\n                                <rect key=\"frame\" x=\"33\" y=\"203\" width=\"400\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Focus in editor when selecting note\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"r2R-xe-eCA\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"inEditorFocus:\" target=\"ssC-ed-19K\" id=\"c82-YY-k8f\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gk5-il-WSG\">\n                                <rect key=\"frame\" x=\"33\" y=\"181\" width=\"400\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Automatically insert closing braces and close quotes\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"ypO-g0-1Xo\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"autocloseBrackets:\" target=\"ssC-ed-19K\" id=\"uQX-DB-DoZ\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cMm-a9-mcN\">\n                                <rect key=\"frame\" x=\"33\" y=\"333\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Line Spacing:\" id=\"iUm-Zm-zeg\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <slider verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dmd-5j-kY7\">\n                                <rect key=\"frame\" x=\"145\" y=\"277\" width=\"290\" height=\"28\"/>\n                                <sliderCell key=\"cell\" state=\"on\" alignment=\"left\" minValue=\"400\" maxValue=\"1000\" doubleValue=\"1000\" tickMarkPosition=\"above\" numberOfTickMarks=\"10\" sliderType=\"linear\" id=\"csk-Ct-cff\"/>\n                                <connections>\n                                    <action selector=\"imagesWidth:\" target=\"ssC-ed-19K\" id=\"SCj-iP-0p1\"/>\n                                </connections>\n                            </slider>\n                            <slider verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gl0-rI-S66\">\n                                <rect key=\"frame\" x=\"145\" y=\"253\" width=\"290\" height=\"28\"/>\n                                <sliderCell key=\"cell\" state=\"on\" alignment=\"left\" minValue=\"10\" maxValue=\"200\" doubleValue=\"50\" tickMarkPosition=\"above\" numberOfTickMarks=\"10\" sliderType=\"linear\" id=\"UC2-tH-UtC\"/>\n                                <connections>\n                                    <action selector=\"marginSize:\" target=\"ssC-ed-19K\" id=\"Hhx-hm-H5O\"/>\n                                </connections>\n                            </slider>\n                            <slider verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DQU-Se-i0R\">\n                                <rect key=\"frame\" x=\"145\" y=\"301\" width=\"290\" height=\"28\"/>\n                                <sliderCell key=\"cell\" state=\"on\" alignment=\"left\" minValue=\"100\" maxValue=\"1000\" doubleValue=\"1000\" tickMarkPosition=\"above\" numberOfTickMarks=\"10\" sliderType=\"linear\" id=\"w1e-Tq-0qv\"/>\n                                <connections>\n                                    <action selector=\"lineWidth:\" target=\"ssC-ed-19K\" id=\"sMF-LC-b8U\"/>\n                                </connections>\n                            </slider>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Vrr-sG-fOD\">\n                                <rect key=\"frame\" x=\"33\" y=\"285\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Images Width:\" id=\"ltm-qj-nke\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3el-ze-TIn\">\n                                <rect key=\"frame\" x=\"33\" y=\"261\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Margin Size:\" id=\"r69-B6-vT3\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bEN-ep-bl6\">\n                                <rect key=\"frame\" x=\"33\" y=\"309\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Line Width:\" id=\"Izt-6v-pKO\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fYl-Tw-kcO\">\n                                <rect key=\"frame\" x=\"385\" y=\"467\" width=\"55\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Set\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"7od-TM-cUB\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"setCodeFont:\" target=\"ssC-ed-19K\" id=\"Ygn-jF-2Oi\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GnH-BV-JGa\">\n                                <rect key=\"frame\" x=\"33\" y=\"357\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Indent Using:\" id=\"P4M-cL-lfo\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"XOm-C4-sCs\">\n                                <rect key=\"frame\" x=\"33\" y=\"159\" width=\"400\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Scan inline tags\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"g5W-YF-jAC\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"inlineTags:\" target=\"ssC-ed-19K\" id=\"fuo-kZ-rZ9\"/>\n                                </connections>\n                            </button>\n                            <popUpButton verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"RxO-oS-Sa7\" userLabel=\"Indent using\">\n                                <rect key=\"frame\" x=\"144\" y=\"351\" width=\"96\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\"Tab\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"Ncv-c4-Dmg\" id=\"r8k-ev-75i\" userLabel=\"Indent using\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"OLS-GV-8TI\">\n                                        <items>\n                                            <menuItem title=\"Tab\" state=\"on\" id=\"Ncv-c4-Dmg\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"2 Spaces\" tag=\"1\" id=\"1HB-X5-pmA\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                            <menuItem title=\"4 Spaces\" tag=\"2\" id=\"mK0-16-Mxo\">\n                                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            </menuItem>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"indentUsing:\" target=\"ssC-ed-19K\" id=\"aC2-Ma-Ne7\"/>\n                                </connections>\n                            </popUpButton>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mLR-t7-nz0\">\n                                <rect key=\"frame\" x=\"33\" y=\"137\" width=\"400\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Clickable links\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"N8h-ep-HFG\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"highlightLinks:\" target=\"ssC-ed-19K\" id=\"jLx-rM-jlz\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"QvM-a9-vnf\">\n                                <rect key=\"frame\" x=\"33\" y=\"445\" width=\"91\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Note Font:\" id=\"bJC-he-nDV\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"f8R-08-jeb\">\n                                <rect key=\"frame\" x=\"385\" y=\"436\" width=\"55\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Set\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Ehk-CU-fbX\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"setNoteFont:\" target=\"ssC-ed-19K\" id=\"pW9-zD-3Cd\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"100\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7Az-gx-yGL\">\n                                <rect key=\"frame\" x=\"147\" y=\"442\" width=\"237\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"100\" id=\"vvG-Pm-uN1\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" alignment=\"center\" title=\"Font preview\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"eKQ-lM-8Z4\" customClass=\"VerticallyAlignedTextFieldCell\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L2J-w9-lFQ\">\n                                <rect key=\"frame\" x=\"140\" y=\"407\" width=\"69\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Reset\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"rbM-i0-QFp\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"resetFont:\" target=\"ssC-ed-19K\" id=\"NQf-w0-5nf\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kcg-vn-Dwj\">\n                                <rect key=\"frame\" x=\"33\" y=\"115\" width=\"400\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Code block live highlighting\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"xX0-9b-KDq\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"codeBlockHighlight:\" target=\"ssC-ed-19K\" id=\"Ygz-lW-YAb\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dof-lA-EwF\">\n                                <rect key=\"frame\" x=\"20\" y=\"93\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <button identifier=\"italicAsterisk\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iOb-Wa-2km\">\n                                <rect key=\"frame\" x=\"145\" y=\"58\" width=\"33\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"*\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" state=\"on\" inset=\"2\" id=\"VV2-X2-moA\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeItalic:\" target=\"ssC-ed-19K\" id=\"oel-2a-Lf0\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"italicUnderscore\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9qv-bd-BU8\">\n                                <rect key=\"frame\" x=\"190\" y=\"58\" width=\"34\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"_\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"e7y-7Z-36y\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeItalic:\" target=\"ssC-ed-19K\" id=\"1ss-jd-8eY\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dKW-T5-3Vc\">\n                                <rect key=\"frame\" x=\"87\" y=\"59\" width=\"37\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Italic:\" id=\"aLg-MQ-amx\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cO6-GH-v1T\">\n                                <rect key=\"frame\" x=\"89\" y=\"35\" width=\"35\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Bold:\" id=\"xeP-Zg-vmO\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button identifier=\"boldAsterisk\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ySi-3O-8zp\">\n                                <rect key=\"frame\" x=\"145\" y=\"34\" width=\"39\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"**\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" identifier=\"boldAsterisk\" inset=\"2\" id=\"jRr-Ih-RYc\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeBold:\" target=\"ssC-ed-19K\" id=\"blk-X5-ZLx\"/>\n                                </connections>\n                            </button>\n                            <button identifier=\"boldUnderscore\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"y1p-hH-bBl\">\n                                <rect key=\"frame\" x=\"190\" y=\"34\" width=\"41\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"__\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" state=\"on\" inset=\"2\" id=\"yMX-hz-B8Y\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"changeBold:\" target=\"ssC-ed-19K\" id=\"4kx-4z-D67\"/>\n                                </connections>\n                            </button>\n                            <slider verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T2k-ya-69N\">\n                                <rect key=\"frame\" x=\"145\" y=\"325\" width=\"290\" height=\"28\"/>\n                                <sliderCell key=\"cell\" state=\"on\" alignment=\"left\" minValue=\"1\" maxValue=\"10\" doubleValue=\"4\" tickMarkPosition=\"above\" numberOfTickMarks=\"10\" sliderType=\"linear\" id=\"fZA-cO-0ac\"/>\n                                <connections>\n                                    <action selector=\"lineSpacing:\" target=\"ssC-ed-19K\" id=\"Sqq-6a-XQe\"/>\n                                </connections>\n                            </slider>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"QvM-a9-vnf\" firstAttribute=\"trailing\" secondItem=\"rmv-ik-PYa\" secondAttribute=\"trailing\" id=\"03S-qV-blX\"/>\n                            <constraint firstItem=\"y1p-hH-bBl\" firstAttribute=\"leading\" secondItem=\"9qv-bd-BU8\" secondAttribute=\"leading\" id=\"0Cq-Bf-GrH\"/>\n                            <constraint firstItem=\"L2J-w9-lFQ\" firstAttribute=\"leading\" secondItem=\"7Az-gx-yGL\" secondAttribute=\"leading\" id=\"1Dq-H8-Q22\"/>\n                            <constraint firstItem=\"Vrr-sG-fOD\" firstAttribute=\"trailing\" secondItem=\"3el-ze-TIn\" secondAttribute=\"trailing\" id=\"1hh-K9-SSl\"/>\n                            <constraint firstItem=\"T2k-ya-69N\" firstAttribute=\"leading\" secondItem=\"7Az-gx-yGL\" secondAttribute=\"leading\" id=\"2oZ-sG-5F0\"/>\n                            <constraint firstItem=\"XOm-C4-sCs\" firstAttribute=\"trailing\" secondItem=\"gk5-il-WSG\" secondAttribute=\"trailing\" id=\"2tZ-iJ-9IK\"/>\n                            <constraint firstItem=\"3el-ze-TIn\" firstAttribute=\"top\" secondItem=\"Vrr-sG-fOD\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"39i-sb-qOk\"/>\n                            <constraint firstItem=\"GnH-BV-JGa\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"4kf-96-700\"/>\n                            <constraint firstItem=\"DQU-Se-i0R\" firstAttribute=\"leading\" secondItem=\"T2k-ya-69N\" secondAttribute=\"leading\" id=\"5Io-2d-DT7\"/>\n                            <constraint firstItem=\"Kcg-vn-Dwj\" firstAttribute=\"leading\" secondItem=\"mLR-t7-nz0\" secondAttribute=\"leading\" id=\"7ES-Fk-IxN\"/>\n                            <constraint firstItem=\"dKW-T5-3Vc\" firstAttribute=\"trailing\" secondItem=\"3el-ze-TIn\" secondAttribute=\"trailing\" id=\"7Ld-MX-BiG\"/>\n                            <constraint firstItem=\"Vrr-sG-fOD\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"7hq-sQ-Rka\"/>\n                            <constraint firstItem=\"cMm-a9-mcN\" firstAttribute=\"trailing\" secondItem=\"bEN-ep-bl6\" secondAttribute=\"trailing\" id=\"8pv-Qz-KPk\"/>\n                            <constraint firstItem=\"cMm-a9-mcN\" firstAttribute=\"trailing\" secondItem=\"GnH-BV-JGa\" secondAttribute=\"trailing\" id=\"981-PH-aBD\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"y1p-hH-bBl\" secondAttribute=\"trailing\" constant=\"35\" id=\"A0L-mE-zcW\"/>\n                            <constraint firstItem=\"B07-UG-KXb\" firstAttribute=\"leading\" secondItem=\"rmv-ik-PYa\" secondAttribute=\"trailing\" constant=\"25\" id=\"BHd-tb-ZsE\"/>\n                            <constraint firstItem=\"cj1-ab-Sv6\" firstAttribute=\"top\" secondItem=\"2ZF-VY-6Ij\" secondAttribute=\"bottom\" constant=\"20\" id=\"CJe-3R-a6A\"/>\n                            <constraint firstItem=\"7Az-gx-yGL\" firstAttribute=\"trailing\" secondItem=\"B07-UG-KXb\" secondAttribute=\"trailing\" id=\"CW3-MY-m5U\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"2ZF-VY-6Ij\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"D8I-T5-4p8\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"xZA-pB-1nm\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"DSh-tg-WcT\"/>\n                            <constraint firstItem=\"dmd-5j-kY7\" firstAttribute=\"trailing\" secondItem=\"T2k-ya-69N\" secondAttribute=\"trailing\" id=\"DW1-MQ-Doe\"/>\n                            <constraint firstItem=\"mLR-t7-nz0\" firstAttribute=\"top\" secondItem=\"XOm-C4-sCs\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"DgG-Yj-rRQ\"/>\n                            <constraint firstItem=\"fYl-Tw-kcO\" firstAttribute=\"centerY\" secondItem=\"B07-UG-KXb\" secondAttribute=\"centerY\" id=\"EvX-JZ-gTl\"/>\n                            <constraint firstItem=\"RxO-oS-Sa7\" firstAttribute=\"centerY\" secondItem=\"GnH-BV-JGa\" secondAttribute=\"centerY\" id=\"EyI-GW-r8z\"/>\n                            <constraint firstItem=\"cMm-a9-mcN\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"F9d-ff-enU\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"cj1-ab-Sv6\" secondAttribute=\"trailing\" constant=\"35\" id=\"FVJ-UC-Qw0\"/>\n                            <constraint firstItem=\"gk5-il-WSG\" firstAttribute=\"leading\" secondItem=\"cj1-ab-Sv6\" secondAttribute=\"leading\" id=\"G4j-25-mt3\"/>\n                            <constraint firstItem=\"3el-ze-TIn\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"GGY-Ip-Wbs\"/>\n                            <constraint firstItem=\"cMm-a9-mcN\" firstAttribute=\"top\" secondItem=\"GnH-BV-JGa\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"GmS-cz-t0z\"/>\n                            <constraint firstItem=\"cO6-GH-v1T\" firstAttribute=\"top\" secondItem=\"dKW-T5-3Vc\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"H1s-B2-taj\"/>\n                            <constraint firstItem=\"dKW-T5-3Vc\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"HPd-75-v8x\"/>\n                            <constraint firstItem=\"xZA-pB-1nm\" firstAttribute=\"centerY\" secondItem=\"UiV-vt-WHK\" secondAttribute=\"centerY\" id=\"ILO-oX-1tz\"/>\n                            <constraint firstItem=\"y1p-hH-bBl\" firstAttribute=\"leading\" secondItem=\"ySi-3O-8zp\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"JXr-hf-b85\"/>\n                            <constraint firstItem=\"BAc-kR-eMo\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"K6Z-iF-q6Y\"/>\n                            <constraint firstItem=\"f8R-08-jeb\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"7Az-gx-yGL\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"Kku-G0-F2c\"/>\n                            <constraint firstItem=\"bEN-ep-bl6\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"L8X-9U-db1\"/>\n                            <constraint firstItem=\"7Az-gx-yGL\" firstAttribute=\"leading\" secondItem=\"QvM-a9-vnf\" secondAttribute=\"trailing\" constant=\"25\" id=\"LJ1-fc-86S\"/>\n                            <constraint firstItem=\"RxO-oS-Sa7\" firstAttribute=\"leading\" secondItem=\"L2J-w9-lFQ\" secondAttribute=\"leading\" id=\"MoI-qx-sR8\"/>\n                            <constraint firstItem=\"XOm-C4-sCs\" firstAttribute=\"leading\" secondItem=\"gk5-il-WSG\" secondAttribute=\"leading\" id=\"P9v-lq-1Ux\"/>\n                            <constraint firstItem=\"bEN-ep-bl6\" firstAttribute=\"trailing\" secondItem=\"cMm-a9-mcN\" secondAttribute=\"trailing\" id=\"Qi0-PG-9KU\"/>\n                            <constraint firstItem=\"GnH-BV-JGa\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"RHs-da-PRO\"/>\n                            <constraint firstItem=\"gl0-rI-S66\" firstAttribute=\"centerY\" secondItem=\"3el-ze-TIn\" secondAttribute=\"centerY\" id=\"Scd-EO-a3o\"/>\n                            <constraint firstItem=\"cMm-a9-mcN\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"VCf-nX-YcC\"/>\n                            <constraint firstItem=\"XOm-C4-sCs\" firstAttribute=\"top\" secondItem=\"gk5-il-WSG\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"XWf-PM-9az\"/>\n                            <constraint firstItem=\"DQU-Se-i0R\" firstAttribute=\"trailing\" secondItem=\"T2k-ya-69N\" secondAttribute=\"trailing\" id=\"YUg-B5-IwW\"/>\n                            <constraint firstItem=\"rmv-ik-PYa\" firstAttribute=\"trailing\" secondItem=\"cMm-a9-mcN\" secondAttribute=\"trailing\" id=\"YqS-w0-sAd\"/>\n                            <constraint firstItem=\"iOb-Wa-2km\" firstAttribute=\"leading\" secondItem=\"gl0-rI-S66\" secondAttribute=\"leading\" id=\"Z9i-X3-dd9\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"RxO-oS-Sa7\" secondAttribute=\"trailing\" constant=\"35\" id=\"ZBy-Qc-O9t\"/>\n                            <constraint firstItem=\"T2k-ya-69N\" firstAttribute=\"centerY\" secondItem=\"cMm-a9-mcN\" secondAttribute=\"centerY\" id=\"ZTm-7E-HhR\"/>\n                            <constraint firstItem=\"gl0-rI-S66\" firstAttribute=\"leading\" secondItem=\"T2k-ya-69N\" secondAttribute=\"leading\" id=\"aY8-QU-fsQ\"/>\n                            <constraint firstItem=\"f8R-08-jeb\" firstAttribute=\"trailing\" secondItem=\"T2k-ya-69N\" secondAttribute=\"trailing\" id=\"aqZ-pc-TWu\"/>\n                            <constraint firstItem=\"dof-lA-EwF\" firstAttribute=\"leading\" secondItem=\"2ZF-VY-6Ij\" secondAttribute=\"leading\" id=\"aqr-wY-N1l\"/>\n                            <constraint firstItem=\"QvM-a9-vnf\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"bIC-6L-ItK\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"f8R-08-jeb\" secondAttribute=\"trailing\" constant=\"35\" id=\"beh-df-WKA\"/>\n                            <constraint firstItem=\"ySi-3O-8zp\" firstAttribute=\"centerY\" secondItem=\"cO6-GH-v1T\" secondAttribute=\"centerY\" id=\"cgk-58-VzE\"/>\n                            <constraint firstItem=\"DQU-Se-i0R\" firstAttribute=\"centerY\" secondItem=\"bEN-ep-bl6\" secondAttribute=\"centerY\" id=\"cj3-SS-036\"/>\n                            <constraint firstItem=\"3el-ze-TIn\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"cmP-rx-GF3\"/>\n                            <constraint firstItem=\"iOb-Wa-2km\" firstAttribute=\"top\" secondItem=\"dof-lA-EwF\" secondAttribute=\"bottom\" constant=\"20\" id=\"dK7-09-xju\"/>\n                            <constraint firstItem=\"mLR-t7-nz0\" firstAttribute=\"leading\" secondItem=\"XOm-C4-sCs\" secondAttribute=\"leading\" id=\"djq-aH-p2t\"/>\n                            <constraint firstItem=\"2ZF-VY-6Ij\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"djv-bU-ozQ\"/>\n                            <constraint firstItem=\"7Az-gx-yGL\" firstAttribute=\"centerY\" secondItem=\"QvM-a9-vnf\" secondAttribute=\"centerY\" id=\"dol-sg-1VZ\"/>\n                            <constraint firstItem=\"f8R-08-jeb\" firstAttribute=\"centerY\" secondItem=\"7Az-gx-yGL\" secondAttribute=\"centerY\" id=\"duo-fC-TLc\"/>\n                            <constraint firstItem=\"Kcg-vn-Dwj\" firstAttribute=\"top\" secondItem=\"mLR-t7-nz0\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"eX4-8b-ROa\"/>\n                            <constraint firstItem=\"L2J-w9-lFQ\" firstAttribute=\"top\" secondItem=\"7Az-gx-yGL\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"ecc-mo-zqp\"/>\n                            <constraint firstItem=\"ySi-3O-8zp\" firstAttribute=\"leading\" secondItem=\"iOb-Wa-2km\" secondAttribute=\"leading\" id=\"eyj-6H-ZcW\"/>\n                            <constraint firstItem=\"fYl-Tw-kcO\" firstAttribute=\"leading\" secondItem=\"B07-UG-KXb\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"f4G-5z-TRd\"/>\n                            <constraint firstItem=\"dmd-5j-kY7\" firstAttribute=\"leading\" secondItem=\"T2k-ya-69N\" secondAttribute=\"leading\" id=\"gOJ-e8-LVN\"/>\n                            <constraint firstItem=\"bEN-ep-bl6\" firstAttribute=\"trailing\" secondItem=\"Vrr-sG-fOD\" secondAttribute=\"trailing\" id=\"hTm-Ni-1JP\"/>\n                            <constraint firstItem=\"BAc-kR-eMo\" firstAttribute=\"top\" secondItem=\"L2J-w9-lFQ\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"hte-q3-w1v\"/>\n                            <constraint firstItem=\"Vrr-sG-fOD\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"iUt-eQ-y1G\"/>\n                            <constraint firstItem=\"bEN-ep-bl6\" firstAttribute=\"top\" secondItem=\"cMm-a9-mcN\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"igi-Sh-eKk\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"BAc-kR-eMo\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"j1s-Wr-g3M\"/>\n                            <constraint firstItem=\"rmv-ik-PYa\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"jA7-N4-2eQ\"/>\n                            <constraint firstItem=\"Vrr-sG-fOD\" firstAttribute=\"top\" secondItem=\"bEN-ep-bl6\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"kHS-MH-87d\"/>\n                            <constraint firstItem=\"rmv-ik-PYa\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"lYv-WF-tXI\"/>\n                            <constraint firstItem=\"cj1-ab-Sv6\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"mfd-Yh-q7k\"/>\n                            <constraint firstItem=\"gl0-rI-S66\" firstAttribute=\"trailing\" secondItem=\"T2k-ya-69N\" secondAttribute=\"trailing\" id=\"mfq-ha-ni1\"/>\n                            <constraint firstItem=\"B07-UG-KXb\" firstAttribute=\"top\" secondItem=\"xZA-pB-1nm\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"n7b-63-UXn\"/>\n                            <constraint firstItem=\"GnH-BV-JGa\" firstAttribute=\"top\" secondItem=\"BAc-kR-eMo\" secondAttribute=\"bottom\" constant=\"20\" id=\"nGj-iU-ZYE\"/>\n                            <constraint firstItem=\"UiV-vt-WHK\" firstAttribute=\"trailing\" secondItem=\"rmv-ik-PYa\" secondAttribute=\"trailing\" id=\"oP0-I4-Zmn\"/>\n                            <constraint firstItem=\"iOb-Wa-2km\" firstAttribute=\"centerY\" secondItem=\"dKW-T5-3Vc\" secondAttribute=\"centerY\" id=\"oRY-Nv-s3N\"/>\n                            <constraint firstItem=\"UiV-vt-WHK\" firstAttribute=\"top\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"top\" constant=\"35\" id=\"oVz-K1-G01\"/>\n                            <constraint firstItem=\"UiV-vt-WHK\" firstAttribute=\"leading\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" priority=\"999\" constant=\"35\" id=\"ow0-zC-ejB\"/>\n                            <constraint firstItem=\"gk5-il-WSG\" firstAttribute=\"top\" secondItem=\"cj1-ab-Sv6\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"pB5-UY-9Eg\"/>\n                            <constraint firstItem=\"UiV-vt-WHK\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"pBh-hx-Sih\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"L2J-w9-lFQ\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"qRj-MG-tFO\"/>\n                            <constraint firstItem=\"cO6-GH-v1T\" firstAttribute=\"trailing\" secondItem=\"dKW-T5-3Vc\" secondAttribute=\"trailing\" id=\"r6v-by-lDW\"/>\n                            <constraint firstItem=\"xZA-pB-1nm\" firstAttribute=\"leading\" secondItem=\"UiV-vt-WHK\" secondAttribute=\"trailing\" constant=\"25\" id=\"rIl-Ed-uYN\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"ySi-3O-8zp\" secondAttribute=\"bottom\" constant=\"35\" id=\"rRh-eK-aWM\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"fYl-Tw-kcO\" secondAttribute=\"trailing\" constant=\"35\" id=\"rb6-2g-dvg\"/>\n                            <constraint firstItem=\"cO6-GH-v1T\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"sIb-T1-xam\"/>\n                            <constraint firstItem=\"Kcg-vn-Dwj\" firstAttribute=\"trailing\" secondItem=\"mLR-t7-nz0\" secondAttribute=\"trailing\" id=\"t3P-9h-M9O\"/>\n                            <constraint firstItem=\"7Az-gx-yGL\" firstAttribute=\"top\" secondItem=\"B07-UG-KXb\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"t7Z-Fy-QdR\"/>\n                            <constraint firstItem=\"gk5-il-WSG\" firstAttribute=\"trailing\" secondItem=\"cj1-ab-Sv6\" secondAttribute=\"trailing\" id=\"uDF-5L-1Qp\"/>\n                            <constraint firstItem=\"2ZF-VY-6Ij\" firstAttribute=\"top\" secondItem=\"3el-ze-TIn\" secondAttribute=\"bottom\" constant=\"20\" id=\"uQn-Tx-nFn\"/>\n                            <constraint firstItem=\"bEN-ep-bl6\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"vH1-tR-yNz\"/>\n                            <constraint firstItem=\"9qv-bd-BU8\" firstAttribute=\"centerY\" secondItem=\"dKW-T5-3Vc\" secondAttribute=\"centerY\" id=\"viq-c7-D8b\"/>\n                            <constraint firstItem=\"QvM-a9-vnf\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"GY1-6c-5uL\" secondAttribute=\"leading\" constant=\"35\" id=\"vxD-V3-CzO\"/>\n                            <constraint firstItem=\"dmd-5j-kY7\" firstAttribute=\"centerY\" secondItem=\"Vrr-sG-fOD\" secondAttribute=\"centerY\" id=\"wi3-Lx-dIK\"/>\n                            <constraint firstItem=\"y1p-hH-bBl\" firstAttribute=\"centerY\" secondItem=\"cO6-GH-v1T\" secondAttribute=\"centerY\" id=\"wkx-jp-KWV\"/>\n                            <constraint firstItem=\"rmv-ik-PYa\" firstAttribute=\"centerY\" secondItem=\"B07-UG-KXb\" secondAttribute=\"centerY\" id=\"xg5-Ka-fyG\"/>\n                            <constraint firstItem=\"GnH-BV-JGa\" firstAttribute=\"trailing\" secondItem=\"QvM-a9-vnf\" secondAttribute=\"trailing\" id=\"yef-tJ-6pg\"/>\n                            <constraint firstItem=\"dof-lA-EwF\" firstAttribute=\"top\" secondItem=\"Kcg-vn-Dwj\" secondAttribute=\"bottom\" constant=\"20\" id=\"yvx-pF-jgL\"/>\n                            <constraint firstItem=\"dof-lA-EwF\" firstAttribute=\"trailing\" secondItem=\"2ZF-VY-6Ij\" secondAttribute=\"trailing\" id=\"zQm-5d-zfY\"/>\n                            <constraint firstItem=\"mLR-t7-nz0\" firstAttribute=\"trailing\" secondItem=\"XOm-C4-sCs\" secondAttribute=\"trailing\" id=\"zc0-G9-yAY\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"autocloseBrackets\" destination=\"gk5-il-WSG\" id=\"Iug-US-Weg\"/>\n                        <outlet property=\"boldAsterisk\" destination=\"ySi-3O-8zp\" id=\"W7N-vi-qTe\"/>\n                        <outlet property=\"boldUnderscore\" destination=\"y1p-hH-bBl\" id=\"IJw-SX-nBJ\"/>\n                        <outlet property=\"clickableLinks\" destination=\"mLR-t7-nz0\" id=\"Obm-sY-z1U\"/>\n                        <outlet property=\"codeBlockHighlight\" destination=\"Kcg-vn-Dwj\" id=\"7yz-yx-8Tu\"/>\n                        <outlet property=\"codeFontPreview\" destination=\"B07-UG-KXb\" id=\"3G7-e5-Ckw\"/>\n                        <outlet property=\"imagesWidth\" destination=\"dmd-5j-kY7\" id=\"cti-S4-1DA\"/>\n                        <outlet property=\"inEditorFocus\" destination=\"cj1-ab-Sv6\" id=\"KG5-A9-BXB\"/>\n                        <outlet property=\"indentUsing\" destination=\"RxO-oS-Sa7\" id=\"PVx-5A-VrQ\"/>\n                        <outlet property=\"inlineTags\" destination=\"XOm-C4-sCs\" id=\"HFO-i5-dZl\"/>\n                        <outlet property=\"italicAsterisk\" destination=\"iOb-Wa-2km\" id=\"eOr-eS-WpQ\"/>\n                        <outlet property=\"italicUnderscore\" destination=\"9qv-bd-BU8\" id=\"rkI-x6-Lwe\"/>\n                        <outlet property=\"lineSpacing\" destination=\"T2k-ya-69N\" id=\"JH9-pd-ke1\"/>\n                        <outlet property=\"lineWidth\" destination=\"DQU-Se-i0R\" id=\"k9W-FU-OtS\"/>\n                        <outlet property=\"marginSize\" destination=\"gl0-rI-S66\" id=\"Apd-uE-KF3\"/>\n                        <outlet property=\"markdownCodeTheme\" destination=\"xZA-pB-1nm\" id=\"lkX-04-F8B\"/>\n                        <outlet property=\"noteFontPreview\" destination=\"7Az-gx-yGL\" id=\"Glc-ZA-s8C\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"bsT-UP-VdO\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2012\" y=\"726.5\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"ixM-Cu-fRC\">\n            <objects>\n                <windowController storyboardIdentifier=\"noteWindowController\" id=\"vFg-r7-8j4\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"Window\" allowsToolTipsWhenApplicationIsInactive=\"NO\" restorable=\"NO\" releasedWhenClosed=\"NO\" frameAutosaveName=\"\" animationBehavior=\"default\" titlebarAppearsTransparent=\"YES\" titleVisibility=\"hidden\" id=\"eUy-cc-RjG\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\" fullSizeContentView=\"YES\"/>\n                        <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"425\" y=\"462\" width=\"480\" height=\"270\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"2560\" height=\"1415\"/>\n                        <view key=\"contentView\" id=\"bjh-fs-xot\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"270\"/>\n                            <autoresizingMask key=\"autoresizingMask\"/>\n                        </view>\n                        <connections>\n                            <outlet property=\"delegate\" destination=\"vFg-r7-8j4\" id=\"pvV-kc-yHm\"/>\n                        </connections>\n                    </window>\n                    <connections>\n                        <segue destination=\"wwb-tg-gGi\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"0UL-3Z-RHZ\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"gkY-n9-0so\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-374\" y=\"1255\"/>\n        </scene>\n        <!--Note View Controller-->\n        <scene sceneID=\"VaQ-cR-NWf\">\n            <objects>\n                <viewController id=\"wwb-tg-gGi\" customClass=\"NoteViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"EeP-be-X0G\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"376\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Iip-lX-188\" userLabel=\"TitleBarView\" customClass=\"TitleBarView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"338\" width=\"480\" height=\"38\"/>\n                                <subviews>\n                                    <textField focusRingType=\"none\" horizontalHuggingPriority=\"1\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rYa-4l-z3U\" userLabel=\"Title Label\" customClass=\"TitleTextField\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"222\" y=\"11\" width=\"37\" height=\"16\"/>\n                                        <textFieldCell key=\"cell\" lineBreakMode=\"truncatingTail\" title=\"Label\" id=\"UdE-8N-Qit\">\n                                            <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                            <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"mainBackground\"/>\n                                        </textFieldCell>\n                                    </textField>\n                                    <customView translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Uul-l1-jKT\" userLabel=\"Title Bar Additional View\">\n                                        <rect key=\"frame\" x=\"387\" y=\"0.0\" width=\"93\" height=\"38\"/>\n                                        <subviews>\n                                            <stackView distribution=\"fill\" orientation=\"horizontal\" alignment=\"top\" horizontalStackHuggingPriority=\"249.99998474121094\" verticalStackHuggingPriority=\"249.99998474121094\" detachesHiddenViews=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"OFt-xi-XVU\">\n                                                <rect key=\"frame\" x=\"12\" y=\"15\" width=\"69\" height=\"9\"/>\n                                                <subviews>\n                                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PiC-RU-ugX\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"-2.5\" width=\"17.5\" height=\"15\"/>\n                                                        <buttonCell key=\"cell\" type=\"square\" bezelStyle=\"shadowlessSquare\" image=\"NSLockUnlockedTemplate\" imagePosition=\"only\" alignment=\"center\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"VTh-q6-3p6\">\n                                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                        </buttonCell>\n                                                        <connections>\n                                                            <action selector=\"toggleNotesLock:\" target=\"eUr-Sd-Bfg\" id=\"l5o-VP-vpe\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"grq-z8-mu5\">\n                                                        <rect key=\"frame\" x=\"25\" y=\"-2\" width=\"21.5\" height=\"13\"/>\n                                                        <buttonCell key=\"cell\" type=\"bevel\" bezelStyle=\"regularSquare\" image=\"NSQuickLookTemplate\" imagePosition=\"only\" alignment=\"center\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Hg1-rI-n1u\">\n                                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                        </buttonCell>\n                                                        <connections>\n                                                            <action selector=\"togglePreview:\" target=\"eUr-Sd-Bfg\" id=\"OKA-wt-hHI\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jV1-b8-PLn\">\n                                                        <rect key=\"frame\" x=\"54\" y=\"-3\" width=\"15.5\" height=\"18\"/>\n                                                        <buttonCell key=\"cell\" type=\"bevel\" bezelStyle=\"regularSquare\" image=\"NSShareTemplate\" imagePosition=\"only\" alignment=\"center\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Uwd-ec-6d5\">\n                                                            <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                                            <font key=\"font\" metaFont=\"system\"/>\n                                                        </buttonCell>\n                                                        <connections>\n                                                            <action selector=\"shareSheet:\" target=\"eUr-Sd-Bfg\" id=\"L0f-7h-ISg\"/>\n                                                        </connections>\n                                                    </button>\n                                                </subviews>\n                                                <visibilityPriorities>\n                                                    <integer value=\"1000\"/>\n                                                    <integer value=\"1000\"/>\n                                                    <integer value=\"1000\"/>\n                                                </visibilityPriorities>\n                                                <customSpacing>\n                                                    <real value=\"3.4028234663852886e+38\"/>\n                                                    <real value=\"3.4028234663852886e+38\"/>\n                                                    <real value=\"3.4028234663852886e+38\"/>\n                                                </customSpacing>\n                                            </stackView>\n                                        </subviews>\n                                        <constraints>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"OFt-xi-XVU\" secondAttribute=\"trailing\" constant=\"12\" id=\"5F8-QZ-CXh\"/>\n                                            <constraint firstItem=\"OFt-xi-XVU\" firstAttribute=\"leading\" secondItem=\"Uul-l1-jKT\" secondAttribute=\"leading\" constant=\"12\" id=\"bjE-Jm-VmN\"/>\n                                            <constraint firstItem=\"OFt-xi-XVU\" firstAttribute=\"centerY\" secondItem=\"Uul-l1-jKT\" secondAttribute=\"centerY\" id=\"ggK-vn-ui9\"/>\n                                        </constraints>\n                                    </customView>\n                                </subviews>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"38\" id=\"K47-qo-b19\"/>\n                                    <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"rYa-4l-z3U\" secondAttribute=\"trailing\" constant=\"85\" id=\"iOV-Fl-S9P\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Uul-l1-jKT\" secondAttribute=\"trailing\" id=\"jvV-kO-rSK\"/>\n                                    <constraint firstItem=\"Uul-l1-jKT\" firstAttribute=\"top\" secondItem=\"Iip-lX-188\" secondAttribute=\"top\" id=\"lDS-ye-xqR\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"Uul-l1-jKT\" secondAttribute=\"bottom\" id=\"mf1-h1-ODO\"/>\n                                    <constraint firstItem=\"rYa-4l-z3U\" firstAttribute=\"centerY\" secondItem=\"Iip-lX-188\" secondAttribute=\"centerY\" id=\"ryn-J3-Yd7\"/>\n                                    <constraint firstItem=\"rYa-4l-z3U\" firstAttribute=\"centerX\" secondItem=\"Iip-lX-188\" secondAttribute=\"centerX\" id=\"sl3-9t-2kG\"/>\n                                    <constraint firstItem=\"rYa-4l-z3U\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Iip-lX-188\" secondAttribute=\"leading\" constant=\"85\" id=\"t5e-dR-FCH\"/>\n                                </constraints>\n                            </customView>\n                            <scrollView borderType=\"none\" autohidesScrollers=\"YES\" horizontalLineScroll=\"10\" horizontalPageScroll=\"10\" verticalLineScroll=\"10\" verticalPageScroll=\"10\" hasHorizontalScroller=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7WR-qL-UhC\" customClass=\"EditorScrollView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"338\"/>\n                                <clipView key=\"contentView\" drawsBackground=\"NO\" id=\"3Ao-pL-uMJ\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"338\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                    <subviews>\n                                        <textView importsGraphics=\"NO\" richText=\"NO\" verticallyResizable=\"YES\" findStyle=\"panel\" allowsUndo=\"YES\" smartInsertDelete=\"YES\" id=\"16L-Vf-Qjb\" customClass=\"EditTextView\" customModule=\"FSNotes\" customModuleProvider=\"target\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"338\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                            <color key=\"textColor\" name=\"textColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                            <size key=\"minSize\" width=\"480\" height=\"338\"/>\n                                            <size key=\"maxSize\" width=\"480\" height=\"10000000\"/>\n                                            <color key=\"insertionPointColor\" name=\"textColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                        </textView>\n                                    </subviews>\n                                </clipView>\n                                <scroller key=\"horizontalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"YES\" id=\"4Ff-xV-qz4\">\n                                    <rect key=\"frame\" x=\"-100\" y=\"-100\" width=\"240\" height=\"16\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                </scroller>\n                                <scroller key=\"verticalScroller\" hidden=\"YES\" wantsLayer=\"YES\" verticalHuggingPriority=\"750\" horizontal=\"NO\" id=\"Nlj-zs-ZtW\">\n                                    <rect key=\"frame\" x=\"465\" y=\"0.0\" width=\"15\" height=\"338\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                </scroller>\n                            </scrollView>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JuI-am-1kF\">\n                                <rect key=\"frame\" x=\"191\" y=\"161\" width=\"96\" height=\"16\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" widthSizable=\"YES\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" heightSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"center\" title=\"None Selected\" id=\"3rt-IC-kru\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                        </subviews>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"7WR-qL-UhC\" secondAttribute=\"bottom\" id=\"4fd-Cu-ugd\"/>\n                            <constraint firstItem=\"7WR-qL-UhC\" firstAttribute=\"leading\" secondItem=\"EeP-be-X0G\" secondAttribute=\"leading\" id=\"Fas-VV-63U\"/>\n                            <constraint firstItem=\"Iip-lX-188\" firstAttribute=\"leading\" secondItem=\"EeP-be-X0G\" secondAttribute=\"leading\" id=\"Ldw-pc-xAs\"/>\n                            <constraint firstItem=\"7WR-qL-UhC\" firstAttribute=\"top\" secondItem=\"Iip-lX-188\" secondAttribute=\"bottom\" id=\"YmH-ZM-DBb\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Iip-lX-188\" secondAttribute=\"trailing\" id=\"d2W-Pr-CAW\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"7WR-qL-UhC\" secondAttribute=\"trailing\" id=\"fbg-nU-IFD\"/>\n                            <constraint firstItem=\"Iip-lX-188\" firstAttribute=\"top\" secondItem=\"EeP-be-X0G\" secondAttribute=\"top\" id=\"zxU-4H-c36\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"editor\" destination=\"16L-Vf-Qjb\" id=\"d3v-Di-4i1\"/>\n                        <outlet property=\"editorScrollView\" destination=\"7WR-qL-UhC\" id=\"ivQ-Kf-OO8\"/>\n                        <outlet property=\"lockUnlockButton\" destination=\"PiC-RU-ugX\" id=\"TkZ-BU-gAW\"/>\n                        <outlet property=\"nonSelectedLabel\" destination=\"JuI-am-1kF\" id=\"q3Q-0a-BiE\"/>\n                        <outlet property=\"previewButton\" destination=\"grq-z8-mu5\" id=\"vGw-jF-1Df\"/>\n                        <outlet property=\"shareButton\" destination=\"jV1-b8-PLn\" id=\"WkC-CN-mgS\"/>\n                        <outlet property=\"titleBarView\" destination=\"Iip-lX-188\" id=\"dHI-nm-3ue\"/>\n                        <outlet property=\"titleLabel\" destination=\"rYa-4l-z3U\" id=\"E6B-Mr-QuY\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"eUr-Sd-Bfg\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"228\" y=\"1308\"/>\n        </scene>\n        <!--Advanced-->\n        <scene sceneID=\"GUW-JY-WNb\">\n            <objects>\n                <viewController title=\"Advanced\" id=\"mvt-gI-iG0\" customClass=\"PreferencesAdvancedViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"tJA-7g-MI3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"496\" height=\"466\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"F2w-YD-uv3\">\n                                <rect key=\"frame\" x=\"174\" y=\"330\" width=\"68\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"Language:\" id=\"dZD-Db-KHs\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <popUpButton verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eI4-Qa-xyg\">\n                                <rect key=\"frame\" x=\"245\" y=\"298\" width=\"107\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" title=\"System\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" state=\"on\" borderStyle=\"borderAndBezel\" imageScaling=\"proportionallyDown\" inset=\"2\" selectedItem=\"rSZ-Wo-Rtj\" id=\"BZN-Xe-Atr\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"iLc-AS-AqE\">\n                                        <items>\n                                            <menuItem title=\"System\" state=\"on\" id=\"rSZ-Wo-Rtj\"/>\n                                            <menuItem title=\"Light\" id=\"UFh-mf-ZKG\"/>\n                                            <menuItem title=\"Dark\" id=\"gY8-zt-Iak\"/>\n                                        </items>\n                                    </menu>\n                                </popUpButtonCell>\n                                <connections>\n                                    <action selector=\"appearanceClick:\" target=\"mvt-gI-iG0\" id=\"Slg-pd-5S5\"/>\n                                </connections>\n                            </popUpButton>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UMU-6c-hjh\">\n                                <rect key=\"frame\" x=\"20\" y=\"364\" width=\"456\" height=\"5\"/>\n                            </box>\n                            <popUpButton verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qKm-Ud-lP4\">\n                                <rect key=\"frame\" x=\"245\" y=\"324\" width=\"107\" height=\"25\"/>\n                                <popUpButtonCell key=\"cell\" type=\"push\" bezelStyle=\"rounded\" alignment=\"left\" lineBreakMode=\"truncatingTail\" borderStyle=\"borderAndBezel\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"cmQ-0I-gTB\">\n                                    <behavior key=\"behavior\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <menu key=\"menu\" id=\"IQ9-BV-ooL\"/>\n                                </popUpButtonCell>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"100\" id=\"H8m-Bd-gyN\"/>\n                                </constraints>\n                                <connections>\n                                    <action selector=\"languagePopUp:\" target=\"mvt-gI-iG0\" id=\"AVW-Bs-LrY\"/>\n                                </connections>\n                            </popUpButton>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eiE-QT-Gmx\">\n                                <rect key=\"frame\" x=\"20\" y=\"281\" width=\"456\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CPL-jT-YaF\">\n                                <rect key=\"frame\" x=\"161\" y=\"304\" width=\"81\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Appearance:\" id=\"Tjy-Pz-wrj\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZXG-8N-Rny\">\n                                <rect key=\"frame\" x=\"33\" y=\"247\" width=\"69\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Dock Icon:\" id=\"2CI-mu-aiB\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"SxW-70-Bdh\">\n                                <rect key=\"frame\" x=\"205\" y=\"175\" width=\"18\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" bezelStyle=\"regularSquare\" imagePosition=\"left\" inset=\"2\" id=\"DwS-mH-qZ6\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"dockIcon:\" target=\"mvt-gI-iG0\" id=\"Tzm-Sx-GzD\"/>\n                                </connections>\n                            </button>\n                            <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gGT-qO-FvD\">\n                                <rect key=\"frame\" x=\"190\" y=\"199\" width=\"48\" height=\"48\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"48\" id=\"MFy-MR-qw2\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"48\" id=\"gZm-qi-j99\"/>\n                                </constraints>\n                                <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"AppIconModern\" id=\"39f-ji-gqR\"/>\n                            </imageView>\n                            <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ia3-Pz-Sap\">\n                                <rect key=\"frame\" x=\"258\" y=\"199\" width=\"48\" height=\"48\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"48\" id=\"5dW-F7-UlS\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"48\" id=\"taC-XE-nRT\"/>\n                                </constraints>\n                                <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"AppIconClassic\" id=\"8UF-BS-zlW\"/>\n                            </imageView>\n                            <button tag=\"1\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vJo-sa-P9T\">\n                                <rect key=\"frame\" x=\"273\" y=\"175\" width=\"18\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"UsT-rs-mlR\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"dockIcon:\" target=\"mvt-gI-iG0\" id=\"YWP-6B-yB4\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Atm-xW-q1V\">\n                                <rect key=\"frame\" x=\"33\" y=\"35\" width=\"180\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Made with ❤️ in Ukraine 🇺🇦 \" id=\"fsF-5N-tWg\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"500\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dxk-ZE-26V\">\n                                <rect key=\"frame\" x=\"422\" y=\"35\" width=\"41\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"v2.9.0\" id=\"dgD-xe-DVG\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"f0N-UJ-lzU\">\n                                <rect key=\"frame\" x=\"20\" y=\"154\" width=\"456\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Fi8-x1-uYd\">\n                                <rect key=\"frame\" x=\"33\" y=\"415\" width=\"42\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Trash:\" id=\"i2S-pt-KQH\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <pathControl horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"750\" horizontalCompressionResistancePriority=\"200\" allowsExpansionToolTips=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8Sd-jT-XTG\">\n                                <rect key=\"frame\" x=\"35\" y=\"387\" width=\"351\" height=\"20\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"100\" id=\"haF-wi-gJG\"/>\n                                </constraints>\n                                <pathCell key=\"cell\" controlSize=\"small\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" id=\"l6e-gO-dWz\">\n                                    <font key=\"font\" metaFont=\"smallSystem\"/>\n                                    <url key=\"url\" string=\"file://localhost/Applications/\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </pathCell>\n                            </pathControl>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Vab-UF-AXx\">\n                                <rect key=\"frame\" x=\"387\" y=\"380\" width=\"81\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Change\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"BHF-CB-P9C\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"trash:\" target=\"mvt-gI-iG0\" id=\"nJv-Nq-c4I\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0Kp-8d-0J0\">\n                                <rect key=\"frame\" x=\"33\" y=\"120\" width=\"43\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Reset:\" id=\"lhy-wX-Q4T\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0VK-px-m8C\">\n                                <rect key=\"frame\" x=\"121\" y=\"85\" width=\"122\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Reset Caches\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"SDz-2X-4yJ\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"resetCaches:\" target=\"mvt-gI-iG0\" id=\"VjO-gn-8jK\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wBg-NB-AcO\">\n                                <rect key=\"frame\" x=\"241\" y=\"85\" width=\"122\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Reset Settings\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"Hdn-bm-lbP\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"resetSettings:\" target=\"mvt-gI-iG0\" id=\"aii-jr-kIq\"/>\n                                </connections>\n                            </button>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AMX-oh-6ZS\">\n                                <rect key=\"frame\" x=\"20\" y=\"69\" width=\"456\" height=\"5\"/>\n                            </box>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"eI4-Qa-xyg\" firstAttribute=\"trailing\" secondItem=\"qKm-Ud-lP4\" secondAttribute=\"trailing\" id=\"0u4-C9-SAS\"/>\n                            <constraint firstItem=\"AMX-oh-6ZS\" firstAttribute=\"trailing\" secondItem=\"f0N-UJ-lzU\" secondAttribute=\"trailing\" id=\"7ft-rz-yTX\"/>\n                            <constraint firstItem=\"eI4-Qa-xyg\" firstAttribute=\"leading\" secondItem=\"qKm-Ud-lP4\" secondAttribute=\"leading\" id=\"8es-Ur-KjK\"/>\n                            <constraint firstItem=\"ia3-Pz-Sap\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"centerX\" constant=\"10\" id=\"8ph-Kc-IOH\"/>\n                            <constraint firstItem=\"wBg-NB-AcO\" firstAttribute=\"width\" secondItem=\"0VK-px-m8C\" secondAttribute=\"width\" id=\"8ye-TD-EVG\"/>\n                            <constraint firstItem=\"CPL-jT-YaF\" firstAttribute=\"top\" secondItem=\"F2w-YD-uv3\" secondAttribute=\"bottom\" constant=\"10\" id=\"9yc-F5-LLk\"/>\n                            <constraint firstItem=\"Fi8-x1-uYd\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"DzP-i7-Y1d\"/>\n                            <constraint firstItem=\"f0N-UJ-lzU\" firstAttribute=\"leading\" secondItem=\"eiE-QT-Gmx\" secondAttribute=\"leading\" id=\"ECv-VR-cn6\"/>\n                            <constraint firstItem=\"qKm-Ud-lP4\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"EUd-k3-l5h\"/>\n                            <constraint firstItem=\"f0N-UJ-lzU\" firstAttribute=\"top\" secondItem=\"SxW-70-Bdh\" secondAttribute=\"bottom\" constant=\"20\" id=\"EXj-Vd-7Vj\"/>\n                            <constraint firstItem=\"f0N-UJ-lzU\" firstAttribute=\"trailing\" secondItem=\"eiE-QT-Gmx\" secondAttribute=\"trailing\" id=\"FjB-BL-eJT\"/>\n                            <constraint firstItem=\"Fi8-x1-uYd\" firstAttribute=\"top\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"top\" constant=\"35\" id=\"G4O-CM-Qej\"/>\n                            <constraint firstItem=\"AMX-oh-6ZS\" firstAttribute=\"top\" secondItem=\"0VK-px-m8C\" secondAttribute=\"bottom\" constant=\"20\" id=\"GdE-Iz-fcj\"/>\n                            <constraint firstItem=\"gGT-qO-FvD\" firstAttribute=\"top\" secondItem=\"ZXG-8N-Rny\" secondAttribute=\"bottom\" id=\"Gl4-za-NRT\"/>\n                            <constraint firstItem=\"0Kp-8d-0J0\" firstAttribute=\"top\" secondItem=\"f0N-UJ-lzU\" secondAttribute=\"bottom\" constant=\"20\" id=\"MoI-dd-P82\"/>\n                            <constraint firstItem=\"ZXG-8N-Rny\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"NzG-7e-duV\"/>\n                            <constraint firstItem=\"CPL-jT-YaF\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"Opz-Dy-0GD\"/>\n                            <constraint firstItem=\"qKm-Ud-lP4\" firstAttribute=\"leading\" secondItem=\"F2w-YD-uv3\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"R71-hL-Y9k\"/>\n                            <constraint firstItem=\"wBg-NB-AcO\" firstAttribute=\"bottom\" secondItem=\"0VK-px-m8C\" secondAttribute=\"bottom\" id=\"RLM-bH-VZc\"/>\n                            <constraint firstItem=\"SxW-70-Bdh\" firstAttribute=\"centerX\" secondItem=\"gGT-qO-FvD\" secondAttribute=\"centerX\" id=\"Sef-1z-bg4\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Atm-xW-q1V\" secondAttribute=\"trailing\" constant=\"35\" id=\"TkE-XR-BL0\"/>\n                            <constraint firstItem=\"Atm-xW-q1V\" firstAttribute=\"top\" secondItem=\"AMX-oh-6ZS\" secondAttribute=\"bottom\" constant=\"20\" id=\"VTa-wY-OGE\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"Atm-xW-q1V\" secondAttribute=\"bottom\" constant=\"35\" id=\"WkH-LJ-Vl2\"/>\n                            <constraint firstItem=\"vJo-sa-P9T\" firstAttribute=\"centerX\" secondItem=\"ia3-Pz-Sap\" secondAttribute=\"centerX\" id=\"XEq-ZV-NgO\"/>\n                            <constraint firstItem=\"Dxk-ZE-26V\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"YJ4-Re-a1W\"/>\n                            <constraint firstItem=\"0Kp-8d-0J0\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"Ytx-lh-azX\"/>\n                            <constraint firstItem=\"UMU-6c-hjh\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"a8q-VH-NiL\"/>\n                            <constraint firstItem=\"UMU-6c-hjh\" firstAttribute=\"top\" secondItem=\"8Sd-jT-XTG\" secondAttribute=\"bottom\" constant=\"20\" id=\"acA-jg-VzE\"/>\n                            <constraint firstItem=\"F2w-YD-uv3\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"ann-fg-Gal\"/>\n                            <constraint firstItem=\"gGT-qO-FvD\" firstAttribute=\"trailing\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"centerX\" constant=\"-10\" id=\"bHS-ps-F3f\"/>\n                            <constraint firstItem=\"8Sd-jT-XTG\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"bn5-nx-5Qk\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Vab-UF-AXx\" secondAttribute=\"trailing\" constant=\"35\" id=\"bwB-om-0fG\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"0Kp-8d-0J0\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"d9c-gA-TFT\"/>\n                            <constraint firstItem=\"ia3-Pz-Sap\" firstAttribute=\"top\" secondItem=\"ZXG-8N-Rny\" secondAttribute=\"bottom\" id=\"dmU-oR-kA8\"/>\n                            <constraint firstItem=\"0VK-px-m8C\" firstAttribute=\"trailing\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"centerX\" constant=\"-12\" id=\"eWn-KQ-wXA\"/>\n                            <constraint firstItem=\"eI4-Qa-xyg\" firstAttribute=\"centerY\" secondItem=\"CPL-jT-YaF\" secondAttribute=\"centerY\" id=\"fmC-An-HMY\"/>\n                            <constraint firstItem=\"0VK-px-m8C\" firstAttribute=\"top\" secondItem=\"0Kp-8d-0J0\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"g0o-cF-meI\"/>\n                            <constraint firstItem=\"Vab-UF-AXx\" firstAttribute=\"leading\" secondItem=\"8Sd-jT-XTG\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"hLf-et-kbV\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"ZXG-8N-Rny\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"hPq-Re-kkU\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Dxk-ZE-26V\" secondAttribute=\"trailing\" constant=\"35\" id=\"hcm-lG-5wC\"/>\n                            <constraint firstItem=\"0VK-px-m8C\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"hfs-tZ-GjB\"/>\n                            <constraint firstItem=\"eiE-QT-Gmx\" firstAttribute=\"trailing\" secondItem=\"UMU-6c-hjh\" secondAttribute=\"trailing\" id=\"ikG-7H-gE3\"/>\n                            <constraint firstItem=\"F2w-YD-uv3\" firstAttribute=\"top\" secondItem=\"UMU-6c-hjh\" secondAttribute=\"bottom\" constant=\"20\" id=\"jpe-aH-Vay\"/>\n                            <constraint firstItem=\"Vab-UF-AXx\" firstAttribute=\"centerY\" secondItem=\"8Sd-jT-XTG\" secondAttribute=\"centerY\" id=\"k4P-fz-iOV\"/>\n                            <constraint firstItem=\"qKm-Ud-lP4\" firstAttribute=\"centerY\" secondItem=\"F2w-YD-uv3\" secondAttribute=\"centerY\" id=\"kam-d1-dNX\"/>\n                            <constraint firstItem=\"SxW-70-Bdh\" firstAttribute=\"top\" secondItem=\"gGT-qO-FvD\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"mHT-Jj-C0L\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"eI4-Qa-xyg\" secondAttribute=\"trailing\" constant=\"35\" id=\"npb-5h-VcA\"/>\n                            <constraint firstItem=\"vJo-sa-P9T\" firstAttribute=\"top\" secondItem=\"ia3-Pz-Sap\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"oPf-JU-jDe\"/>\n                            <constraint firstItem=\"AMX-oh-6ZS\" firstAttribute=\"leading\" secondItem=\"f0N-UJ-lzU\" secondAttribute=\"leading\" id=\"qqQ-UB-HWR\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"UMU-6c-hjh\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"sW8-G2-PYI\"/>\n                            <constraint firstItem=\"ZXG-8N-Rny\" firstAttribute=\"top\" secondItem=\"eiE-QT-Gmx\" secondAttribute=\"bottom\" constant=\"20\" id=\"uCa-UE-P7e\"/>\n                            <constraint firstItem=\"eiE-QT-Gmx\" firstAttribute=\"top\" secondItem=\"CPL-jT-YaF\" secondAttribute=\"bottom\" constant=\"20\" id=\"uWn-jw-iOO\"/>\n                            <constraint firstItem=\"Dxk-ZE-26V\" firstAttribute=\"centerY\" secondItem=\"Atm-xW-q1V\" secondAttribute=\"centerY\" id=\"wMd-RG-lha\"/>\n                            <constraint firstItem=\"CPL-jT-YaF\" firstAttribute=\"trailing\" secondItem=\"F2w-YD-uv3\" secondAttribute=\"trailing\" id=\"wUA-ok-lMw\"/>\n                            <constraint firstItem=\"8Sd-jT-XTG\" firstAttribute=\"top\" secondItem=\"Fi8-x1-uYd\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"wdx-Xt-c5d\"/>\n                            <constraint firstItem=\"qKm-Ud-lP4\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"centerX\" id=\"wrn-en-VJA\"/>\n                            <constraint firstItem=\"Atm-xW-q1V\" firstAttribute=\"leading\" secondItem=\"tJA-7g-MI3\" secondAttribute=\"leading\" constant=\"35\" id=\"yP7-6b-9AL\"/>\n                            <constraint firstItem=\"wBg-NB-AcO\" firstAttribute=\"leading\" secondItem=\"0VK-px-m8C\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"yhq-ng-3LF\"/>\n                            <constraint firstItem=\"eiE-QT-Gmx\" firstAttribute=\"leading\" secondItem=\"UMU-6c-hjh\" secondAttribute=\"leading\" id=\"yvd-g9-W8U\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Fi8-x1-uYd\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"z0k-Lq-e92\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"appearance\" destination=\"eI4-Qa-xyg\" id=\"u8k-hD-CkT\"/>\n                        <outlet property=\"appearanceLabel\" destination=\"CPL-jT-YaF\" id=\"94b-U7-xD4\"/>\n                        <outlet property=\"dockIconFirst\" destination=\"SxW-70-Bdh\" id=\"MhB-k7-XvP\"/>\n                        <outlet property=\"dockIconSecond\" destination=\"vJo-sa-P9T\" id=\"im8-M5-wmr\"/>\n                        <outlet property=\"languagePopUp\" destination=\"qKm-Ud-lP4\" id=\"iq8-FI-S7g\"/>\n                        <outlet property=\"trashPath\" destination=\"8Sd-jT-XTG\" id=\"611-Js-PA7\"/>\n                        <outlet property=\"version\" destination=\"Dxk-ZE-26V\" id=\"eI0-rW-7Ju\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"uuN-ji-W5S\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"4503\" y=\"680\"/>\n        </scene>\n        <!--Security-->\n        <scene sceneID=\"dgo-jz-dll\">\n            <objects>\n                <viewController title=\"Security\" id=\"PXw-YJ-q6A\" customClass=\"PreferencesSecurityViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"kQa-Jx-cRD\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"550\" height=\"341\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bAD-aT-6wv\">\n                                <rect key=\"frame\" x=\"43\" y=\"257\" width=\"110\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Lock on sleep\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"Ve2-qz-vtH\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"lockOnSleep:\" target=\"PXw-YJ-q6A\" id=\"YR7-5n-mLl\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jxK-y9-8yA\">\n                                <rect key=\"frame\" x=\"43\" y=\"235\" width=\"214\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Lock on screen saver activated\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"IlF-tS-GFG\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"lockOnScreenActivated:\" target=\"PXw-YJ-q6A\" id=\"bz3-2A-GCi\"/>\n                                </connections>\n                            </button>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VyD-5q-zrb\">\n                                <rect key=\"frame\" x=\"43\" y=\"213\" width=\"179\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Lock when user switched\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"8dk-Cf-bSg\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"lockWhenSwitched:\" target=\"PXw-YJ-q6A\" id=\"8dJ-E3-kWk\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3K8-4C-o6B\">\n                                <rect key=\"frame\" x=\"33\" y=\"290\" width=\"484\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Auto-lock for Encrypted Notes:\" id=\"fzY-c6-DaK\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LfK-G8-GaN\">\n                                <rect key=\"frame\" x=\"43\" y=\"109\" width=\"212\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"check\" title=\"Allow Touch ID to unlock notes\" bezelStyle=\"regularSquare\" imagePosition=\"left\" state=\"on\" inset=\"2\" id=\"KST-y3-KvM\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"allowTouchID:\" target=\"PXw-YJ-q6A\" id=\"Wxl-m2-01u\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vfa-TJ-FAD\">\n                                <rect key=\"frame\" x=\"33\" y=\"142\" width=\"484\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Touch ID:\" id=\"Nw2-km-iDW\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"O2e-aX-dha\">\n                                <rect key=\"frame\" x=\"20\" y=\"82\" width=\"510\" height=\"5\"/>\n                            </box>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2GG-sE-P9s\">\n                                <rect key=\"frame\" x=\"98\" y=\"28\" width=\"188\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Change Master Password\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"3RO-C7-NOO\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"openMasterPasswordWindow:\" target=\"PXw-YJ-q6A\" id=\"wnh-nx-9iE\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6jD-2w-AAk\">\n                                <rect key=\"frame\" x=\"33\" y=\"38\" width=\"66\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Password:\" id=\"KaC-Mz-siK\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9JU-4V-Lgp\">\n                                <rect key=\"frame\" x=\"20\" y=\"181\" width=\"510\" height=\"5\"/>\n                            </box>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"vfa-TJ-FAD\" firstAttribute=\"top\" secondItem=\"9JU-4V-Lgp\" secondAttribute=\"bottom\" constant=\"25\" id=\"40W-ka-GI8\"/>\n                            <constraint firstItem=\"2GG-sE-P9s\" firstAttribute=\"leading\" secondItem=\"6jD-2w-AAk\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"4zw-dF-4VS\"/>\n                            <constraint firstItem=\"vfa-TJ-FAD\" firstAttribute=\"trailing\" secondItem=\"3K8-4C-o6B\" secondAttribute=\"trailing\" id=\"5vm-Lm-o4N\"/>\n                            <constraint firstItem=\"VyD-5q-zrb\" firstAttribute=\"top\" secondItem=\"jxK-y9-8yA\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"69e-wh-PMF\"/>\n                            <constraint firstItem=\"2GG-sE-P9s\" firstAttribute=\"firstBaseline\" secondItem=\"6jD-2w-AAk\" secondAttribute=\"firstBaseline\" id=\"8YZ-dj-A0h\"/>\n                            <constraint firstItem=\"3K8-4C-o6B\" firstAttribute=\"leading\" secondItem=\"kQa-Jx-cRD\" secondAttribute=\"leading\" constant=\"35\" id=\"9XO-uI-RYu\"/>\n                            <constraint firstItem=\"LfK-G8-GaN\" firstAttribute=\"leading\" secondItem=\"VyD-5q-zrb\" secondAttribute=\"leading\" id=\"B96-MY-STm\"/>\n                            <constraint firstItem=\"vfa-TJ-FAD\" firstAttribute=\"leading\" secondItem=\"3K8-4C-o6B\" secondAttribute=\"leading\" id=\"ETz-cD-tlM\"/>\n                            <constraint firstItem=\"LfK-G8-GaN\" firstAttribute=\"top\" secondItem=\"vfa-TJ-FAD\" secondAttribute=\"bottom\" constant=\"16\" id=\"HSG-pw-IYV\"/>\n                            <constraint firstItem=\"3K8-4C-o6B\" firstAttribute=\"top\" secondItem=\"kQa-Jx-cRD\" secondAttribute=\"top\" constant=\"35\" id=\"Ixc-pj-L9b\"/>\n                            <constraint firstItem=\"O2e-aX-dha\" firstAttribute=\"leading\" secondItem=\"kQa-Jx-cRD\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"O4Y-En-eTL\"/>\n                            <constraint firstItem=\"9JU-4V-Lgp\" firstAttribute=\"leading\" secondItem=\"kQa-Jx-cRD\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"P5T-v9-C1g\"/>\n                            <constraint firstItem=\"6jD-2w-AAk\" firstAttribute=\"leading\" secondItem=\"vfa-TJ-FAD\" secondAttribute=\"leading\" id=\"RbC-qq-syP\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"jxK-y9-8yA\" secondAttribute=\"trailing\" id=\"Rjh-jt-Wtq\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"O2e-aX-dha\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"W5b-3D-LuO\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"VyD-5q-zrb\" secondAttribute=\"trailing\" id=\"YYU-6Z-WgR\"/>\n                            <constraint firstItem=\"9JU-4V-Lgp\" firstAttribute=\"top\" secondItem=\"VyD-5q-zrb\" secondAttribute=\"bottom\" constant=\"30\" id=\"Z04-fQ-8yg\"/>\n                            <constraint firstItem=\"VyD-5q-zrb\" firstAttribute=\"leading\" secondItem=\"jxK-y9-8yA\" secondAttribute=\"leading\" id=\"aqd-rE-yGh\"/>\n                            <constraint firstItem=\"bAD-aT-6wv\" firstAttribute=\"top\" secondItem=\"3K8-4C-o6B\" secondAttribute=\"bottom\" constant=\"16\" id=\"fFg-s9-fzj\"/>\n                            <constraint firstItem=\"6jD-2w-AAk\" firstAttribute=\"top\" secondItem=\"O2e-aX-dha\" secondAttribute=\"bottom\" constant=\"30\" id=\"iQF-qQ-BDu\"/>\n                            <constraint firstItem=\"bAD-aT-6wv\" firstAttribute=\"leading\" secondItem=\"3K8-4C-o6B\" secondAttribute=\"leading\" constant=\"10\" id=\"iSZ-VD-TJ5\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"9JU-4V-Lgp\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"oFF-vD-5WC\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"LfK-G8-GaN\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"oLB-xt-JDv\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"bAD-aT-6wv\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"q6z-LL-7IU\"/>\n                            <constraint firstItem=\"jxK-y9-8yA\" firstAttribute=\"leading\" secondItem=\"bAD-aT-6wv\" secondAttribute=\"leading\" id=\"sYe-Y6-BvA\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"2GG-sE-P9s\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"u3W-Vk-UZH\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"3K8-4C-o6B\" secondAttribute=\"trailing\" constant=\"35\" id=\"w1c-eH-UpP\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"2GG-sE-P9s\" secondAttribute=\"bottom\" constant=\"35\" id=\"wUp-oC-N9d\"/>\n                            <constraint firstItem=\"jxK-y9-8yA\" firstAttribute=\"top\" secondItem=\"bAD-aT-6wv\" secondAttribute=\"bottom\" constant=\"6\" symbolic=\"YES\" id=\"xeX-Hb-ENz\"/>\n                            <constraint firstItem=\"O2e-aX-dha\" firstAttribute=\"top\" secondItem=\"LfK-G8-GaN\" secondAttribute=\"bottom\" constant=\"25\" id=\"zb5-T6-esO\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"allowTouchID\" destination=\"LfK-G8-GaN\" id=\"i4u-FJ-wcF\"/>\n                        <outlet property=\"lockOnScreenActivated\" destination=\"jxK-y9-8yA\" id=\"gWR-lE-hA2\"/>\n                        <outlet property=\"lockOnSleep\" destination=\"bAD-aT-6wv\" id=\"CIt-n9-zYN\"/>\n                        <outlet property=\"lockWhenFastUser\" destination=\"VyD-5q-zrb\" id=\"FYT-qZ-W5I\"/>\n                        <outlet property=\"masterPassword\" destination=\"2GG-sE-P9s\" id=\"YwE-Mx-evI\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"8cl-fg-jNQ\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2668\" y=\"618\"/>\n        </scene>\n        <!--Publish-->\n        <scene sceneID=\"CWn-31-bAU\">\n            <objects>\n                <viewController title=\"Publish\" id=\"X76-X8-PbG\" customClass=\"PreferencesWebViewController\" customModule=\"FSNotes\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"tsp-KF-Yi6\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"468\" height=\"562\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sQu-2C-39G\">\n                                <rect key=\"frame\" x=\"33\" y=\"431\" width=\"118\" height=\"15\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"SSH configuration:\" id=\"E1U-fG-XBw\">\n                                    <font key=\"font\" usesAppearanceFont=\"YES\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ef1-zy-Vs0\">\n                                <rect key=\"frame\" x=\"189\" y=\"407\" width=\"37\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Host:\" id=\"a9t-hD-WYR\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"749\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Zgg-g2-JdS\">\n                                <rect key=\"frame\" x=\"189\" y=\"376\" width=\"37\" height=\"15\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Port:\" id=\"9pM-sd-qhm\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <pathControl verticalHuggingPriority=\"751\" allowsExpansionToolTips=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sJC-70-IBX\">\n                                <rect key=\"frame\" x=\"54\" y=\"123\" width=\"170\" height=\"16\"/>\n                                <pathCell key=\"cell\" selectable=\"YES\" editable=\"YES\" alignment=\"left\" placeholderString=\"id_rsa key is not selected\" id=\"wDP-Yg-13R\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </pathCell>\n                            </pathControl>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uVS-UC-gNC\">\n                                <rect key=\"frame\" x=\"33\" y=\"164\" width=\"146\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Or use .ssh private key:\" id=\"vfT-nF-vst\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DCf-Af-hOC\">\n                                <rect key=\"frame\" x=\"227\" y=\"114\" width=\"69\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Set\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"axA-pN-Zf2\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <connections>\n                                        <action selector=\"privateKey:\" target=\"X76-X8-PbG\" id=\"5s4-IH-TgV\"/>\n                                    </connections>\n                                </buttonCell>\n                            </button>\n                            <button verticalHuggingPriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Lfk-dJ-eYH\">\n                                <rect key=\"frame\" x=\"136\" y=\"28\" width=\"196\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Upload and test initial data\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"aGv-BR-Oc8\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"test:\" target=\"X76-X8-PbG\" id=\"fm6-Br-IqB\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Zc9-cU-2GY\">\n                                <rect key=\"frame\" x=\"189\" y=\"313\" width=\"37\" height=\"17\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Web:\" id=\"ghI-ln-bql\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField identifier=\"settingsWebWeb\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"XxT-6E-AmS\">\n                                <rect key=\"frame\" x=\"234\" y=\"311\" width=\"151\" height=\"21\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"https://example.com/\" drawsBackground=\"YES\" id=\"mr6-e8-9hL\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"web:\" target=\"X76-X8-PbG\" id=\"CER-4O-D2S\"/>\n                                </connections>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"38E-P8-sdH\">\n                                <rect key=\"frame\" x=\"189\" y=\"345\" width=\"37\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" alignment=\"right\" title=\"Path:\" id=\"egX-yM-Suq\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField identifier=\"settingsWebPath\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ehk-E6-jpV\">\n                                <rect key=\"frame\" x=\"234\" y=\"342\" width=\"151\" height=\"21\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"/var/www/example.com\" drawsBackground=\"YES\" id=\"bdD-JA-K8P\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"path:\" target=\"X76-X8-PbG\" id=\"R8S-gD-woK\"/>\n                                </connections>\n                            </textField>\n                            <textField identifier=\"settingsWebUsername\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"M2V-5H-D91\">\n                                <rect key=\"frame\" x=\"234\" y=\"232\" width=\"151\" height=\"22\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"hlushchenko\" drawsBackground=\"YES\" id=\"4gs-Bc-GHG\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"username:\" target=\"X76-X8-PbG\" id=\"wkP-ud-eXm\"/>\n                                </connections>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pBL-yA-rtI\">\n                                <rect key=\"frame\" x=\"156\" y=\"235\" width=\"70\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Username:\" id=\"yVt-tz-tMy\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PWy-Mv-FmM\">\n                                <rect key=\"frame\" x=\"160\" y=\"203\" width=\"66\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Password:\" id=\"DXE-kd-1X3\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <secureTextField identifier=\"settingsWebPassword\" focusRingType=\"none\" verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"749\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ycX-Lf-Ogr\">\n                                <rect key=\"frame\" x=\"234\" y=\"200\" width=\"151\" height=\"22\"/>\n                                <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"optional\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"xWi-IK-gJS\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <allowedInputSourceLocales>\n                                        <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                    </allowedInputSourceLocales>\n                                </secureTextFieldCell>\n                                <connections>\n                                    <action selector=\"password:\" target=\"X76-X8-PbG\" id=\"BvH-GO-mhH\"/>\n                                </connections>\n                            </secureTextField>\n                            <box verticalHuggingPriority=\"751\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MMZ-ZU-abQ\">\n                                <rect key=\"frame\" x=\"20\" y=\"293\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pb8-h4-LhO\">\n                                <rect key=\"frame\" x=\"33\" y=\"259\" width=\"77\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Credentials:\" id=\"8om-Y6-O8e\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oHV-K7-pRq\">\n                                <rect key=\"frame\" x=\"20\" y=\"73\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <secureTextField identifier=\"settingsWebPassphrase\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"XUd-k8-fNm\">\n                                <rect key=\"frame\" x=\"234\" y=\"91\" width=\"151\" height=\"22\"/>\n                                <secureTextFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"optional\" drawsBackground=\"YES\" usesSingleLineMode=\"YES\" id=\"wa2-sX-NOx\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <allowedInputSourceLocales>\n                                        <string>NSAllRomanInputSourcesLocaleIdentifier</string>\n                                    </allowedInputSourceLocales>\n                                </secureTextFieldCell>\n                                <connections>\n                                    <action selector=\"passphrase:\" target=\"X76-X8-PbG\" id=\"a8b-Yp-lIg\"/>\n                                </connections>\n                            </secureTextField>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jwc-Mi-vbr\">\n                                <rect key=\"frame\" x=\"148\" y=\"94\" width=\"78\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Passphrase:\" id=\"44f-my-fi3\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <button verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"751\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KP8-dY-CEz\">\n                                <rect key=\"frame\" x=\"33\" y=\"486\" width=\"121\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"FSNotes Server\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" state=\"on\" inset=\"2\" id=\"gFA-SA-v9T\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"publishTo:\" target=\"X76-X8-PbG\" id=\"5Jk-ec-6wA\"/>\n                                </connections>\n                            </button>\n                            <button tag=\"1\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6Pu-ln-xgk\">\n                                <rect key=\"frame\" x=\"160\" y=\"486\" width=\"116\" height=\"18\"/>\n                                <buttonCell key=\"cell\" type=\"radio\" title=\"Custom Server\" bezelStyle=\"regularSquare\" imagePosition=\"left\" alignment=\"left\" inset=\"2\" id=\"Dp7-4n-ilt\">\n                                    <behavior key=\"behavior\" changeContents=\"YES\" doesNotDimImage=\"YES\" lightByContents=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"publishTo:\" target=\"X76-X8-PbG\" id=\"Cmw-fx-aFR\"/>\n                                </connections>\n                            </button>\n                            <textField focusRingType=\"none\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"752\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eNd-rT-JgT\">\n                                <rect key=\"frame\" x=\"33\" y=\"511\" width=\"106\" height=\"16\"/>\n                                <textFieldCell key=\"cell\" lineBreakMode=\"clipping\" title=\"Publish notes to:\" id=\"bUL-WS-rIS\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" verticalCompressionResistancePriority=\"751\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lCo-ku-pRS\">\n                                <rect key=\"frame\" x=\"20\" y=\"464\" width=\"428\" height=\"5\"/>\n                            </box>\n                            <button verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t4Y-nY-xQx\">\n                                <rect key=\"frame\" x=\"294\" y=\"114\" width=\"69\" height=\"32\"/>\n                                <buttonCell key=\"cell\" type=\"push\" title=\"Reset\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"XEU-Ia-4j2\">\n                                    <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                </buttonCell>\n                                <connections>\n                                    <action selector=\"resetWebKeys:\" target=\"WwD-v0-S8d\" id=\"lGS-Oz-umV\"/>\n                                </connections>\n                            </button>\n                            <textField identifier=\"settingsWebHost\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"QTV-x3-Da5\" userLabel=\"HostValue\">\n                                <rect key=\"frame\" x=\"234\" y=\"404\" width=\"151\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"151\" id=\"W4z-WO-PTu\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"example.com\" drawsBackground=\"YES\" id=\"0Qp-Is-dNs\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"host:\" target=\"X76-X8-PbG\" id=\"zMJ-6q-0Zn\"/>\n                                </connections>\n                            </textField>\n                            <textField identifier=\"settingsWebPort\" focusRingType=\"none\" verticalHuggingPriority=\"750\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qqs-mC-mg8\">\n                                <rect key=\"frame\" x=\"234\" y=\"373\" width=\"77\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"77\" id=\"no0-CF-N56\"/>\n                                </constraints>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" selectable=\"YES\" editable=\"YES\" sendsActionOnEndEditing=\"YES\" borderStyle=\"bezel\" placeholderString=\"22\" drawsBackground=\"YES\" id=\"uHf-35-KHR\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"controlTextColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                                <connections>\n                                    <action selector=\"port:\" target=\"X76-X8-PbG\" id=\"zRQ-in-Rn5\"/>\n                                </connections>\n                            </textField>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"eNd-rT-JgT\" firstAttribute=\"leading\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"35\" id=\"0LB-Dk-H4m\"/>\n                            <constraint firstItem=\"Lfk-dJ-eYH\" firstAttribute=\"centerX\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"centerX\" id=\"0Oi-eH-cZj\"/>\n                            <constraint firstItem=\"38E-P8-sdH\" firstAttribute=\"trailing\" secondItem=\"ef1-zy-Vs0\" secondAttribute=\"trailing\" id=\"0bs-2O-kiG\"/>\n                            <constraint firstItem=\"oHV-K7-pRq\" firstAttribute=\"leading\" secondItem=\"lCo-ku-pRS\" secondAttribute=\"leading\" id=\"0oG-EG-yEQ\"/>\n                            <constraint firstItem=\"qqs-mC-mg8\" firstAttribute=\"centerY\" secondItem=\"Zgg-g2-JdS\" secondAttribute=\"centerY\" id=\"0tg-3r-pKx\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"uVS-UC-gNC\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"2Mm-9E-DPv\"/>\n                            <constraint firstItem=\"ehk-E6-jpV\" firstAttribute=\"leading\" secondItem=\"qqs-mC-mg8\" secondAttribute=\"leading\" id=\"2jF-JP-FtK\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"Lfk-dJ-eYH\" secondAttribute=\"bottom\" constant=\"35\" id=\"2st-v5-Ygx\"/>\n                            <constraint firstItem=\"M2V-5H-D91\" firstAttribute=\"centerY\" secondItem=\"pBL-yA-rtI\" secondAttribute=\"centerY\" id=\"3ab-Pw-69P\"/>\n                            <constraint firstItem=\"XUd-k8-fNm\" firstAttribute=\"centerY\" secondItem=\"jwc-Mi-vbr\" secondAttribute=\"centerY\" id=\"5dM-iM-QMZ\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"pb8-h4-LhO\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"6Jy-qq-MrL\"/>\n                            <constraint firstItem=\"M2V-5H-D91\" firstAttribute=\"baseline\" secondItem=\"pBL-yA-rtI\" secondAttribute=\"firstBaseline\" id=\"6RP-LI-d7F\"/>\n                            <constraint firstItem=\"Zc9-cU-2GY\" firstAttribute=\"trailing\" secondItem=\"ef1-zy-Vs0\" secondAttribute=\"trailing\" id=\"6n2-Us-Qqh\"/>\n                            <constraint firstItem=\"XUd-k8-fNm\" firstAttribute=\"leading\" secondItem=\"ycX-Lf-Ogr\" secondAttribute=\"leading\" id=\"6nz-tO-4aE\"/>\n                            <constraint firstItem=\"38E-P8-sdH\" firstAttribute=\"top\" secondItem=\"Zgg-g2-JdS\" secondAttribute=\"bottom\" constant=\"15\" id=\"9wH-YH-Tsn\"/>\n                            <constraint firstItem=\"uVS-UC-gNC\" firstAttribute=\"leading\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"35\" id=\"Akm-Zz-z5c\"/>\n                            <constraint firstItem=\"ycX-Lf-Ogr\" firstAttribute=\"centerY\" secondItem=\"PWy-Mv-FmM\" secondAttribute=\"centerY\" id=\"B0b-Xt-eeb\"/>\n                            <constraint firstItem=\"PWy-Mv-FmM\" firstAttribute=\"trailing\" secondItem=\"pBL-yA-rtI\" secondAttribute=\"trailing\" id=\"Bg9-6u-NKS\"/>\n                            <constraint firstItem=\"M2V-5H-D91\" firstAttribute=\"baseline\" secondItem=\"pBL-yA-rtI\" secondAttribute=\"baseline\" id=\"Bwj-zg-SEm\"/>\n                            <constraint firstItem=\"XxT-6E-AmS\" firstAttribute=\"top\" secondItem=\"ehk-E6-jpV\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"Ec4-IA-g7c\"/>\n                            <constraint firstItem=\"qqs-mC-mg8\" firstAttribute=\"top\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"top\" constant=\"168\" id=\"FUH-xM-AXF\"/>\n                            <constraint firstItem=\"ycX-Lf-Ogr\" firstAttribute=\"baseline\" secondItem=\"PWy-Mv-FmM\" secondAttribute=\"baseline\" id=\"FiE-Js-YyI\"/>\n                            <constraint firstItem=\"MMZ-ZU-abQ\" firstAttribute=\"top\" secondItem=\"XxT-6E-AmS\" secondAttribute=\"bottom\" constant=\"15\" id=\"FlP-Jx-oqy\"/>\n                            <constraint firstItem=\"t4Y-nY-xQx\" firstAttribute=\"centerY\" secondItem=\"DCf-Af-hOC\" secondAttribute=\"centerY\" id=\"G1z-9S-jhz\"/>\n                            <constraint firstItem=\"sJC-70-IBX\" firstAttribute=\"top\" secondItem=\"uVS-UC-gNC\" secondAttribute=\"bottom\" constant=\"25\" id=\"HAf-ap-Iry\"/>\n                            <constraint firstItem=\"QTV-x3-Da5\" firstAttribute=\"centerY\" secondItem=\"ef1-zy-Vs0\" secondAttribute=\"centerY\" id=\"HSx-bY-by1\"/>\n                            <constraint firstItem=\"lCo-ku-pRS\" firstAttribute=\"top\" secondItem=\"KP8-dY-CEz\" secondAttribute=\"bottom\" constant=\"20\" id=\"Hax-iJ-21S\"/>\n                            <constraint firstItem=\"QTV-x3-Da5\" firstAttribute=\"leading\" secondItem=\"DCf-Af-hOC\" secondAttribute=\"leading\" id=\"I8o-MD-Fkr\"/>\n                            <constraint firstItem=\"XUd-k8-fNm\" firstAttribute=\"baseline\" secondItem=\"jwc-Mi-vbr\" secondAttribute=\"firstBaseline\" id=\"IDe-y8-AUw\"/>\n                            <constraint firstItem=\"KP8-dY-CEz\" firstAttribute=\"leading\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"35\" id=\"IZh-O8-ZQt\"/>\n                            <constraint firstItem=\"38E-P8-sdH\" firstAttribute=\"centerX\" secondItem=\"Zc9-cU-2GY\" secondAttribute=\"centerX\" id=\"JNy-Dd-VHu\"/>\n                            <constraint firstItem=\"ehk-E6-jpV\" firstAttribute=\"leading\" secondItem=\"QTV-x3-Da5\" secondAttribute=\"leading\" id=\"LN5-bg-zVf\"/>\n                            <constraint firstItem=\"pb8-h4-LhO\" firstAttribute=\"leading\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"35\" id=\"MD2-bE-ACP\"/>\n                            <constraint firstItem=\"DCf-Af-hOC\" firstAttribute=\"leading\" secondItem=\"sJC-70-IBX\" secondAttribute=\"trailing\" constant=\"10\" id=\"MX3-Os-KOh\"/>\n                            <constraint firstItem=\"sQu-2C-39G\" firstAttribute=\"top\" secondItem=\"lCo-ku-pRS\" secondAttribute=\"bottom\" constant=\"20\" id=\"Mx6-5a-9rS\"/>\n                            <constraint firstItem=\"XxT-6E-AmS\" firstAttribute=\"centerY\" secondItem=\"Zc9-cU-2GY\" secondAttribute=\"centerY\" id=\"N9D-Ja-xdD\"/>\n                            <constraint firstItem=\"oHV-K7-pRq\" firstAttribute=\"trailing\" secondItem=\"lCo-ku-pRS\" secondAttribute=\"trailing\" id=\"NRL-RK-QEj\"/>\n                            <constraint firstItem=\"38E-P8-sdH\" firstAttribute=\"centerX\" secondItem=\"ef1-zy-Vs0\" secondAttribute=\"centerX\" id=\"Op3-I7-drb\"/>\n                            <constraint firstAttribute=\"centerX\" secondItem=\"jwc-Mi-vbr\" secondAttribute=\"trailing\" constant=\"10\" id=\"PZe-i0-mz9\"/>\n                            <constraint firstItem=\"ehk-E6-jpV\" firstAttribute=\"top\" secondItem=\"qqs-mC-mg8\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"PoS-1J-4Sa\"/>\n                            <constraint firstItem=\"XUd-k8-fNm\" firstAttribute=\"baseline\" secondItem=\"jwc-Mi-vbr\" secondAttribute=\"baseline\" id=\"PqW-Ge-8Nt\"/>\n                            <constraint firstItem=\"KP8-dY-CEz\" firstAttribute=\"top\" secondItem=\"eNd-rT-JgT\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"PvY-qB-vRg\"/>\n                            <constraint firstItem=\"ycX-Lf-Ogr\" firstAttribute=\"baseline\" secondItem=\"PWy-Mv-FmM\" secondAttribute=\"firstBaseline\" id=\"QoF-Yf-p3I\"/>\n                            <constraint firstItem=\"XxT-6E-AmS\" firstAttribute=\"leading\" secondItem=\"QTV-x3-Da5\" secondAttribute=\"leading\" id=\"RG6-4J-tc7\"/>\n                            <constraint firstItem=\"XUd-k8-fNm\" firstAttribute=\"trailing\" secondItem=\"ycX-Lf-Ogr\" secondAttribute=\"trailing\" id=\"RaJ-Ks-cKU\"/>\n                            <constraint firstItem=\"ycX-Lf-Ogr\" firstAttribute=\"leading\" secondItem=\"M2V-5H-D91\" secondAttribute=\"leading\" id=\"Rul-41-U0O\"/>\n                            <constraint firstItem=\"eNd-rT-JgT\" firstAttribute=\"top\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"top\" constant=\"35\" id=\"SAV-1M-vwC\"/>\n                            <constraint firstItem=\"pBL-yA-rtI\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"SWH-im-0MK\"/>\n                            <constraint firstItem=\"ycX-Lf-Ogr\" firstAttribute=\"trailing\" secondItem=\"M2V-5H-D91\" secondAttribute=\"trailing\" id=\"Srp-fb-STQ\"/>\n                            <constraint firstItem=\"QTV-x3-Da5\" firstAttribute=\"leading\" secondItem=\"ef1-zy-Vs0\" secondAttribute=\"trailing\" constant=\"10\" id=\"SyG-Vm-i1C\"/>\n                            <constraint firstItem=\"ehk-E6-jpV\" firstAttribute=\"trailing\" secondItem=\"QTV-x3-Da5\" secondAttribute=\"trailing\" id=\"TBZ-rV-zLo\"/>\n                            <constraint firstAttribute=\"centerX\" secondItem=\"sJC-70-IBX\" secondAttribute=\"trailing\" constant=\"10\" id=\"USL-u0-gcQ\"/>\n                            <constraint firstItem=\"Zgg-g2-JdS\" firstAttribute=\"trailing\" secondItem=\"ef1-zy-Vs0\" secondAttribute=\"trailing\" id=\"Uzi-Sj-V06\"/>\n                            <constraint firstItem=\"pBL-yA-rtI\" firstAttribute=\"top\" secondItem=\"pb8-h4-LhO\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"VBm-ky-asT\"/>\n                            <constraint firstItem=\"oHV-K7-pRq\" firstAttribute=\"top\" secondItem=\"XUd-k8-fNm\" secondAttribute=\"bottom\" constant=\"15\" id=\"Vsa-EG-drX\"/>\n                            <constraint firstItem=\"lCo-ku-pRS\" firstAttribute=\"leading\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"Wp8-gX-6It\"/>\n                            <constraint firstItem=\"Zc9-cU-2GY\" firstAttribute=\"top\" secondItem=\"38E-P8-sdH\" secondAttribute=\"bottom\" constant=\"15\" id=\"Zgm-dm-Sgn\"/>\n                            <constraint firstItem=\"XxT-6E-AmS\" firstAttribute=\"trailing\" secondItem=\"QTV-x3-Da5\" secondAttribute=\"trailing\" id=\"a9Q-T3-sSD\"/>\n                            <constraint firstItem=\"uVS-UC-gNC\" firstAttribute=\"top\" secondItem=\"ycX-Lf-Ogr\" secondAttribute=\"bottom\" constant=\"20\" id=\"bGX-I1-8n7\"/>\n                            <constraint firstItem=\"sQu-2C-39G\" firstAttribute=\"leading\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"35\" id=\"bRz-88-o2k\"/>\n                            <constraint firstItem=\"pb8-h4-LhO\" firstAttribute=\"top\" secondItem=\"MMZ-ZU-abQ\" secondAttribute=\"bottom\" constant=\"20\" id=\"bpS-cX-Tyh\"/>\n                            <constraint firstItem=\"38E-P8-sdH\" firstAttribute=\"baseline\" secondItem=\"ehk-E6-jpV\" secondAttribute=\"baseline\" id=\"bx5-6b-jYp\"/>\n                            <constraint firstItem=\"M2V-5H-D91\" firstAttribute=\"leading\" secondItem=\"XxT-6E-AmS\" secondAttribute=\"leading\" id=\"bye-bi-293\"/>\n                            <constraint firstItem=\"t4Y-nY-xQx\" firstAttribute=\"width\" secondItem=\"DCf-Af-hOC\" secondAttribute=\"width\" id=\"c7B-tn-OTc\"/>\n                            <constraint firstItem=\"PWy-Mv-FmM\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"cD7-dO-coi\"/>\n                            <constraint firstItem=\"MMZ-ZU-abQ\" firstAttribute=\"leading\" secondItem=\"lCo-ku-pRS\" secondAttribute=\"leading\" id=\"e3R-kO-cj9\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"eNd-rT-JgT\" secondAttribute=\"trailing\" constant=\"35\" id=\"e9J-Ng-kUm\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"lCo-ku-pRS\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"fJ9-Zm-DGb\"/>\n                            <constraint firstItem=\"XUd-k8-fNm\" firstAttribute=\"top\" secondItem=\"DCf-Af-hOC\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"iw7-Mm-O5d\"/>\n                            <constraint firstItem=\"MMZ-ZU-abQ\" firstAttribute=\"trailing\" secondItem=\"lCo-ku-pRS\" secondAttribute=\"trailing\" id=\"jcI-z1-lp9\"/>\n                            <constraint firstItem=\"Lfk-dJ-eYH\" firstAttribute=\"top\" secondItem=\"oHV-K7-pRq\" secondAttribute=\"bottom\" constant=\"20\" id=\"kLy-oV-UH1\"/>\n                            <constraint firstItem=\"sJC-70-IBX\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" id=\"lT2-Fv-mtu\"/>\n                            <constraint firstItem=\"ef1-zy-Vs0\" firstAttribute=\"top\" secondItem=\"sQu-2C-39G\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"lfu-Qr-wb4\"/>\n                            <constraint firstItem=\"DCf-Af-hOC\" firstAttribute=\"centerY\" secondItem=\"sJC-70-IBX\" secondAttribute=\"centerY\" id=\"lgT-Gv-15J\"/>\n                            <constraint firstItem=\"jwc-Mi-vbr\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"tsp-KF-Yi6\" secondAttribute=\"leading\" constant=\"145\" id=\"pV2-fd-1dU\"/>\n                            <constraint firstItem=\"6Pu-ln-xgk\" firstAttribute=\"leading\" secondItem=\"KP8-dY-CEz\" secondAttribute=\"trailing\" constant=\"8\" symbolic=\"YES\" id=\"rXF-ew-oOJ\"/>\n                            <constraint firstItem=\"t4Y-nY-xQx\" firstAttribute=\"leading\" secondItem=\"DCf-Af-hOC\" secondAttribute=\"trailing\" constant=\"12\" symbolic=\"YES\" id=\"sAJ-Id-mbU\"/>\n                            <constraint firstItem=\"ycX-Lf-Ogr\" firstAttribute=\"top\" secondItem=\"M2V-5H-D91\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"t7T-PN-gkL\"/>\n                            <constraint firstItem=\"6Pu-ln-xgk\" firstAttribute=\"centerY\" secondItem=\"KP8-dY-CEz\" secondAttribute=\"centerY\" id=\"tsv-N8-8zZ\"/>\n                            <constraint firstItem=\"qqs-mC-mg8\" firstAttribute=\"top\" secondItem=\"QTV-x3-Da5\" secondAttribute=\"bottom\" constant=\"10\" symbolic=\"YES\" id=\"uPM-Ot-N2V\"/>\n                            <constraint firstItem=\"Zc9-cU-2GY\" firstAttribute=\"centerX\" secondItem=\"Zgg-g2-JdS\" secondAttribute=\"centerX\" id=\"vH9-Er-t1D\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"sQu-2C-39G\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"x8s-r9-a0f\"/>\n                            <constraint firstItem=\"M2V-5H-D91\" firstAttribute=\"trailing\" secondItem=\"XxT-6E-AmS\" secondAttribute=\"trailing\" id=\"xTf-q1-pA0\"/>\n                            <constraint firstAttribute=\"centerX\" secondItem=\"pBL-yA-rtI\" secondAttribute=\"trailing\" constant=\"10\" id=\"zsk-b3-Nl8\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"host\" destination=\"QTV-x3-Da5\" id=\"Fr6-Kg-YWv\"/>\n                        <outlet property=\"key\" destination=\"DCf-Af-hOC\" id=\"Q0K-ra-5ij\"/>\n                        <outlet property=\"passphrase\" destination=\"XUd-k8-fNm\" id=\"lIX-oR-dJj\"/>\n                        <outlet property=\"password\" destination=\"ycX-Lf-Ogr\" id=\"IJo-eV-9IC\"/>\n                        <outlet property=\"path\" destination=\"ehk-E6-jpV\" id=\"9qc-Y8-Ls2\"/>\n                        <outlet property=\"port\" destination=\"qqs-mC-mg8\" id=\"Unn-VB-l6b\"/>\n                        <outlet property=\"publishCustom\" destination=\"6Pu-ln-xgk\" id=\"loA-RM-KPZ\"/>\n                        <outlet property=\"publishFSNotes\" destination=\"KP8-dY-CEz\" id=\"2jP-IW-sYB\"/>\n                        <outlet property=\"rsaPath\" destination=\"sJC-70-IBX\" id=\"8oY-RI-eD5\"/>\n                        <outlet property=\"uploadAndTest\" destination=\"Lfk-dJ-eYH\" id=\"8rr-4V-tq2\"/>\n                        <outlet property=\"username\" destination=\"M2V-5H-D91\" id=\"aj9-mm-ahK\"/>\n                        <outlet property=\"web\" destination=\"XxT-6E-AmS\" id=\"gkP-K3-q83\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"WwD-v0-S8d\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3885\" y=\"727\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"AppIconClassic\" width=\"1024\" height=\"1024\"/>\n        <image name=\"AppIconModern\" width=\"1024\" height=\"1024\"/>\n        <image name=\"NSLockUnlockedTemplate\" width=\"21\" height=\"19\"/>\n        <image name=\"NSQuickLookTemplate\" width=\"26\" height=\"17\"/>\n        <image name=\"NSShareTemplate\" width=\"19\" height=\"23\"/>\n        <image name=\"arrow.clockwise.circle\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"arrow.counterclockwise\" catalog=\"system\" width=\"14\" height=\"16\"/>\n        <image name=\"arrow.down.circle\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"arrow.up.arrow.down\" catalog=\"system\" width=\"18\" height=\"15\"/>\n        <image name=\"arrow.up.circle\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"arrow.up.left.and.arrow.down.right\" catalog=\"system\" width=\"16\" height=\"15\"/>\n        <image name=\"arrow.uturn.backward\" catalog=\"system\" width=\"15\" height=\"14\"/>\n        <image name=\"arrow.uturn.forward\" catalog=\"system\" width=\"15\" height=\"14\"/>\n        <image name=\"arrowshape.down\" catalog=\"system\" width=\"15\" height=\"16\"/>\n        <image name=\"arrowshape.up\" catalog=\"system\" width=\"15\" height=\"16\"/>\n        <image name=\"backward\" catalog=\"system\" width=\"20\" height=\"12\"/>\n        <image name=\"bold\" catalog=\"system\" width=\"11\" height=\"12\"/>\n        <image name=\"calendar\" catalog=\"system\" width=\"16\" height=\"14\"/>\n        <image name=\"checklist\" catalog=\"system\" width=\"18\" height=\"15\"/>\n        <image name=\"checklist.unchecked\" catalog=\"system\" width=\"18\" height=\"15\"/>\n        <image name=\"chevron.left.forwardslash.chevron.right\" catalog=\"system\" width=\"21\" height=\"15\"/>\n        <image name=\"clock\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"delete.right\" catalog=\"system\" width=\"17\" height=\"14\"/>\n        <image name=\"doc.viewfinder\" catalog=\"system\" width=\"16\" height=\"15\"/>\n        <image name=\"document.on.clipboard\" catalog=\"system\" width=\"16\" height=\"18\"/>\n        <image name=\"document.on.clipboard.fill\" catalog=\"system\" width=\"17\" height=\"19\"/>\n        <image name=\"document.on.document\" catalog=\"system\" width=\"16\" height=\"18\"/>\n        <image name=\"eye\" catalog=\"system\" width=\"21\" height=\"13\"/>\n        <image name=\"filemenu.and.selection\" catalog=\"system\" width=\"18\" height=\"14\"/>\n        <image name=\"folder\" catalog=\"system\" width=\"18\" height=\"14\"/>\n        <image name=\"folder.badge.gear\" catalog=\"system\" width=\"20\" height=\"15\"/>\n        <image name=\"forward\" catalog=\"system\" width=\"20\" height=\"12\"/>\n        <image name=\"gearshape\" catalog=\"system\" width=\"16\" height=\"16\"/>\n        <image name=\"globe\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"globe.badge.chevron.backward\" catalog=\"system\" width=\"18\" height=\"16\"/>\n        <image name=\"graduationcap\" catalog=\"system\" width=\"21\" height=\"18\"/>\n        <image name=\"info.circle\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"iphone.and.arrow.right.outward\" catalog=\"system\" width=\"15\" height=\"16\"/>\n        <image name=\"italic\" catalog=\"system\" width=\"10\" height=\"12\"/>\n        <image name=\"ladybug\" catalog=\"system\" width=\"18\" height=\"18\"/>\n        <image name=\"link\" catalog=\"system\" width=\"17\" height=\"17\"/>\n        <image name=\"link.badge.plus\" catalog=\"system\" width=\"18\" height=\"17\"/>\n        <image name=\"link.circle\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"list.bullet\" catalog=\"system\" width=\"16\" height=\"12\"/>\n        <image name=\"list.number\" catalog=\"system\" width=\"16\" height=\"13\"/>\n        <image name=\"lock\" catalog=\"system\" width=\"13\" height=\"15\"/>\n        <image name=\"lock.slash\" catalog=\"system\" width=\"14\" height=\"16\"/>\n        <image name=\"macwindow.badge.plus\" catalog=\"system\" width=\"21\" height=\"16\"/>\n        <image name=\"macwindow.on.rectangle\" catalog=\"system\" width=\"19\" height=\"15\"/>\n        <image name=\"magnifyingglass\" catalog=\"system\" width=\"16\" height=\"15\"/>\n        <image name=\"minus.magnifyingglass\" catalog=\"system\" width=\"16\" height=\"15\"/>\n        <image name=\"move.3d\" catalog=\"system\" width=\"16\" height=\"14\"/>\n        <image name=\"new_note_button\" width=\"76\" height=\"76\"/>\n        <image name=\"note.text\" catalog=\"system\" width=\"16\" height=\"14\"/>\n        <image name=\"paperclip\" catalog=\"system\" width=\"15\" height=\"17\"/>\n        <image name=\"pencil\" catalog=\"system\" width=\"14\" height=\"13\"/>\n        <image name=\"pin\" catalog=\"system\" width=\"15\" height=\"17\"/>\n        <image name=\"pin\" width=\"64\" height=\"64\"/>\n        <image name=\"plus.magnifyingglass\" catalog=\"system\" width=\"16\" height=\"15\"/>\n        <image name=\"prefsAdvanced\" width=\"171\" height=\"171\"/>\n        <image name=\"prefsEditor\" width=\"128\" height=\"128\"/>\n        <image name=\"prefsGeneral\" width=\"120\" height=\"120\"/>\n        <image name=\"prefsGit\" width=\"128\" height=\"128\"/>\n        <image name=\"prefsLayout\" width=\"128\" height=\"128\"/>\n        <image name=\"prefsWeb\" width=\"64\" height=\"64\"/>\n        <image name=\"printer\" catalog=\"system\" width=\"18\" height=\"16\"/>\n        <image name=\"privacy\" width=\"128\" height=\"128\"/>\n        <image name=\"questionmark.circle\" catalog=\"system\" width=\"15\" height=\"15\"/>\n        <image name=\"quote.bubble\" catalog=\"system\" width=\"17\" height=\"16\"/>\n        <image name=\"rectangle.expand.vertical\" catalog=\"system\" width=\"18\" height=\"18\"/>\n        <image name=\"scissors\" catalog=\"system\" width=\"20\" height=\"15\"/>\n        <image name=\"sidebar.left\" catalog=\"system\" width=\"18\" height=\"14\"/>\n        <image name=\"sidebar.squares.leading\" catalog=\"system\" width=\"18\" height=\"14\"/>\n        <image name=\"square.and.arrow.down\" catalog=\"system\" width=\"15\" height=\"17\"/>\n        <image name=\"square.and.arrow.up\" catalog=\"system\" width=\"15\" height=\"18\"/>\n        <image name=\"storefront\" catalog=\"system\" width=\"18\" height=\"16\"/>\n        <image name=\"strikethrough\" catalog=\"system\" width=\"14\" height=\"12\"/>\n        <image name=\"swift\" catalog=\"system\" width=\"18\" height=\"15\"/>\n        <image name=\"textformat.abc\" catalog=\"system\" width=\"25\" height=\"12\"/>\n        <image name=\"textformat.size.smaller\" catalog=\"system\" width=\"9\" height=\"9\"/>\n        <image name=\"textformat.subscript\" catalog=\"system\" width=\"15\" height=\"13\"/>\n        <image name=\"trash\" catalog=\"system\" width=\"15\" height=\"17\"/>\n        <image name=\"waveform\" catalog=\"system\" width=\"15\" height=\"16\"/>\n        <image name=\"x.squareroot\" catalog=\"system\" width=\"17\" height=\"14\"/>\n        <image name=\"xmark\" catalog=\"system\" width=\"14\" height=\"13\"/>\n        <namedColor name=\"mainBackground\">\n            <color red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes/EditorViewController+ScrollPosition.swift",
    "content": "//\n//  EditorViewController+ScrollPosition.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 22.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AppKit\n\nextension EditorViewController {\n    \n    func initScrollObserver() {\n        if let textView = vcEditor, let scrollView = textView.enclosingScrollView {\n            NotificationCenter.default.addObserver(\n                self,\n                selector: #selector(scrollViewDidScroll),\n                name: NSView.boundsDidChangeNotification,\n                object: scrollView.contentView\n            )\n            \n            scrollView.contentView.postsBoundsChangedNotifications = true\n        }\n    }\n    \n    func restoreScrollPosition() {\n        guard let textView = vcEditor,\n              let charIndex = textView.note?.scrollPosition,\n              let layoutManager = textView.layoutManager,\n              let textContainer = textView.textContainer\n        else {\n            vcEditor?.isScrollPositionSaverLocked = false\n            return\n        }\n                    \n        layoutManager.ensureLayout(for: textContainer)\n\n        let glyphIndex = layoutManager.glyphIndexForCharacter(at: charIndex)\n        let rect = layoutManager.boundingRect(forGlyphRange: NSRange(location: glyphIndex, length: 1),\n                                              in: textContainer)\n\n        textView.scroll(rect.origin)\n        textView.isScrollPositionSaverLocked = false\n    }\n    \n    @objc func scrollViewDidScroll(_ notification: Notification) {\n        guard notification.object as? NSClipView != nil else { return }\n                \n        if let textView = vcEditor, !textView.isPreviewEnabled(), !textView.isScrollPositionSaverLocked {\n            guard\n                let layoutManager = textView.layoutManager,\n                let textContainer = textView.textContainer\n            else { return }\n\n            let visibleRect = textView.enclosingScrollView!.contentView.bounds\n            let glyphRange = layoutManager.glyphRange(forBoundingRect: visibleRect,\n                                                       in: textContainer)\n\n            textView.note?.scrollPosition = layoutManager.characterIndexForGlyph(at: glyphRange.location)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/EditorViewController+Sharing.swift",
    "content": "//\n//  EditorViewController+Sharing.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 03.07.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension EditorViewController: NSSharingServicePickerDelegate {\n    func sharingServicePicker(_ sharingServicePicker: NSSharingServicePicker, sharingServicesForItems items: [Any], proposedSharingServices proposedServices: [NSSharingService]) -> [NSSharingService] {\n        var share = proposedServices\n\n        if #available(macOS 11.0, *) {\n            guard let image = NSImage(systemSymbolName: \"document.on.document\", accessibilityDescription: nil),\n                  let webImage = NSImage(named: \"web\") else {\n                \n                return proposedServices\n            }\n\n            let titleWeb = NSLocalizedString(\"Web\", comment: \"\")\n            let web = NSSharingService(title: titleWeb, image: webImage, alternateImage: nil, handler: {\n                ViewController.shared()?.uploadWebNote(NSMenuItem())\n            })\n            share.insert(web, at: 0)\n\n            let titlePlain = NSLocalizedString(\"Copy Plain Text\", comment: \"\")\n            let plainText = NSSharingService(title: titlePlain, image: image, alternateImage: image, handler: {\n                self.saveTextAtClipboard()\n            })\n            share.insert(plainText, at: 1)\n\n            let titleHTML = NSLocalizedString(\"Copy HTML\", comment: \"\")\n            let html = NSSharingService(title: titleHTML, image: image, alternateImage: image, handler: {\n                self.saveHtmlAtClipboard()\n            })\n            share.insert(html, at: 2)\n        }\n        \n        return share\n    }\n    \n    //MARK: Share Service\n        \n    public func saveTextAtClipboard() {\n        if let note = vcEditor?.note {\n            let unloadedText = note.content.unloadTasks()\n            let pasteboard = NSPasteboard.general\n            pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n            pasteboard.setString(unloadedText.string, forType: NSPasteboard.PasteboardType.string)\n        }\n    }\n    \n    public func saveHtmlAtClipboard() {\n        if let note = vcEditor?.note {\n            let unloadedText = note.content.unloadTasks()\n            if let render = renderMarkdownHTML(markdown: unloadedText.string) {\n                let pasteboard = NSPasteboard.general\n                pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n                pasteboard.setString(render, forType: NSPasteboard.PasteboardType.string)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/EditorViewController.swift",
    "content": "//\n//  EditorViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 26.06.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AppKit\nimport LocalAuthentication\nimport WebKit\nimport UserNotifications\n\nclass EditorViewController: NSViewController, NSTextViewDelegate, NSMenuItemValidation {\n    \n    public var alert: NSAlert?\n    public var noteLoading: ProgressState = .none\n    \n    public var vcEditor: EditTextView?\n    public var vcTitleLabel: TitleTextField?\n    public var vcNonSelectedLabel: NSTextField?\n    \n    public var vcPreviewButton: NSButton?\n    public var vcShareButton: NSButton?\n    public var vcLockUnlockButton: NSButton?\n    public var vcEditorScrollView: EditorScrollView?\n    \n    public var previewResizeTimer = Timer()\n    public var rowUpdaterTimer = Timer()\n    public var editorUndoManager = UndoManager()\n    \n    public var breakUndoTimer = Timer()\n    \n    // git\n    public var snapshotsTimer = Timer()\n    public var lastSnapshot: Int?\n    public var pullTimer = Timer()\n    \n    public var encPassword: NSSecureTextField?\n    public var encVerifyPassword: NSSecureTextField?\n    public var encCompletionHandler: ((String) -> Void)?\n    \n    public func initView() {\n        guard let editor = vcEditor else { return }\n        editor.delegate = self\n        \n        initScrollObserver()\n        \n        editor.isGrammarCheckingEnabled = UserDefaultsManagement.grammarChecking\n        editor.isContinuousSpellCheckingEnabled = UserDefaultsManagement.continuousSpellChecking\n        editor.smartInsertDeleteEnabled = UserDefaultsManagement.smartInsertDelete\n        editor.isAutomaticSpellingCorrectionEnabled = UserDefaultsManagement.automaticSpellingCorrection\n        editor.isAutomaticQuoteSubstitutionEnabled = UserDefaultsManagement.automaticQuoteSubstitution\n        editor.isAutomaticDataDetectionEnabled = UserDefaultsManagement.automaticDataDetection\n        editor.isAutomaticLinkDetectionEnabled = UserDefaultsManagement.automaticLinkDetection\n        editor.isAutomaticTextReplacementEnabled = UserDefaultsManagement.automaticTextReplacement\n        editor.isAutomaticDashSubstitutionEnabled = UserDefaultsManagement.automaticDashSubstitution\n    }\n        \n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n    \n    func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {\n        guard let vc = ViewController.shared() else { return false}\n        \n        // Current note\n        var note = vc.editor.note\n        \n        if note == nil {\n            note = vc.getSelectedNotes()?.first\n        }\n        \n        let ident = menuItem.identifier?.rawValue\n        \n        if let title = menuItem.menu?.identifier?.rawValue {\n            switch title {\n            case \"fsnotesMenu\":\n                if menuItem.identifier?.rawValue == \"fsnotes.emptyBin\" {\n                    menuItem.keyEquivalentModifierMask = UserDefaultsManagement.focusInEditorOnNoteSelect\n                    ? [.command, .option, .shift]\n                    : [.command, .shift]\n                    \n                    menuItem.title = NSLocalizedString(\"Empty Bin\", comment: \"\")\n                    return true\n                }\n            case \"fileMenu\":\n                return vc.processFileMenuItems(menuItem, menuId: title)\n            case \"shareMenu\":\n                return vc.processShareMenuItems(menuItem, menuId: title)\n            case \"folderMenu\":\n                return vc.processLibraryMenuItems(menuItem, menuId: title)\n            case \"findMenu\":\n                guard let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n                      evc.vcEditor?.note != nil else { return false }\n                        \n                if evc.vcEditor?.markdownView == nil {\n                    if [\"findMenu.find\",\n                        \"findMenu.findAndReplace\",\n                        \"findMenu.next\",\n                        \"findMenu.prev\",\n                        \"findMenu.selectionToFind\"\n                    ].contains(menuItem.identifier?.rawValue) {\n                        return true\n                    }\n                } else {\n                    if [\"findMenu.find\",\n                        \"findMenu.next\",\n                        \"findMenu.prev\",\n                        \"findMenu.selectionToFind\"\n                    ].contains(menuItem.identifier?.rawValue) {\n                        return true\n                    }\n                }\n\n                return false\n            case \"viewSortBy\":\n                let iconName = UserDefaultsManagement.sortDirection ? \"arrow.down\" : \"arrow.up\"\n                \n                switch menuItem.tag {\n                case 1:\n                    if UserDefaultsManagement.sort == .modificationDate {\n                        if #available(macOS 11.0, *) {\n                            menuItem.image = NSImage.init(systemSymbolName: iconName, accessibilityDescription: nil)\n                            menuItem.state = .off\n                        } else {\n                            menuItem.state = .on\n                            menuItem.image = NSImage()\n                        }\n                    } else {\n                        menuItem.state = .off\n                        menuItem.image = NSImage()\n                    }\n                case 2:\n                    if UserDefaultsManagement.sort == .creationDate {\n                        if #available(macOS 11.0, *) {\n                            menuItem.image = NSImage.init(systemSymbolName: iconName, accessibilityDescription: nil)\n                            menuItem.state = .off\n                        } else {\n                            menuItem.state = .on\n                            menuItem.image = NSImage()\n                        }\n                    } else {\n                        menuItem.state = .off\n                        menuItem.image = NSImage()\n                    }\n                case 3:\n                    if UserDefaultsManagement.sort == .title {\n                        if #available(macOS 11.0, *) {\n                            menuItem.image = NSImage.init(systemSymbolName: iconName, accessibilityDescription: nil)\n                            menuItem.state = .off\n                        } else {\n                            menuItem.state = .on\n                            menuItem.image = NSImage()\n                        }\n                    } else {\n                        menuItem.state = .off\n                        menuItem.image = NSImage()\n                    }\n                default:\n                    break\n                }\n            case \"showInSidebar\":\n                switch menuItem.tag {\n                case 1:\n                    menuItem.state = UserDefaultsManagement.sidebarVisibilityInbox ? .on : .off\n                case 2:\n                    menuItem.state = UserDefaultsManagement.sidebarVisibilityNotes ? .on : .off\n                case 3:\n                    menuItem.state = UserDefaultsManagement.sidebarVisibilityTodo ? .on : .off\n                case 5:\n                    menuItem.state = UserDefaultsManagement.sidebarVisibilityTrash ? .on : .off\n                case 6:\n                    menuItem.state = UserDefaultsManagement.sidebarVisibilityUntagged ? .on : .off\n                default:\n                    break\n                }\n            case \"viewMenu\":\n                \n                switch ident {\n                case \"previewMathJax\":\n                    menuItem.state = UserDefaultsManagement.mathJaxPreview ? .on : .off\n                    break\n                    \n                case \"viewMenu.historyBack\":\n                    if vc.notesTableView.historyPosition == 0 {\n                        return false\n                    }\n                    break\n                    \n                case \"viewMenu.historyForward\":\n                    if vc.notesTableView.historyPosition == vc.notesTableView.history.count - 1 {\n                        return false\n                    }\n                    break\n                    \n                case \"view.toggleNoteList\":\n                    menuItem.title = vc.isVisibleNoteList()\n                    ? NSLocalizedString(\"Hide Note List\", comment: \"\")\n                    : NSLocalizedString(\"Show Note List\", comment: \"\")\n                    break\n                    \n                case \"view.toggleSidebar\":\n                    menuItem.title = vc.isVisibleSidebar()\n                    ? NSLocalizedString(\"Hide Sidebar\", comment: \"\")\n                    : NSLocalizedString(\"Show Sidebar\", comment: \"\")\n                    break\n                    \n                case \"viewMenu.actualSize\":\n                    return UserDefaultsManagement.fontSize != UserDefaultsManagement.DefaultFontSize\n                    \n                default:\n                    break\n                }\n                \n            default:\n                break\n            }\n        }\n        \n        return true\n    }\n    \n    public func getSelectedNotes() -> [Note]? {\n        // Opened window\n        if NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true,\n           let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n           let note = evc.vcEditor?.note {\n            return [note]\n        }\n        \n        // Active main window\n        if let cvc = NSApplication.shared.keyWindow?.contentViewController,\n           cvc.isKind(of: ViewController.self),\n           let vc = ViewController.shared(),\n           let selected = vc.notesTableView.getSelectedNotes() {\n            return selected\n        }\n        \n        return nil\n    }\n    \n    public func getSelectedNote() -> Note? {\n        // Opened window\n        if NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true,\n           let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n           let note = evc.vcEditor?.note {\n            return note\n        }\n        \n        // Active main window\n        if let cvc = NSApplication.shared.keyWindow?.contentViewController,\n           cvc.isKind(of: ViewController.self),\n           let vc = ViewController.shared(),\n           let selected = vc.notesTableView.getSelectedNotes()?.first {\n            \n            return selected\n        }\n        \n        return nil\n    }\n    \n    private func isFirstResponder(responder: AnyClass) -> Bool {\n        return view.window?.firstResponder?.isKind(of: responder) == true\n    }\n    \n    private func isOpenedInNewWindow() -> Bool {\n        return NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true\n    }\n    \n    // MARK: Window bar actions\n    \n    @IBAction func textFinder(_ sender: NSMenuItem) {\n        guard let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n              evc.vcEditor?.note != nil\n        else { return }\n        \n        if let mView = evc.vcEditor?.markdownView {\n            mView.performTextFinderAction(sender)\n            return\n        }\n        \n        if let editView = evc.vcEditor {\n            editView.performFindPanelAction(sender)\n        }\n    }\n    \n    @IBAction func fsToggleLockItem(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if isFirstResponder(responder: SidebarOutlineView.self) {\n            vc.sidebarOutlineView.toggleFolderLock(sender)\n            return\n        }\n        \n        if isFirstResponder(responder: NotesTableView.self) ||\n            isFirstResponder(responder: EditTextView.self) ||\n            isOpenedInNewWindow() {\n            vc.toggleNotesLock(sender)\n            return\n        }\n    }\n    \n    @IBAction func fsDecryptItem(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if isFirstResponder(responder: SidebarOutlineView.self) {\n            vc.sidebarOutlineView.removeFolderEncryption(sender)\n            return\n        }\n        \n        if isFirstResponder(responder: NotesTableView.self) || isOpenedInNewWindow() {\n            vc.removeNoteEncryption(sender)\n            return\n        }\n    }\n    \n    @IBAction func fsRevealItem(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if isFirstResponder(responder: SidebarOutlineView.self) {\n            vc.sidebarOutlineView.revealInFinder(sender)\n            return\n        }\n        \n        if isFirstResponder(responder: NotesTableView.self) ||\n            isFirstResponder(responder: EditTextView.self) ||\n            isOpenedInNewWindow() {\n            vc.finderMenu(sender)\n            return\n        }\n    }\n    \n    @IBAction func fsRenameItem(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if isFirstResponder(responder: SidebarOutlineView.self) || isOpenedInNewWindow() {\n            vc.sidebarOutlineView.renameFolderMenu(sender)\n            return\n        }\n        \n        if isFirstResponder(responder: NotesTableView.self) ||\n            isFirstResponder(responder: EditTextView.self) {\n            vc.renameMenu(sender)\n            return\n        }\n    }\n        \n    @IBAction func toggleNotesLock(_ sender: Any) {\n        guard let vc = ViewController.shared(),\n              let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController else { return }\n        \n        let isOpenedWindow = NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true\n        \n        var notes = vc.getSelectedNotes()\n        if isOpenedWindow, let note = evc.vcEditor?.note {\n            notes = [note]\n        }\n        \n        guard let first = notes?.first, let notes = notes else { return }\n        \n        // Lock unlocked\n        if first.isUnlocked() {\n            _ = lockUnlocked(notes: notes)\n            return\n        }\n        \n        // Unlock encrypted\n        if first.container == .encryptedTextPack {\n            getMasterPassword() { password in\n                guard password.count > 0 else { return }\n                \n                for note in notes {\n                    guard note.isEncryptedAndLocked(), note.unLock(password: password) else { continue }\n                    \n                    let insertTags = note.scanContentTags().0\n                    \n                    DispatchQueue.main.async {\n                        self.reloadAllOpenedWindows(note: note)\n                        \n                        ViewController.shared()?.sidebarOutlineView?.addTags(insertTags)\n                        ViewController.shared()?.notesTableView.reloadRow(note: note)\n                    }\n                }\n            }\n            \n            return\n        }\n        \n        // Encrypt plain\n        getMasterPassword(forEncrypt: true) { password in\n            for note in notes {\n                if !note.isEncrypted(), note.encrypt(password: password) {\n                    note.password = nil\n                    \n                    DispatchQueue.main.async {\n                        self.reloadAllOpenedWindows(note: note)\n                        \n                        ViewController.shared()?.focusTable()\n                        ViewController.shared()?.notesTableView.reloadRow(note: note)\n                    }\n                }\n            }\n        }\n    }\n    \n    @IBAction func openProjectViewSettings(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else {\n            return\n        }\n        \n        if let controller = vc.storyboard?.instantiateController(withIdentifier: \"ProjectSettingsViewController\")\n            as? ProjectSettingsViewController {\n            vc.projectSettingsViewController = controller\n            \n            if let project = vc.sidebarOutlineView.getSelectedProject() {\n                vc.presentAsSheet(controller)\n                controller.load(project: project)\n            }\n        }\n    }\n    \n    @IBAction func createFolder(_ sender: Any) {\n        guard let vc = ViewController.shared(),\n              let sidebarOutlineView = vc.sidebarOutlineView else { return }\n        \n        // Call from menu bar\n        if let sender = sender as? NSMenuItem, sender.identifier?.rawValue == \"fileMenu.attach\" {\n            sidebarOutlineView.addRoot()\n            return\n        }\n        \n        // Call from popup menu or menu bar\n        var project = sidebarOutlineView.getSelectedProject()\n\n        if project == nil || project?.isVirtual == true || !isFirstResponder(responder: SidebarOutlineView.self) {\n            project = Storage.shared().getDefault()\n        }\n\n        guard let project = project, let window = MainWindowController.shared() else { return }\n\n        let alert = NSAlert()\n        vc.alert = alert\n\n        let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 290, height: 20))\n        alert.messageText = NSLocalizedString(\"New project\", comment: \"\")\n        alert.informativeText = NSLocalizedString(\"Please enter project name:\", comment: \"\")\n        alert.accessoryView = field\n        alert.alertStyle = .informational\n        alert.addButton(withTitle: NSLocalizedString(\"Add\", comment: \"\"))\n        alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n        alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n            if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                let name = field.stringValue\n                guard name.count > 0 else { return }\n                \n                OperationQueue.main.addOperation {\n                    vc.sidebarOutlineView.createProject(in: project, with: name)\n                }\n            }\n\n            NSApp.mainWindow?.makeFirstResponder(sidebarOutlineView)\n            vc.alert = nil\n        }\n\n        field.becomeFirstResponder()\n    }\n    \n    @IBAction func togglePreview(_ sender: Any) {\n        guard let editor = vcEditor else { return }\n        \n        let firstResp = view.window?.firstResponder\n\n        editor.togglePreviewState()\n        \n        if (editor.isPreviewEnabled()) {\n            \n            //Preview mode doesn't support text search\n            cancelTextSearch()\n            refillEditArea(force: true)\n\n            if let mdView = vcEditor?.editorViewController?.vcEditor?.markdownView {\n                view.window?.makeFirstResponder(mdView)\n            }\n        } else {\n            disablePreview()\n        }\n\n        if let responder = firstResp, (\n            ViewController.shared()?.search.currentEditor() == firstResp\n            || responder.isKind(of: NotesTableView.self)\n            || responder.isKind(of: SidebarOutlineView.self)\n        ) {\n            view.window?.makeFirstResponder(firstResp)\n        } else {\n            var responder: NSResponder? = vcEditor\n            \n            if vcEditor?.isPreviewEnabled() == true, let mView = vcEditor?.markdownView {\n                responder = mView\n            }\n            \n            if let responder = responder {\n                view.window?.makeFirstResponder(responder)\n            }\n        }\n\n        vcEditor?.userActivity?.needsSave = true\n        \n        editor.note?.project.saveNotesPreview()\n    }\n    \n    @IBAction func toggleMathJax(_ sender: NSMenuItem) {\n        sender.state = sender.state == .on ? .off : .on\n\n        UserDefaultsManagement.mathJaxPreview = sender.state == .on\n\n        refillEditArea(force: true)\n    }\n        \n    @IBAction func shareSheet(_ sender: NSButton) {\n        if let note = vcEditor?.note {\n            let sharingPicker = NSSharingServicePicker(items: [\n                note.content,\n                note.url\n            ])\n            sharingPicker.delegate = self\n            sharingPicker.show(relativeTo: NSZeroRect, of: sender, preferredEdge: .minY)\n        }\n    }\n    \n    // MARK: File menu\n    \n    @IBAction func printNotes(_ sender: NSMenuItem) {\n        guard let notes = getSelectedNotes(), let note = notes.first else { return }\n        \n        if note.isMarkdown() {\n            printMarkdownPreview()\n            return\n        }\n        \n        let pv = NSTextView(frame: NSMakeRect(0, 0, 528, 688))\n        pv.textStorage?.append(note.content)\n        \n        let printInfo = NSPrintInfo.shared\n        printInfo.isHorizontallyCentered = false\n        printInfo.isVerticallyCentered = false\n        printInfo.scalingFactor = 1\n        printInfo.topMargin = 40\n        printInfo.leftMargin = 40\n        printInfo.rightMargin = 40\n        printInfo.bottomMargin = 40\n        \n        let operation: NSPrintOperation = NSPrintOperation(view: pv, printInfo: printInfo)\n        operation.printPanel.options.insert(NSPrintPanel.Options.showsPaperSize)\n        operation.printPanel.options.insert(NSPrintPanel.Options.showsOrientation)\n        operation.run()\n    }\n    \n    @IBAction func finderMenu(_ sender: NSMenuItem) {\n        guard let notes = getSelectedNotes() else { return }\n        \n        var urls = [URL]()\n        for note in notes {\n            urls.append(note.url)\n        }\n        \n        NSWorkspace.shared.activateFileViewerSelecting(urls)\n    }\n    \n    @IBAction func pinMenu(_ sender: Any) {\n        guard let notes = getSelectedNotes() else { return }\n        \n        ViewController.shared()?.pin(selectedNotes: notes, toggle: true)\n    }\n    \n    @IBAction func editorMenu(_ sender: Any) {\n        guard let notes = getSelectedNotes() else { return }\n        \n        ViewController.shared()?.external(selectedNotes: notes)\n    }\n    \n    @IBAction func copyURL(_ sender: Any) {\n        guard let note = getSelectedNotes()?.first else { return }\n        \n        if let title = note.title.addingPercentEncoding(withAllowedCharacters: .alphanumerics) {\n\n            let name = \"fsnotes://find?id=\\(title)\"\n            let pasteboard = NSPasteboard.general\n            pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n            pasteboard.setString(name, forType: NSPasteboard.PasteboardType.string)\n            \n            UNUserNotificationCenter.current().getNotificationSettings { settings in\n                guard settings.authorizationStatus == .notDetermined else { return }\n\n                UNUserNotificationCenter.current().requestAuthorization(\n                    options: [.alert, .sound]\n                ) { _, _ in }\n            }\n\n            let content = UNMutableNotificationContent()\n            content.title = NSLocalizedString(\"URL has been copied to clipboard\", comment: \"\")\n            content.body = name\n            content.sound = .default\n\n            UNUserNotificationCenter.current().add(\n                UNNotificationRequest(\n                identifier: UUID().uuidString,\n                content: content,\n                trigger: nil\n            ))\n        }\n    }\n    \n    @IBAction func copyTitle(_ sender: Any) {\n        guard let note = getSelectedNotes()?.first else { return }\n        \n        let pasteboard = NSPasteboard.general\n        pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n        pasteboard.setString(note.title, forType: NSPasteboard.PasteboardType.string)\n    }\n    \n    @IBAction func removeNoteEncryption(_ sender: Any) {\n        guard var notes = getSelectedNotes(),\n              let vc = ViewController.shared() else { return }\n\n        notes = decryptUnlocked(notes: notes)\n        guard notes.count > 0 else { return }\n\n        getMasterPassword() { password in\n            for note in notes {\n                if note.container == .encryptedTextPack {\n                    let success = note.unEncrypt(password: password)\n                    if success && notes.count == 0x01 {\n                        note.password = nil\n                        DispatchQueue.main.async {\n                            self.reloadAllOpenedWindows(note: note)\n                        }\n                    }\n                }\n                \n                vc.notesTableView.reloadRow(note: note)\n            }\n        }\n    }\n    \n    @IBAction func changeCreationDate(_ sender: Any) {\n        guard let notes = getSelectedNotes() else { return }\n        guard let note = notes.first else { return }\n        guard let creationDate = note.getFileCreationDate() else { return }\n        guard let window = view.window else { return }\n\n        alert = NSAlert()\n        let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 290, height: 20))\n\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n        let date = formatter.string(from: creationDate)\n\n        field.stringValue = date\n        field.placeholderString = \"2020-08-28 21:59:07\"\n\n        alert?.messageText = NSLocalizedString(\"Change Creation Date\", comment: \"Menu\") + \":\"\n        alert?.accessoryView = field\n        alert?.alertStyle = .informational\n        alert?.addButton(withTitle: \"OK\")\n        alert?.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n            if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                for note in notes {\n                    if note.setCreationDate(string: field.stringValue) {\n                        ViewController.shared()?.notesTableView.reloadRow(note: note)\n                    }\n                }\n            }\n\n            self.alert = nil\n        }\n\n        field.becomeFirstResponder()\n    }\n        \n    @IBAction func createInNewWindow(_ sender: Any) {\n        var content = String()\n        \n        if let inlineTags = ViewController.shared()?.sidebarOutlineView.getSelectedInlineTags() {\n            content = inlineTags\n        }\n        \n        if let note = createNote(content: content, openInNewWindow: true) {\n            openInNewWindow(note: note)\n        }\n    }\n    \n    @IBAction func quickNote(_ sender: Any) {\n        if let note = createNote(content: \"\", openInNewWindow: true) {\n            NSApp.activate(ignoringOtherApps: true)\n            \n            if !NSApp.isActive {\n                AppDelegate.mainWindowController?.window?.miniaturize(self)\n            }\n            \n            openInNewWindow(note: note)\n        }\n    }\n    \n    @IBAction func historyMenu(_ sender: Any) {\n        guard let cvc = NSApplication.shared.keyWindow?.contentViewController,\n              let vc = ViewController.shared(),\n              let note = getSelectedNotes()?.first else { return }\n\n        let moveMenu = NSMenu()\n        moveMenu.identifier = NSUserInterfaceItemIdentifier(\"fileMenu.history\")\n        let commits = note.getCommits()\n\n        // Port\n        if commits.count == 0 {\n            return\n        }\n\n        for commit in commits {\n            let menuItem = NSMenuItem()\n            menuItem.title = commit.getDate()\n            menuItem.representedObject = commit\n            menuItem.action = #selector(vc.checkoutRevision(_:))\n            moveMenu.addItem(menuItem)\n        }\n\n        let general = moveMenu.item(at: 0)\n\n        // Main window\n        if cvc.isKind(of: ViewController.self),\n           vc.notesTableView.selectedRow >= 0 {\n            let view = vc.notesTableView.rect(ofRow: vc.notesTableView.selectedRow)\n            let x = vc.splitView.subviews[0].frame.width + 5\n            moveMenu.popUp(positioning: general, at: NSPoint(x: x, y: view.origin.y + 8), in: vc.notesTableView)\n            return\n        }\n\n        // Opened in new window\n        if cvc.isKind(of: NoteViewController.self) {\n            moveMenu.popUp(positioning: general, at: NSPoint(x: view.frame.width + 10, y: view.frame.height - 5), in: view)\n        }\n    }\n    \n    @IBAction func duplicate(_ sender: Any) {\n        guard let notes = getSelectedNotes() else { return }\n        \n        for note in notes {\n            let src = note.url\n            let dst = NameHelper.generateCopy(file: note.url)\n\n            if note.isTextBundle() || note.isEncrypted() {\n                try? FileManager.default.copyItem(at: src, to: dst)\n                \n                continue\n            }\n\n            let name = dst.deletingPathExtension().lastPathComponent\n            let noteDupe = Note(name: name, project: note.project, type: note.type, cont: note.container)\n            noteDupe.content = NSMutableAttributedString(string: note.content.string)\n\n            // Clone images\n            if note.type == .Markdown && note.container == .none {\n                let images = note.content.getImagesAndFiles()\n                for image in images {\n                    noteDupe.move(from: image.url, imagePath: image.path, to: note.project, copy: true)\n                }\n            }\n\n            if noteDupe.save() {\n                Storage.shared().add(noteDupe)\n            }\n\n\n            ViewController.shared()?.notesTableView.insertRows(notes: [noteDupe])\n        }\n    }\n    \n    @IBAction func importNote(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        \n        let panel = NSOpenPanel()\n        panel.allowsMultipleSelection = true\n        panel.canChooseDirectories = false\n        panel.canChooseFiles = true\n        panel.canCreateDirectories = false\n        panel.begin { (result) -> Void in\n            if result == NSApplication.ModalResponse.OK {\n                let urls = panel.urls\n                \n                if let project = vc.sidebarOutlineView.getSelectedProject() ?? Storage.shared().getDefault() {\n                    for url in urls {\n                        _ = vc.copy(project: project, url: url)\n                    }\n                }\n            }\n        }\n    }\n    \n    @objc func moveNote(_ sender: NSMenuItem) {\n        let project = sender.representedObject as! Project\n        \n        guard let notes = getSelectedNotes() else { return }\n        \n        ViewController.shared()?.moveReq(notes: notes, project: project) { success in\n            guard success else { return }\n            \n            if let cvc = NSApplication.shared.keyWindow?.contentViewController,\n               cvc.isKind(of: NoteViewController.self) {\n                self.updateTitle(note: notes.first!)\n            }\n        }\n    }\n    \n    @IBAction func toggleContainer(_ sender: NSMenuItem) {\n        guard let notes = getSelectedNotes() else { return }\n        \n        var newContainer: NoteContainer = .textBundleV2\n        if notes.first?.container == .textBundle || notes.first?.container == .textBundleV2 {\n            newContainer = .none\n        }\n        \n        for note in notes {\n            if note.container == .encryptedTextPack {\n                continue\n            }\n            \n            note.convertContainer(to: newContainer)\n        }\n    }\n    \n    @IBAction func openWindow(_ sender: Any) {\n        guard let currentNote = ViewController.shared()?.notesTableView.getSelectedNote() else { return }\n     \n        openInNewWindow(note: currentNote)\n    }\n    \n    @IBAction func moveMenu(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n        \n        // Move menu right from notes table view\n        \n        if let cvc = NSApplication.shared.keyWindow?.contentViewController, cvc.isKind(of: ViewController.self) {\n            if vc.notesTableView.selectedRow >= 0 {\n                vc.loadMoveMenu()\n\n                let moveTitle = NSLocalizedString(\"Move\", comment: \"Menu\")\n                let moveMenu = vc.noteMenu.item(withTitle: moveTitle)\n                let view = vc.notesTableView.rect(ofRow: vc.notesTableView.selectedRow)\n                let x = vc.splitView.subviews[0].frame.width + 5\n                let general = moveMenu?.submenu?.item(at: 0)\n\n                moveMenu?.submenu?.popUp(positioning: general, at: NSPoint(x: x, y: view.origin.y + 8), in: vc.notesTableView)\n            }\n            \n            return\n            \n        // Move menu right from window\n            \n        } else {\n            vc.loadMoveMenu()\n            \n            let moveTitle = NSLocalizedString(\"Move\", comment: \"Menu\")\n            let moveMenu = vc.noteMenu.item(withTitle: moveTitle)\n            let general = moveMenu?.submenu?.item(at: 0)\n            \n            moveMenu?.submenu?.popUp(positioning: general, at: NSPoint(x: view.frame.width + 10, y: view.frame.height - 5), in: view)\n        }\n    }\n    \n    public func removeNotes(notes: [Note], forceRemove: Bool = false, rows: IndexSet? = nil) {\n        guard let vc = ViewController.shared() else { return }\n        \n        let si = vc.getSidebarItem()\n        if si?.isTrash() == true || forceRemove {\n            vc.removeForever()\n            \n            // Call from window, close it!\n            if let cvc = NSApplication.shared.keyWindow?.contentViewController,\n               cvc.isKind(of: NoteViewController.self) {\n                DispatchQueue.main.async {\n                    self.view.window?.close()\n                }\n            }\n            \n            return\n        }\n        \n        let currentNote = vc.editor.note\n        let shouldClearEditor = currentNote != nil && notes.contains(where: { $0 === currentNote })\n        UserDataService.instance.searchTrigger = true\n        vc.notesTableView.removeRows(notes: notes)\n        \n        // Delete tags\n        for note in notes {\n            let tags = note.tags\n            note.tags.removeAll()\n            vc.sidebarOutlineView.removeTags(tags)\n        }\n        \n        vc.storage.removeNotes(notes: notes) { urlMapping in\n            if let md = AppDelegate.mainWindowController {\n                let undoManager = md.notesListUndoManager\n                if let ntv = vc.notesTableView {\n                    // Register undo (restore)\n                    undoManager.registerUndo(withTarget: ntv, selector: #selector(ntv.unDelete), object: urlMapping)\n                    undoManager.setActionName(NSLocalizedString(\"Delete\", comment: \"\"))\n                }\n                \n                if let rows = rows, let minRow = rows.min(), minRow > -1 {\n                    let qty = vc.notesTableView.countNotes()\n                    if qty > minRow {\n                        vc.notesTableView.selectRow(minRow)\n                    } else {\n                        vc.notesTableView.selectRow(qty - 1)\n                    }\n                }\n                \n                UserDataService.instance.searchTrigger = false\n            }\n            \n            if shouldClearEditor {\n                vc.editor.clear()\n            }\n        }\n        \n        // Call from window, close it!\n        if let cvc = NSApplication.shared.keyWindow?.contentViewController,\n           cvc.isKind(of: NoteViewController.self) {\n            DispatchQueue.main.async {\n                self.view.window?.close()\n            }\n            return\n        }\n        \n        // If is main window – focus to notes list\n        if let cvc = NSApplication.shared.keyWindow?.contentViewController,\n           cvc.isKind(of: ViewController.self) {\n            NSApp.mainWindow?.makeFirstResponder(vc.notesTableView)\n        }\n    }\n    \n    @IBAction func actualSize(_ sender: Any) {\n        UserDefaultsManagement.codeFont = NSFont(descriptor: UserDefaultsManagement.codeFont.fontDescriptor, size: CGFloat(UserDefaultsManagement.DefaultFontSize))!\n        UserDefaultsManagement.noteFont = NSFont(descriptor: UserDefaultsManagement.noteFont.fontDescriptor, size: CGFloat(UserDefaultsManagement.DefaultFontSize))!\n\n        ViewController.shared()?.reloadFonts()\n    }\n\n    @IBAction func zoomIn(_ sender: Any) {\n        UserDefaultsManagement.codeFont = NSFont(descriptor: UserDefaultsManagement.codeFont.fontDescriptor, size: UserDefaultsManagement.codeFont.pointSize + 1)!\n        UserDefaultsManagement.noteFont = NSFont(descriptor: UserDefaultsManagement.noteFont.fontDescriptor, size: UserDefaultsManagement.noteFont.pointSize + 1)!\n\n        ViewController.shared()?.reloadFonts()\n    }\n\n    @IBAction func zoomOut(_ sender: Any) {\n        UserDefaultsManagement.codeFont = NSFont(descriptor: UserDefaultsManagement.codeFont.fontDescriptor, size: UserDefaultsManagement.codeFont.pointSize - 1)!\n        UserDefaultsManagement.noteFont = NSFont(descriptor: UserDefaultsManagement.noteFont.fontDescriptor, size: UserDefaultsManagement.noteFont.pointSize - 1)!\n\n        ViewController.shared()?.reloadFonts()\n    }\n    \n    @IBAction func showBackLinks(_ sender: NSMenuItem) {\n        if let appDelegate = NSApplication.shared.delegate as? AppDelegate,\n            let cvc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n            let note = cvc.vcEditor?.note {\n            ViewController.shared()?.editor.clear()\n            appDelegate.search(query: \"[[\" + note.title + \"]]\")\n        }\n    }\n\n    // MARK: Dep methods\n    \n    public func openInNewWindow(note: Note, frame: NSRect? = nil, preview: Bool = false) {\n        guard let windowController = NSStoryboard(name: \"Main\", bundle: nil)\n            .instantiateController(withIdentifier: \"noteWindowController\") as? NSWindowController else { return }\n        \n        windowController.showWindow(nil)\n        windowController.window?.makeKeyAndOrderFront(windowController)\n                \n        let viewController = windowController.contentViewController as! NoteViewController\n        viewController.initWindow()\n                \n        viewController.editor.changePreviewState(preview)\n        viewController.editor.fill(note: note)\n        \n        if note.isEncryptedAndLocked() {\n            viewController.lockUnlockButton.image = NSImage(named: NSImage.lockLockedTemplateName)\n            viewController.toggleNotesLock(self)\n        } else {\n            viewController.lockUnlockButton.image = NSImage(named: NSImage.lockUnlockedTemplateName)\n        }\n        \n        AppDelegate.noteWindows.insert(windowController, at: 0)\n        \n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n            if let frame = frame {\n                windowController.window?.setFrame(frame, display: true)\n            }\n            \n            viewController.view.window?.makeFirstResponder(viewController.editor)\n        }\n    }\n    \n    func cancelTextSearch() {\n        let menu = NSMenuItem(title: \"\", action: nil, keyEquivalent: \"\")\n        menu.tag = NSTextFinder.Action.hideFindInterface.rawValue\n        vcEditor?.performTextFinderAction(menu)\n    }\n\n    func disablePreview() {\n        guard let textView = self.vcEditor else { return }\n        \n        textView.disablePreviewEditorAndNote()\n        \n        textView.markdownView?.getScrollPosition { point in\n            self.vcEditor?.note?.contentOffsetWeb = point\n        }\n        \n        textView.markdownView?.removeFromSuperview()\n        textView.markdownView = nil\n        \n        textView.subviews.removeAll(where: { $0.isKind(of: MPreviewView.self) })\n\n        refillEditArea()\n    }\n    \n    public func viewDidResize() {\n        guard vcEditor?.isPreviewEnabled() == true else { return }\n\n        if noteLoading != .incomplete {\n            previewResizeTimer.invalidate()\n            previewResizeTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(reloadPreview), userInfo: nil, repeats: false)\n        }\n    }\n    \n    @objc private func reloadPreview() {\n        DispatchQueue.main.async {\n            MPreviewView.template = nil\n            self.refillEditArea(force: true)\n        }\n    }\n    \n    public func updateTitle(note: Note) {\n        guard let vcTitleLabel = vcTitleLabel else { return }\n        \n        var titleString = note.getFileName()\n\n        if titleString.isValidUUID {\n            titleString = String()\n        }\n\n        if titleString.count > 0 {\n            vcTitleLabel.stringValue = note.project.getNestedLabel() + \" › \" + titleString\n        } else {\n            vcTitleLabel.stringValue = note.project.getNestedLabel()\n        }\n\n        vcTitleLabel.currentEditor()?.selectedRange = NSRange(location: 0, length: 0)\n\n        view.window?.title = vcTitleLabel.stringValue\n    }\n    \n    func refillEditArea(force: Bool = false) {\n        noteLoading = .incomplete\n        vcPreviewButton?.state = vcEditor?.isPreviewEnabled() == true ? .on : .off\n\n        if let note = vcEditor?.note {\n            vcEditor?.fill(note: note, force: force)\n        }\n\n        noteLoading = .done\n    }\n    \n    public func unLock(notes: [Note]) {\n        getMasterPassword() { password in\n            guard password.count > 0 else { return }\n\n            var i = 0\n            for note in notes {\n                let success = note.unLock(password: password)\n                if success {\n\n                    let insertTags = note.scanContentTags().0\n                    DispatchQueue.main.async {\n                        ViewController.shared()?.sidebarOutlineView?.addTags(insertTags)\n                        ViewController.shared()?.notesTableView.reloadRow(note: note)\n                    }\n\n                    if i == 0 {\n                        note.password = password\n\n                        DispatchQueue.main.async {\n                            self.reloadAllOpenedWindows(note: note)\n                        }\n                    }\n                }\n                \n                i = i + 1\n            }\n        }\n    }\n    \n    public func reloadAllOpenedWindows(note: Note) {\n        let editors = AppDelegate.getEditTextViews()\n        \n        for editor in editors {\n            if editor.note == note {\n                editor.editorViewController?.refillEditArea(force: true)\n                \n                let lockIcon = note.isEncryptedAndLocked()\n                    ? NSImage.lockLockedTemplateName\n                    : NSImage.lockUnlockedTemplateName\n                    \n                let lockImage = NSImage(named: lockIcon)\n                \n                if let noteVC = editor.editorViewController as? NoteViewController {\n                    noteVC.lockUnlockButton.image = lockImage\n                }\n                \n                if let mainVC = editor.editorViewController as? ViewController {\n                    mainVC.lockUnlock.image = lockImage\n                }\n                \n                editor.window?.makeFirstResponder(editor)\n            }\n        }\n    }\n    \n    public func closeAllOpenedWindows(where note: Note) {\n        for editor in AppDelegate.getOpenedEditTextViews() {\n            if editor.note == note {\n                editor.window?.close()\n            }\n        }\n    }\n\n    public func getMasterPassword(forEncrypt: Bool = false, completion: @escaping (String) -> ()) {\n        if #available(OSX 10.12.2, *), UserDefaultsManagement.allowTouchID {\n            let context = LAContext()\n            context.localizedFallbackTitle = NSLocalizedString(\"Enter Master Password\", comment: \"\")\n\n            var passwordExist = false\n            do {\n                let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n                let password = try item.readPassword()\n                passwordExist = password.count > 0\n            } catch {/*_*/}\n            \n            guard passwordExist && context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) else {\n                masterPasswordPrompt(validation: forEncrypt, completion: completion)\n                return\n            }\n            \n            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: \"To access secure data\") { (success, evaluateError) in\n                \n                // Skip if cancelled\n                if let error = evaluateError as NSError? {\n                    if error.code == LAError.userCancel.rawValue || error.code == LAError.appCancel.rawValue {\n                        return\n                    }\n                }\n                \n                // Press enter password or failed TouchID\n                if !success {\n                    self.masterPasswordPrompt(validation: forEncrypt, completion: completion)\n\n                    return\n                }\n\n                do {\n                    let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n                    let password = try item.readPassword()\n\n                    completion(password)\n                    return\n                } catch {\n                    print(\"Keychain error: \\(error.localizedDescription)\")\n                }\n\n                // No password in keychain\n                self.masterPasswordPrompt(validation: forEncrypt, completion: completion)\n            }\n        } else {\n            \n            // Bio is not available or disabled\n            masterPasswordPrompt(validation: forEncrypt, completion: completion)\n        }\n    }\n    \n    @IBAction func onOkClick(_ sender: Any?) {\n        guard\n            let passwordField = encPassword,\n            let verifyPasswordField = encVerifyPassword,\n            let window = self.view.window\n        else { return }\n        \n        if passwordField.stringValue.count == 0 {\n            let alert = NSAlert()\n            alert.alertStyle = .critical\n            alert.informativeText = NSLocalizedString(\"Please try again\", comment: \"\")\n            alert.messageText = NSLocalizedString(\"Empty password\", comment: \"\")\n            alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in }\n            return\n        }\n        \n        if passwordField.stringValue != verifyPasswordField.stringValue {\n            let alert = NSAlert()\n            alert.alertStyle = .critical\n            alert.informativeText = NSLocalizedString(\"Please try again\", comment: \"\")\n            alert.messageText = NSLocalizedString(\"Wrong repeated password\", comment: \"\")\n            alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in }\n            return\n        }\n        \n        if let encCompletionHandler = encCompletionHandler {\n            encCompletionHandler(passwordField.stringValue)\n        }\n        \n        self.alert?.window.close()\n    }\n    \n    private func masterPasswordPrompt(validation: Bool = false, completion: @escaping (String) -> ()) {\n        DispatchQueue.main.async {\n            guard var window = self.view.window else { return }\n            \n            if NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true,\n               let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n               let currentWin = evc.view.window {\n                \n                window = currentWin\n            }\n\n            self.alert = NSAlert()\n            guard let alert = self.alert else { return }\n            alert.alertStyle = .informational\n        \n            if validation {\n                alert.messageText = NSLocalizedString(\"Enter an encryption password:\", comment: \"\")\n                \n                alert.addButton(withTitle: NSLocalizedString(\"OK\", comment: \"\"))\n                alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n                \n                alert.buttons[0].target = self\n                alert.buttons[0].action = #selector(self.onOkClick(_:))\n\n                // Create the NSTextFields and labels\n                let newPasswordLabel = NSTextField(labelWithString: NSLocalizedString(\"Password:\", comment: \"\"))\n                let newPasswordField = NSSecureTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24))\n                let repeatPasswordLabel = NSTextField(labelWithString: NSLocalizedString(\"Verify Password:\", comment: \"\"))\n                let repeatPasswordField = NSSecureTextField(frame: NSRect(x: 0, y: 0, width: 200, height: 24))\n                \n                self.encPassword = newPasswordField\n                self.encVerifyPassword = repeatPasswordField\n                self.encCompletionHandler = completion\n                \n                newPasswordLabel.alignment = .right\n                repeatPasswordLabel.alignment = .right\n\n                // Add the labels and text fields to a custom view\n                let containerView = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 60))\n                containerView.translatesAutoresizingMaskIntoConstraints = false\n\n                newPasswordLabel.translatesAutoresizingMaskIntoConstraints = false\n                newPasswordField.translatesAutoresizingMaskIntoConstraints = false\n                repeatPasswordLabel.translatesAutoresizingMaskIntoConstraints = false\n                repeatPasswordField.translatesAutoresizingMaskIntoConstraints = false\n\n                containerView.addSubview(newPasswordLabel)\n                containerView.addSubview(newPasswordField)\n                containerView.addSubview(repeatPasswordLabel)\n                containerView.addSubview(repeatPasswordField)\n\n                // Set the custom view as the accessory view for the NSAlert\n                alert.accessoryView = containerView\n\n                // Define constraints\n                NSLayoutConstraint.activate([\n                    newPasswordLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 8),\n                    newPasswordLabel.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 8),\n                    newPasswordField.leadingAnchor.constraint(equalTo: newPasswordLabel.trailingAnchor, constant: 8),\n                    newPasswordField.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: 0),\n                    newPasswordField.widthAnchor.constraint(equalToConstant: 200),\n                    newPasswordField.centerYAnchor.constraint(equalTo: newPasswordLabel.centerYAnchor),\n\n                    repeatPasswordLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 8),\n                    repeatPasswordLabel.topAnchor.constraint(equalTo: newPasswordLabel.bottomAnchor, constant: 8),\n                    repeatPasswordField.leadingAnchor.constraint(equalTo: repeatPasswordLabel.trailingAnchor, constant: 8),\n                    repeatPasswordField.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: 0),\n                    repeatPasswordField.widthAnchor.constraint(equalToConstant: 200),\n                    repeatPasswordField.centerYAnchor.constraint(equalTo: repeatPasswordLabel.centerYAnchor),\n\n                    containerView.widthAnchor.constraint(equalToConstant: 400),\n                    containerView.heightAnchor.constraint(equalToConstant: 60),\n                ])\n\n                // Show the NSAlert\n                alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n                    self.alert = nil\n                }\n\n                newPasswordField.becomeFirstResponder()\n                return\n            }\n            \n            let field = NSSecureTextField(frame: NSRect(x: 0, y: 0, width: 290, height: 20))\n            alert.accessoryView = field\n            alert.messageText = NSLocalizedString(\"Master password:\", comment: \"\")\n            alert.informativeText = NSLocalizedString(\"Please enter password for current note\", comment: \"\")\n            alert.addButton(withTitle: NSLocalizedString(\"OK\", comment: \"\"))\n            alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n            alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n                if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                    completion(field.stringValue)\n                }\n\n                self.alert = nil\n            }\n\n            field.becomeFirstResponder()\n        }\n    }\n\n    public func lockUnlocked(notes: [Note]) -> [Note] {\n        var notes = notes\n        var isFirst = true\n\n        for note in notes {\n            if note.isUnlocked() && note.isEncrypted() {\n                if note.lock() && isFirst {\n                    reloadAllOpenedWindows(note: note)\n                }\n\n                removeTags(note: note)\n                notes.removeAll { $0 === note }\n            }\n\n            isFirst = false\n            ViewController.shared()?.notesTableView.reloadRow(note: note)\n        }\n        \n        // Focus notes list if active main window\n        if let vc = view.window?.contentViewController as? ViewController, let mainWindow = view.window {\n            mainWindow.makeFirstResponder(vc.notesTableView)\n        }\n\n        return notes\n    }\n\n    public func decryptUnlocked(notes: [Note]) -> [Note] {\n        var notes = notes\n\n        for note in notes {\n            if note.isUnlocked() {\n                if note.unEncryptUnlocked() {\n                    notes.removeAll { $0 === note }\n                    ViewController.shared()?.notesTableView.reloadRow(note: note)\n                }\n            }\n        }\n\n        return notes\n    }\n    \n    public func removeTags(note: Note) {\n        let tags = note.tags\n        note.tags = []\n        ViewController.shared()?.sidebarOutlineView?.removeTags(tags)\n    }\n    \n    public func dropTitle() {\n        let appName = Bundle.main.object(forInfoDictionaryKey: \"CFBundleDisplayName\") as? String ?? \"FSNotes\"\n\n        vcTitleLabel?.stringValue = appName\n        view.window?.title = appName\n    }\n    \n    func focusEditArea() {\n        guard let editor = vcEditor,\n              let note = editor.note,\n              !editor.isPreviewEnabled(),\n              note.container != .encryptedTextPack else { return }\n\n        editor.window?.makeFirstResponder(editor)\n\n        if let ntv = ViewController.shared()?.notesTableView, ntv.selectedRow > -1 {\n            vcEditor?.isEditable = true\n            vcNonSelectedLabel?.isHidden = true\n        }\n    }\n        \n    // Changed main edit view\n    func textDidChange(_ notification: Notification) {\n        guard let editor = vcEditor,\n              let note = editor.note,\n              let vc = ViewController.shared() else { return }\n\n        vc.prevCommit = nil\n\n        if editor.isEditable {\n            note.isBlocked = true\n\n            editor.textStorage?.removeHighlight()\n            note.save(attributed: editor.attributedString())\n\n            updateLastEditedStatus()\n            vc.reSort(note: note)\n        }\n\n        breakUndoTimer.invalidate()\n        breakUndoTimer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(breakUndo), userInfo: nil, repeats: true)\n    }\n\n    private func updateLastEditedStatus() {\n        let editors = AppDelegate.getEditTextViews()\n\n        for editor in editors {\n            editor.isLastEdited = false\n        }\n\n        vcEditor?.isLastEdited = true\n    }\n            \n    @objc func breakUndo() {\n        guard let editor = vcEditor else { return }\n        \n        if (\n            editor.isPreviewEnabled() == false\n           && editor.isEditable\n        ) {\n            editor.breakUndoCoalescing()\n        }\n    }\n    \n    public func createNote(name: String = \"\", content: String = \"\", folderName: String? = nil, openInNewWindow: Bool = false) -> Note? {\n        guard let vc = ViewController.shared() else { return nil }\n        \n        var text = String()\n        var project: Project?\n        \n        if let folderName = folderName {\n            project = vc.sidebarOutlineView.getOrCreateProject(name: folderName)\n            \n            if let existProject = project, existProject.isEncrypted {\n                project = nil\n            }\n        }\n        \n        let selectedProjects = vc.sidebarOutlineView.getSidebarProjects()\n        var sidebarProject = project ?? selectedProjects?.first\n\n        \n        if sidebarProject == nil {\n            sidebarProject = Storage.shared().getDefault()\n        }\n        \n        guard let project = sidebarProject, !project.isLocked() else { return nil }\n                \n        if !name.isEmpty, [.autoRename, .autoRenameNew].contains(UserDefaultsManagement.naming) && UserDefaultsManagement.autoInsertHeader {\n            text.append(\"# \" + name + \"\\n\\n\")\n        }\n        \n        if !content.isEmpty {\n            text.append(content)\n        }\n        \n        let inlineTags = vc.sidebarOutlineView.getSelectedInlineTags()\n        if !inlineTags.isEmpty {\n            text.append(inlineTags)\n        }\n        \n        if let type = vc.getSidebarType(), type == .Todo, content.count == 0 {\n            text = \"- [ ] \"\n        }\n\n        let note = Note(name: name, project: project)\n        note.content = NSMutableAttributedString(string: text)\n        if note.save() {\n            Storage.shared().add(note)\n        }\n\n        _ = note.scanContentTags()\n\n        if folderName == nil, let selectedProjects = selectedProjects, !selectedProjects.contains(project) {\n            return note\n        }\n\n        if !openInNewWindow {\n            disablePreview()\n            \n            vc.notesTableView.deselectNotes()\n            vc.storage.searchQuery.dropFilter()\n            vc.editor.string = text\n            vc.editor.note = note\n            vc.search.stringValue.removeAll()\n        }\n        \n        vc.updateTable() {\n            if openInNewWindow {\n                return\n            }\n            \n            DispatchQueue.main.async {\n                vc.notesTableView.saveNavigationHistory(note: note)\n                if let index = vc.notesTableView.getIndex(for: note) {\n                    vc.notesTableView.selectRowIndexes([index], byExtendingSelection: false)\n                    vc.notesTableView.scrollRowToVisible(index)\n                }\n            \n                vc.focusEditArea()\n\n                NSApp.activate(ignoringOtherApps: true)\n                self.view.window?.makeKeyAndOrderFront(self)\n            }\n        }\n        \n        // Project encrypted and unlocked – encrypt by default\n        if let password = project.password {\n            if note.encrypt(password: password) {\n                if note.unLock(password: password) {\n                    note.password = password\n                }\n            }\n        }\n\n        return note\n    }\n}\n"
  },
  {
    "path": "FSNotes/Extensions/NSAppearance+.swift",
    "content": "//\n//  NSAppearance+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 9/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport AppKit.NSAppearance\n\nextension NSAppearance {\n    var isDark: Bool {\n        if UserDefaultsManagement.appearanceType == .System {\n            let mode = UserDefaults.standard.string(forKey: \"AppleInterfaceStyle\")\n            return mode == \"Dark\"\n        }\n\n        if self.name == .vibrantDark { return true }\n\n        guard #available(macOS 10.14, *) else { return false }\n\n        switch self.name {\n        case .accessibilityHighContrastDarkAqua,\n             .darkAqua,\n             .accessibilityHighContrastVibrantDark:\n            return true\n        default:\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/Extensions/NSColor+.swift",
    "content": "//\n//  NSColor+.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 11.08.2021.\n//  Copyright © 2021 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\npublic extension NSColor {\n    static var tagColor: NSColor {\n        get {\n            let accentColor = UserDefaults.standard.value(forKey: \"AppleAccentColor\")\n            if #available(macOS 10.14, *), accentColor != nil {\n                return NSColor.controlAccentColor\n            }\n\n            if #available(macOS 10.13, *) {\n                return NSColor(named: \"background_tag\")!\n            }\n\n            return NSColor.gray\n        }\n    }\n\n    var hexString: String {\n        guard let rgbColor = usingColorSpace(.deviceRGB) else {\n            return \"#FFFFFF\"\n        }\n        let red = Int(round(rgbColor.redComponent * 0xFF))\n        let green = Int(round(rgbColor.greenComponent * 0xFF))\n        let blue = Int(round(rgbColor.blueComponent * 0xFF))\n        let hexString = NSString(format: \"#%02X%02X%02X\", red, green, blue)\n        return hexString as String\n    }\n}\n"
  },
  {
    "path": "FSNotes/Extensions/NSFont+.swift",
    "content": "//\n//  NSFont+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/26/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension NSFont {\n    public var lineHeight: CGFloat {\n        return CGFloat(ceilf(Float(ascender + abs(descender) + leading)))\n    }\n\n    public var lineHeightCustom: CGFloat {\n        return CGFloat(ceilf(Float(ascender + abs(descender) + leading)))\n    }\n\n    public func getAttachmentHeight() -> Double {\n        return Double(pointSize) + 6\n    }\n    \n    var isBold: Bool {\n        return fontDescriptor.symbolicTraits.contains(.bold)\n    }\n    \n    var isItalic: Bool {\n        return fontDescriptor.symbolicTraits.contains(.italic)\n    }\n    \n    var height:CGFloat {\n        let constraintRect = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)\n        \n        let boundingBox = \"A\".boundingRect(with: constraintRect, options: NSString.DrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: self], context: nil)\n        \n        return boundingBox.height\n    }\n        \n    static func italicFont() -> NSFont {\n        return NSFontManager().convert(UserDefaultsManagement.noteFont, toHaveTrait: .italicFontMask)\n    }\n    \n    static func boldFont() -> NSFont {\n        return NSFontManager().convert(UserDefaultsManagement.noteFont, toHaveTrait: .boldFontMask)\n    }\n\n    func bold() -> NSFont {\n        guard let family = UserDefaultsManagement.noteFont.familyName else {\n            return UserDefaultsManagement.noteFont\n        }\n        \n        var mask = 0\n        if (isItalic) {\n            mask = NSFontBoldTrait|NSFontItalicTrait\n        } else {\n            mask = NSFontBoldTrait\n        }\n    \n        if let font = NSFontManager().font(withFamily: family, traits: NSFontTraitMask(rawValue: NSFontTraitMask.RawValue(mask)), weight: 5, size: CGFloat(UserDefaultsManagement.fontSize)) {\n            return font\n        }\n    \n        return UserDefaultsManagement.noteFont\n    }\n}\n"
  },
  {
    "path": "FSNotes/Extensions/NSImage+.swift",
    "content": "//\n//  NSImage+.swift\n//  FSNotesCore macOS\n//\n//  Created by Oleksandr Glushchenko on 10/14/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\npublic extension NSImage {\n    var height: CGFloat {\n        return self.size.height\n    }\n\n    /// Returns the width of the current image.\n    var width: CGFloat {\n        return self.size.width\n    }\n\n    /// Returns a png representation of the current image.\n    var PNGRepresentation: Data? {\n        if let tiff = self.tiffRepresentation, let tiffData = NSBitmapImageRep(data: tiff) {\n            return tiffData.representation(using: .png, properties: [:])\n        }\n\n        return nil\n    }\n\n    ///  Copies the current image and resizes it to the given size.\n    ///\n    ///  - parameter size: The size of the new image.\n    ///\n    ///  - returns: The resized copy of the given image.\n    func copy(size: NSSize) -> NSImage? {\n        // Create a new rect with given width and height\n        let frame = NSRect(x: 0, y: 0, width: size.width, height: size.height)\n\n        // Get the best representation for the given size.\n        guard let rep = self.bestRepresentation(for: frame, context: nil, hints: nil) else {\n            return nil\n        }\n\n        // Create an empty image with the given size.\n        let img = NSImage(size: size)\n\n        // Set the drawing context and make sure to remove the focus before returning.\n        img.lockFocus()\n        defer { img.unlockFocus() }\n\n        // Draw the new image\n        if rep.draw(in: frame) {\n            return img\n        }\n\n        // Return nil in case something went wrong.\n        return nil\n    }\n\n    ///  Copies the current image and resizes it to the size of the given NSSize, while\n    ///  maintaining the aspect ratio of the original image.\n    ///\n    ///  - parameter size: The size of the new image.\n    ///\n    ///  - returns: The resized copy of the given image.\n    func resizeWhileMaintainingAspectRatioToSize(size: NSSize) -> NSImage? {\n        let newSize: NSSize\n\n        let widthRatio  = size.width / self.width\n        let heightRatio = size.height / self.height\n\n        if widthRatio > heightRatio {\n            newSize = NSSize(width: floor(self.width * widthRatio), height: floor(self.height * widthRatio))\n        } else {\n            newSize = NSSize(width: floor(self.width * heightRatio), height: floor(self.height * heightRatio))\n        }\n\n        return self.copy(size: newSize)\n    }\n\n    ///  Copies and crops an image to the supplied size.\n    ///\n    ///  - parameter size: The size of the new image.\n    ///\n    ///  - returns: The cropped copy of the given image.\n    func crop(size: NSSize) -> NSImage? {\n        // Resize the current image, while preserving the aspect ratio.\n        guard let resized = self.resizeWhileMaintainingAspectRatioToSize(size: size) else {\n            return nil\n        }\n        // Get some points to center the cropping area.\n        let xCoord = floor((resized.width - size.width) / 2)\n        let yCoord = floor((resized.height - size.height) / 2)\n\n        // Create the cropping frame.\n        let frame = NSRect(x: xCoord, y: yCoord, width: size.width, height: size.height)\n\n        // Get the best representation of the image for the given cropping frame.\n        guard let rep = resized.bestRepresentation(for: frame, context: nil, hints: nil) else {\n            return nil\n        }\n\n        // Create a new image with the new size\n        let img = NSImage(size: size)\n\n        img.lockFocus()\n        defer { img.unlockFocus() }\n\n        if rep.draw(\n            in: NSRect(x: 0, y: 0, width: size.width, height: size.height),\n            from: frame,\n            operation: NSCompositingOperation.copy,\n            fraction: 1.0,\n            respectFlipped: false,\n            hints: [:]) {\n            // Return the cropped image.\n            return img\n        }\n\n        // Return nil in case anything fails.\n        return nil\n    }\n\n    ///  Saves the PNG representation of the current image to the HD.\n    ///\n    /// - parameter url: The location url to which to write the png file.\n    func savePNGRepresentationToURL(url: URL) throws {\n        if let png = self.PNGRepresentation {\n            try png.write(to: url, options: .atomicWrite)\n        }\n    }\n\n    func resize(to targetSize: CGSize) -> NSImage? {\n        let frame = CGRect(x: 0, y: 0, width: targetSize.width, height: targetSize.height)\n        guard let representation = bestRepresentation(for: frame, context: nil, hints: nil) else {\n            return nil\n        }\n        let image = NSImage(size: targetSize, flipped: false, drawingHandler: { (_) -> Bool in\n            return representation.draw(in: frame)\n        })\n        return image\n    }\n\n    func resized(to newSize: NSSize) -> NSImage? {\n        let scale = NSScreen.main?.backingScaleFactor ?? 1.0\n        let pixelWidth = Int(newSize.width * scale)\n        let pixelHeight = Int(newSize.height * scale)\n        \n        if let bitmapRep = NSBitmapImageRep(\n            bitmapDataPlanes: nil,\n            pixelsWide: pixelWidth,\n            pixelsHigh: pixelHeight,\n            bitsPerSample: 8,\n            samplesPerPixel: 4,\n            hasAlpha: true,\n            isPlanar: false,\n            colorSpaceName: .calibratedRGB,\n            bytesPerRow: 0,\n            bitsPerPixel: 0\n        ) {\n            bitmapRep.size = newSize\n            NSGraphicsContext.saveGraphicsState()\n            NSGraphicsContext.current = NSGraphicsContext(bitmapImageRep: bitmapRep)\n            let rect = NSRect(x: 0, y: 0, width: newSize.width, height: newSize.height)\n            draw(in: rect, from: .zero, operation: .copy, fraction: 1.0)\n            NSGraphicsContext.restoreGraphicsState()\n\n            let resizedImage = NSImage(size: newSize)\n            resizedImage.addRepresentation(bitmapRep)\n            return resizedImage\n        }\n\n        return nil\n    }\n\n    /// Copy the image and resize it to the supplied size, while maintaining it's\n    /// original aspect ratio.\n    ///\n    /// - Parameter size: The target size of the image.\n    /// - Returns: The resized image.\n    func resizeMaintainingAspectRatio(to targetSize: CGSize) -> NSImage? {\n        let widthRatio  = targetSize.width / size.width\n        let heightRatio = targetSize.height / size.height\n        let ratio = max(widthRatio, heightRatio)\n        let newSize = CGSize(width: floor(size.width * ratio), height: floor(size.height * ratio))\n        return resized(to: NSSize(width: newSize.width, height: newSize.height))\n    }\n\n    // MARK: Cropping\n    /// Resize the image, to nearly fit the supplied cropping size\n    /// and return a cropped copy the image.\n    ///\n    /// - Parameter size: The size of the new image.\n    /// - Returns: The cropped image.\n    func crop(to targetSize: CGSize) -> NSImage? {\n        // Resize the current image, while preserving the aspect ratio.\n        guard let resized = resizeMaintainingAspectRatio(to: targetSize) else {\n            return nil\n        }\n\n        // Get some points to center the cropping area.\n        let yCoord = floor(resized.size.height - targetSize.height)\n\n        // Create the cropping frame.\n        let frame = CGRect(origin: CGPoint(x: 0, y: yCoord), size: targetSize)\n\n        // Get the best representation of the image for the given cropping frame.\n        guard let representation = resized.bestRepresentation(for: frame, context: nil, hints: nil) else {\n            return nil\n        }\n\n        // Create a new image with the new size\n        let cropped = NSImage(size: targetSize)\n        cropped.lockFocus()\n        defer { cropped.unlockFocus() }\n\n        let outputFrame = CGRect(origin: CGPoint(x: 0, y: 0), size: targetSize)\n\n        guard representation.draw(in: outputFrame, from: frame, operation: .copy, fraction: 1.0, respectFlipped: false, hints: [:]) else {\n            return nil\n        }\n        return cropped\n    }\n\n    var jpgData: Data? {\n        guard let tiffRepresentation = tiffRepresentation,\n            let bitmapImage = NSBitmapImageRep(data: tiffRepresentation)\n        else { return nil }\n\n        return bitmapImage.representation(using: .jpeg, properties: [:])\n    }\n\n    func tint(color: NSColor) -> NSImage {\n        if let image = self.copy() as? NSImage {\n            image.lockFocus()\n\n            color.set()\n\n            let imageRect = NSRect(origin: .zero, size: image.size)\n            imageRect.fill(using: .sourceAtop)\n            image.unlockFocus()\n\n            return image\n        }\n\n        return self\n    }\n\n    func roundCorners(withRadius radius: CGFloat) -> NSImage {\n        let rect = NSRect(origin: NSPoint.zero, size: size)\n        if\n            let cgImage = self.cgImage,\n            let context = CGContext(data: nil,\n                                    width: Int(size.width),\n                                    height: Int(size.height),\n                                    bitsPerComponent: 8,\n                                    bytesPerRow: 4 * Int(size.width),\n                                    space: CGColorSpaceCreateDeviceRGB(),\n                                    bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue) {\n            context.beginPath()\n            context.addPath(CGPath(roundedRect: rect, cornerWidth: radius, cornerHeight: radius, transform: nil))\n            context.closePath()\n            context.clip()\n            context.draw(cgImage, in: rect)\n\n            if let composedImage = context.makeImage() {\n                return NSImage(cgImage: composedImage, size: size)\n            }\n        }\n\n        return self\n    }\n\n    var cgImage: CGImage? {\n        var rect = CGRect.init(origin: .zero, size: self.size)\n        return self.cgImage(forProposedRect: &rect, context: nil, hints: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes/Extensions/NSWindow+.swift",
    "content": "//\n//  NSWindow+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 10.07.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension NSWindow {\n    public func setFrameOriginToPositionWindowInCenterOfScreen() {\n        if let screenSize = screen?.frame.size {\n            let origin = NSPoint(x: (screenSize.width-800)/2, y: (screenSize.height-600)/2)\n            self.setFrame(NSRect(origin: origin, size: CGSize(width: 800, height: 600)), display: true)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/Extensions/UserDefaultsManagement+.swift",
    "content": "//\n//  UserDefaultsManagement+.swift\n//  FSNotesCore macOS\n//\n//  Created by Oleksandr Glushchenko on 10/25/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport MASShortcut\nimport AppKit\n\nextension UserDefaultsManagement {\n    private struct Constants {\n        static let ActivateKeyCode = \"activateKeyCode\"\n        static let ActivateKeyModifier = \"activateKeyModifier\"\n        static let AppearanceTypeKey = \"appearanceType2025\"\n        static let codeTheme = \"codeTheme\"\n        static let codeThemeDark = \"codeThemeDark\"\n        static let darkMode = \"darkMode\"\n        static let dockIcon = \"dockIcon\"\n        static let NewNoteKeyModifier = \"newNoteKeyModifier\"\n        static let NewNoteKeyCode = \"newNoteKeyCode\"\n        static let SearchNoteKeyCode = \"searchNoteKeyCode\"\n        static let SearchNoteKeyModifier = \"searchNoteKeyModifier\"\n        static let ProjectsKey = \"projects\"\n        static let QuickNoteKey = \"quickNoteKey\"\n        static let QuickNoteKeyModifier = \"quickNoteKeyModifier\"\n    }\n\n    static var appearanceType: AppearanceType {\n        get {\n            if let result = UserDefaults.standard.object(forKey: Constants.AppearanceTypeKey) as? Int {\n                return AppearanceType(rawValue: result)!\n            }\n\n            return AppearanceType.System\n        }\n        set {\n            UserDefaults.standard.set(newValue.rawValue, forKey: Constants.AppearanceTypeKey)\n        }\n    }\n\n    static var newNoteShortcut: MASShortcut? {\n        get {\n            let code = UserDefaults.standard.object(forKey: Constants.NewNoteKeyCode)\n            let modifier = UserDefaults.standard.object(forKey: Constants.NewNoteKeyModifier)\n\n            if code != nil && modifier != nil, let keyCode = code as? UInt, let modifierFlags = modifier as? UInt {\n\n                if (code as? Int) == 0 && (modifier as? Int) == 0 {\n                    return nil\n                }\n\n                return MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n            }\n\n            return MASShortcut(keyCode: 45, modifierFlags: 917504)\n        }\n        set {\n            let code = newValue?.keyCode ?? 0\n            let modifier = newValue?.modifierFlags ?? 0\n\n            UserDefaults.standard.set(code, forKey: Constants.NewNoteKeyCode)\n            UserDefaults.standard.set(modifier, forKey: Constants.NewNoteKeyModifier)\n        }\n    }\n\n    static var quickNoteShortcut: MASShortcut? {\n        get {\n            let code = UserDefaults.standard.object(forKey: Constants.QuickNoteKey)\n            let modifier = UserDefaults.standard.object(forKey: Constants.QuickNoteKeyModifier)\n\n            if code != nil && modifier != nil, let keyCode = code as? UInt, let modifierFlags = modifier as? UInt {\n\n                if (code as? Int) == 0 && (modifier as? Int) == 0 {\n                    return nil\n                }\n\n                return MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n            }\n\n            return MASShortcut(keyCode: 31, modifierFlags: 917504)\n        }\n        set {\n            let code = newValue?.keyCode ?? 0\n            let modifier = newValue?.modifierFlags ?? 0\n\n            UserDefaults.standard.set(code, forKey: Constants.QuickNoteKey)\n            UserDefaults.standard.set(modifier, forKey: Constants.QuickNoteKeyModifier)\n        }\n    }\n\n    static var searchNoteShortcut: MASShortcut? {\n        get {\n            let code = UserDefaults.standard.object(forKey: Constants.SearchNoteKeyCode)\n            let modifier = UserDefaults.standard.object(forKey: Constants.SearchNoteKeyModifier)\n\n            if code != nil && modifier != nil, let keyCode = code as? UInt, let modifierFlags = modifier as? UInt {\n\n                if (code as? Int) == 0 && (modifier as? Int) == 0 {\n                    return nil\n                }\n\n                return MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n            }\n\n            return MASShortcut(keyCode: 37, modifierFlags: 917504)\n        }\n        set {\n            let code = newValue?.keyCode ?? 0\n            let modifier = newValue?.modifierFlags ?? 0\n\n            UserDefaults.standard.set(code, forKey: Constants.SearchNoteKeyCode)\n            UserDefaults.standard.set(modifier, forKey: Constants.SearchNoteKeyModifier)\n        }\n    }\n    \n    static var activateShortcut: MASShortcut? {\n        get {\n            let code = UserDefaults.standard.object(forKey: Constants.ActivateKeyCode)\n            let modifier = UserDefaults.standard.object(forKey: Constants.ActivateKeyModifier)\n\n            if code != nil && modifier != nil, let keyCode = code as? UInt, let modifierFlags = modifier as? UInt {\n\n                if (code as? Int) == 0 && (modifier as? Int) == 0 {\n                    return nil\n                }\n\n                return MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n            }\n\n            return MASShortcut(keyCode: 40, modifierFlags: 917504)\n        }\n        set {\n            let code = newValue?.keyCode ?? 0\n            let modifier = newValue?.modifierFlags ?? 0\n\n            UserDefaults.standard.set(code, forKey: Constants.ActivateKeyCode)\n            UserDefaults.standard.set(modifier, forKey: Constants.ActivateKeyModifier)\n        }\n    }\n\n    static var dockIcon: Int {\n        get {\n            if let tag = UserDefaults.standard.object(forKey: Constants.dockIcon) as? Int {\n                return tag\n            }\n\n            return 0\n        }\n\n        set {\n            UserDefaults.standard.set(newValue, forKey: Constants.dockIcon)\n        }\n    }\n\n    static var noteFont: NSFont {\n        get {\n            if let name = fontName, name.starts(with: \".\") {\n                return NSFont.systemFont(ofSize: CGFloat(self.fontSize))\n            }\n\n            if let fontName = self.fontName, let font = NSFont(name: fontName, size: CGFloat(self.fontSize)) {\n                return font\n            }\n\n            return NSFont.systemFont(ofSize: CGFloat(self.fontSize))\n        }\n        set {\n            self.fontName = newValue.fontName\n            self.fontSize = Int(newValue.pointSize)\n        }\n    }\n\n    static var codeFont: NSFont {\n        get {\n            if let font = NSFont(name: self.codeFontName, size: CGFloat(self.codeFontSize)) {\n                return font\n            }\n\n            return NSFont.systemFont(ofSize: CGFloat(self.codeFontSize))\n        }\n        set {\n            self.codeFontName = newValue.familyName ?? \"Source Code Pro\"\n            self.codeFontSize = Int(newValue.pointSize)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/FSNotes (CloudKit).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.developer.aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.developer.icloud-container-environment</key>\n\t<string>Production</string>\n\t<key>com.apple.developer.icloud-container-identifiers</key>\n\t<array>\n\t\t<string>iCloud.co.fluder.fsnotes</string>\n\t</array>\n\t<key>com.apple.developer.icloud-services</key>\n\t<array>\n\t\t<string>CloudDocuments</string>\n\t</array>\n\t<key>com.apple.developer.ubiquity-container-identifiers</key>\n\t<array>\n\t\t<string>iCloud.co.fluder.fsnotes</string>\n\t</array>\n\t<key>com.apple.developer.ubiquity-kvstore-identifier</key>\n\t<string>$(TeamIdentifierPrefix)co.fluder.fsnotes</string>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.files.user-selected.read-write</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n\t<key>com.apple.security.print</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes/FSNotes.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.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.files.user-selected.read-write</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n\t<key>com.apple.security.print</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes/Helpers/FSNTextAttachmentCell.swift",
    "content": "//\n//  FSNTextAttahcmentCell.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 25.11.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass FSNTextAttachmentCell: NSTextAttachmentCell {\n    let textContainer: NSTextContainer\n\n    init(textContainer: NSTextContainer, image: NSImage) {\n        self.textContainer = textContainer\n        super.init(imageCell: image)\n    }\n\n    required init(coder: NSCoder) {\n        self.textContainer = NSTextContainer()\n        super.init(coder: coder)\n    }\n\n    override func cellSize() -> NSSize {\n        let size = super.cellSize()\n\n        if size.height == UserDefaultsManagement.noteFont.getAttachmentHeight() {\n            return size\n        }\n\n        return NSSize(width: textContainer.size.width, height: size.height)\n    }\n\n    override nonisolated func cellBaselineOffset() -> NSPoint {\n        return NSPoint(x: 0, y: -2)\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/FileSystemEventManager.swift",
    "content": "//\n//  FileSystemEventManager.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/13/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass FileSystemEventManager {\n    private var storage: Storage\n    private var delegate: ViewController\n    private var watcher: FileWatcher?\n    private var observedFolders: [String]\n    private var textBundleItems = [\"text.markdown\", \"text.md\", \"text.txt\", \"info.json\"]\n\n    init(storage: Storage, delegate: ViewController) {\n        self.storage = storage\n        self.delegate = delegate\n        self.observedFolders = self.storage.getProjectPaths()\n    }\n    \n    public func start() {\n        watcher = FileWatcher(self.observedFolders)\n        watcher?.callback = { event in\n            guard let path = event.path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {\n                return\n            }\n\n            guard let url = URL(string: \"file://\" + path) else {\n                return\n            }\n\n            if !event.path.contains(\".textbundle\") && (\n                event.dirRemoved\n                || event.dirCreated\n                || event.dirRenamed\n                || event.dirChange\n            ) {\n                self.handleDirEvents(event: event)\n                return\n            }\n\n            if url.lastPathComponent == \".encrypt\" {\n                self.loadEncryptionStatus(url: url)\n                return\n            }\n\n            if !self.storage.isValidNote(url: url) {\n                return\n            }\n            \n            if event.fileRemoved || event.dirRemoved {\n                guard let note = self.storage.getBy(url: url) else { return }\n                \n                self.removeNote(note: note)\n            }\n\n            let fullUrl = self.handleTextBundle(url: url)\n\n            // Resolve conflicts if exist\n            if UserDefaultsManagement.automaticConflictsResolution, let note = self.storage.getBy(url: fullUrl) {\n                self.resolveConflict(url: note.url)\n            }\n\n            if event.fileRenamed || event.dirRenamed {\n                self.moveHandler(url: fullUrl, pathList: self.observedFolders)\n                return\n            }\n\n            guard self.checkFile(url: fullUrl, pathList: self.observedFolders) else { return }\n\n            // Order is important, invoke only before change\n            if event.fileCreated {\n                self.importNote(fullUrl)\n                return\n            }\n\n            if event.fileChange || event.dirChange, let note = self.storage.getBy(url: fullUrl) {\n                self.reloadNote(note: note)\n            }\n        }\n        \n        watcher?.start()\n    }\n\n    private func handleDirEvents(event: FileWatcherEvent) {\n        guard !event.path.contains(\"Trash\") else { return }\n\n        let dirURL = URL(fileURLWithPath: event.path, isDirectory: true)\n        let project = self.storage.getProjectBy(url: dirURL)\n\n        if dirURL.path.contains(\"/.\") {\n            return\n        }\n        \n        guard !dirURL.isHidden() else {\n            // hide if exist and hidden (xattr \"es.fsnot.hidden.dir\")\n            if event.dirChange {\n                if let project = project {\n                    OperationQueue.main.addOperation {\n                        self.delegate.sidebarOutlineView.removeRows(projects: [project])\n                    }\n                }\n            }\n            \n            return\n        }\n\n        if event.dirRenamed {\n            if let project = project {\n                // hack: occasionally get rename event when created\n                if !FileManager.default.fileExists(atPath: dirURL.path) {\n                    OperationQueue.main.addOperation {\n                        self.delegate.sidebarOutlineView.removeRows(projects: [project])\n                    }\n                }\n            } else {\n                if FileManager.default.directoryExists(atUrl: dirURL) {\n                    OperationQueue.main.addOperation {\n                        if let projects = self.storage.insert(url: dirURL) {\n                            self.delegate.sidebarOutlineView.insertRows(projects: projects)\n                        }\n                    }\n                }\n            }\n            return\n        }\n\n        if event.dirRemoved  {\n            if let project = project {\n                OperationQueue.main.addOperation {\n                    self.delegate.sidebarOutlineView.removeRows(projects: [project])\n                }\n            }\n            return\n        }\n\n        // dirChange on xattr \"es.fsnot.hidden.dir\" changed\n        if event.dirCreated || (\n            event.dirChange && dirURL.hasNonHiddenBit()\n        ) {\n            OperationQueue.main.addOperation {\n                if let projects = self.storage.insert(url: dirURL) {\n                    self.delegate.sidebarOutlineView.insertRows(projects: projects)\n                }\n            }\n            return\n        }\n    }\n    \n    private func moveHandler(url: URL, pathList: [String]) {\n        let fileExistInFS = self.checkFile(url: url, pathList: pathList)\n        \n        guard let note = self.storage.getBy(url: url) else {\n            if fileExistInFS {\n                self.importNote(url)\n            }\n            return\n        }\n        \n        if fileExistInFS {\n            renameNote(note: note)\n            return\n        }\n        \n        removeNote(note: note)\n    }\n    \n    private func checkFile(url: URL, pathList: [String]) -> Bool {\n        return (\n            FileManager.default.fileExists(atPath: url.path)\n            && self.storage.isValidNote(url: url)\n            && pathList.contains(url.deletingLastPathComponent().path)\n        )\n    }\n    \n    private func importNote(_ url: URL) {\n        let url = self.handleTextBundle(url: url)\n\n        let n = storage.getBy(url: url)\n        guard n == nil else {\n            if let nUnwrapped = n, nUnwrapped.url == UserDataService.instance.focusOnImport {\n                self.delegate.updateTable() {\n                    self.delegate.notesTableView.setSelected(note: nUnwrapped)\n                    UserDataService.instance.focusOnImport = nil\n                }\n                \n            // When git checkout .textbundle/text.md system trigger remove/create events\n            // but the note is not deleted, so the note must be reloaded\n            } else if let nUnwrapped = n {\n                reloadNote(note: nUnwrapped)\n            }\n            return\n        }\n        \n        guard let note = storage.importNote(url: url) else { return }\n        \n        DispatchQueue.main.async {\n            if let url = UserDataService.instance.focusOnImport,\n               let note = self.storage.getBy(url: url)\n            {\n                self.delegate.updateTable() {\n                    self.delegate.notesTableView.setSelected(note: note)\n                    UserDataService.instance.focusOnImport = nil\n                }\n            } else {\n                if !note.isTrash() {\n                    OperationQueue.main.addOperation {\n                        self.delegate.notesTableView.insertRows(notes: [note])\n                    }\n                }\n            }\n        }\n    }\n    \n    private func renameNote(note: Note) {\n        if note.url == UserDataService.instance.focusOnImport {\n            self.delegate.updateTable() {\n                self.delegate.notesTableView.setSelected(note: note)\n                UserDataService.instance.focusOnImport = nil\n            }\n            \n        // On TextBundle import\n        } else {\n            self.reloadNote(note: note)\n        }\n    }\n    \n    private func removeNote(note: Note) {\n        print(\"FSWatcher remove note: \\\"\\(note.name)\\\"\")\n        \n        self.storage.removeNotes(notes: [note], fsRemove: false) { _ in\n            DispatchQueue.main.async {\n                if self.delegate.notesTableView.numberOfRows > 0 {\n                    self.delegate.notesTableView.removeRows(notes: [note])\n                }\n            }\n        }\n    }\n    \n    private func reloadNote(note: Note) {\n        guard !note.isBlocked, note.container != .encryptedTextPack else {\n            return\n        }\n\n        guard let modificationDate = note.getFileModifiedDate(),\n              let creationDate = note.getFileCreationDate() else { return }\n\n        if modificationDate.isGreaterThan(note.modifiedLocalAt) {\n            note.modifiedLocalAt = modificationDate\n            note.cacheHash = nil\n\n            guard var fsContent = note.getContent() else { return }\n            _ = fsContent.loadAttachments(note)\n\n            // Trying load content from encrypted note with current password\n            if note.url.pathExtension == \"etp\", let password = note.password, note.unLock(password: password) {\n                fsContent = note.content\n            }\n\n            note.content = fsContent\n\n            // tags changes\n\n            let result = note.scanContentTags()\n            if result.0.count > 0 {\n                DispatchQueue.main.async {\n                    self.delegate.sidebarOutlineView.insertTags(note: note)\n                }\n            }\n\n            if result.1.count > 0 {\n                DispatchQueue.main.async {\n                    self.delegate.sidebarOutlineView.removeTags(result.1)\n                }\n            }\n\n            // reload view\n\n            self.delegate.notesTableView.reloadRow(note: note)\n            self.delegate.reSort(note: note)\n\n            let editors = AppDelegate.getEditTextViews()\n            for editor in editors {\n                if editor.note == note {\n                    DispatchQueue.main.async {\n                        editor.editorViewController?.refillEditArea(force: true)\n                    }\n                }\n            }\n        }\n\n        if creationDate != note.creationDate {\n            note.creationDate = creationDate\n                \n            delegate.notesTableView.reloadDate(note: note)\n            delegate.reSort(note: note)\n                \n            // Reload images if note moved (cache invalidated)\n            note.loadPreviewInfo()\n        }\n    }\n    \n    private func handleTextBundle(url: URL) -> URL {\n        if self.textBundleItems.contains(url.lastPathComponent) &&\n            url.path.contains(\".textbundle\") {\n            \n            let path = url.deletingLastPathComponent().path\n            return URL(fileURLWithPath: path, isDirectory: false)\n        }\n        \n        return url\n    }\n    \n    public func restart() {\n        watcher?.stop()\n        self.observedFolders = self.storage.getProjectPaths()\n        start()\n    }\n\n    public func reloadObservedFolders() {\n        self.observedFolders = self.storage.getProjectPaths()\n    }\n\n    public func resolveConflict(url: URL) {\n        if let conflicts = NSFileVersion.unresolvedConflictVersionsOfItem(at: url as URL) {\n            for conflict in conflicts {\n                guard let modificationDate = conflict.modificationDate else {\n                    continue\n                }\n\n                guard let localizedName = conflict.localizedName else {\n                    continue\n                }\n\n                let localizedUrl = URL(fileURLWithPath: localizedName)\n                let ext = url.pathExtension\n                let name = localizedUrl.deletingPathExtension().lastPathComponent\n\n                let dateFormatter = ISO8601DateFormatter()\n                dateFormatter.formatOptions = [\n                    .withYear,\n                    .withMonth,\n                    .withDay,\n                    .withTime\n                ]\n                let dateString: String = dateFormatter.string(from: modificationDate)\n                let conflictName = \"\\(name) (CONFLICT \\(dateString)).\\(ext)\"\n\n                let to = url.deletingLastPathComponent().appendingPathComponent(conflictName)\n\n                if FileManager.default.fileExists(atPath: to.path) {\n                    conflict.isResolved = true\n                    continue\n                }\n\n                // Reload current encrypted note\n                let editors = AppDelegate.getEditTextViews()\n                for editor in editors {\n                    if let currentNote = editor.note, currentNote.url == url {\n                        if let password = currentNote.password, ext == \"etp\" {\n                            _ = currentNote.unLock(password: password)\n                        }\n\n                        DispatchQueue.main.async {\n                            editor.editorViewController?.refillEditArea(force: true)\n                        }\n                    }\n                }\n                \n                do {\n                    try FileManager.default.copyItem(at: conflict.url, to: to)\n                    var attributes = [FileAttributeKey : Any]()\n                    attributes[.posixPermissions] = 0o777\n                    try FileManager.default.setAttributes(attributes, ofItemAtPath: to.path)\n                } catch let error {\n                    print(\"Conflict resolving error: \", error)\n                }\n\n                conflict.isResolved = true\n            }\n        }\n    }\n\n    private func loadEncryptionStatus(url: URL) {\n        guard let project = self.storage.getProjectBy(url: url.deletingLastPathComponent()) else { return }\n\n        let state = project.isEncrypted\n        project.isEncrypted = FileManager.default.fileExists(atPath: url.path)\n\n        DispatchQueue.main.async {\n            if state && !project.isEncrypted {\n                project.password = nil\n            }\n\n            guard let selectedProject = self.delegate.sidebarOutlineView.getSelectedProject() else { return }\n\n            self.delegate.sidebarOutlineView.reloadItem(project)\n\n            // Selected at this moment\n\n            if selectedProject.url.path == project.url.path {\n                if project.isEncrypted && project.isLocked() {\n                    self.delegate.notesTableView.enableLockedProject()\n                    self.delegate.editor.clear()\n                } else {\n                    self.delegate.notesTableView.disableLockedProject()\n                }\n\n                self.delegate.updateTable()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/FileWatcher.swift",
    "content": "import Cocoa\n\nclass FileWatcher{\n  let filePaths: [String]  // -- paths to watch - works on folders and file paths\n  \n  var callback : ((_ fileWatcherEvent:FileWatcherEvent) -> Void)?\n  var queue    : DispatchQueue?\n\n  private var streamRef  : FSEventStreamRef?\n  private var hasStarted : Bool { return streamRef != nil }\n  \n  init(_ paths:[String]) { self.filePaths = paths }\n  \n  /**\n   * Start listening for FSEvents\n   */\n  func start() {\n    guard !hasStarted else { return } // -- make sure we are not already listening!\n    \n    var context = FSEventStreamContext(\n      version: 0, info: Unmanaged.passUnretained(self).toOpaque(),\n      retain: retainCallback, release: releaseCallback,\n      copyDescription:nil\n    )\n    \n    streamRef = FSEventStreamCreate(\n      kCFAllocatorDefault, eventCallback, &context,\n      filePaths as CFArray,FSEventStreamEventId(kFSEventStreamEventIdSinceNow), 0,\n      UInt32(kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagFileEvents)\n    )\n    \n    selectStreamScheduler()\n    FSEventStreamStart(streamRef!)\n  }\n  \n  /**\n   * Stop listening for FSEvents\n   */\n  func stop() {\n    guard hasStarted else { return } // -- make sure we are indeed listening!\n    \n    FSEventStreamStop(streamRef!)\n    FSEventStreamInvalidate(streamRef!)\n    FSEventStreamRelease(streamRef!)\n    \n    streamRef = nil\n  }\n  \n  private let eventCallback:FSEventStreamCallback = {(\n      streamRef, clientCallBackInfo, numEvents, eventPaths, eventFlags, eventIds\n    ) in\n    let fileSystemWatcher = Unmanaged<FileWatcher>.fromOpaque(clientCallBackInfo!).takeUnretainedValue()\n    let paths = Unmanaged<CFArray>.fromOpaque(eventPaths).takeUnretainedValue() as! [String]\n    \n    for index in 0..<numEvents {\n        fileSystemWatcher.callback?(FileWatcherEvent(eventIds[index], paths[index], eventFlags[index]))\n    }\n  }\n  \n  private let retainCallback:CFAllocatorRetainCallBack = {(info:UnsafeRawPointer?) in\n    _ = Unmanaged<FileWatcher>.fromOpaque(info!).retain()\n    return info\n  }\n  \n  private let releaseCallback:CFAllocatorReleaseCallBack = {(info:UnsafeRawPointer?) in\n    Unmanaged<FileWatcher>.fromOpaque(info!).release()\n  }\n  \n  private func selectStreamScheduler() {\n    guard let streamRef = streamRef else { return }\n      \n    if let queue = queue {\n      FSEventStreamSetDispatchQueue(streamRef, queue)\n    } else {\n      FSEventStreamScheduleWithRunLoop(\n        streamRef, CFRunLoopGetMain(), CFRunLoopMode.defaultMode.rawValue\n      )\n    }\n  }\n}\n\nextension FileWatcher {\n  convenience init(_ paths:[String], _ callback: @escaping ((_ fileWatcherEvent:FileWatcherEvent) -> Void)) {\n    self.init(paths)\n    self.callback = callback\n  }\n}\n\n"
  },
  {
    "path": "FSNotes/Helpers/FileWatcherEvent.swift",
    "content": "import Foundation\n/**\n * PARAM: id: is an id number that the os uses to differentiate between events.\n * PARAM: path: is the path the change took place. its formated like so: Users/John/Desktop/test/text.txt\n * PARAM: flag: pertains to the file event type.\n * EXAMPLE: let url = NSURL(fileURLWithPath: event.path)//<--formats paths to: file:///Users/John/Desktop/test/text.txt\n * EXAMPLE: Swift.print(\"fileWatcherEvent.fileChange: \" + \"\\(event.fileChange)\")\n * EXAMPLE: Swift.print(\"fileWatcherEvent.fileModified: \" + \"\\(event.fileModified)\")\n * EXAMPLE: Swift.print(\"\\t eventId: \\(event.id) - eventFlags:  \\(event.flags) - eventPath:  \\(event.path)\")\n */\nclass FileWatcherEvent{\n    var id:FSEventStreamEventId\n    var path:String\n    var flags: FSEventStreamEventFlags\n    init(_ eventId:FSEventStreamEventId, _ eventPath: String, _ eventFlags: FSEventStreamEventFlags){\n        self.id = eventId\n        self.path = eventPath\n        self.flags = eventFlags\n    }\n}\n/**\n * The following code is to differentiate between the FSEvent flag types (aka file event types)\n * NOTE: Be aware that .DS_STORE changes frequently when other files change\n */\nextension FileWatcherEvent{\n    /*general*/\n    var fileChange:Bool {return (flags & FSEventStreamEventFlags(kFSEventStreamEventFlagItemIsFile)) != 0}\n    var dirChange:Bool {return (flags & FSEventStreamEventFlags(kFSEventStreamEventFlagItemIsDir)) != 0}\n    /*CRUD*/\n    var created:Bool {return (flags & FSEventStreamEventFlags(kFSEventStreamEventFlagItemCreated)) != 0}\n    var removed:Bool {return (flags & FSEventStreamEventFlags(kFSEventStreamEventFlagItemRemoved)) != 0}\n    var renamed:Bool {return (flags & FSEventStreamEventFlags(kFSEventStreamEventFlagItemRenamed)) != 0}\n    var modified:Bool {return (flags & FSEventStreamEventFlags(kFSEventStreamEventFlagItemModified)) != 0}\n}\n/**\n * Convenince\n */\nextension FileWatcherEvent{\n    /*File*/\n    var fileCreated:Bool {return fileChange && created}\n    var fileRemoved:Bool {return fileChange && removed}\n    var fileRenamed:Bool {return fileChange && renamed}\n    var fileModified:Bool {return fileChange && modified}\n    /*Directory*/\n    var dirCreated:Bool {return dirChange && created}\n    var dirRemoved:Bool {return dirChange && removed}\n    var dirRenamed:Bool {return dirChange && renamed}\n    var dirModified:Bool {return dirChange && modified}\n}\n/**\n * Simplifies debugging\n * EXAMPLE: Swift.print(event.description)//Outputs: The file /Users/John/Desktop/test/text.txt was modified\n */\nextension FileWatcherEvent{\n    var description:String {\n        var result = \"The \\(fileChange ? \"file\":\"directory\") \\(self.path) was\"\n        if self.created {\n            result += \" created\"\n        }\n        if self.removed {\n            result += \" removed\"\n        }\n        if self.renamed {\n            result += \" renamed\"\n        }\n        if self.modified {\n            result += \" modified\"\n        }\n        return result\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/Printer.swift",
    "content": "//\n//  Printer.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 08.08.2024.\n//  Copyright © 2024 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport WebKit\n\n@available(macOS 11.0, *)\nclass Printer: NSObject, WKNavigationDelegate, WKScriptMessageHandler {\n    private var indexURL: URL\n    private var pop: NSPrintOperation?\n    private var webView: WKWebView?\n\n    init(indexURL: URL) {\n        self.indexURL = indexURL\n        super.init()\n    }\n\n    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {\n\n        guard message.name == \"contentLoaded\" else { return }\n\n        let printInfo = NSPrintInfo(dictionary: [.paperSize: CGSize(width: 595.28, height: 841.89)])\n        printInfo.horizontalPagination = .automatic\n        printInfo.verticalPagination = .automatic\n        let margin = 20.0\n        printInfo.leftMargin = margin\n        printInfo.topMargin = margin\n        printInfo.rightMargin = margin\n        printInfo.bottomMargin = margin\n        printInfo.isVerticallyCentered = true\n        printInfo.isHorizontallyCentered = true\n\n        self.pop = self.webView?.printOperation(with: printInfo)\n        self.pop?.printPanel.options.insert(.showsPaperSize)\n        self.pop?.printPanel.options.insert(.showsOrientation)\n        self.pop?.printPanel.options.insert(.showsPreview)\n\n        self.pop?.showsPrintPanel = true\n        self.pop?.showsProgressPanel = true\n        self.pop?.view?.frame = NSRect(x: 0, y: 0, width: 800.0, height: 500.0)\n\n        DispatchQueue.main.async {\n            let window = NSApplication.shared.mainWindow\n            //let window = NSWindow(contentRect: .zero, styleMask: .borderless, backing: .buffered, defer: false)\n\n            self.pop?.runModal(for: window!, delegate: nil, didRun: nil, contextInfo: nil)\n        }\n\n    }\n\n    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {\n        let checkContentLoadedScript = \"\"\"\n        function checkIfComplete() {\n            if (document.readyState === 'complete') {\n                window.webkit.messageHandlers.contentLoaded.postMessage(\"contentLoaded\");\n            } else {\n                setTimeout(checkIfComplete, 100);\n            }\n        }\n        checkIfComplete();\n        \"\"\"\n\n        webView.evaluateJavaScript(checkContentLoadedScript, completionHandler: nil)\n    }\n\n    public func printWeb() {\n        let contentController = WKUserContentController()\n        contentController.add(self, name: \"contentLoaded\")\n\n        let config = WKWebViewConfiguration()\n        config.userContentController = contentController\n\n        webView = WKWebView(frame: NSRect(x: 0, y: 0, width: 595, height: 842), configuration: config)\n        webView?.navigationDelegate = self\n\n        let accessURL = indexURL.deletingLastPathComponent()\n        webView?.loadFileURL(indexURL, allowingReadAccessTo: accessURL)\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/PrinterLegacy.swift",
    "content": "//\n//  PrinterLegacy.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 08.08.2024.\n//  Copyright © 2024 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport WebKit\n\n@available(*, deprecated, message: \"Remove after macOS 10.15 is no longer supported\")\nclass PrinterLegacy: NSObject, WebFrameLoadDelegate {\n    private var indexURL: URL\n    private var pop: NSPrintOperation?\n    public var printWebView = WebView()\n\n    init(indexURL: URL) {\n        self.indexURL = indexURL\n        super.init()\n    }\n\n\n    func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) {\n        if sender.isLoading {\n            return\n        }\n        if frame != sender.mainFrame {\n            return\n        }\n        if sender.stringByEvaluatingJavaScript(from: \"document.readyState\") == \"complete\" {\n            sender.frameLoadDelegate = nil\n\n            let printInfo = NSPrintInfo.shared\n            printInfo.paperSize = NSMakeSize(595.22, 841.85)\n            printInfo.topMargin = 40.0\n            printInfo.leftMargin = 40.0\n            printInfo.rightMargin = 40.0\n            printInfo.bottomMargin = 40.0\n\n            let when = DispatchTime.now() + 0.2\n            DispatchQueue.main.asyncAfter(deadline: when) {\n                let operation: NSPrintOperation = NSPrintOperation(view: sender.mainFrame.frameView.documentView, printInfo: printInfo)\n                operation.printPanel.options.insert(NSPrintPanel.Options.showsPaperSize)\n                operation.printPanel.options.insert(NSPrintPanel.Options.showsOrientation)\n                operation.run()\n            }\n        }\n    }\n\n   public func printWeb() {\n       let printDir = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Print\")\n\n       guard let content = try? String(contentsOf: indexURL) else { return }\n\n       self.printWebView.frameLoadDelegate = self\n       self.printWebView.frame = NSRect(x: 0, y: 0, width: 800.0, height: 500.0)\n       self.printWebView.mainFrame.loadHTMLString(content, baseURL: printDir)\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/SandboxBookmark.swift",
    "content": "//\n//  SandboxBookmark.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/6/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass SandboxBookmark {\n    static var instance: SandboxBookmark? = nil\n    var bookmarks = [URL: Data]()\n    var successfullyRestored = [URL]()\n    \n    public static func sharedInstance() -> SandboxBookmark {\n        guard let sandbox = self.instance else {\n            self.instance = SandboxBookmark()\n            return self.instance!\n        }\n        return sandbox\n    }\n    \n    public func resetBookmarksDb() {\n        if let url = bookmark() {\n            try? FileManager.default.removeItem(at: url)\n        }\n    }\n    \n    func bookmark() -> URL? {\n        if var url = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first {\n            url = url.appendingPathComponent(\"Bookmarks.dict\")\n            \n            return url\n        }\n        \n        return nil\n    }\n    \n    func load() {\n        guard let url = bookmark() else { return }\n\n        if FileManager.default.fileExists(atPath: url.path),\n            let data = try? Data(contentsOf: url) {\n            do {\n                if let bookmarks = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSData.self], from: data) as? [URL: Data] {\n                    self.bookmarks = bookmarks\n\n                    for bookmark in bookmarks {\n                        _ = restore(bookmark)\n                    }\n                }\n            } catch {\n                print(\"Failed to unarchive bookmarks: \\(error.localizedDescription)\")\n            }\n        }\n    }\n    \n    func save() {\n        guard let fileURL = bookmark() else { return }\n        \n        do {\n            let data = try NSKeyedArchiver.archivedData(withRootObject: bookmarks, requiringSecureCoding: false)\n            try data.write(to: fileURL)\n        } catch {\n            print(\"Failed to save bookmarks: \\(error.localizedDescription)\")\n        }\n    }\n    \n    func store(url: URL) {\n        #if os(OSX)\n        do {\n            let data = try url.bookmarkData(options: NSURL.BookmarkCreationOptions.withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil)\n            bookmarks[url] = data\n        } catch {\n            Swift.print(error)\n            Swift.print(\"Error storing bookmarks\")\n        }\n        #endif\n    }\n    \n    func restore(_ bookmark: (key: URL, value: Data)) -> Bool {\n        #if os(OSX)\n        let restoredUrl: URL?\n        var isStale = false\n        \n        do {\n            restoredUrl = try URL.init(resolvingBookmarkData: bookmark.value, options: NSURL.BookmarkResolutionOptions.withSecurityScope, relativeTo: nil, bookmarkDataIsStale: &isStale)\n        } catch {\n            Swift.print(\"Error restoring bookmarks: \\(error)\")\n            restoredUrl = nil\n            \n            remove(url: bookmark.key)\n            save()\n        }\n\n        guard let url = restoredUrl else { return false }\n\n        if isStale {\n            Swift.print(\"URL is stale: \\(url)\")\n            return false\n        }\n\n        if url.startAccessingSecurityScopedResource() {\n            print(\"Bookmark restored: \\(url.path)\")\n            successfullyRestored.append(url)\n            return true\n        }\n\n        Swift.print(\"Couldn't access: \\(url.path)\")\n        #endif\n\n        return false\n    }\n    \n    func remove(url: URL) {\n        bookmarks.removeValue(forKey: url)\n    }\n    \n    func removeBy(_ url: URL) {\n        load()\n        bookmarks.removeValue(forKey: url)\n        save()\n    }\n    \n    func rename(url: URL, new: URL) {\n        let value = bookmarks[url]\n        bookmarks[new] = value\n        save()\n    }\n    \n    public func save(url: URL) {\n        guard let fileURL = bookmark() else { return }\n\n        if self.bookmarks.isEmpty,\n           FileManager.default.fileExists(atPath: fileURL.path),\n            let data = try? Data(contentsOf: fileURL) {\n            do {\n                if let bookmarks = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSData.self], from: data) as? [URL: Data] {\n                    self.bookmarks = bookmarks\n                }\n            } catch {\n                print(\"Failed to unarchive bookmarks: \\(error.localizedDescription)\")\n            }\n        }\n        \n        self.store(url: url)\n        self.save()\n    }\n    \n    public func getRestoredUrls() -> [URL] {\n        if successfullyRestored.isEmpty {\n            load()\n        }\n        \n        return successfullyRestored\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/Sidebar.swift",
    "content": "//\n//  Sidebar.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\ntypealias Image = NSImage\n\nclass Sidebar {\n    var list = [Any]()\n    let storage = Storage.shared()\n    public var items = [[SidebarItem]]()\n    \n    init() {\n        guard let defaultURL = Storage.shared().getDefault()?.url else { return }\n\n        var system = [SidebarItem]()\n\n        if UserDefaultsManagement.sidebarVisibilityNotes {\n            // Notes\n            guard let defaultURL = Storage.shared().getDefault()?.url else { return }\n            \n            let notesUrl = defaultURL.appendingPathComponent(\"Fake Virtual Notes Dir\")\n            let notesLabel = NSLocalizedString(\"Notes\", comment: \"\")\n            let fakeNotesProject =\n                Project(\n                    storage: Storage.shared(),\n                    url: notesUrl,\n                    label: notesLabel,\n                    isVirtual: true\n                )\n\n            let notes = SidebarItem(name: NSLocalizedString(\"Notes\", comment: \"\"), project: fakeNotesProject, type: .All)\n            system.append(notes)\n\n            Storage.shared().allNotesProject = fakeNotesProject\n        }\n\n        if UserDefaultsManagement.sidebarVisibilityInbox {\n            let project = Storage.shared().getDefault()\n            let notes = SidebarItem(name: NSLocalizedString(\"Inbox\", comment: \"\"), project: project, type: .Inbox)\n            system.append(notes)\n        }\n\n        if UserDefaultsManagement.sidebarVisibilityTodo {\n            let todoUrl = defaultURL.appendingPathComponent(\"Fake Virtual Todo Dir\")\n            let todoLabel = NSLocalizedString(\"Todo\", comment: \"\")\n            let fakeTodoProject =\n                Project(\n                    storage: Storage.shared(),\n                    url: todoUrl,\n                    label: todoLabel,\n                    isVirtual: true\n                )\n            \n            let todo =\n                SidebarItem(name: NSLocalizedString(\"Todo\", comment: \"\"), project: fakeTodoProject, type: .Todo)\n            system.append(todo)\n\n            Storage.shared().todoProject = fakeTodoProject\n        }\n\n        if UserDefaultsManagement.sidebarVisibilityUntagged {\n            let todoUrl = defaultURL.appendingPathComponent(\"Fake Virtual Utagged Dir\")\n            let untaggedLabel = NSLocalizedString(\"Untagged\", comment: \"\")\n            let fakeUntaggedProject =\n                Project(\n                    storage: Storage.shared(),\n                    url: todoUrl,\n                    label: untaggedLabel,\n                    isVirtual: true\n                )\n\n            let todo = SidebarItem(name: NSLocalizedString(\"Untagged\", comment: \"\"), project: fakeUntaggedProject, type: .Untagged)\n            system.append(todo)\n\n            Storage.shared().untaggedProject = fakeUntaggedProject\n        }\n\n        if UserDefaultsManagement.sidebarVisibilityTrash {\n            let trashProject = Storage.shared().getDefaultTrash()\n            let trash = SidebarItem(name: NSLocalizedString(\"Trash\", comment: \"\"), project: trashProject, type: .Trash)\n            system.append(trash)\n        }\n\n        if system.count > 0 {\n            list = system\n        }\n\n        list.append(SidebarItem(name: \"projects\", type: .Separator))\n\n        let projects = storage.getSidebarProjects()\n        if projects.count > 0 {\n            for project in projects {\n                list.append(project)\n            }\n        }\n\n        list.append(SidebarItem(name: \"tags\", type: .Separator))\n    }\n    \n    public func getList() -> [Any] {\n        return list\n    }\n\n    private func getDefaultLabelName(project: Project) -> String {\n        var name = project.label\n\n        let iCloudPath = \"/Users/\\(NSUserName())/Library/Mobile Documents\"\n        if project.url.path.starts(with: iCloudPath) {\n            name = NSLocalizedString(\"iCloud Drive\", comment: \"\")\n        }\n\n        let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path\n        if let path = documentsPath, project.url.path.starts(with: path) {\n            name = NSLocalizedString(\"Documents\", comment: \"\")\n        }\n\n        return name\n    }\n}\n"
  },
  {
    "path": "FSNotes/Helpers/UserDataService.swift",
    "content": "//\n//  UserDataService.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 1/30/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(iOS)\nimport UIKit\n#endif\n\npublic class UserDataService {\n    public static let instance = UserDataService()\n\n    fileprivate var _searchTrigger = false\n    fileprivate var _lastRenamed: URL?\n    fileprivate var _isNotesTableEscape = false\n    fileprivate var _isDark = false\n\n    fileprivate var _lastType: Int?\n    fileprivate var _lastProject: URL?\n    fileprivate var _lastName: String?\n\n    fileprivate var _importProgress = false\n\n    public var searchTrigger: Bool {\n        get {\n            return _searchTrigger\n        }\n        set {\n            _searchTrigger = newValue\n        }\n    }\n\n    public var focusOnImport: URL? {\n        get {\n            return _lastRenamed\n        }\n        set {\n            _lastRenamed = newValue\n        }\n    }\n\n    public var isNotesTableEscape: Bool {\n        get {\n            return _isNotesTableEscape\n        }\n        set {\n            _isNotesTableEscape = newValue\n        }\n    }\n\n    public var isDark: Bool {\n        get {\n        #if os(iOS)\n            return UITraitCollection.current.userInterfaceStyle == .dark\n        #else\n            return _isDark\n        #endif\n        }\n        set {\n            _isDark = newValue\n        }\n    }\n\n    public var lastType: Int? {\n        get {\n            return _lastType\n        }\n        set {\n            _lastType = newValue\n        }\n    }\n\n    public var lastName: String? {\n        get {\n            return _lastName\n        }\n        set {\n            _lastName = newValue\n        }\n    }\n\n    public var lastProject: URL? {\n        get {\n            return _lastProject\n        }\n        set {\n            _lastProject = newValue\n        }\n    }\n\n    public func resetLastSidebar() {\n        _lastProject = nil\n        _lastType = nil\n        _lastName = nil\n    }\n\n    public var skipSidebarSelection: Bool {\n        get {\n            return _importProgress\n        }\n        set {\n            _importProgress = newValue\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icon_16x16.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"icon_16x16@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"icon_32x32.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"icon_32x32@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"icon_128x128.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"icon_128x128@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"icon_256x256.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"icon_256x256@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"icon_512x512.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"filename\" : \"icon_512x512@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/Icons/AppIconClassic.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icon_alt.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/Icons/AppIconModern.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icon.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/Icons/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/checkbox_empty.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"checkbox_empty.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_empty_white.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"checkbox_empty@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_empty_white@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"checkbox_empty@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_empty_white@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/checkbox_flipped.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_flipped.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_flipped_white.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_flipped@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_flipped_white@2x.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_flipped@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ]\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/checkbox_new.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_white.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_white@2x.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"checkbox_white@3x.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/code.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0.940\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.950\",\n          \"green\" : \"0.950\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0.270\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.270\",\n          \"green\" : \"0.270\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/colors_background/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/colors_background/background_tag.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xEA\",\n          \"green\" : \"0xA8\",\n          \"red\" : \"0x78\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x63\",\n          \"green\" : \"0x84\",\n          \"red\" : \"0x53\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/colors_background/background_win.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xFF\",\n          \"green\" : \"0xFF\",\n          \"red\" : \"0xFF\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x23\",\n          \"green\" : \"0x20\",\n          \"red\" : \"0x20\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/copy.png.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"copy-2.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"copy_white-1.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"copy-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"copy_white.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"copy.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ]\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/divider.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0xE9\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xE9\",\n          \"green\" : \"0xE9\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0x00\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x00\",\n          \"green\" : \"0x00\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/dockIcon2.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"image@1x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"image@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"image@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/dockIcon4.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icon-64.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"icon-128.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"icon-256.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/friend.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"friend.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"friend 1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/highlight.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"1.000\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.700\",\n          \"green\" : \"0.900\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0.200\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.070\",\n          \"green\" : \"0.550\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/link.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0.240\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.890\",\n          \"green\" : \"0.510\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0.490\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.630\",\n          \"green\" : \"0.920\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/locked.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"locked.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"locked-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"locked-2.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/mainBackground.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0xFF\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xFF\",\n          \"green\" : \"0xFF\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0x2A\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x2E\",\n          \"green\" : \"0x2B\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/mainText.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0.000\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.000\",\n          \"green\" : \"0.000\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"1.000\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"1.000\",\n          \"green\" : \"1.000\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/menuBar.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon-simple-bw-b-9-512x512@2x-2.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon-simple-bw-w-9-512x512@2x.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon-simple-bw-b-9-512x512@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon-simple-bw-w-9-512x512@2x-1.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon-simple-bw-b-9-512x512@2x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon-simple-bw-w-9-512x512@2x-2.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/new_note_button.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"new_note-76.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"new_note-77.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"new_note-76@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"new_note-76@2x-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/pin.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pin.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pin_white.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pin-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pin_white-1.png\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pin-2.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ]\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/prefsAdvanced.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"image@1x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"image@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"image@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/prefsEditor.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"editor.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"editor@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"editor@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/prefsGeneral.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"image@1x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"image@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"image@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/prefsGit.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"git.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"git@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"git@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/prefsLayout.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"layout.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"layout@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"layout@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/prefsWeb.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"prefsWeb-64.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"prefsWeb-128.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/privacy.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"privacy.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"privacy@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"privacy@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/quoteColor.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0x81\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x81\",\n          \"green\" : \"0x81\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0x80\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x80\",\n          \"green\" : \"0x80\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/reverseBackground.colorset/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0x2A\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x2E\",\n          \"green\" : \"0x2B\"\n        }\n      }\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"red\" : \"0xFF\",\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xFF\",\n          \"green\" : \"0xFF\"\n        }\n      }\n    }\n  ]\n}"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_archive.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Archive-76.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Archive-77.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Archive-76@2x-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Archive-76@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"properties\" : {\n    \"localizable\" : true\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_external.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"185097_database_icon-32.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"185097_database_icon-64.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"185097_database_icon-128.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_icloud_drive.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"1820466_brand_icloud_logo_network_social_icon-32.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"1820466_brand_icloud_logo_network_social_icon-64.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"1820466_brand_icloud_logo_network_social_icon-128.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_inbox.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-77.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-76@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-83.5@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_notes.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Notes-77.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Notes-76.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Notes-76@2x-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Notes-76@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_project.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"folder-76.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"folder-77.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"folder-76@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"folder-76@2x-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_project_encrypted_locked.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Folder3lock4 3.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Folder3lock4 3-2.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Folder3lock4 3-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Folder3lock4 3-3.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_project_encrypted_unlocked.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Folder_unlock_1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Folder_unlock_1-2.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Folder_unlock_1-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Folder_unlock_1-3.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_tag.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"tag-76.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"tag-77.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"tag-76@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"tag-76@2x-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_todo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"t2-77.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"t2-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"t2-76@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"t2-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"t2-83.5@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"t2-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_trash.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Trash-77.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Trash-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Trash-76@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Trash-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"Trash-83.5@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Trash-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/sidebar_untagged.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Untagged-76.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Untagged-77.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Untagged-76@2x.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"Untagged-76@2x-1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/Images.xcassets/web.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"web.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"web 2.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"web 1.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"web 3.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes/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>ATSApplicationFontsPath</key>\n\t<string>.</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundleDocumentTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>etp</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>EncryptedTextPack</string>\n\t\t\t<key>CFBundleTypeMIMETypes</key>\n\t\t\t<array/>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Encrypted Text Pack</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Owner</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>es.fsnot.etp.package</string>\n\t\t\t</array>\n\t\t\t<key>LSTypeIsPackage</key>\n\t\t\t<integer>0</integer>\n\t\t\t<key>NSDocumentClass</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>textbundle</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Default</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>org.textbundle.package</string>\n\t\t\t</array>\n\t\t\t<key>LSTypeIsPackage</key>\n\t\t\t<integer>1</integer>\n\t\t\t<key>NSDocumentClass</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>md</string>\n\t\t\t\t<string>markdown</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Default</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>rtf</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>RTF</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Rich Text</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Alternate</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>public.rtf</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>txt</string>\n\t\t\t\t<string>plain-text</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>Text</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Text</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Alternate</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>public.plain-text</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleURLTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>icon</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.fsnotes</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>fsnotes</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>icon</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.fsnotes</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>nv</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>icon</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.fsnotes</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>nvalt</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.productivity</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>LSUIElement</key>\n\t<false/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2017-2022 Oleksandr Hlushchenko. All rights reserved.</string>\n\t<key>NSMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n\t<key>NSUbiquitousContainers</key>\n\t<dict>\n\t\t<key>iCloud.co.fluder.fsnotes</key>\n\t\t<dict>\n\t\t\t<key>NSUbiquitousContainerIsDocumentScopePublic</key>\n\t\t\t<true/>\n\t\t\t<key>NSUbiquitousContainerName</key>\n\t\t\t<string>FSNotes</string>\n\t\t\t<key>NSUbiquitousContainerSupportedFolderLevels</key>\n\t\t\t<string>One</string>\n\t\t</dict>\n\t</dict>\n\t<key>NSUserActivityTypes</key>\n\t<array>\n\t\t<string>es.fsnot.handoff-open-note</string>\n\t</array>\n\t<key>UTExportedTypeDeclarations</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.data</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Encrypted Text Pack</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>EncryptedTextPack</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>es.fsnot.etp.package</string>\n\t\t\t<key>UTTypeReferenceURL</key>\n\t\t\t<string>https://fsnot.es</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>etp</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array/>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>com.apple.package</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>org.textbundle.package</string>\n\t\t\t<key>UTTypeReferenceURL</key>\n\t\t\t<string>http://www.textbundle.org</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>textbundle</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.plain-text</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>md</string>\n\t\t\t\t\t<string>markdown</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>text/markdown</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.text</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Plain Text</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>Text</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>public.plain-text</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>txt</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>text/plain</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.text</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Rich Text</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>RTF</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>public.rtf</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>rtf</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>text/rtf</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes/LayoutManager.swift",
    "content": "//\n//  CustomLayoutManager.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 24.08.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nfileprivate extension NSRange {\n    /// Clamp range to fit inside given maxRange\n    func clamped(to maxRange: NSRange) -> NSRange {\n        if maxRange.length == 0 { return NSRange(location: maxRange.location, length: 0) }\n        if self.location >= NSMaxRange(maxRange) { return NSRange(location: NSMaxRange(maxRange), length: 0) }\n        let start = max(self.location, maxRange.location)\n        let end = min(NSMaxRange(self), NSMaxRange(maxRange))\n        if end <= start { return NSRange(location: start, length: 0) }\n        return NSRange(location: start, length: end - start)\n    }\n}\n\nclass LayoutManager: NSLayoutManager, NSLayoutManagerDelegate {\n    weak var processor: TextStorageProcessor?\n    \n    override init() {\n        super.init()\n        \n        self.allowsNonContiguousLayout = true\n    }\n    \n    required init?(coder: NSCoder) {\n        super.init(coder: coder)\n        \n        self.allowsNonContiguousLayout = true\n    }\n    \n    public var lineHeightMultiple: CGFloat = CGFloat(UserDefaultsManagement.lineHeightMultiple)\n\n    private var defaultFont: NSFont {\n        return self.firstTextView?.font ?? NSFont.systemFont(ofSize: NSFont.systemFontSize)\n    }\n\n    private func font(for glyphRange: NSRange) -> NSFont {\n        guard let textStorage = self.textStorage else {\n            return defaultFont\n        }\n        \n        let characterRange = self.characterRange(forGlyphRange: glyphRange, actualGlyphRange: nil)\n        let storageRange = NSRange(location: 0, length: textStorage.length)\n        let safeCharRange = characterRange.clamped(to: storageRange)\n        guard safeCharRange.length > 0 else {\n            return defaultFont\n        }\n        \n        let attributes = textStorage.attributes(at: safeCharRange.location, effectiveRange: nil)\n        return attributes[.font] as? NSFont ?? defaultFont\n    }\n    \n    private func hasAttachment(in glyphRange: NSRange) -> (hasAttachment: Bool, maxAttachmentHeight: CGFloat) {\n        guard let textStorage = self.textStorage else {\n            return (false, 0)\n        }\n        \n        let characterRange = self.characterRange(forGlyphRange: glyphRange, actualGlyphRange: nil)\n        let storageRange = NSRange(location: 0, length: textStorage.length)\n        let safeCharRange = characterRange.clamped(to: storageRange)\n        if safeCharRange.length == 0 {\n            return (false, 0)\n        }\n        \n        var maxHeight: CGFloat = 0\n        var hasAttachment = false\n        \n        textStorage.enumerateAttribute(.attachment, in: safeCharRange, options: []) { value, _, _ in\n            if let attachment = value as? NSTextAttachment {\n                hasAttachment = true\n                let attachmentBounds = attachment.bounds\n                maxHeight = max(maxHeight, attachmentBounds.height)\n            }\n        }\n        \n        return (hasAttachment, maxHeight)\n    }\n\n    public func lineHeight(for font: NSFont) -> CGFloat {\n        let fontLineHeight = self.defaultLineHeight(for: font)\n        let lineHeight = fontLineHeight * lineHeightMultiple\n        return lineHeight\n    }\n\n    private func isInCodeBlock(characterIndex: Int) -> Bool {\n        guard let textStorage = self.textStorage else {\n            return false\n        }\n        \n        let ns = textStorage.string as NSString\n        let storageFullRange = NSRange(location: 0, length: ns.length)\n\n        if characterIndex < 0 || characterIndex >= NSMaxRange(storageFullRange) {\n            return false\n        }\n        \n        guard let codeBlocks = processor?.editor?.note?.codeBlockRangesCache else { return false }\n        return codeBlocks.contains { NSLocationInRange(characterIndex, $0) }\n    }\n    \n    // MARK: - Drawing\n    \n    override func drawBackground(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) {\n        drawCodeBlockBackground(forGlyphRange: glyphsToShow, at: origin)\n\n        super.drawBackground(forGlyphRange: glyphsToShow, at: origin)\n    }\n    \n    override func fillBackgroundRectArray(_ rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor) {\n        let storageLength = self.textStorage?.length ?? 0\n        let storageFullRange = NSRange(location: 0, length: storageLength)\n        let safeCharRange = charRange.clamped(to: storageFullRange)\n        if color == NSColor.selectedTextBackgroundColor ||\n           color == NSColor.unemphasizedSelectedTextBackgroundColor ||\n           !isInCodeBlock(characterIndex: safeCharRange.location) {\n            super.fillBackgroundRectArray(rectArray, count: rectCount, forCharacterRange: charRange, color: color)\n        }\n    }\n    \n    private func drawCodeBlockBackground(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) {\n        guard let textStorage = self.textStorage,\n              let context = NSGraphicsContext.current?.cgContext else {\n            return\n        }\n\n        let storageFullRange = NSRange(location: 0, length: textStorage.length)\n        guard let allCodeBlocks = processor?.editor?.note?.codeBlockRangesCache else { return }\n        guard let textContainer = self.textContainers.first else { return }\n        \n        let visibleCharRange = self.characterRange(forGlyphRange: glyphsToShow, actualGlyphRange: nil)\n        let relevantCodeBlocks = allCodeBlocks.filter { codeBlock in\n            NSIntersectionRange(codeBlock, visibleCharRange).length > 0\n        }\n        \n        guard !relevantCodeBlocks.isEmpty else { return }\n        \n        textContainer.lineFragmentPadding = 10\n        context.saveGState()\n        \n        let backgroundColor = NotesTextProcessor.getHighlighter().options.style.backgroundColor.cgColor\n        let borderColor = NSColor.lightGray.cgColor\n        \n        for codeBlockRange in relevantCodeBlocks {  // ← теперь только релевантные блоки!\n            let safeCharRange = codeBlockRange.clamped(to: storageFullRange)\n            if safeCharRange.length == 0 { continue }\n            \n            let glyphRange = self.glyphRange(forCharacterRange: safeCharRange, actualCharacterRange: nil)\n            if glyphRange.length == 0 { continue }\n            \n            let boundingRect = self.boundingRect(forGlyphRange: glyphRange, in: textContainer)\n            if boundingRect.isEmpty { continue }\n            \n            // Padding left/right\n            let horizontalPadding: CGFloat = 5.0\n            let paddedRect = boundingRect\n                .insetBy(dx: -horizontalPadding, dy: 0)\n                .offsetBy(dx: origin.x, dy: origin.y)\n            \n            // Round borders\n            let radius: CGFloat = 5.0\n            let path = CGPath(roundedRect: paddedRect, cornerWidth: radius, cornerHeight: radius, transform: nil)\n            \n            context.setFillColor(backgroundColor)\n            context.addPath(path)\n            context.fillPath()\n            \n            // Border 1px\n            context.addPath(path)\n            context.setStrokeColor(borderColor)\n            context.setLineWidth(1.0)\n            context.strokePath()\n        }\n        \n        context.restoreGState()\n    }\n\n    public func layoutManager(\n            _ layoutManager: NSLayoutManager,\n            shouldSetLineFragmentRect lineFragmentRect: UnsafeMutablePointer<NSRect>,\n            lineFragmentUsedRect: UnsafeMutablePointer<NSRect>,\n            baselineOffset: UnsafeMutablePointer<CGFloat>,\n            in textContainer: NSTextContainer,\n            forGlyphRange glyphRange: NSRange) -> Bool {\n\n        // Get the font for the current range of glyphs\n        let currentFont = font(for: glyphRange)\n        let fontLineHeight = layoutManager.defaultLineHeight(for: currentFont)\n        let standardLineHeight = fontLineHeight * lineHeightMultiple\n        \n        let attachmentInfo = hasAttachment(in: glyphRange)\n        \n        var finalLineHeight: CGFloat\n        var baselineNudge: CGFloat\n        \n        if attachmentInfo.hasAttachment && attachmentInfo.maxAttachmentHeight > 0 {\n            if attachmentInfo.maxAttachmentHeight > standardLineHeight {\n                finalLineHeight = attachmentInfo.maxAttachmentHeight\n                baselineNudge = 0\n            } else {\n                finalLineHeight = standardLineHeight\n                let extraSpace = finalLineHeight - fontLineHeight\n                baselineNudge = extraSpace * 0.5\n            }\n        } else {\n            finalLineHeight = standardLineHeight\n            let extraSpace = finalLineHeight - fontLineHeight\n            baselineNudge = extraSpace * 0.5\n        }\n\n        var rect = lineFragmentRect.pointee\n        rect.size.height = ceil(finalLineHeight)\n\n        var usedRect = lineFragmentUsedRect.pointee\n        usedRect.size.height = max(rect.size.height, ceil(usedRect.size.height))\n\n        lineFragmentRect.pointee = rect\n        lineFragmentUsedRect.pointee = usedRect\n        baselineOffset.pointee = baselineOffset.pointee + baselineNudge\n\n        return true\n    }\n    \n    func refreshLayoutSoftly() {\n        invalidateLayout(forCharacterRange: NSRange(location: 0, length: textStorage?.length ?? 0),\n                                actualCharacterRange: nil)\n                \n        textContainers.forEach { container in\n            container.textView?.needsDisplay = true\n        }\n    }\n    \n    override func setExtraLineFragmentRect(\n        _ fragmentRect: NSRect,\n        usedRect: NSRect,\n        textContainer container: NSTextContainer) {\n        \n        var fontToUse: NSFont\n\n        if let textStorage = self.textStorage, textStorage.length > 0 {\n            let lastIndex = textStorage.length - 1\n            let attributes = textStorage.attributes(at: lastIndex, effectiveRange: nil)\n            let nsString = textStorage.string as NSString\n            let lastCharIsNewline = nsString.character(at: lastIndex) == 0x0A // '\\n'\n\n            if !lastCharIsNewline, let font = attributes[.font] as? NSFont {\n                fontToUse = font\n            } else {\n                fontToUse = UserDefaultsManagement.noteFont\n            }\n        } else {\n            fontToUse = UserDefaultsManagement.noteFont\n        }\n        \n        let lineHeight = self.lineHeight(for: fontToUse)\n        \n        var fragmentRect = fragmentRect\n        fragmentRect.size.height = ceil(lineHeight)\n        var usedRect = usedRect\n        usedRect.size.height = ceil(lineHeight)\n\n        super.setExtraLineFragmentRect(fragmentRect,\n            usedRect: usedRect,\n            textContainer: container)\n    }\n}\n"
  },
  {
    "path": "FSNotes/Localizable.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"Add\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"يضيف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přidat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hinzufügen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Añadir\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajouter\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הוסף\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"जोड़ें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiungi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"追加\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"추가\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toevoegen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adicionar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adicionar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Добавить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ekle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Додати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"添加\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增\"\n          }\n        }\n      }\n    },\n    \"Add External Folder...\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ارفاق تخزين...\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přidat externí složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Speicher anschließen...\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adjuntar almacenamiento...\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Attacher un stockage...\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הוסף תיקיה חיצונית...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाह्य फ़ोल्डर जोड़ें...\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Collega archivio...\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外部フォルダを追加…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"저장소 추가...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Koppelen opslag...\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adicionar pasta externa...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adicionar armazenamento...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Подключить хранилище...\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Harici Klasör Ekle...\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Підключити сховище...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"附件存储...\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"附件存檔\"\n          }\n        }\n      }\n    },\n    \"Are you really want to remove %d tag(s)? This action can not be undone.\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"هل تريد حقًا إزالة٪ d علامة (علامات)؟ لا يمكن التراجع عن هذا الإجراء.\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opravdu chcete odstranit tyto značky (%d)? Tuto akci nelze odvolat.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Möchten Sie wirklich %d Tag(s) entfernen? Diese Aktion kann nicht rückgängig gemacht werden.\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"¿Seguro que quieres borrar %d etiqueta/s? Esta operación no se puede deshacer.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Êtes-vous sûr de vouloir supprimer %d étiquette(s) ? Cette action est irréversible.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"האם ברצונך להסיר %d תג(ים)? לא ניתן לבטל פעולה זו.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वाकई %d टैग हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vuoi veramente rimuovere %d tag(s)? Questa azione non può essere annullata.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"本当にこれら%d個のタグを削除しますか？一度削除したら元に戻すことはできません\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Are you really want to remove %d tag(s)? This action can not be undone.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Are you really want to remove %d tag(s)? This action can not be undone.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem certeza que deseja remover %d tag(s)? Essa ação não pode ser desfeita.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem a certeza que pretende remover %d etiqueta(s)? Esta acção é irreversível.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы действительно хотите удалить %d тег(ов)? Это действие не может быть отменено.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gerçekten %d etiketi kaldırmak istiyor musunuz? Bu işlem geri alınamaz.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ви дійсно хочете видалити %d тег(и)? Ця дія не може бути скасована.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您真的要删除 %d 个标签吗？此操作无法撤消。\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"確定要刪除 %d 個標籤嗎？此動作無法復原\"\n          }\n        }\n      }\n    },\n    \"Are you sure you want to irretrievably delete %d note(s)?\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"هل انت متأكد من  حذف الملفات %d بشكل نهائي   ؟\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Určitě chcete nenávratně smazat tyto poznámky (%d)?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sind Sie sicher, dass Sie %d Notiz(en) unwiderruflich löschen möchten?\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"¿Seguro que quieres borrar definitivamente %d notas?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Êtes-vous sûr de vouloir supprimer définitivement %d note(s) ?\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"האם ברצונך למחוק %d פתק(ים) באופן בלתי הפיך?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वाकई %d नोट को पूरी तरह से हटाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sei sicuro di voler eliminare in modo irreversibile la/e nota/e %d ?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"これら%d件のノートを本当に削除してもいいですか?(もとに戻せません)\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%d개의 노트를 영구적으로 지우겠습니까?\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weet je zeker dat je %d notitie(s) definitief wilt wissen?\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem certeza que deseja deletar as notas %d irreversivelmente?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem a certeza que pretende eliminar %d nota(s) de forma irreversível?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы уверены что хотите выполнить необратимое удаление %d заметки(ок)?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"%d notu geri alınamaz şekilde silmek istediğinizden emin misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы впевнені що хочете назавжди видалити %d нотатку(ок)? \"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"确定要永久删除%d个笔记？此操作无法恢复！\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"確定要永久刪除 %d 個筆記嗎？此操作無法復原！\"\n          }\n        }\n      }\n    },\n    \"Are you sure you want to remove project \\\"%@\\\" and all files inside?\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"هل انت متأكد من حذف المشروع \\\"%@\\\" وكل المفات التي بداخله\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opravdu chcete odebrat projekt „%@“ včetně všech souborů uvnitř?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sind Sie sicher, dass Sie Projekt \\\"%@\\\" löschen möchten?\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"¿Seguro que quieres borrar el proyecto \\\"%@\\\" con todo su contenido?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Êtes-vous sûr de vouloir supprimer le projet \\\"%@\\\" et tous ses fichiers ?\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"האם ברצונך להסיר פרוייקט \\\"%@\\\" ואת כל הקבצים שבתוכו?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वाकई प्रोजेक्ट \\\"%@\\\" और उसके अंदर की सभी फाइलें हटाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sei sicuro di voler eliminare il progetto \\\"%@\\\" e tutti i file al suo interno?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プロジェクト \\\"%@\\\" と中に入っているすべてのノートを本当に削除してもいいですか？\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"프로젝트 \\\"%@\\\"를 영구적으로 지우겠습니까？\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weet je zeker dat je project \\\"%@\\\" en alle bestanden daarin wilt verwijderen?\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem certeza de que pretende remover o projeto \\\"%@\\\" e todos os arquivos contidos nele?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem a certeza que pretende eliminar o projeto \\\"%@\\\" e todos os seus ficheiros?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы уверены, что хотите удалить проект \\\"%@\\\" и все файлы в нем?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"@\\\" projesini ve içindeki tüm dosyaları kaldırmak istediğinizden emin misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы впевнені що хочете видалити директорію \\\"%@\\\"?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您确定要删除项目\\\"%@\\\"和它下面的所有文件吗？\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您確定要刪除項目\\\"%@\\\"和它下面的所有檔案嗎？\"\n          }\n        }\n      }\n    },\n    \"Back up storage\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تخزين النسخ الاحتياطي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zálohovat úložiště\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Speicher sichern\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Almacenamiento de respaldo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauvegarder le stockage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גבה אחסון\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संग्रहण का बैकअप लें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salva archivio\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"バックアップストレージ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"저장소 백업\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Back-up opslag\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Armazenamento de cópia de segurança\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cópia de segurança de armazenamento\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать резервную копию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Depolamayı yedekle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зробити резервну копію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"提交git的存储库中的所有文件\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"將所有檔案提交到 Git 儲存庫\"\n          }\n        }\n      }\n    },\n    \"Cancel\" : {\n      \"comment\" : \"Delete menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الغاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zrušit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abbrechen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ביטול\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रद्द करें\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"취소\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuleer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отмена\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İptal\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відміна\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消\"\n          }\n        }\n      }\n    },\n    \"Change creation date\" : {\n      \"comment\" : \"Menu\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير تاريخ الإنشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstellungsdatum ändern\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar la fecha de creación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifier la date de création\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה את תאריך היצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तारीख बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifica la data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日の変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"생성 날짜 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aanmaakdatum wijzigen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar data de criação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar data de criação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить дату создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturma tarihini değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити дату створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改创建日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更建立日期\"\n          }\n        }\n      }\n    },\n    \"Change Creation Date\" : {\n      \"comment\" : \"File Menu\\nMenu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير تاريخ الإنشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstellungsdatum ändern\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar fecha de creación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifier la date de création\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה תאריך יצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तारीख बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifica la data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日を変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"생성 일 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wijzig de aanmaakdatum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar data de criação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar data de criação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить дату создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturma Tarihini Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити дату створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"变更建立日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更建立日期\"\n          }\n        }\n      }\n    },\n    \"Clear\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clear\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyprázdnit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Limpiar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Effacer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נקה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साफ करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pulisci\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クリア\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clear\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clear\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Limpar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Limpar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Temizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清除\"\n          }\n        }\n      }\n    },\n    \"Clipboard successfully saved\" : {\n      \"localizations\" : {\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Portapapeles guardado correctamente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Буфер обмена успешно сохранен\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pano başarıyla kaydedildi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Буфер обміну успішно збережено\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"剪貼簿已成功儲存\"\n          }\n        }\n      }\n    },\n    \"Close\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اغلاق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zavřít\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schließen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fermer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סגור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बंद करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chiudi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"閉じる\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"닫기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sluit\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрыть\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kapat\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"关闭\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"關閉\"\n          }\n        }\n      }\n    },\n    \"Commit & Push “%@”\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закоммитить “%@”\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закомітити “%@”\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push “%@”\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"送出並上傳“%@”\"\n          }\n        }\n      }\n    },\n    \"Commit message:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Popisek commitu:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Message du Commit :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אשר הודעה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कमिट संदेश:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mensagem de confirmação:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit message:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сообщение коммита:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mesajı kaydet:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Коментар до коміту:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"提交消息:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"送出訊息\"\n          }\n        }\n      }\n    },\n    \"Connection established successfully 🤟\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تم الاتصال بنجاح 🤟\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Připojení úspěšně navázáno 🤟\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verbindung erfolgreich hergestellt 🤟\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Connection established successfully 🤟\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Connexion établie avec succès 🤟\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"החיבור נוצר בהצלחה 🤟\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कनेक्शन सफलतापूर्वक स्थापित हो गया 🤟\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Connessione stabilita con successo 🤟\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"接続が確立されました🤟\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"성공적으로 연결되었습니다 🤟\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Connection established successfully 🤟\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Conexão estabelecida com sucesso 🤟\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Conexão estabelecida com sucesso 🤟\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Соединение успешно установлено 🤟\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bağlantı başarıyla kuruldu 🤟\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"З'єднання встановлено успішно 🤟\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"连接建立成功🤟\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"連線已成功建立🤟\"\n          }\n        }\n      }\n    },\n    \"Convert to Plain\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convert to Plain\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Převést na prostý text\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konvertieren zu Plain\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convertir a Plain\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convertir en texte brut\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"המר לטקסט רגיל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सादे में परिवर्तित करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convertire in PlainText\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"に変換 PlainText\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"로 변환하다 Plain\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Omzetten naar Plain\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Converter para texto simples\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Converter para Plain\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Преобразовать в Plain\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düze Dönüştür\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перетворити в PlainText\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"转换成纯文本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"轉換為純文字\"\n          }\n        }\n      }\n    },\n    \"Convert to TextBundle\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convert to TextBundle\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Převést na TextBundle\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konvertieren zu TextBundle\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convertir a TextBundle\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convertir en TextBundle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"להמיר ל TextBundle\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टेक्स्टबंडल में परिवर्तित करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Convertire in TextBundle\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"に変換 TextBundle\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"로 변환하다 TextBundle\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Omzetten naar TextBundle\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Converter para TextBundle\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Converter para TextBundle\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Преобразовать в TextBundle\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle'a Dönüştür\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перетворити в TextBundle\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"转换成 TextBundle\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"轉換為TextBundle\"\n          }\n        }\n      }\n    },\n    \"Copy HTML\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ HTML\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat HTML\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"HTML kopieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar HTML\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier HTML\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק HTML\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"HTML कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia HTML\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"HTMLをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"HTML 복사하기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer HTML\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar HTML\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar HTML\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать HTML\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"HTML'yi Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати HTML\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝HTML\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製HTML\"\n          }\n        }\n      }\n    },\n    \"Copy Link\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ الرابط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zkopírovat odkaz\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link kopieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier le lien\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק קישור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लिंक कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia Link\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リンクをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"링크 복사하기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer Link\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar Link\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar Ligação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать ссылку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bağlantıyı Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製連結\"\n          }\n        }\n      }\n    },\n    \"Copy Plain Text\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ نص اعتيادي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat prostý text\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Plain Text kopieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar texto sin estilo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier le texte brut\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק מלל פשוט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सादा पाठ कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia Testo Semplice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プレインテキストとしてコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"일반 텍스트 복사하기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer Platte Tekst\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar Texto Simples\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar Texto Simples\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать чистый текст\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düz Metni Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати текст\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝纯文本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製純文字\"\n          }\n        }\n      }\n    },\n    \"Copy Title\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ العنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Title kopieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier le titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトルをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목 복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığı Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製標題\"\n          }\n        }\n      }\n    },\n    \"Copy URL\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ  URL\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat URL\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL kopieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier l'URL\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק כתובת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"यूआरएल कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia URL\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL 복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer URL\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar URL\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar endereço URL\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать ссылку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLyi Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝URL\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製 URL\"\n          }\n        }\n      }\n    },\n    \"Create Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crear carpeta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити директорію\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立資料夾\"\n          }\n        }\n      }\n    },\n    \"Create Web Page\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إنشاء صفحة ويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Online teilen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crear página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer une page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"צור דף אינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crea pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページの作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 만들기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Create Web Page\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfası Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建为网页URL\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立網頁\"\n          }\n        }\n      }\n    },\n    \"Creation date:\" : {\n      \"comment\" : \"Menu\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ الإنشاء:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum vytvoření:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstellungsdatum:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fecha de creación:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de création :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תאריך יצירה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तारीख:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di creazione:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제작 일:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Creation date:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата создания:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturma tarihi:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата створення:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建日期:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立日期：\"\n          }\n        }\n      }\n    },\n    \"Current password does not match with password in keychain\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور الحالية لا تتطابق مع كلمة المرور في keychain\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Současné heslo se neshoduje s heslem v klíčence\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Das aktuelle Passwort stimmt nicht mit dem Passwort im Schlüsselbund überein\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La contraseña actual no coincide con la contraseña en el Llavero\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Le mot de passe actuel ne correspond pas au mot de passe du trousseau\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסיסמה הנוכחית לא תואמת עם הסיסמה בצרור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तमान पासवर्ड कीचेन में दिए गए पासवर्ड से मेल नहीं खाता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La password corrente non corrisponde alla password nel portachiavi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"現在のパスワードはKeychainに保存されたものと一致しません\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"암호가 키체인과 다릅니다\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Het huidige wachtwoord komt niet overeen met het wachtwoord in de sleutelhanger\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A senha atual não corresponde à senha no keychain\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A palavra-passe atual não coincide com a palavra-passe armazenada no keychain\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль не соответствует паролю в связке\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geçerli parola anahtarlık içindeki parolayla uyuşmuyor\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль не співпадає з паролем у зв'язці\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"当前密码与钥匙串中的密码不匹配\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"目前密碼與鑰匙圈中的密碼不符\"\n          }\n        }\n      }\n    },\n    \"Decrypt\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فك تشفير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dešifrovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entschlüsseln\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descifrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déchiffrer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פענח\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डिक्रिप्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decifra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"復号化\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"복호화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrypt\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descriptografar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descriptografar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расшифровать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifresini Çöz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розшифрувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密\"\n          }\n        }\n      }\n    },\n    \"Decrypt Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فك تشفير المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dešifrovat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner verschlüsseln\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descifrar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crypter le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצפנת תיקיה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर एन्क्रिप्ट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crittografa cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダ復号\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"폴더 암호화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map ontsleutelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criptografar pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descriptografar pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Снять шифрование\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Şifresini Çöz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зняти шифрування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密資料夾\"\n          }\n        }\n      }\n    },\n    \"Default storage path should not be equal to Git path.\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"يجب ألا يكون مسار التخزين الافتراضي مساويًا لمسار Git.\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cesta pro výchozí úložiště by neměla být totožná s cestou ke Gitu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Der Standardspeicherpfad sollte nicht gleich dem Git-Pfad sein.\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La carpeta de almacenamiento por defecto no puede ser un repositorio Git.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Le chemin de stockage par défaut ne doit pas être égal au chemin Git.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נתיב האחסון צריך לא להיות שווה לנתיב Git.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डिफ़ॉल्ट संग्रहण पथ गिट पथ के बराबर नहीं होना चाहिए।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Il percorso di archiviazione predefinito non deve essere uguale al percorso Git.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"デフォルトストレージパスはGitパスとは異なる必要があります\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"기본 저장 경로는 Git 경로와 같지 않아야 합니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Default storage path should not be equal to Git path.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"O caminho de armazenamento padão não deve ser igual ao caminho do Git.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"O caminho de armazenamento por defeito não deve ser igual ao ao path de Git.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Путь к хранилищу по умолчанию не должен совпадать с путем Git.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Varsayılan depolama yolu\\nGit yoluna eşit olmamalıdır.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шлях зберігання за умовчанням не повинен дорівнювати шляху Git.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"默认存储路径不允许和 Git 路径相同。\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"預設儲存路徑不應與 Git 路徑相同。\"\n          }\n        }\n      }\n    },\n    \"Delete\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Löschen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удаление\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除\"\n          }\n        }\n      }\n    },\n    \"Delete Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner löschen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק תיקיה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"폴더 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar Pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除資料夾\"\n          }\n        }\n      }\n    },\n    \"Delete Tag\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف العلامة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat značku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag löschen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar etiqueta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer l’étiquette\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק תג\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder tag\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar Tag\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar Etiqueta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить тег\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketi Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити тег\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除標籤\"\n          }\n        }\n      }\n    },\n    \"Delete Web Page\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف صفحة الويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geteilte löschen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer la page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק דף אינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina verwijderen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Excluir página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfasını Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除网页\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除網頁\"\n          }\n        }\n      }\n    },\n    \"Do you want force checkout?\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chcete vynutit checkout?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voulez-vous forcer le checkout ?\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"האם ברצונך לבצע צ'ק-אאוט בכוח?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप जबरन चेकआउट चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deseja forçar a saída?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want force checkout?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сделать принудительный чекаут?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ödemeyi zorunlu kılmak ister misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зробити примусовий чекаут?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"是否要强制检查?\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您確定要強制切換嗎？\"\n          }\n        }\n      }\n    },\n    \"Do you want to move current notes in the new destination?\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"هل تريد نقل الملاحظات الحالية إلى الوجهة الجديدة؟\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chcete přesunout současné poznámky do nového cíle?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Möchten Sie aktuelle Notizen an das neue Ziel verschieben?\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"¿Quieres mover las notas al nuevo destino?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voulez-vous déplacer les notes actuelles vers la nouvelle destination ?\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"האם ברצונך להעביר את הפתקים הנוכחים ליעד החדש?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वर्तमान नोट्स को नए गंतव्य पर ले जाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vuoi spostare le note correnti nella nuova destinazione?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"既存のノートを新しい場所に移動しますか？\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"현재 메모를 새 대상으로 이동하시겠습니까?\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Do you want to move current notes in the new destination?\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pretende mover as notas atuais para o novo destino?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deseja mover as notas existentes para o novo destino?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы хотите переместить текущие заметки в новое место назначения?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mevcut notları yeni hedefe taşımak ister misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ви хочете перемістити поточні нотатки до нового сховища?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您想将当前笔记移动到目标处吗？\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您要將目前的筆記移動到新目的地嗎？\"\n          }\n        }\n      }\n    },\n    \"Documents\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"المستندات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dokumenty\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documents\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documentos\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documents\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מסמכים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दस्तावेज़\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documenti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ドキュメント\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"서류\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documents\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documentos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documentos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Документы\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Belgeler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Документація\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文档\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件\"\n          }\n        }\n      }\n    },\n    \"Done\" : {\n      \"localizations\" : {\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hecho\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Готово\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamam\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Готово\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"完成\"\n          }\n        }\n      }\n    },\n    \"Duplicate\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخة مكررة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplikovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplizieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliquer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שכפל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नकल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"복제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliceer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать копию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дублювати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"生成副本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"製作複本\"\n          }\n        }\n      }\n    },\n    \"Edit Link…\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحرير الرابط ...\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upravit odkaz…\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Edit Link…\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar enlace…\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifier le lien…\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ערוך קישור...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लिंक संपादित करें…\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifica Link…\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リンクを修正...\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"링크 수정…\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bewerk Link...\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar Link...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar Ligação...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактировать ссылку...\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bağlantıyı Düzenle…\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редагувати посилання...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"编辑链接…\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編輯連結…\"\n          }\n        }\n      }\n    },\n    \"Empty Bin\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إفراغ سلة المهملات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyprázdnit koš\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papierkorb leeren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vaciar papelera\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vider la corbeille\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רוקן סל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खाली बिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Svuota cestino\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"空のゴミ箱\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"휴지통 비우기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prullenbak leegmaken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esvaziar lixeira\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esvaziar caixa de lixo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистить корзину\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çöp Kutusunu Boşalt\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистити кошик\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清空回收站\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清空垃圾桶\"\n          }\n        }\n      }\n    },\n    \"Empty password\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة مرور فارغة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prázdné heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort leer\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña vacía\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe vide\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסיסמה ריקה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ख़ाली पासवर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password vuota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードが空です\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"빈 암호\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Leeg wachtwoord\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha vazia\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe vazia\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не введен пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Boş şifre\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"空密码\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密碼為空\"\n          }\n        }\n      }\n    },\n    \"Enter an encryption password:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"أدخل كلمة مرور تشفير:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořte šifrovací heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geben Sie ein Verschlüsselungspasswort ein:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduzca una contraseña de cifrado:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Saisir un mot de passe de chiffrement :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הזן סיסמת הצפנה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"एन्क्रिप्शन पासवर्ड दर्ज करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserire una password di crittografia:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"暗号化パスワードを入力:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"암호화 비밀번호를 입력하세요:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer een coderingswachtwoord in:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduzir uma senha de encriptação:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduzir uma palavra-passe de encriptação:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите пароль шифрования:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bir şifreleme parolası girin:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть пароль шифрування:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"输入加密密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入加密密碼：\"\n          }\n        }\n      }\n    },\n    \"Enter Master Password\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ادخل كلمة المرور الاساسية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadat hlavní heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geben Sie das Master Passwort ein\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduce la contraseña maestra\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrez le mot de passe principal\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הכנס סיסמה ראשית\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मास्टर पासवर्ड दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci la Master Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マスターパスワードを入力する\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"마스터 암호 입력\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer Hoofdwachtwoord in\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduza a senha mestre\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduzir Palavra-passe Mestra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите мастер пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana Parolayı Girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть мастер пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"输入管理员密码\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入主密碼\"\n          }\n        }\n      }\n    },\n    \"Folder with name '%@' already exist\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"المجلد الذي يحمل الاسم '٪ @' موجود بالفعل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Složka s názvem „%@“ už existuje\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Folder with name '%@' already exist\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ya existe una carpeta nombrada '%@'\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Le dossier avec le nom '%@' existe déjà\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיקיה בשם \\\"%@\\\" כבר קיימת.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"'%@' नाम वाला फ़ोल्डर पहले से मौजूद है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La cartella con il nome '%@' già esiste\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"'%@'という名前のフォルダはすでに存在しています\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이름이 '%@'인 폴더가 이미 있습니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Folder with name '%@' already exist\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A pasta com o nome '%@' já existe\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Já existe uma pasta com o nome '%@'\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Директория с названием '%@' уже существует\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"'%@' adlı klasör zaten mevcut\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Директорія з назвою '%@' вже існує\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件夹名称 '%@' 已存在\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名為'%@' 的資料夾已存在\"\n          }\n        }\n      }\n    },\n    \"Font\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Písmo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Police\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גופן\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ॉन्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fonte\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字体\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字體\"\n          }\n        }\n      }\n    },\n    \"Force Delete\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف اجباري\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vynutit smazání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Löschen erzwingen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forzar la Eliminación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forcer la suppression\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק מיידית\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बलपूर्वक हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forza Cancellazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"強制的に削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"강제 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forceer verwijderen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forçar deletar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forçar Apagar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Принудительное удаление\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zorla Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Примусово видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"强制删除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"強制刪除\"\n          }\n        }\n      }\n    },\n    \"FSNotes [edit]\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [تعديل]\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [upravit]\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [bearbeiten]\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [edición]\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [modification]\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [עריכה]\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [संपादन]\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [modifica]\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [編集]\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [수정]\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [bewerk]\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [editar]\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [editar]\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [редактирование]\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [düzenle]\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [редагування]\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [编辑]\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes[編輯]\"\n          }\n        }\n      }\n    },\n    \"FSNotes [preview]\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [المعاينة]\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [náhled]\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [Vorschau]\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [previsualización]\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [prévisualisation]\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [תצוגה]\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [पूर्वावलोकन]\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [anteprima]\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [プレビュー]\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [미리보기]\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [voorvertoning]\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [pré-visualização]\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [pré-visualizar]\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [предпросмотр]\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [önizleme]\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [попередній перегляд]\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes [预览]\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes[預覽]\"\n          }\n        }\n      }\n    },\n    \"git error\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git chyba\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"erreur git\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git error\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git 錯誤\"\n          }\n        }\n      }\n    },\n    \"Git error\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git chyba\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur Git\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git error\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git 錯誤\"\n          }\n        }\n      }\n    },\n    \"Git push error\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push خطأ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push chyba\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push fehler\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur Git push\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push שְׁגִיאָה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट पुश त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push errore\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push エラー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push 오류\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push error\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push erro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка git push\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Gönderme hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git push помилка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 推送错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 推送錯誤\"\n          }\n        }\n      }\n    },\n    \"Git repository already exists, delete it and clone again??\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repozitář už existuje, chcete ho smazat a klonovat znovu?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Le dépôt Git existe déjà, voulez-vous le supprimer et le cloner à nouveau ??\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट रिपोजिटरी पहले से मौजूद है, इसे हटाएँ और फिर से क्लोन करें??\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"O repositório Git já existe, apagar-lo e clona-lo novamente??\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git-репозиторий уже существует, удалить его и клонировать заново?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git deposu zaten var, silinip tekrar klonlansın mı?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository already exists, delete it and clone again??\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 存储库已存在，请将其删除并再次克隆??\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 儲存庫已存在，是否刪除並重新複製？\"\n          }\n        }\n      }\n    },\n    \"Hide Note List\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إخفاء قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt seznam poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizliste ausblenden\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer la liste des notes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר רשימת הערות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट सूची छिपाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi l'elenco delle note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート リストを非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메모 목록 숨기기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verbergen notitielijst\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar lista de notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar lista de notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать список заметок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not Listesini Gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приховати нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏笔记列表\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏筆記列表\"\n          }\n        }\n      }\n    },\n    \"Hide Sidebar\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اخفاء الشريط الجانبي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt boční panel\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seitenleiste ausblenden\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר סרגל צד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार छिपाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi sidebar\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバーを隠す\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드바 숨기기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verbergen zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать сайдбар\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunu Gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приховати сайдбар\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏边栏\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏側邊欄\"\n          }\n        }\n      }\n    },\n    \"History\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historie\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Die geschichte\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historia\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historique\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"היסטוריה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतिहास\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cronologia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"履歴\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경 이력\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschiedenis\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"История\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geçmiş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Історія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记历史版本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"歷史記錄\"\n          }\n        }\n      }\n    },\n    \"iCloud Drive\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Drive iCloud\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud 云盘\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud 雲碟\"\n          }\n        }\n      }\n    },\n    \"Import\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استيراد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ייבא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आयात\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取り込む...\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"가져오기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importeren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Импорт\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İçe aktar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Імпортувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"导入\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"匯入\"\n          }\n        }\n      }\n    },\n    \"Inbox\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الوارد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Příchozí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posteingang\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrada\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Boîte de réception\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיבת דואר נכנס\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इनबॉक्स\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Entrata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未整理\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inbox\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Postvak In\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inbox\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caixa de entrada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Входящие\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gelen kutusu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вхідні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"收集箱\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"收件匣 \"\n          }\n        }\n      }\n    },\n    \"Libgit2 error\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba libgit2\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur libgit2\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка libgit2\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 錯誤\"\n          }\n        }\n      }\n    },\n    \"Libgit2 error: (code)\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 خطأ: (code)\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba libgit2: (code)\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 fehler: (code)\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error: (code)\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur Libgit2 : (code)\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 שְׁגִיאָה: (code)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 त्रुटि: (कोड)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 errore: (code)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 エラー: (code)\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 오류: (code)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error: (code)\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 error: (code)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 erro: (code)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка libgit2: (код)\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 hatası : (code)\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 помилка: (code)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 错误: (code)\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libgit2 錯誤：(代碼)\"\n          }\n        }\n      }\n    },\n    \"Link\" : {\n      \"extractionState\" : \"migrated\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"رابط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odkaz\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lien\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קישור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लिंक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リンク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"링크\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ligação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ссылка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bağlantı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"連結\"\n          }\n        }\n      }\n    },\n    \"Lock\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sperren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serratura\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"자물쇠\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lock\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trancar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilit\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上锁\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定\"\n          }\n        }\n      }\n    },\n    \"Lock All Encrypted\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل جميع المشفرة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout všechny zašifrované\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alle verschlüsselte sperren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquar todas las encriptadas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller les documents chiffrés\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל פתקים מוצפנים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सभी एन्क्रिप्टेड लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca tutte le note criptate\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロックされたノートをすべて閉じる\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모든 암호화 된 노트 잠금\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel alle versleutelde\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear todos os criptografados\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear Todos os Criptografados\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать все секретные\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tüm Şifrelenmişleri Kilitle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати всі секретні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定所有加密的笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定所有已加密項目\"\n          }\n        }\n      }\n    },\n    \"Lock Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner sperren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל תיקייה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダロック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"자물쇠\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map vergrendelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Kilitle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定資料夾\"\n          }\n        }\n      }\n    },\n    \"Locked\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Locked\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamčeno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abgeschlossen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloqueado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouillé\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Locked\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लॉक की गई\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloccato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잠김\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gesloten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloqueado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloqueado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокированный\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilitli\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Замкнено\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定\"\n          }\n        }\n      }\n    },\n    \"Make Link\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit odkaz\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer un Lien\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लिंक बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar Link\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сделать ссылку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bağlantı Yap\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Make Link\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立連結\"\n          }\n        }\n      }\n    },\n    \"Master password:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور الاساسية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hlavní heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master Passwort:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña maestra:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe maître :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה ראשית:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मास्टर पासवर्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master password:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マスターパスワード:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"마스터 암호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hoofdwachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha mestre:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe mestra:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мастер пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana şifre:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мастер пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"管理员密码：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主密碼：\"\n          }\n        }\n      }\n    },\n    \"Move\" : {\n      \"comment\" : \"File Menu\\nMenu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نقل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přesunout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschieben\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העבר\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्थानांतरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verplaats\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移动\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動\"\n          }\n        }\n      }\n    },\n    \"Move error\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نقل خطأ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba při přesouvání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fehler beim Verschieben\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Error de movimiento\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur de déplacement\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שגיאת העברה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्थानांतरण त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Errore di spostamento\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動エラー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이동 오류\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fout bij verplaatsen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erro ao mover\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erro de deslocação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка перемещения\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taşıma hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Помилка переміщення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移动错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動錯誤\"\n          }\n        }\n      }\n    },\n    \"New\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"جديد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nový\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neu\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuevo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouvelle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuovo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새로운 노트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuw\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова нотатка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增\"\n          }\n        }\n      }\n    },\n    \"New folder\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مجلد جديد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nová složka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neuer Ordner\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיקיה חדשה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया फ़ोल्डर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規フォルダ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새로운 폴더\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuwe map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Dosya\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова директорія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增資料夾\"\n          }\n        }\n      }\n    },\n    \"New Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إنشاء مجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neuer Ordner\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crear carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיקיה חדשה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फोल्डर बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダ作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새로운 폴더\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map aanmaken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова директорія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增資料夾\"\n          }\n        }\n      }\n    },\n    \"New Note\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nová poznámka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neue Notiz\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva nota\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouvelle note\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הערה חדשה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova nota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規ノート\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새 메모\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuwe notitie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova nota\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova nota\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новая заметка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Not\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова нотатка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增筆記\"\n          }\n        }\n      }\n    },\n    \"New Note in New Window\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظة جديدة في نافذة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nová poznámka v novém okně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neue Notiz in neuem Fenster\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva nota en una ventana nueva\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouvelle note dans une nouvelle fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הערה חדשה בחלון חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नई विंडो में नया नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova nota in una nuova finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規ノートを新規ウィンドウで開く\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새 창에서 새 메모 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuwe notitie in nieuw venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova nota em nova janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova nota numa nova janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новая заметка в новом окне\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Pencerede Yeni Not\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова нотатка у новому вікні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新窗口中新建笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新視窗中新增筆記\"\n          }\n        }\n      }\n    },\n    \"New project\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مشروع جديد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nový projekt\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neues Projekt\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuevo proyecto\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau projet\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פרויקט חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया प्रोजैक्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuovo progetto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規プロジェクト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새로운 프로젝트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuw project\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo projeto\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo projeto\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новая директория\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Proje\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова директорія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建项目\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增專案\"\n          }\n        }\n      }\n    },\n    \"No\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ne\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Non\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"לא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नहीं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"いいえ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"아니\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Não\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Não\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нет\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hayır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"否\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"否\"\n          }\n        }\n      }\n    },\n    \"None Selected\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nic nevybráno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Keine ausgewählt\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ninguno Seleccionado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aucune sélection\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई भी नहीं चुना गया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nessuno selezionato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選択なし\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택되지 않음\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geen geselecteerd\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nada selecionado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nenhum selecionado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не выбрано\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçilmedi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не вибрано\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无选择\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未選取任何項目\"\n          }\n        }\n      }\n    },\n    \"Note with name \\\"%@\\\" already exists in selected directory.\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظة بالاسم \\\"%@\\\" موجودة بالفعل في المجلد المحدد.\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Poznámka s názvem „%@“ už ve vybrané složce existuje.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note with name \\\"%@\\\" already exists in selected directory.\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ya existe una carpeta nombrada '%@' en el directorio seleccionado.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La note avec le nom \\\"%@\\\" existe déjà dans le répertoire sélectionné.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתק בשם \\\"%@\\\" כבר קיים בתיקיה הנבחרת.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चयनित निर्देशिका में \\\"%@\\\" नाम वाला नोट पहले से मौजूद है।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La nota con il nome \\\"%@\\\" già esiste nella cartella selazionata.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート \\\"%@\\\" は指定したフォルダにすでに存在しています\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이름이 있는 메모 \\\"%@\\\" 선택한 디렉토리에 이미 존재합니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opmerking met de naam \\\"%@\\\" bestaat al in de geselecteerde map.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota com o nome \\\"%@\\\" já existe na pasta selecionada.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Já existe uma nota com o nome \\\"%@\\\" no directório selecionado.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заметка с названием \\\\\\\"%@\\\\\\\" уже существует в выбранной директории.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçilen dizinde \\\"%@\\\" adlı not zaten mevcut.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нотатка з назвою \\\"%@\\\" вже існує у вибраной директорії.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名称为 \\\"%@\\\" 的笔记已存在于所选目录中。\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"所選目錄中已存在名為\\\"%@\\\" 的筆記。\"\n          }\n        }\n      }\n    },\n    \"Notes\" : {\n      \"comment\" : \"Sidebar label\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Poznámky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべて\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모든 노트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notities\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"所有笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"筆記\"\n          }\n        }\n      }\n    },\n    \"OK\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"موافق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אישור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ठीक है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"확인\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamam\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"OK\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"好的\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"確定\"\n          }\n        }\n      }\n    },\n    \"Open External\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح خارجي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřít externí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In externem Editor öffnen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir externo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir en externe\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח חיצוני\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाहरी खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri esternamente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開く…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"외부에서 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Open extern\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir External\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir externamente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Внешний редактор\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Açık Harici\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити зовні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打开外部\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開啟外部連結\"\n          }\n        }\n      }\n    },\n    \"Open note\" : {\n      \"comment\" : \"Document opened\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"افتح الملاحظة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřená poznámka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notiz öffnen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note ouverte\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח פתק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri nota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開かれたノート\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메모 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notitie openen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть заметку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notu Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити нотатку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打开笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開啟筆記\"\n          }\n        }\n      }\n    },\n    \"Open Note in New Window\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح الملاحظة في نافذة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřít poznámku v novém okně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notiz in neuem Fenster öffnen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota en una ventana nueva\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir la note dans une nouvelle fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח הערה בחלון חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नई विंडो में नोट खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri nota in una nuova finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートを新規ウィンドウで開く\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메모 새 창에서 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notitie openen in nieuw venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota em nova janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota numa nova janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть заметку в новом окне\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notu Yeni Pencerede Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити нотатку у новому вікні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新窗口中打开笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新視窗中開啟筆記\"\n          }\n        }\n      }\n    },\n    \"Otherwise, the database of your notes will be available at: \" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"وإلا، ستكون قاعدة بيانات الملاحظات متوفرة على: \"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vaše databáze poznámek bude jinak k dispozici zde: \"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otherwise, the database of your notes will be available at: \"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"De lo contrario la base de datos de tus notas estará disponible en: \"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sinon, la base de données de vos notes sera disponible sur : \"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אחרת, אחסון פתקיך יהיה נגיש ב:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अन्यथा, आपके नोट्स का डेटाबेस यहां उपलब्ध होगा:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Altrimenti, il database delle tue note sarà disponibile su: \"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"あるいは、データベースは次の場所で利用できます: \"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"그렇지 않으면 메모 데이터베이스를 다음에서 사용할 수 있습니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otherwise, the database of your notes will be available at: \"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caso contrário, a base de dados das suas notas estará disponível em: \"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"De outra forma, os dados das suas notas estarão disponíveis em:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"В противном случае база данных заметок будет доступна по адресу: \"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aksi takdirde notlarınızın veritabanına şu adresten ulaşabilirsiniz:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Інакше база даних ваших нотаток буде доступна за адресою: \"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"否则，您的笔记数据库将在以下位置可用：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"否則，您的筆記資料庫將位於：\"\n          }\n        }\n      }\n    },\n    \"Password:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"비밀번호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifre:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密碼：\"\n          }\n        }\n      }\n    },\n    \"Path not available\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"المسار غير متوفر\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cesta není k dispozici\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path not available\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carpeta no disponible\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chemin non disponible\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הנתיב אינו זמין\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पथ उपलब्ध नहीं है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Percorso non disponibile\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無効なパスです\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"경로를 사용할 수 없음\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pad niet beschikbaar\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caminho indisponível \"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caminho não disponível\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Путь недоступен\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yol mevcut değil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шлях недоступний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"路径不可用\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"路徑無法使用\"\n          }\n        }\n      }\n    },\n    \"Pin\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"دبوس\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Připnout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Anclar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Épingler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצמד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fissa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"メモをピンで固定\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"고정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Прикрепить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закріпити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"置顶\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"釘選\"\n          }\n        }\n      }\n    },\n    \"Please enter image title:\" : {\n      \"comment\" : \"Edit area\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرجاء إدخال عنوان الصورة:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte popis obrázku:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geben Sie die Bildbezeichnung ein:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, introduce un título para la imagen:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez saisir le titre de l'image :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נא הכנס כותרת תמונה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया छवि शीर्षक दर्ज करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci il titolo dell'immagine:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"イメージタイトルを入力:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이미지 제목을 입력하십시오：\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer a.u.b. afbeeldingstitel in:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, insira um título na imagem:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor insira o título da imagem:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, введите заголовок изображения:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resim başlığını girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок зображення:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请输入图片标题：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入圖片標題：\"\n          }\n        }\n      }\n    },\n    \"Please enter password for current note\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرجاء إدخال كلمة المرور للملاحظة الحالية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte heslo k této poznámce\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geben Sie das Passwort für die aktuelle Notiz ein\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, introduce una contraseña para la nota\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez entrer le mot de passe pour la note actuelle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נא הכבס סיסמה לפתק הנוכחי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया वर्तमान नोट के लिए पासवर्ड दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci la password per la nota corrente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"現在開いているノートのためのパスワードを入力\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 암호를 입력하십시오\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer a.u.b. wachtwoord voor huidige notitie in:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, insira uma senha para nota atual\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor insira a palavra-passe para a nota atual\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите пароль для текущей заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen güncel not için şifreyi giriniz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, введіть пароль для нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请输入当前笔记的密码\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入目前筆記的密碼\"\n          }\n        }\n      }\n    },\n    \"Please enter project name:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرجاء إدخال اسم المشروع:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte název projektu:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geben Sie den Projektname ein:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, introduce un nombre para el proyecto:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez saisir le nom du projet :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נא הכנב שם פרויקט:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया प्रोजैक्ट का नाम दर्ज करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci il nome del progetto:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プロジェクト名を入力:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"프로젝트 이름을 입력하십시오：\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer a.u.b. projectnaam in:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, insira um nome no projeto:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor insira o nome do projeto:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, введите название директории:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen proje adını giriniz:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, введіть назву директорії:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请输入项目名称：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入專案名稱：\"\n          }\n        }\n      }\n    },\n    \"Please enter tag name:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرجاء إدخال اسم الوسم:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte jméno značky:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bitte geben Sie den Tag-Namen ein:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, introduce un nombre para la etiqueta:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez saisir le nom de l’étiquette :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נא הכנס שם תג:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया टैग नाम दर्ज करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci il nome del tag:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグ名を入力:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그 이름을 입력하세요:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer de tagnaam in:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, insira um nome na tag:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor insira o nome da etiqueta:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите название тега:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen etiket adını girin:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, введіть назву тегу:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请输入标签名称：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入標籤名稱：\"\n          }\n        }\n      }\n    },\n    \"Please enter tags (comma separated):\" : {\n      \"comment\" : \"Menu\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"رجاءً ادخل  وسوم (مفصولة بفارزة)\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte značky (oddělené čárkami):\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geben Sie Tags ein (durch Kommas getrennt):\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, introduce las etiquetas (separadas por comas):\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez saisir des étiquettes (séparées par des virgules) :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נא הכנס תגים (מופרדים בפסיק):\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया टैग दर्ज करें (अल्पविराम से अलग करके):\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci i tag (separati da virgole):\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグを入力(コンマ区切り):\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그를 입력하십시오（콤마로 구분）：\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer a.u.b. tags (kommagescheiden) in:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, insira tags (separadas por vírgulas):\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor insira as etiquetas (separadas por vírgulas):\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста введите теги (через запятую):\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen etiketleri girin (virgülle ayırarak):\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, введіть теги (розділити комою):\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请输入标签（使用英文逗号分隔）：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請輸入標籤（以逗號分隔）：\"\n          }\n        }\n      }\n    },\n    \"Please init git repository before (Preferences -> Git -> Init/commit)\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nejprve inicializujte repozitář (Nastavení > Git > Init/commit)\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"S’il vous plait, initialiser le dépôt git avant (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया पहले गिट रिपोजिटरी प्रारंभ करें (प्राथमिकताएं -> गिट -> आरंभ/कमिट)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, inicie o repositório git antes (Preferências -> Git -> Init/commit)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, предварительно инициируйте git-репозиторий (Preferences -> Git -> Init/commit).\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen git deposunu başlatmadan önce (Tercihler -> Git -> Başlat/gönder)\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Please init git repository before (Preferences -> Git -> Init/commit)\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請先初始化 Git 儲存庫 (偏好設定 -> Git -> 初始化/提交)\"\n          }\n        }\n      }\n    },\n    \"Please select private and public key\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرجاء تحديد مفتاح خاص وعام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyberte prosím veřejný a soukromý klíč\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bitte wählen Sie privaten und öffentlichen Schlüssel aus\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleccione la clave pública y privada\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez sélectionner une clé privée et une clé publique\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אנא בחר מפתח פרטי וציבורי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया निजी और सार्वजनिक कुंजी चुनें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleziona la chiave privata e pubblica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"秘密鍵と公開鍵を選択してください\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"개인 키와 공개 키를 선택하세요.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecteer a.u.b. privé en openbare sleutel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, selecione uma chave privada e pública\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, selecione a chave privada e pública\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, выберите закрытый и открытый ключ\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen özel ve genel anahtarı seçin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, оберіть приватний та публічний ключ\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请选择私钥和公钥\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請選擇私鑰和公鑰\"\n          }\n        }\n      }\n    },\n    \"Please select private key\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرجاء تحديد المفتاح الخاص\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyberte prosím soukromý klíč\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bitte wählen Sie den privaten Schlüssel aus\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor seleccione clave privada\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez sélectionner la clé privée\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אנא בחר מפתח פרטי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया निजी कुंजी चुनें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleziona la chiave privata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"秘密鍵を選択してください\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"개인 키를 선택하십시오\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecteer a.u.b. privésleutel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, insira uma chave privada\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecione a chave privada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выберите закрытый ключ\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen özel anahtarı seçin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, виберіть приватний ключ\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请选择私钥\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請選擇私鑰\"\n          }\n        }\n      }\n    },\n    \"Please try again\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حاول مرة اخرى\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zkuste to znovu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versuchen Sie bitte nochmal\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor intenta de nuevo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez réessayer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נסה שוב\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया पुन: प्रयास करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Per favore riprova\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"もう一度試してください\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다시 시도하십시오\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Probeer het a.u.b. opnieuw\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor, tente novamente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Volte a tentar por favor\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, попробуйте ещё раз\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen tekrar deneyin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Буль ласка, спробуйте знову\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请再试一次\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"請再試一次 \"\n          }\n        }\n      }\n    },\n    \"Preferences\" : {\n      \"comment\" : \"Localizable.strings\\n FSNotes\\n \\n Created by Oleksandr Glushchenko on 7/4/18.\\n Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\",\n      \"extractionState\" : \"migrated\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التفضيلات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Předvolby\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferencias\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Préférences\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העדפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferenze\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"환경설정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorkeuren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tercihler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好設定\"\n          }\n        }\n      }\n    },\n    \"Print\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"طباعة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tisknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Drucken\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הדפס\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रिंट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stampa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"印刷\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"프린트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Druk af\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Печать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazdır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Роздрукувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打印\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"列印\"\n          }\n        }\n      }\n    },\n    \"Quit FSNotes\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اغلاق FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ukončit FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes beenden\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salir de FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Quitter FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיים את FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes बंद करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esci da FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotesを終了\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 종료\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stop FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sair do FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sair do FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выйти из FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes'tan çıkın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завершити роботу FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"退出FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"結束 FSNotes\"\n          }\n        }\n      }\n    },\n    \"Recents\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الحديثة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nedávné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Letzte\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recientes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Récents\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אחרונים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हाल ही का\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recenti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最近\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"최근\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recente\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recentes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recentes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Недавние\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Arananlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Останні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最近\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最近項目\"\n          }\n        }\n      }\n    },\n    \"Recents Search\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"البحث الأخير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat nedávné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neueste Suche\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Búqueda de Recientes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recherches récentes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חיפושים אחרונים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हाल की खोजें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ricerche Recenti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最近の検索\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"최근 검색\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recent zoeken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscas recentes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar Recentes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Недавние запросы\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Son Arananlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Останні запити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最近搜索\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最近搜尋紀錄\"\n          }\n        }\n      }\n    },\n    \"Remove\" : {\n      \"comment\" : \"Delete menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Löschen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Borrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסר\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除\"\n          }\n        }\n      }\n    },\n    \"Remove Link\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف الرابط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat odkaz\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove Link\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le lien\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסר קישור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लिंक हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi Link\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リンクを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"링크 제거\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder Link\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover Link\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover Ligação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить ссылку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bağlantıyı Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除連結\"\n          }\n        }\n      }\n    },\n    \"Remove note(s)\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف ملاحظة/ملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat poznámku/y\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notiz (en) entfernen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar nota(s)\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer la(les) note(s)\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסר פתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi nota/e\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder notitie(s)\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover nota(s)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar nota(s)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notu(ları) kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити нотатку(ок)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除筆記\"\n          }\n        }\n      }\n    },\n    \"Remove Tags\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إزالة العلامات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat značky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags entfernen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar etiquetas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer les étiquettes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסר תגים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그 제거\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijderen tags\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover Tags\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover Etiquetas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить теги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketleri Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити теги\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除標籤\"\n          }\n        }\n      }\n    },\n    \"Rename\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اعادة تسمية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Umbenennen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名前を変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이름 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeniden isimlendir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名\"\n          }\n        }\n      }\n    },\n    \"Rename Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اعادة تسمية المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner umbenennen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שם תיקיה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर का नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダの名称変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 이름 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Yeniden Adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名資料夾\"\n          }\n        }\n      }\n    },\n    \"Rename Tag\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة تسمية العلامة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat značku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag umbenennen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombar etiqueta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer l’étiquette\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שם תג\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग का नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグの名称変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그 이름 바꾸기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoemen tag\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear Tag\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear Etiqueta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать тег\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketi Yeniden Adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати тег\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名標籤\"\n          }\n        }\n      }\n    },\n    \"Rename Tags\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة تسمية العلامات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat značky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags umbenennen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombar etiqueta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer les étiquettes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שמות תגים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग का नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複数タグの名称変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그 이름 바꾸기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoemen tags\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear Tags\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear Etiquetas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать теги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketleri Yeniden Adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати теги\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名標籤\"\n          }\n        }\n      }\n    },\n    \"Repository not found\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repozitář nenalezen\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dépôt non trouvé\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रिपोजिटरी नहीं मिली\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositório não encontrado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Репозиторий не найден\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Depo bulunamadı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Репозиторій не знайдено\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository not found\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"找不到儲存庫\"\n          }\n        }\n      }\n    },\n    \"Reveal in Finder\" : {\n      \"comment\" : \"File Menu\\nMenu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ve Finderu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Finder anzeigen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar en el Finder\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Localiser dans le Finder\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג ב-Finder\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Finder\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finderに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon in Finder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realçar no Finder\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в Finder\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder'da göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати в Finder\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在Finder中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於 Finder\"\n          }\n        }\n      }\n    },\n    \"Search\" : {\n      \"localizations\" : {\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поиск\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пошук\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜尋\"\n          }\n        }\n      }\n    },\n    \"Search and create\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث  و انشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat a vytvořit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen und ersetzen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar y crear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher et créer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חיפוש ויצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजें और बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerca e crea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索または新規作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"검색 및 추가\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek en creëer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Busque e crie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e criar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти и создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara ve oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти або створити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索或创建（按下回车即可创建）\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜尋並建立\"\n          }\n        }\n      }\n    },\n    \"Search and Create\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث وانشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat a vytvořit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen und ersetzen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar y crear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher et créer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חיפוש יצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजें और बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerca e crea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索または新規作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"검색 및 추가\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek en creëer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e criar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e criar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти и создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara ve oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти або створити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索或创建（按下回车即可创建）\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜尋並建立\"\n          }\n        }\n      }\n    },\n    \"Settings\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التفضيلات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferencias\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paramètres\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העדפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferenze\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"환경설정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorkeuren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Configurações\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        }\n      }\n    },\n    \"Show in Finder\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ve Finderu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner anzeigen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Localiser dans le Finder\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג ב-Finder\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Finder\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finderに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon in Finder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в Finder\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bulucuda Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати в Finder\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在访达中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在Finder中顯示\"\n          }\n        }\n      }\n    },\n    \"Show Note List\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit seznam poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizliste anzeigen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher la liste des notes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג רשימת הערות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट सूची दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra l'elenco delle note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート一覧を表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메모 목록 표시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tonen notitielijst\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar lista de notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar lista de notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать список заметок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not Listesini Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示笔记列表\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示筆記列表\"\n          }\n        }\n      }\n    },\n    \"Show Options\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الاعدادات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit možnosti\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen anzeigen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ver configuración\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher les options d'affichage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג אפשרויות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"विकल्प दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra opzioni vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"オプションを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보기 옵션\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon weergaveopties\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar as opções\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloquear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать опции\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçenekleri Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати параметри\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示视图选项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示選項\"\n          }\n        }\n      }\n    },\n    \"Show Sidebar\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار الشريط الجانبي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit boční panel\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seitenleiste anzeigen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג סרגל צד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra sidebar\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバーを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드바 표시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tonen zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать сайдбар\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunu Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати сайдбар\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示侧边栏\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示側邊欄\"\n          }\n        }\n      }\n    },\n    \"Show view options\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الاعدادات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Volby zobrazení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen anzeigen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ver configuración\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher les options d'affichage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג אפשרויות תצוגה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दृश्य विकल्प दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra opzioni vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示オプションを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보기 옵션\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon weergaveopties\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar opções de visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar opções de visualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настроить вид\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünüm seçeneklerini göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування вигляду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示视图选项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示方式選項\"\n          }\n        }\n      }\n    },\n    \"Sort by\" : {\n      \"comment\" : \"View menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"صنف حسب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řadit podle\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sortiere nach\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trier par\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מיין לפי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इसके अनुसार क्रमबद्ध करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordina per\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示順序\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다음으로 정렬\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sorteer op\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordernar por\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортировать по\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sırala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортувати за\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        }\n      }\n    },\n    \"SSH error\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH خطأ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba SSH\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH fehler\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur SSH\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH שְׁגִיאָה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH errore\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH エラー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH 오류\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH fout\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH erro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка SSH\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH помилка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH error\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH 錯誤\"\n          }\n        }\n      }\n    },\n    \"Tags\" : {\n      \"comment\" : \"Sidebar label\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الوسوم\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Značky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiquetas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Étiquettes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תגים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiquetas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Теги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Теги\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標籤\"\n          }\n        }\n      }\n    },\n    \"This action cannot be undone.\" : {\n      \"comment\" : \"Delete menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"هذا الاجراء غير قابل للرجوع\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tuto akci nelze odvolat.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Diese Aktion kann nicht rückgängig gemacht werden\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esta operación no se puede deshacer.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cette action ne peut pas être annulée.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"לא ניתן לבטל פעולה זו.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"यह क्रिया पूर्ववत नहीं की जा सकती।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Questa azione non può essere annullata.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"このアクションは取り消しできません。\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이 작업은 취소할 수 없습니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deze actie kan niet ongedaan gemaakt worden.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Essa ação não pode ser desfeita.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esta ação não pode ser revertida.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Это действие не может быть отменено.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bu eylem geri alınamaz.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Цю дію неможливо відмінити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"此操作无法撤消。\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"此動作無法復原。\"\n          }\n        }\n      }\n    },\n    \"Todo\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قائمة المهام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Úkoly\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Todo\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pendientes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tâches\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מטלות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टुडू\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Da Fare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タスク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"할 일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Te Doen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A fazer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarefa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Задачи\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yapılacak\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завдання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"待办事项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"待辦事項\"\n          }\n        }\n      }\n    },\n    \"Toggle preview\" : {\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تبديل معاينة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přepnout náhled\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vorschau umschalten\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar previsualización\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Activer/désactiver l'aperçu\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג/הסתר תצוגה מקדימה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्वावलोकन टॉगल करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Attiva / disattiva anteprima\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プレビューを表示/非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"미리보기 토글\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wissel voorvertoning\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar pré-visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alternar pré-visualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переключить предпросмотр\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Önizlemeyi aç/kapat\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переключити перегляд\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切换预览\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切換預覽\"\n          }\n        }\n      }\n    },\n    \"Trash\" : {\n      \"comment\" : \"Sidebar label\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الملهملات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Koš\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papierkorb\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papelera\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corbeille\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פח אשפה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कूडा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cestino\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ゴミ箱\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"휴지통\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prullenmand\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lixo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lixo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Корзина\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çöp Kutusu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сміття\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"回收站\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"垃圾桶\"\n          }\n        }\n      }\n    },\n    \"Unlink External Folder\" : {\n      \"comment\" : \"Menu Library\",\n      \"localizations\" : {\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desvincular carpeta externa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отвязать внешнюю папку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Harici Klasörü Bağlantısını Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Від'єднати зовнішню папку\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解除外部資料夾連結\"\n          }\n        }\n      }\n    },\n    \"Unlock\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الغاء القفل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odemknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Freischalten\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloquear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अनलॉक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sbloccare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック解除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잠금 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ontgrendelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloqueado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloquear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Разблокировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilidi Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розблокувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解锁\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解鎖\"\n          }\n        }\n      }\n    },\n    \"Unlock Folder\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odemknout složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner entsperren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloquear carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déverrouiller le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בטל נעילת תיקייה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर अनलॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sblocca cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダロック解除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"폴더 잠금 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map ontgrendelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloquear pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desbloquear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Разблокировать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Kilidini Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розблокувати директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解锁文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解鎖資料夾\"\n          }\n        }\n      }\n    },\n    \"Unpin\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إلغاء التثبيت\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odepnout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Loslösen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desanclar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Désépingler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בטל הצמדה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अनपिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sblocc\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ピン固定の解除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"고정 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"VerwijderPin\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desafixar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soltar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открепить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sabitlemeyi kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкріпити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消置顶\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消釘選\"\n          }\n        }\n      }\n    },\n    \"Untagged\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بدون علامات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neoznačené\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ungetaggt\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sin etiquetar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Non étiqueté\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ללא תגים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बिना टैग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senza Tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグ無し\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그가 없는\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Niet gelabeld\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sem tags\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sem etiqueta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без тегов\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketsiz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без тегів\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未標籤 \"\n          }\n        }\n      }\n    },\n    \"Untitled Note\" : {\n      \"comment\" : \"Untitled Note\",\n      \"extractionState\" : \"migrated\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظة بدون عنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Poznámka bez názvu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Unbenannte Notiz\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota sin título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note sans titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתק ללא שם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक रहित नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota senza titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名称未設定のノート\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"무제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naamloze notitie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota sem título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota sem título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без названия\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlıksız Not\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без назви\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未命名筆記\"\n          }\n        }\n      }\n    },\n    \"Update Web Page\" : {\n      \"comment\" : \"File Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحديث صفحة الويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aktualizovat webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geteilte aktualisieren\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Actualizar página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mettre à jour la page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עדכן את דף האינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज अपडेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiorna la pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web ページの更新\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 업데이트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina bijwerken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Update página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Atualizar página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Обновить веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfasını Güncelle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Оновити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更新网页\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更新網頁\"\n          }\n        }\n      }\n    },\n    \"Upload error\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba při nahrávání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur d'envoi de données\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अपलोड त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка загрузки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yükleme hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload error\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上传错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上傳錯誤\"\n          }\n        }\n      }\n    },\n    \"URL has been copied to clipboard\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تم نسخ الرابط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adresa URL zkopírována do schránky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL wurde in die Zwischenablage kopiert\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"El enlace se ha copiado al portapapeles\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"L'URL a été copiée dans le presse-papiers\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הכתובת הועתקה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL को क्लिपबोर्ड पर कॉपी कर दिया गया है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"L'URL è stato copiato negli appunti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クリップボードにURLがコピーされました\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL이 클립보드에 복사되었습니다\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL is gekopieerd naar klembord\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL copiado para a área de transferência\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Endereço URL foi copiado para a área de transferência\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ссылка была скопирована в буфер обмена\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL panoya kopyalandı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Посилання було скопійовано в буфер обміну\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL已复制到剪贴板\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"網址已複製到剪貼簿\"\n          }\n        }\n      }\n    },\n    \"Verify Password:\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اكد كلمة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ověřit heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort bestätigen:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar contraseña:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vérifier le mot de passe :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אמת את הסיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड को सत्यापित करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verifica password:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードの確認:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"비밀번호 확인:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord verifiëren:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verifique a senha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar palavra-passe:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Повторить пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifreyi Doğrula:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Підтвердіть пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"验证密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"驗證密碼：\"\n          }\n        }\n      }\n    },\n    \"View\" : {\n      \"comment\" : \"Menu\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ansicht\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualización\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voir\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תצוגה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"देखें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weergave\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vista\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вид\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünüm\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вид\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"视图\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檢視\"\n          }\n        }\n      }\n    },\n    \"We are detect that you are install FSNotes from Mac App Store with default storage in iCloud Drive, do you want to move old database in iCloud Drive?\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اكتشفنا أنك تقوم بتثبيت FSNotes من Mac App Store مع التخزين الافتراضي في iCloud Drive ، هل تريد نقل قاعدة البيانات القديمة في iCloud Drive؟\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detekovali jsme, že jste nainstalovali FSNotes z Mac App Storu s výchozím úložištěm na iCloud Drive, chcete přesunout starou databázi na iCloud Drive?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wir stellen fest, dass Sie FSNotes aus dem Mac App Store mit Standardspeicher in iCloud Drive installiert haben. Möchten Sie die alte Datenbank in iCloud Drive verschieben?\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"We have detected that you have installed FSNotes from Mac App Store with default storage in iCloud Drive, do you want to move old database into iCloud Drive\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Se ha detectado que la versión de FSNotes instalada es del Mac App Store, con almacenamiento por defecto en iCloud Drive. ¿Quieres mover la base de datos antigua a iCloud Drive?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nous détectons que vous installez FSNotes depuis le Mac App Store avec le stockage par défaut dans iCloud Drive, voulez-vous déplacer l'ancienne base de données dans iCloud Drive ?\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שמנו לב שהתקנת FSNotes מה-App Store עם אחסון ב-iCloud Drive. האם ברצונך להעביר את המאגר הקודם ל-iCloud Drive?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हमने पाया है कि आपने iCloud ड्राइव में डिफ़ॉल्ट स्टोरेज के साथ Mac App Store से FSNotes इंस्टॉल किया है, क्या आप पुराने डेटाबेस को iCloud ड्राइव में ले जाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abbiamo rilevato che stai installando FSNotes dal Mac App Store con l'archiviazione predefinita in iCloud Drive, vuoi spostare il vecchio database in iCloud Drive?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotesをMac App Storeからインストールし、iCloud Driveにデフォルトで保存していることがわかりますが、iCloud Driveにある古いデータベースを移動しますか？\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive에 기본 저장 공간이 있는 Mac App Store에서 FSNotes를 설치한 것으로 감지되었습니다. iCloud Drive에서 이전 데이터베이스를 옮기시겠습니까?\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"We hebben gedetecteerd dat je FSNotes hebt geïnstalleerd vanuit Mac App Store met standaard opslag in iCloud Drive. Wil je oude database verplaatsen naar iCloud Drive?\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detectamos que está instalando o FSNotes da Mac App Store com armazenamento padrão no iCloud Drive, deseja mover o banco de dados antigo no iCloud Drive?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detectamos que está a instalar o FSNotes  através da Mac App Store com o armazenamento por defeito no iCloud Drive, deseja mover a base de dados antiga para o iCloud Drive?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мы обнаружили, что вы установили FSNotes из Mac App Store с хранилищем по умолчанию в iCloud Drive. Хотите ли вы перенести старую базу данных в iCloud  Drive?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes'u Mac App Store'dan iCloud Drive'daki varsayılan depolama alanıyla yüklediğinizi tespit ettik, eski veritabanını iCloud Drive'a taşımak ister misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ми виявили, що ви встановили FSNotes з Mac App Store із зберіганням за замовчуванням в iCloud Drive, хочете перенести стару базу даних в iCloud Drive?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"我们检测到您是从 Mac App Store 安装的 FSNotes，数据默认存储在 iCloud 云盘，您想移动 iCloud 云盘中的旧数据库吗？\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"我們偵測到您從 Mac App Store 安裝了 FSNotes，且預設儲存空間為 iCloud 雲碟 。您是否要將舊的資料庫移動至iCloud 雲碟 ?\"\n          }\n        }\n      }\n    },\n    \"We can not move \\\"{DST_PATH}\\\" because this item already exist in selected destination.\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لا يمكننا نقل \\\"{DST_PATH}\\\" لأن هذا العنصر موجود بالفعل في الوجهة المحددة.\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nelze přesunout „{DST_PATH}“, protože tato položka už ve vybraném cíli existuje.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"We can not move \\\"{DST_PATH}\\\" because this item already exist in selected destination.\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No se puede mover \\\"{DST_PATH}\\\" porque ya existe en el destino seleccionado.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nous ne pouvons pas déplacer \\\"{DST_PATH}\\\" car cet élément existe déjà dans la destination sélectionnée.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"לא ניתן להעביר \\\\\\\"{DST_PATH}\\\\\\\" מפני שקובץ באותו שם כבר קיים ביעד הנבחר.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हम \\\"{DST_PATH}\\\" को स्थानांतरित नहीं कर सकते क्योंकि यह आइटम पहले से ही चयनित गंतव्य में मौजूद है।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Non possiamo spostare \\\"{DST_PATH}\\\" perché questo elemento esiste già nella destinazione selezionata.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動先に同名のアイテムがすでに存在しているため、\\\\\\\"{DST_PATH}\\\\\\\"を移動できませんでした\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이 항목이 선택한 대상에 이미 있으므로 \\\"{DST_PATH}\\\"을(를) 이동할 수 없습니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"We can not move \\\"{DST_PATH}\\\" because this item already exist in selected destination.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Não podemos mover \\\"{DST_PATH}\\\" porque este item já existe no destino selecionado.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"É impossível mover \\\"{DST_PATH}\\\" porque este item já existe atualmente no destino seleccionado.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мы не можем переместить \\\\\\\\\\\\\\\"{DST_PATH}\\\\\\\\\\\\\\\", потому что этот путь уже существует в выбранном месте назначения.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"{DST_PATH}\\\" öğesini taşıyamayız çünkü bu öğe seçili hedefte zaten mevcut.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ми не можемо перемістити \\\\\\\"{DST_PATH}\\\\\\\", оскільки цей елемент вже існує у вибраному сховищі.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"我们不能移动 \\\"{DST_PATH}\\\"，因为这个项目已经存在于选定的目标处。\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無法移動”{DST_PATH}”，因為選定的目的地已存在此項目。\"\n          }\n        }\n      }\n    },\n    \"Web\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建网页URL并打开\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"網頁\"\n          }\n        }\n      }\n    },\n    \"Web publishing error\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"خطأ في النشر على الويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba zveřejnění na webu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fehler bei der Webveröffentlichung\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Error de publicación web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur de publication Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שגיאת פרסום באינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब प्रकाशन त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Errore di pubblicazione sul Web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブ公開エラー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 게시 오류\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fout bij webpublicatie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"error de publicação Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erro de publicação na Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка веб-публикации\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web yayınlama hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Помилка веб-публікації\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"网络发布错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"網頁發布錯誤\"\n          }\n        }\n      }\n    },\n    \"Wrong password\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة مرور خاطئة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nesprávné heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Falsches Passwort\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña incorrecta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mauvais mot de passe\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה שגויה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गलत पासवर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password errata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"間違ったパスワード\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잘못된 비밀번호\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verkeerd wachtwoord\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha incorreta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha incorreta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неправильный пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yanlış şifre\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неправильний пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码错误\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密碼錯誤\"\n          }\n        }\n      }\n    },\n    \"Wrong repeated password\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عدم تطابق كلمة المرور\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nesprávné opakované heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort stimmt nicht überein\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repetición de contraseña incorrecta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mauvais mot de passe répété\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסיסמאות לא תואמות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गलत दोहराया गया पासवर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password ripetuta errata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"再入力されたパスワードが一致していません\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"틀린 암호가 반복되었습니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verkeerd herhaald wachtwoord\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha de verificação incorreta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe de confirmação errada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Несоответствие паролей\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yanlış tekrarlanan şifre\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Паролі не співпадають\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重复密码输入不正确\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"確認密碼不符 / 再次輸入的密碼錯誤\"\n          }\n        }\n      }\n    },\n    \"Yes\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نعم\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ano\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ja\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Si\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oui\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כן\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हाँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Si\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"はい\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"예\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ja\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sim\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sim\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Да\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Evet\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Так\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"是的\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"是\"\n          }\n        }\n      }\n    },\n    \"You cannot move an already encrypted note to an encrypted directory. You must first decrypt the note and repeat the steps.\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لا يمكنك نقل ملاحظة مشفرة بالفعل إلى دليل مشفر. يجب عليك أولاً فك تشفير الملاحظة وتكرار الخطوات.\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Již zašifrovanou poznámku nelze přesunout do zašifrovaného adresáře. Nejprve poznámku dešifrujte a pak to zkuste znovu.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sie können eine bereits verschlüsselte Notiz nicht in ein verschlüsseltes Verzeichnis verschieben. Sie müssen die Notiz zuerst entschlüsseln und die Schritte wiederholen.\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"No puedes mover una nota ya encriptada a un directorio encriptado. Primero debes desencriptar la nota y repetir los pasos.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vous ne pouvez pas déplacer une note déjà chiffré vers un répertoire chiffré. Vous devez d'abord déchiffrer la note et répéter les étapes.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"לא ניתן להעביר פתק שכבר מוצפן לספרייה מוצפנת. תחילה עליך לפענח את הפתק ולחזור על השלבים.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आप पहले से एन्क्रिप्टेड नोट को एन्क्रिप्टेड डायरेक्टरी में नहीं ले जा सकते। आपको पहले नोट को डिक्रिप्ट करना होगा और चरणों को दोहराना होगा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Non è possibile spostare una nota già crittografata in una directory crittografata. È necessario prima decifrare la nota e ripetere i passaggi.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すでに暗号化されたノートを暗号化されたディレクトリに移動することはできません。まずノートの暗号化を解除し、手順を繰り返す必要があります。\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이미 암호화된 노트는 암호화된 디렉토리로 옮길 수 없습니다. 먼저 노트의 암호를 해독하고 단계를 반복하셔야 합니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Je kunt een reeds gecodeerde notitie niet verplaatsen naar een gecodeerde map. Je moet de notitie eerst decoderen en de stappen herhalen.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Não é possível mover uma nota já criptografada para um diretório criptografado. Você deve primeiro descriptografar a nota e repetir as etapas.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Não é possível mover uma nota já encriptada para um diretório encriptado. Deve primeiro desencriptar a nota e repetir os passos.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нельзя переместить уже зашифрованную заметку в зашифрованный каталог. Необходимо сначала расшифровать заметку и повторить действия.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zaten şifrelenmiş bir notu şifrelenmiş bir dizine taşıyamazsınız. Önce notu şifresini çözmeli ve adımları tekrarlamalısınız.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ви не можете перемістити вже зашифровану нотатку до зашифрованого каталогу. Ви повинні спочатку розшифрувати нотатку і повторити кроки.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无法将已加密的备忘移动到加密目录。您必须首先解密备忘，然后重复上述步骤。\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"您無法將已加密的筆記移動至已加密的資料夾。請先將該筆記解密，然後再試一次。\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "FSNotes/MainWindow.swift",
    "content": "//\n//  MainWindow.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 11/2/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass MainWindow: NSWindow {\n    override func awakeFromNib() {\n        super.awakeFromNib()\n\n        guard UserDefaults.standard.object(forKey: \"NSWindow Frame myMainWindow\") == nil else { return }\n\n        if let screenHeight = NSScreen.main?.frame.height, let screenWidth = NSScreen.main?.frame.width {\n            let frame = self.frame\n            let x = (screenWidth - frame.width) / 2\n            let rect = NSRect(x: x, y: frame.origin.y, width: frame.width, height: screenHeight)\n            self.setFrame(rect, display: true)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/MainWindowController.swift",
    "content": "//\n//  MainWindowController.swift\n//  FSNotes\n//\n//  Created by BUDDAx2 on 8/9/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport AppKit\n\n\nclass MainWindowController: NSWindowController, NSWindowDelegate {\n    let notesListUndoManager = UndoManager()\n    \n    public var lastWindowSize: NSRect? = nil\n\n    override func windowDidLoad() {\n        AppDelegate.mainWindowController = self\n\n        self.window?.hidesOnDeactivate = UserDefaultsManagement.hideOnDeactivate\n        self.window?.titleVisibility = .hidden\n        self.window?.titlebarAppearsTransparent = true\n\n        self.windowFrameAutosaveName = \"myMainWindow\"\n    }\n    \n    func windowDidResize(_ notification: Notification) {\n        refreshEditArea()\n    }\n        \n    func makeNew() {\n        window?.makeKeyAndOrderFront(self)\n        NSApp.activate(ignoringOtherApps: true)\n        refreshEditArea(focusSearch: true)\n    }\n    \n    func refreshEditArea(focusSearch: Bool = false) {\n        guard let vc = ViewController.shared() else { return }\n\n        if vc.sidebarOutlineView.isFirstLaunch || focusSearch {\n            vc.search.window?.makeFirstResponder(vc.search)\n        } else {\n            vc.focusEditArea()\n        }\n\n        vc.editor.updateTextContainerInset()\n    }\n    \n    func windowWillReturnUndoManager(_ window: NSWindow) -> UndoManager? {\n        guard let fr = window.firstResponder else {\n            return notesListUndoManager\n        }\n        \n        if fr.isKind(of: NotesTableView.self) {\n            return notesListUndoManager\n        }\n        \n        if fr.isKind(of: EditTextView.self) {\n            guard let vc = ViewController.shared(), let ev = vc.editor, ev.isEditable else { return notesListUndoManager }\n            \n            return vc.editorUndoManager\n        }\n        \n        return notesListUndoManager\n    }\n\n    public static func shared() -> NSWindow? {\n        return AppDelegate.mainWindowController?.window\n    }\n\n    func windowDidEnterFullScreen(_ notification: Notification) {\n        UserDefaultsManagement.fullScreen = true\n    }\n\n    func windowDidExitFullScreen(_ notification: Notification) {\n        UserDefaultsManagement.fullScreen = false\n    }\n}\n"
  },
  {
    "path": "FSNotes/Model/StorageEntity+CoreDataClass.swift",
    "content": "//\n//  StorageEntity+CoreDataClass.swift\n//  \n//\n//  Created by Oleksandr Glushchenko on 11/14/17.\n//\n//  This file was automatically generated and should not be edited.\n//\n\nimport Foundation\nimport CoreData\n\n@objc(StorageEntity)\npublic class StorageEntity: NSManagedObject {\n\n}\n"
  },
  {
    "path": "FSNotes/Model/StorageEntity+CoreDataProperties.swift",
    "content": "//\n//  StorageEntity+CoreDataProperties.swift\n//  \n//\n//  Created by Oleksandr Glushchenko on 11/14/17.\n//\n//  This file was automatically generated and should not be edited.\n//\n\nimport Foundation\nimport CoreData\n\n\nextension StorageEntity {\n\n    @nonobjc public class func fetchRequest() -> NSFetchRequest<StorageEntity> {\n        return NSFetchRequest<StorageEntity>(entityName: \"StorageEntity\")\n    }\n\n    @NSManaged public var name: String?\n    @NSManaged public var path: String?\n\n}\n"
  },
  {
    "path": "FSNotes/NSWindowController+.swift",
    "content": "//\n//  NSWindowController+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 22.10.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension NSWindowController {\n    public static var lastWindowSize: NSRect? = nil\n    \n    public func maximizeWindow() {\n        let currentSize = window?.frame\n        \n        if let screen = NSScreen.main {\n            let size = NSWindowController.lastWindowSize ?? screen.visibleFrame\n            window?.setFrame(size, display: true, animate: true)\n\n            if NSWindowController.lastWindowSize == nil {\n                NSWindowController.lastWindowSize = currentSize\n            } else {\n                NSWindowController.lastWindowSize = nil\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/NoteViewController.swift",
    "content": "//\n//  NoteViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 25.06.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AppKit\n\nclass NoteViewController: EditorViewController, NSWindowDelegate {\n\n    @IBOutlet weak var shareButton: NSButton!\n    @IBOutlet weak var previewButton: NSButton!\n    @IBOutlet weak var lockUnlockButton: NSButton!\n    \n    @IBOutlet weak var titleLabel: TitleTextField!\n    @IBOutlet weak var editor: EditTextView!\n    @IBOutlet weak var editorScrollView: EditorScrollView!\n    @IBOutlet weak var titleBarView: TitleBarView!\n    \n    @IBOutlet weak var nonSelectedLabel: NSTextField!\n\n    public func initWindow() {\n        view.window?.title = \"New note\"\n        view.window?.titleVisibility = .hidden\n        view.window?.titlebarAppearsTransparent = true\n        view.window?.backgroundColor = NSColor(named: \"background_win\")\n        view.window?.delegate = self\n        view.window?.setFrameOriginToPositionWindowInCenterOfScreen()\n        \n        editor.initTextStorage()\n        editor.editorViewController = self\n        editor.configure()\n        \n        vcEditor = editor\n        vcTitleLabel = titleLabel\n        vcNonSelectedLabel = nonSelectedLabel\n        vcEditorScrollView = editorScrollView\n        \n        editor.updateTextContainerInset()\n        \n        super.initView()\n    }\n    \n    func windowDidResize(_ notification: Notification) {\n        editor.updateTextContainerInset()\n        \n        super.viewDidResize()\n    }\n    \n    func windowWillClose(_ notification: Notification) {\n        AppDelegate.noteWindows.removeAll(where: { ($0.contentViewController as? NoteViewController)?.editor.note === editor.note  })\n    }\n    \n    func windowWillReturnUndoManager(_ window: NSWindow) -> UndoManager? {\n        if let fr = window.firstResponder,\n            fr.isKind(of: EditTextView.self),\n            editor.isEditable {\n            return editor.editorViewController?.editorUndoManager\n        }\n        \n        return nil\n    }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/MasterPasswordViewController.swift",
    "content": "//\n//  MasterPasswordViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/20/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass MasterPasswordViewController: NSViewController {\n    override func viewDidAppear() {\n        hint.stringValue = UserDefaultsManagement.masterPasswordHint\n    }\n\n    @IBOutlet weak var hint: NSTextField!\n\n    @IBOutlet weak var currentPassword: NSSecureTextField!\n\n    @IBOutlet weak var newPassword: NSSecureTextField!\n\n    @IBOutlet weak var repeatedPassword: NSSecureTextField!\n\n\n    @IBAction func close(_ sender: Any) {\n        dismiss(self)\n    }\n\n    @IBAction func change(_ sender: Any) {\n        var password = String()\n\n        do {\n            let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n            password = try item.readPassword()\n        } catch {\n            print(error)\n        }\n        \n        if password.count > 0, currentPassword.stringValue != password {\n            wrongCurrentPassword()\n            return\n        }\n\n        if newPassword.stringValue != repeatedPassword.stringValue {\n            wrongRepeatAlert()\n            return\n        }\n\n        if newPassword.stringValue.count == 0 {\n            emptyPassword()\n            return\n        }\n\n        let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n        do {\n            try item.savePassword(newPassword.stringValue)\n        } catch {\n            print(\"Master password saving error: \\(error)\")\n        }\n\n        UserDefaultsManagement.masterPasswordHint = hint.stringValue\n\n        dismiss(self)\n    }\n\n    private func wrongRepeatAlert() {\n        let alert = NSAlert()\n        alert.alertStyle = .critical\n        alert.informativeText = NSLocalizedString(\"Please try again\", comment: \"\")\n        alert.messageText = NSLocalizedString(\"Wrong repeated password\", comment: \"\")\n        alert.runModal()\n    }\n\n    private func wrongCurrentPassword() {\n        let alert = NSAlert()\n        alert.alertStyle = .critical\n        alert.informativeText = NSLocalizedString(\"Please try again\", comment: \"\")\n        alert.messageText = NSLocalizedString(\"Current password does not match with password in keychain\", comment: \"\")\n        alert.runModal()\n    }\n\n    private func emptyPassword() {\n        let alert = NSAlert()\n        alert.alertStyle = .critical\n        alert.informativeText = NSLocalizedString(\"Please try again\", comment: \"\")\n        alert.messageText = NSLocalizedString(\"Empty password\", comment: \"\")\n        alert.runModal()\n    }\n\n}\n\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesAdvancedViewController.swift",
    "content": "//\n//  PreferencesAdvancedViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass PreferencesAdvancedViewController: NSViewController {\n    override func viewWillAppear() {\n        super.viewWillAppear()\n    }\n\n    @IBOutlet weak var languagePopUp: NSPopUpButton!\n    @IBOutlet weak var version: NSTextField!\n    @IBOutlet weak var appearance: NSPopUpButton!\n    @IBOutlet weak var appearanceLabel: NSTextField!\n\n    @IBOutlet weak var dockIconFirst: NSButton!\n    @IBOutlet weak var dockIconSecond: NSButton!\n\n    @IBOutlet weak var trashPath: NSPathControl!\n    \n    @IBAction func appearanceClick(_ sender: NSPopUpButton) {\n        if let type = AppearanceType(rawValue: sender.indexOfSelectedItem) {\n            UserDefaultsManagement.appearanceType = type\n        }\n\n        restart()\n    }\n\n    override func viewDidAppear() {\n        let languages = [\n            LanguageType(rawValue: 0),\n            LanguageType(rawValue: 1),\n            LanguageType(rawValue: 2),\n            LanguageType(rawValue: 5),\n            LanguageType(rawValue: 6),\n            LanguageType(rawValue: 18),\n            LanguageType(rawValue: 15),\n            LanguageType(rawValue: 3),\n            LanguageType(rawValue: 9),\n            LanguageType(rawValue: 8),\n            LanguageType(rawValue: 12),\n            LanguageType(rawValue: 16),\n            LanguageType(rawValue: 11),\n            LanguageType(rawValue: 13),\n            LanguageType(rawValue: 7),\n            LanguageType(rawValue: 10),\n            LanguageType(rawValue: 14),\n            LanguageType(rawValue: 4),\n            LanguageType(rawValue: 17)\n        ]\n\n        for language in languages {\n            if let lang = language?.description, let id = language?.rawValue {\n                languagePopUp.addItem(withTitle: lang)\n                languagePopUp.lastItem?.state = (id == UserDefaultsManagement.defaultLanguage) ? .on : .off\n\n                if id == UserDefaultsManagement.defaultLanguage {\n                    languagePopUp.selectItem(withTitle: lang)\n                }\n            }\n        }\n\n        if #available(OSX 10.14, *) {\n            appearance.selectItem(at: UserDefaultsManagement.appearanceType.rawValue)\n        } else {\n            appearanceLabel.isHidden = true\n            appearance.isHidden = true\n        }\n\n        if let dictionary = Bundle.main.infoDictionary,\n            let ver = dictionary[\"CFBundleShortVersionString\"] as? String,\n            let build = dictionary[\"CFBundleVersion\"] as? String {\n            version.stringValue = \"v\\(ver) build \\(build)\"\n        }\n\n        switch UserDefaultsManagement.dockIcon {\n        case 0:\n            dockIconFirst.state = .on\n            break\n        case 1:\n            dockIconSecond.state = .on\n            break\n        default:\n            dockIconFirst.state = .on\n        }\n        \n        if let url = Storage.shared().getDefaultTrash()?.url {\n            trashPath.url = url\n        }\n    }\n\n    @IBAction func languagePopUp(_ sender: NSPopUpButton) {\n        let type = LanguageType.withName(rawValue: sender.title)\n\n        UserDefaultsManagement.defaultLanguage = type.rawValue\n\n        UserDefaults.standard.set([type.code], forKey: \"AppleLanguages\")\n        UserDefaults.standard.synchronize()\n\n        restart()\n    }\n\n    private func restart() {\n        let url = URL(fileURLWithPath: Bundle.main.resourcePath!)\n        let path = url.deletingLastPathComponent().deletingLastPathComponent().absoluteString\n        let task = Process()\n        task.launchPath = \"/usr/bin/open\"\n        task.arguments = [path]\n        task.launch()\n        exit(0)\n    }\n\n    @IBAction func dockIcon(_ sender: NSButton) {\n        UserDefaultsManagement.dockIcon = sender.tag\n\n        guard let appDelegate = NSApplication.shared.delegate as? AppDelegate else { return }\n        appDelegate.loadDockIcon()\n    }\n\n    @IBAction func trash(_ sender: NSButton) {\n        let openPanel = NSOpenPanel()\n        openPanel.directoryURL = Storage.shared().getDefaultTrash()?.url\n        openPanel.allowsMultipleSelection = false\n        openPanel.canChooseDirectories = true\n        openPanel.canCreateDirectories = true\n        openPanel.canChooseFiles = false\n        openPanel.canSelectHiddenExtension = true\n        openPanel.begin { (result) -> Void in\n            if result == .OK {\n                guard let url = openPanel.url else { return }\n\n                let bookmarksManager = SandboxBookmark.sharedInstance()\n\n                if let currentURL = UserDefaultsManagement.trashURL {\n                    bookmarksManager.remove(url: currentURL)\n                }\n\n                bookmarksManager.store(url: url)\n                bookmarksManager.save()\n\n                UserDefaultsManagement.trashURL = url\n                self.trashPath.url = url\n                \n                Storage.shared().getDefaultTrash()?.url = url\n                self.restart()\n            }\n        }\n    }\n    \n    @IBAction func resetCaches(_ sender: Any) {\n        if let sidebarTreeURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent(\"sidebarTree\") {\n            try? FileManager.default.removeItem(at: sidebarTreeURL)\n        }\n        \n        let projects = Storage.shared().getProjects()\n        for project in projects {\n            if let cacheUrl = project.getCacheURL() {\n                try? FileManager.default.removeItem(at: cacheUrl)\n            }\n\n            project.isReadyForCacheSaving = false\n        }\n\n        restart()\n    }\n    \n    @IBAction func resetSettings(_ sender: Any) {\n        let store = NSUbiquitousKeyValueStore.default\n        for (key, _) in store.dictionaryRepresentation {\n            store.removeObject(forKey: key)\n        }\n        store.synchronize()\n        \n        if let bundleID = Bundle.main.bundleIdentifier {\n            UserDefaults.standard.removePersistentDomain(forName: bundleID)\n            UserDefaults.standard.synchronize()\n        }\n        \n        if let userDefaultsURL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first?.appendingPathComponent(\"Preferences\").appendingPathComponent(\"co.fluder.FSNotes.plist\") {\n            try? FileManager.default.removeItem(at: userDefaultsURL)\n        }\n        \n        if let editorsURL = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first?.appendingPathComponent(\"editors.settings\") {\n            try? FileManager.default.removeItem(at: editorsURL)\n        }\n        \n        if let notesURL = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first?.appendingPathComponent(\"notes.settings\") {\n            try? FileManager.default.removeItem(at: notesURL)\n        }\n        \n        if let bookmarkUrls = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first?.appendingPathComponent(\"Bookmarks.dict\") {\n            try? FileManager.default.removeItem(at: bookmarkUrls)\n        }\n        \n        restart()\n    }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesEditorViewController.swift",
    "content": "//\n//  PreferencesEditorViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass PreferencesEditorViewController: NSViewController {\n\n    @IBOutlet weak var codeFontPreview: NSTextField!\n    @IBOutlet weak var noteFontPreview: NSTextField!\n    @IBOutlet weak var codeBlockHighlight: NSButton!\n    @IBOutlet weak var markdownCodeTheme: NSPopUpButton!\n    @IBOutlet weak var indentUsing: NSPopUpButton!\n    @IBOutlet weak var inEditorFocus: NSButton!\n    @IBOutlet weak var autocloseBrackets: NSButton!\n    @IBOutlet weak var lineSpacing: NSSlider!\n    @IBOutlet weak var imagesWidth: NSSlider!\n    @IBOutlet weak var lineWidth: NSSlider!\n    @IBOutlet weak var marginSize: NSSlider!\n    @IBOutlet weak var inlineTags: NSButton!\n    @IBOutlet weak var clickableLinks: NSButton!\n    \n    @IBOutlet weak var italicAsterisk: NSButton!\n    @IBOutlet weak var italicUnderscore: NSButton!\n    \n    @IBOutlet weak var boldAsterisk: NSButton!\n    @IBOutlet weak var boldUnderscore: NSButton!\n    \n    \n    override func viewWillAppear() {\n        super.viewWillAppear()\n        preferredContentSize = NSSize(width: 550, height: 495)\n    }\n\n    override func viewDidAppear() {\n        if let window = self.view.window {\n            window.title = NSLocalizedString(\"Settings\", comment: \"\")\n        }\n\n        codeBlockHighlight.state = UserDefaultsManagement.codeBlockHighlight ? NSControl.StateValue.on : NSControl.StateValue.off\n\n        inEditorFocus.state = UserDefaultsManagement.focusInEditorOnNoteSelect ? NSControl.StateValue.on : NSControl.StateValue.off\n        indentUsing.selectItem(at: UserDefaultsManagement.indentUsing)\n        autocloseBrackets.state = UserDefaultsManagement.autocloseBrackets ? .on : .off\n\n        markdownCodeTheme.selectItem(withTitle: UserDefaultsManagement.codeTheme.getName())\n\n        lineSpacing.floatValue = Float((UserDefaultsManagement.lineHeightMultiple - 1) * 10)\n        imagesWidth.floatValue = UserDefaultsManagement.imagesWidth\n        lineWidth.floatValue = UserDefaultsManagement.lineWidth\n\n        marginSize.floatValue = UserDefaultsManagement.marginSize\n\n        inlineTags.state = UserDefaultsManagement.inlineTags ? .on : .off\n        \n        clickableLinks.state = UserDefaultsManagement.clickableLinks ? .on : .off\n        \n        setCodeFontPreview()\n        setNoteFontPreview()\n        \n        italicAsterisk.state = UserDefaultsManagement.italic == \"*\" ? .on : .off\n        italicUnderscore.state = UserDefaultsManagement.italic == \"_\" ? .on : .off\n        \n        boldAsterisk.state = UserDefaultsManagement.bold == \"**\" ? .on : .off\n        boldUnderscore.state = UserDefaultsManagement.bold == \"__\" ? .on : .off\n    }\n\n    //MARK: global variables\n\n    let storage = Storage.shared()\n\n    @IBAction func codeBlockHighlight(_ sender: NSButton) {\n        UserDefaultsManagement.codeBlockHighlight = (sender.state == NSControl.StateValue.on)\n        Storage.shared().resetCacheAttributes()\n\n        let editors = AppDelegate.getEditTextViews()\n        \n        for editor in editors {\n            if let evc = editor.editorViewController {\n                evc.refillEditArea(force: true)\n            }\n        }\n    }\n\n    @IBAction func markdownCodeThemeAction(_ sender: NSPopUpButton) {\n        guard let item = sender.selectedItem else {\n            return\n        }\n\n        Storage.shared().resetCacheAttributes()\n        \n        if let theme = EditorTheme(themeName: item.title) {\n            UserDefaultsManagement.codeTheme = theme\n        }\n\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                editor.textStorage?.updateParagraphStyle()\n\n                MPreviewView.template = nil\n                NotesTextProcessor.resetCaches()\n\n                evc.refillEditArea(force: true)\n            }\n        }\n    }\n\n    @IBAction func inEditorFocus(_ sender: NSButton) {\n        UserDefaultsManagement.focusInEditorOnNoteSelect = (sender.state == .on)\n    }\n\n    @IBAction func autocloseBrackets(_ sender: NSButton) {\n        UserDefaultsManagement.autocloseBrackets = (sender.state == .on)\n    }\n\n    @IBAction func lineSpacing(_ sender: NSSlider) {\n        UserDefaultsManagement.editorLineSpacing = 1\n        UserDefaultsManagement.lineHeightMultiple = CGFloat(1 + sender.floatValue / 10)\n\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                MPreviewView.template = nil\n                NotesTextProcessor.resetCaches()\n\n                if let lm = evc.vcEditor?.layoutManager as? LayoutManager {\n                    lm.lineHeightMultiple = CGFloat(UserDefaultsManagement.lineHeightMultiple)\n                    lm.refreshLayoutSoftly()\n                }\n            }\n        }\n    }\n\n    @IBAction func imagesWidth(_ sender: NSSlider) {\n        UserDefaultsManagement.imagesWidth = sender.floatValue\n\n        var temporary = URL(fileURLWithPath: NSTemporaryDirectory())\n        temporary.appendPathComponent(\"ThumbnailsBig\")\n        try? FileManager.default.removeItem(at: temporary)\n\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let note = editor.note, let evc = editor.editorViewController {\n                NotesTextProcessor.highlight(attributedString: note.content)\n                evc.disablePreview()\n                evc.refillEditArea()\n            }\n        }\n    }\n\n    @IBAction func lineWidth(_ sender: NSSlider) {\n        UserDefaultsManagement.lineWidth = sender.floatValue\n\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                editor.updateTextContainerInset()\n\n                MPreviewView.template = nil\n                NotesTextProcessor.resetCaches()\n\n                evc.refillEditArea(force: true)\n            }\n        }\n    }\n\n    private func restart() {\n        let url = URL(fileURLWithPath: Bundle.main.resourcePath!)\n        let path = url.deletingLastPathComponent().deletingLastPathComponent().absoluteString\n        let task = Process()\n        task.launchPath = \"/usr/bin/open\"\n        task.arguments = [path]\n        task.launch()\n        exit(0)\n    }\n\n    @IBAction func indentUsing(_ sender: NSPopUpButton) {\n        guard let item = sender.selectedItem else {\n            return\n        }\n        \n        UserDefaultsManagement.indentUsing = item.tag\n    }\n\n    @IBAction func marginSize(_ sender: NSSlider) {\n        UserDefaultsManagement.marginSize = sender.floatValue\n\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                editor.updateTextContainerInset()\n    \n                MPreviewView.template = nil\n                NotesTextProcessor.resetCaches()\n    \n                evc.refillEditArea(force: true)\n            }\n        }\n    }\n\n    @IBAction func inlineTags(_ sender: NSButton) {\n        UserDefaultsManagement.inlineTags = (sender.state == .on)\n\n        guard let vc = ViewController.shared() else { return }\n\n        Storage.shared().tags = []\n\n        for note in Storage.shared().noteList {\n            note.tags = []\n\n            if UserDefaultsManagement.inlineTags {\n                _ = note.scanContentTags()\n            }\n        }\n\n        vc.sidebarOutlineView.reloadSidebar()\n    }\n    \n    @IBAction func highlightLinks(_ sender: NSButton) {\n        UserDefaultsManagement.clickableLinks = (sender.state == NSControl.StateValue.on)\n\n        Storage.shared().resetCacheAttributes()\n        \n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                evc.refillEditArea()\n            }\n        }\n    }\n    \n    @IBAction func setCodeFont(_ sender: NSButton) {\n        let fontManager = NSFontManager.shared\n        fontManager.setSelectedFont(UserDefaultsManagement.codeFont, isMultiple: false)\n        fontManager.orderFrontFontPanel(self)\n        fontManager.target = self\n        fontManager.action = #selector(changeCodeFont(_:))\n    }\n    \n    @IBAction func setNoteFont(_ sender: NSButton) {\n        let fontManager = NSFontManager.shared\n        fontManager.setSelectedFont(UserDefaultsManagement.noteFont, isMultiple: false)\n        fontManager.orderFrontFontPanel(self)\n        fontManager.target = self\n        fontManager.action = #selector(changeNoteFont(_:))\n    }\n\n    @IBAction func changeCodeFont(_ sender: Any?) {\n        let fontManager = NSFontManager.shared\n        let newFont = fontManager.convert(UserDefaultsManagement.codeFont)\n        UserDefaultsManagement.codeFont = newFont\n        NotesTextProcessor.codeFont = newFont\n        \n        ViewController.shared()?.reloadFonts()\n        \n        setCodeFontPreview()\n    }\n\n    @IBAction func changeNoteFont(_ sender: Any?) {\n        let fontManager = NSFontManager.shared\n        let newFont = fontManager.convert(UserDefaultsManagement.noteFont)\n        UserDefaultsManagement.noteFont = newFont\n\n        ViewController.shared()?.reloadFonts()\n\n        setNoteFontPreview()\n    }\n\n    @IBAction func resetFont(_ sender: Any) {\n        UserDefaultsManagement.fontName = nil\n        UserDefaultsManagement.codeFontName = \"Source Code Pro\"\n\n        ViewController.shared()?.reloadFonts()\n\n        setCodeFontPreview()\n        setNoteFontPreview()\n    }\n    \n    @IBAction func changeItalic(_ sender: NSButton) {\n        UserDefaultsManagement.italic = sender.identifier?.rawValue == \"italicAsterisk\" ? \"*\" : \"_\"\n        \n        italicAsterisk.state = sender.identifier?.rawValue == \"italicAsterisk\" ? .on : .off\n        italicUnderscore.state = sender.identifier?.rawValue == \"italicUnderscore\" ? .on : .off\n    }\n    \n    @IBAction func changeBold(_ sender: NSButton) {\n        UserDefaultsManagement.bold = sender.identifier?.rawValue == \"boldAsterisk\" ? \"**\" : \"__\"\n        \n        boldAsterisk.state = sender.identifier?.rawValue == \"boldAsterisk\" ? .on : .off\n        boldUnderscore.state = sender.identifier?.rawValue == \"boldUnderscore\" ? .on : .off\n    }\n    \n    private func setCodeFontPreview() {\n        let familyName = UserDefaultsManagement.codeFont.familyName ?? \"Source Code Pro\"\n\n        codeFontPreview.font = NSFont(name: familyName, size: 13)\n        codeFontPreview.stringValue = \"\\(familyName) \\(UserDefaultsManagement.codeFont.pointSize)pt\"\n    }\n\n    private func setNoteFontPreview() {\n        noteFontPreview.font = NSFont(name: UserDefaultsManagement.noteFont.fontName, size: 13)\n\n        if let familyName = UserDefaultsManagement.noteFont.familyName {\n            noteFontPreview.stringValue = \"\\(familyName) \\(UserDefaultsManagement.noteFont.pointSize)pt\"\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesGeneralViewController.swift",
    "content": "//\n//  PreferencesGeneralViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport MASShortcut\nimport CoreData\n\nclass PreferencesGeneralViewController: NSViewController, NSTextFieldDelegate {\n    override func viewWillAppear() {\n        super.viewWillAppear()\n        preferredContentSize = NSSize(width: 550, height: 481)\n    }\n\n    @IBOutlet var externalEditorApp: NSTextField!\n    @IBOutlet var newNoteshortcutView: MASShortcutView!\n    @IBOutlet var searchNotesShortcut: MASShortcutView!\n    @IBOutlet var activateShortcut: MASShortcutView!\n    @IBOutlet weak var quickNote: MASShortcutView!\n    @IBOutlet weak var defaultStoragePath: NSPathControl!\n    @IBOutlet weak var searchFocusOnESC: NSButton!\n    @IBOutlet weak var defaultExtension: NSPopUpButton!\n    @IBOutlet weak var fileContainer: NSPopUpButton!\n    @IBOutlet weak var filesNaming: NSPopUpButton!\n    @IBOutlet weak var automaticConflictsResolution: NSButton!\n    @IBOutlet weak var saveTextBundleMetaData: NSButton!\n    @IBOutlet weak var textMatchAutoSelection: NSButton!\n    @IBOutlet weak var hideOnDeactivate: NSButton!\n    \n    //MARK: global variables\n\n    let storage = Storage.shared()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        initShortcuts()\n    }\n\n    override func viewDidAppear() {\n        self.view.window!.title = NSLocalizedString(\"Settings\", comment: \"\")\n\n        externalEditorApp.stringValue = UserDefaultsManagement.externalEditor\n\n        if let url = UserDefaultsManagement.storageUrl {\n            defaultStoragePath.url = url\n        }\n\n        searchFocusOnESC.state = UserDefaultsManagement.shouldFocusSearchOnESCKeyDown ? .on : .off\n        \n        fileContainer.selectItem(withTag: UserDefaultsManagement.fileContainer.tag)\n\n        filesNaming.selectItem(withTag: UserDefaultsManagement.naming.tag)\n\n        let ext = UserDefaultsManagement.noteExtension\n        defaultExtension.selectItem(withTitle: \".\" + ext)\n\n        automaticConflictsResolution.state = UserDefaultsManagement.automaticConflictsResolution ? .on : .off\n\n        saveTextBundleMetaData.state = UserDefaultsManagement.useTextBundleMetaToStoreDates ? .on : .off\n\n        externalEditorApp.delegate = self\n        \n        textMatchAutoSelection.state = UserDefaultsManagement.textMatchAutoSelection ? .on : .off\n        \n        hideOnDeactivate.state = UserDefaultsManagement.hideOnDeactivate ? .on : .off\n    }\n    \n    @IBAction func textMatchAutoSelection(_ sender: NSButton) {\n        UserDefaultsManagement.textMatchAutoSelection = (sender.state == .on)\n    }\n\n    @IBAction func changeDefaultStorage(_ sender: Any) {\n        let openPanel = NSOpenPanel()\n        openPanel.directoryURL = UserDefaultsManagement.storageUrl\n        openPanel.canChooseDirectories = true\n        openPanel.canCreateDirectories = true\n        openPanel.canChooseFiles = false\n        openPanel.begin { (result) -> Void in\n            if result == .OK {\n                guard let url = openPanel.url else { return }\n                guard let currentURL = UserDefaultsManagement.storageUrl else { return }\n\n                let bookmarksManager = SandboxBookmark.sharedInstance()\n                bookmarksManager.remove(url: currentURL)\n                bookmarksManager.store(url: url)\n                bookmarksManager.save()\n\n                UserDefaultsManagement.storageType = .custom\n                UserDefaultsManagement.customStoragePath = url.path\n\n                self.defaultStoragePath.stringValue = url.path\n\n                if let appDelegate = NSApplication.shared.delegate as? AppDelegate {\n                    let message = NSLocalizedString(\"Do you want to move current notes in the new destination?\", comment: \"\");\n                    appDelegate.promptToMoveDatabase(from: currentURL, to: url, messageText: message)\n                }\n\n                self.restart()\n            }\n        }\n    }\n\n    @IBAction func externalEditor(_ sender: Any) {\n        UserDefaultsManagement.externalEditor = externalEditorApp.stringValue\n    }\n\n    @IBAction func searchFocusOnESC(_ sender: NSButton) {\n        UserDefaultsManagement.shouldFocusSearchOnESCKeyDown = sender.state == .on\n    }\n     \n    @IBAction func fileContainer(_ sender: NSPopUpButton) {\n        guard let item = sender.selectedItem else { return }\n\n        if let container = NoteContainer(rawValue: item.tag) {\n            UserDefaultsManagement.fileContainer = container\n        }\n    }\n\n    @IBAction func defaultExtension(_ sender: NSPopUpButton) {\n        let ext = sender.title.replacingOccurrences(of: \".\", with: \"\")\n\n        UserDefaultsManagement.noteExtension = ext\n        UserDefaultsManagement.fileFormat = .Markdown\n    }\n\n    @IBAction func filesNaming(_ sender: NSPopUpButton) {\n        guard let item = sender.selectedItem else { return }\n\n        if let naming = SettingsFilesNaming(rawValue: item.tag) {\n            UserDefaultsManagement.naming = naming\n        }\n    }\n    \n    @IBAction func automaticConflictsResolution(_ sender: NSButton) {\n        UserDefaultsManagement.automaticConflictsResolution = sender.state == .on\n    }\n\n    @IBAction func saveTextBundleMetaData(_ sender: NSButton) {\n        UserDefaultsManagement.useTextBundleMetaToStoreDates = sender.state == .on\n    }\n    \n    @IBAction func changeHideOnDeactivate(_ sender: NSButton) {\n        UserDefaultsManagement.hideOnDeactivate = sender.state == .on\n        \n        // We don't need to set the user defaults value here as the checkbox is\n        // bound to it. We do need to update each window's hideOnDeactivate.\n        for window in NSApplication.shared.windows {\n            if window.className == \"NSStatusBarWindow\" {\n                continue\n            }\n\n            window.hidesOnDeactivate = UserDefaultsManagement.hideOnDeactivate\n        }\n    }\n\n    func restart() {\n        let url = URL(fileURLWithPath: Bundle.main.resourcePath!)\n        let path = url.deletingLastPathComponent().deletingLastPathComponent().absoluteString\n        let task = Process()\n        task.launchPath = \"/usr/bin/open\"\n        task.arguments = [path]\n        task.launch()\n        exit(0)\n    }\n\n    func initShortcuts() {\n        guard let vc = ViewController.shared() else { return }\n\n        let mas = MASShortcutMonitor.shared()\n        \n        newNoteshortcutView.shortcutValue = UserDefaultsManagement.newNoteShortcut\n        searchNotesShortcut.shortcutValue = UserDefaultsManagement.searchNoteShortcut\n        quickNote.shortcutValue = UserDefaultsManagement.quickNoteShortcut\n        activateShortcut.shortcutValue = UserDefaultsManagement.activateShortcut\n\n        newNoteshortcutView.shortcutValidator.allowAnyShortcutWithOptionModifier = true\n        searchNotesShortcut.shortcutValidator.allowAnyShortcutWithOptionModifier = true\n        quickNote.shortcutValidator.allowAnyShortcutWithOptionModifier = true\n        activateShortcut.shortcutValidator.allowAnyShortcutWithOptionModifier = true\n\n        newNoteshortcutView.shortcutValueChange = { (sender) in\n            if ((self.newNoteshortcutView.shortcutValue) != nil) {\n                mas?.unregisterShortcut(UserDefaultsManagement.newNoteShortcut)\n\n                let keyCode = self.newNoteshortcutView.shortcutValue.keyCode\n                let modifierFlags = self.newNoteshortcutView.shortcutValue.modifierFlags\n\n                UserDefaultsManagement.newNoteShortcut = MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n\n                MASShortcutMonitor.shared().register(self.newNoteshortcutView.shortcutValue, withAction: {\n                    vc.makeNoteShortcut()\n                })\n            } else {\n                mas?.unregisterShortcut(UserDefaultsManagement.newNoteShortcut)\n\n                UserDefaultsManagement.newNoteShortcut = nil\n            }\n        }\n\n        searchNotesShortcut.shortcutValueChange = { (sender) in\n            if ((self.searchNotesShortcut.shortcutValue) != nil) {\n                mas?.unregisterShortcut(UserDefaultsManagement.searchNoteShortcut)\n\n                let keyCode = self.searchNotesShortcut.shortcutValue.keyCode\n                let modifierFlags = self.searchNotesShortcut.shortcutValue.modifierFlags\n\n                UserDefaultsManagement.searchNoteShortcut = MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n\n                MASShortcutMonitor.shared().register(self.searchNotesShortcut.shortcutValue, withAction: {\n                    vc.searchShortcut()\n                })\n            } else {\n                mas?.unregisterShortcut(UserDefaultsManagement.searchNoteShortcut)\n\n                UserDefaultsManagement.searchNoteShortcut = nil\n            }\n        }\n        \n        quickNote.shortcutValueChange = { (sender) in\n            mas?.unregisterShortcut(UserDefaultsManagement.quickNoteShortcut)\n            \n            if ((self.quickNote.shortcutValue) != nil) {\n                let keyCode = self.quickNote.shortcutValue.keyCode\n                let modifierFlags = self.quickNote.shortcutValue.modifierFlags\n\n                UserDefaultsManagement.quickNoteShortcut = MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n\n                MASShortcutMonitor.shared().register(self.quickNote.shortcutValue, withAction: {\n                    vc.quickNote(self)\n                })\n            } else {\n                UserDefaultsManagement.quickNoteShortcut = nil\n            }\n        }\n        \n        activateShortcut.shortcutValueChange = { (sender) in\n            mas?.unregisterShortcut(UserDefaultsManagement.activateShortcut)\n            \n            if ((self.activateShortcut.shortcutValue) != nil) {\n                let keyCode = self.activateShortcut.shortcutValue.keyCode\n                let modifierFlags = self.activateShortcut.shortcutValue.modifierFlags\n\n                UserDefaultsManagement.activateShortcut = MASShortcut(keyCode: keyCode, modifierFlags: modifierFlags)\n\n                MASShortcutMonitor.shared().register(self.activateShortcut.shortcutValue, withAction: {\n                    vc.searchShortcut(activate: true)\n                })\n            } else {\n                UserDefaultsManagement.activateShortcut = nil\n            }\n        }\n    }\n\n    func controlTextDidChange(_ notification: Notification) {\n        guard let textField = notification.object as? NSTextField else { return }\n\n        if textField.identifier?.rawValue == \"openInExternalEditor\" {\n            UserDefaultsManagement.externalEditor = externalEditorApp.stringValue\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesGitViewController.swift",
    "content": "//\n//  PreferencesGitViewController.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 9/8/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass PreferencesGitViewController: SettingsViewController {\n\n    @IBOutlet weak var repositoriesPath: NSPathControl!\n    @IBOutlet weak var snapshotsTextField: NSTextField!\n    @IBOutlet weak var minutes: NSTextField!\n    @IBOutlet weak var backupManually: NSButton!\n    @IBOutlet weak var backupBySchedule: NSButton!\n    @IBOutlet weak var pullInterval: NSTextField!\n    @IBOutlet weak var separateDotGit: NSButton!\n    @IBOutlet weak var askCommitMessage: NSButton!\n\n    override func viewWillAppear() {\n        super.viewWillAppear()\n        //preferredContentSize = NSSize(width: 460, height: 579)\n\n        loadGit(project: Storage.shared().getDefault()!)\n\n        repositoriesPath.url = UserDefaultsManagement.gitStorage\n        snapshotsTextField.stringValue = String(UserDefaultsManagement.snapshotsInterval)\n        minutes.stringValue = String(UserDefaultsManagement.snapshotsIntervalMinutes)\n        backupManually.state = UserDefaultsManagement.backupManually ? .on : .off\n        backupBySchedule.state = UserDefaultsManagement.backupManually ? .off : .on\n        pullInterval.stringValue = String(UserDefaultsManagement.pullInterval)\n        separateDotGit.state = UserDefaultsManagement.separateRepo ? .on : .off\n        askCommitMessage.state = UserDefaultsManagement.askCommitMessage ? .on : .off\n    }\n\n    @IBAction func changeGitStorage(_ sender: NSButton) {\n        let openPanel = NSOpenPanel()\n        openPanel.directoryURL = UserDefaultsManagement.gitStorage\n        openPanel.allowsMultipleSelection = false\n        openPanel.canChooseDirectories = true\n        openPanel.canCreateDirectories = true\n        openPanel.canChooseFiles = false\n        openPanel.begin { (result) -> Void in\n            if result == .OK {\n                guard let url = openPanel.url?.standardized,\n                    url != UserDefaultsManagement.storageUrl else {\n                        let alert = NSAlert()\n                        alert.alertStyle = .critical\n                        alert.informativeText = NSLocalizedString(\"Path not available\", comment: \"\")\n                        alert.messageText = NSLocalizedString(\"Default storage path should not be equal to Git path.\", comment: \"\")\n                        alert.runModal()\n                        return\n                }\n\n                let bookmarksManager = SandboxBookmark.sharedInstance()\n                \n                if let currentURL = UserDefaultsManagement.gitStorage {\n                    bookmarksManager.remove(url: currentURL)\n                }\n                \n                bookmarksManager.store(url: url)\n                bookmarksManager.save()\n\n                UserDefaultsManagement.gitStorage = url\n                self.repositoriesPath.url = url\n            }\n        }\n    }\n\n    @IBAction func showFinder(_ sender: Any) {\n        guard let storage = UserDefaultsManagement.gitStorage else { return }\n        \n        NSWorkspace.shared.activateFileViewerSelecting([storage])\n    }\n\n    @IBAction func showTerminal(_ sender: Any) {\n        guard let storage = UserDefaultsManagement.gitStorage else { return }\n        \n        NSWorkspace.shared.openFile(storage.path, withApplication: \"Terminal.app\")\n    }\n\n    @IBAction func backupMethod(_ sender: NSButton) {\n        guard let ident = sender.identifier?.rawValue else { return }\n        \n        let isManualBackup = ident == \"manual\"\n        \n        UserDefaultsManagement.backupManually = isManualBackup\n        backupManually.state = isManualBackup ? .on : .off\n        backupBySchedule.state = isManualBackup ? .off : .on\n        \n        guard let vc = ViewController.shared() else { return }\n        if backupBySchedule.state == .on {\n            vc.schedulePull()\n        } else {\n            vc.stopPull()\n        }\n    }\n\n    @IBAction func changeSnapshotIntervalByHours(_ sender: NSTextField) {\n        if sender.stringValue == \"0\" || sender.stringValue.trim() == \"\" {\n            sender.stringValue = \"1\"\n        }\n        \n        if let interval = Int(sender.stringValue) {\n            UserDefaultsManagement.snapshotsInterval = interval\n        }\n\n        guard let vc = ViewController.shared() else { return }\n        vc.scheduleSnapshots()\n    }\n\n    @IBAction func changeSnapshotsIntervalByMinutes(_ sender: NSTextField) {\n        if let interval = Int(sender.stringValue) {\n            UserDefaultsManagement.snapshotsIntervalMinutes = interval\n        }\n\n        guard let vc = ViewController.shared() else { return }\n        vc.scheduleSnapshots()\n    }\n\n    @IBAction func pullInterval(_ sender: NSTextField) {\n        if var interval = Int(sender.stringValue) {\n            if interval < 10 {\n                interval = 10\n                pullInterval.stringValue = String(10)\n            }\n            \n            UserDefaultsManagement.pullInterval = interval\n        }\n\n        guard let vc = ViewController.shared() else { return }\n        vc.schedulePull()\n    }\n    \n    @IBAction func separateRepo(_ sender: NSButton) {\n        UserDefaultsManagement.separateRepo = sender.state == .on\n    }\n    \n    @IBAction func askCommitMessage(_ sender: NSButton) {\n        UserDefaultsManagement.askCommitMessage = sender.state == .on\n    }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesSecurityViewController.swift",
    "content": "//\n//  PreferencesSecurityViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport LocalAuthentication\n\nclass PreferencesSecurityViewController: NSViewController {\n\n    @IBOutlet weak var lockOnSleep: NSButton!\n    @IBOutlet weak var lockOnScreenActivated: NSButton!\n    @IBOutlet weak var lockWhenFastUser: NSButton!\n    @IBOutlet weak var allowTouchID: NSButton!\n    @IBOutlet weak var masterPassword: NSButton!\n\n    override func viewDidLoad() {\n        lockOnSleep.state = UserDefaultsManagement.lockOnSleep ? .on : .off\n        lockOnScreenActivated.state = UserDefaultsManagement.lockOnSleep ? .on : .off\n        lockWhenFastUser.state = UserDefaultsManagement.lockOnUserSwitch ? .on : .off\n        \n        allowTouchID.state = UserDefaultsManagement.allowTouchID ? .on : .off\n        allowTouchID.isEnabled = true\n        \n        masterPassword.isEnabled = UserDefaultsManagement.allowTouchID\n        \n        if #available(OSX 10.12.2, *) {\n            let context = LAContext()\n            if !context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {\n                disableTouchID()\n                return\n            }\n        } else {\n            disableTouchID()\n        }\n    }\n\n    override func viewWillAppear() {\n        super.viewWillAppear()\n        preferredContentSize = NSSize(width: 550, height: 352)\n    }\n\n    @IBAction func openMasterPasswordWindow(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n\n        if let controller = vc.storyboard?.instantiateController(withIdentifier: \"MasterPasswordViewController\") as? MasterPasswordViewController {\n\n            presentAsSheet(controller)\n        }\n    }\n\n    @IBAction func lockOnSleep(_ sender: NSButton) {\n        UserDefaultsManagement.lockOnSleep = (sender.state == .on)\n    }\n\n    @IBAction func lockOnScreenActivated(_ sender: NSButton) {\n        UserDefaultsManagement.lockOnScreenActivated = (sender.state == .on)\n    }\n\n    @IBAction func lockWhenSwitched(_ sender: NSButton) {\n        UserDefaultsManagement.lockOnUserSwitch = (sender.state == .on)\n    }\n\n    @IBAction func allowTouchID(_ sender: NSButton) {\n        UserDefaultsManagement.allowTouchID = (sender.state == .on)\n\n        masterPassword.isEnabled = UserDefaultsManagement.allowTouchID\n    }\n\n    private func disableTouchID() {\n        masterPassword.isEnabled = false\n        allowTouchID.isEnabled = false\n        allowTouchID.state = .off\n    }\n\n}\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesUserInterfaceViewController.swift",
    "content": "//\n//  PreferencesUserInterfaceViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass PreferencesUserInterfaceViewController: NSViewController {\n\n    @IBOutlet weak var cellSpacing: NSSlider!\n    @IBOutlet weak var previewFontSize: NSPopUpButton!\n    @IBOutlet weak var hideImagesPreview: NSButton!\n    @IBOutlet weak var hidePreview: NSButton!\n    @IBOutlet weak var hideDate: NSButton!\n    @IBOutlet weak var firstLineAsTitle: NSButton!\n    @IBOutlet weak var horizontalOrientation: NSButton!\n    @IBOutlet weak var showDockIcon: NSButton!\n    @IBOutlet weak var showInMenuBar: NSButton!\n\n    override func viewWillAppear() {\n        super.viewWillAppear()\n        preferredContentSize = NSSize(width: 550, height: 460)\n    }\n\n    override func viewDidAppear() {\n        guard let window = self.view.window else { return }\n        window.title = NSLocalizedString(\"Settings\", comment: \"\")\n\n        hidePreview.state = UserDefaultsManagement.hidePreview ? NSControl.StateValue.on : NSControl.StateValue.off\n\n        cellSpacing.doubleValue = Double(UserDefaultsManagement.cellSpacing)\n\n        showDockIcon.state = UserDefaultsManagement.showDockIcon ? .on : .off\n        \n        showInMenuBar.state = UserDefaultsManagement.showInMenuBar ? .on : .off\n        \n        previewFontSize.selectItem(withTag: UserDefaultsManagement.previewFontSize)\n\n        hideImagesPreview.state = UserDefaultsManagement.hidePreviewImages ? .on : .off\n\n        hideDate.state = UserDefaultsManagement.hideDate ? .on : .off\n\n        firstLineAsTitle.state = UserDefaultsManagement.firstLineAsTitle ? .on : .off\n        \n        horizontalOrientation.state =\n            UserDefaultsManagement\n            .horizontalOrientation ? .on : .off\n    }\n\n    @IBAction func changeCellSpacing(_ sender: NSSlider) {\n        guard let vc = ViewController.shared() else { return }\n\n        vc.setTableRowHeight()\n    }\n\n    @IBAction func changePreview(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n\n        UserDefaultsManagement.hidePreview = ((sender as AnyObject).state == NSControl.StateValue.on)\n        vc.notesTableView.reloadData()\n    }\n\n    @IBAction func hideImagesPreview(_ sender: NSButton) {\n        UserDefaultsManagement.hidePreviewImages = sender.state == .on\n\n        guard let vc = ViewController.shared() else { return }\n        vc.notesTableView.reloadData()\n    }\n\n    @IBAction func changePreviewFontSize(_ sender: NSPopUpButton) {\n        guard let tag = sender.selectedItem?.tag else { return }\n\n        UserDefaultsManagement.previewFontSize = tag\n\n        guard let vc = ViewController.shared() else { return }\n        vc.notesTableView.reloadData()\n    }\n\n    @IBAction func hideDate(_ sender: NSButton) {\n        UserDefaultsManagement.hideDate = (sender.state == .on)\n\n        guard let vc = ViewController.shared() else { return }\n        vc.notesTableView.reloadData()\n    }\n\n    @IBAction func firstLineAsTitle(_ sender: NSButton) {\n        UserDefaultsManagement.firstLineAsTitle = (sender.state == .on)\n\n        let storage = Storage.shared()\n        for note in storage.noteList {\n            note.invalidateCache()\n        }\n\n        guard let vc = ViewController.shared() else { return }\n        vc.notesTableView.reloadData()\n    }\n    \n    @IBAction func horizontalOrientation(_ sender: NSButton) {\n        UserDefaultsManagement.horizontalOrientation = (sender.state == .on)\n        \n        let task = Process()\n        task.launchPath = \"/usr/bin/open\"\n        task.arguments = [Bundle.main.bundlePath]\n        try? task.run()\n\n        NSApp.terminate(nil)\n    }\n    \n    @IBAction func showDockIcon(_ sender: NSButton) {\n        let isEnabled = sender.state == .on\n        UserDefaultsManagement.showDockIcon = isEnabled\n\n        NSApp.setActivationPolicy(isEnabled ? .regular : .accessory)\n\n        DispatchQueue.main.async {\n            NSMenu.setMenuBarVisible(true)\n            NSApp.activate(ignoringOtherApps: true)\n        }\n    }\n    \n    @IBAction func showInMenuBar(_ sender: NSButton) {\n        UserDefaultsManagement.showInMenuBar = sender.state == .on\n\n        guard let appDelegate = NSApplication.shared.delegate as? AppDelegate else { return }\n\n        if sender.state == .off {\n            appDelegate.removeMenuBar(nil)\n            return\n        }\n\n        appDelegate.addMenuBar(nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/PreferencesWebViewController.swift",
    "content": "//\n//  PreferencesWebViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 20.08.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Shout\n\nclass PreferencesWebViewController: NSViewController, NSTextFieldDelegate {\n    override func viewWillAppear() {\n        super.viewWillAppear()\n        preferredContentSize = NSSize(width: 550, height: 512)\n        \n        host.stringValue = UserDefaultsManagement.sftpHost\n        port.stringValue = String(UserDefaultsManagement.sftpPort)\n        path.stringValue = UserDefaultsManagement.sftpPath ?? \"\"\n        web.stringValue = UserDefaultsManagement.sftpWeb ?? \"\"\n        username.stringValue = UserDefaultsManagement.sftpUsername\n        password.stringValue = UserDefaultsManagement.sftpPassword\n        passphrase.stringValue = UserDefaultsManagement.sftpPassphrase\n        \n        if let accessData = UserDefaultsManagement.sftpAccessData,\n           let bookmarks = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSData.self], from: accessData) as? [URL: Data] {\n\n            for bookmark in bookmarks {\n                rsaPath.url = bookmark.key\n                break\n            }\n        }\n        \n        publishFSNotes.state = UserDefaultsManagement.customWebServer ? .off : .on\n        publishCustom.state = UserDefaultsManagement.customWebServer ? .on : .off\n        \n        if !UserDefaultsManagement.customWebServer {\n            toggleState(state: false)\n        }\n        \n        username.delegate = self\n        port.delegate = self\n        path.delegate = self\n        web.delegate = self\n        username.delegate = self\n        password.delegate = self\n        passphrase.delegate = self\n    }\n\n    \n    @IBOutlet weak var host: NSTextField!\n    @IBOutlet weak var port: NSTextField!\n    @IBOutlet weak var path: NSTextField!\n    @IBOutlet weak var web: NSTextField!\n    @IBOutlet weak var username: NSTextField!\n    @IBOutlet weak var password: NSSecureTextField!\n    @IBOutlet weak var rsaPath: NSPathControl!\n    @IBOutlet weak var key: NSButton!\n    @IBOutlet weak var passphrase: NSSecureTextField!\n    @IBOutlet weak var publishFSNotes: NSButton!\n    @IBOutlet weak var publishCustom: NSButton!\n    @IBOutlet weak var uploadAndTest: NSButton!\n    \n    @IBAction func host(_ sender: NSTextField) {\n        UserDefaultsManagement.sftpHost = sender.stringValue\n    }\n    \n    @IBAction func port(_ sender: NSTextField) {\n        if let port = Int32(sender.stringValue) {\n            UserDefaultsManagement.sftpPort = port\n        }\n    }\n    \n    @IBAction func path(_ sender: NSTextField) {\n        UserDefaultsManagement.sftpPath = sender.stringValue\n    }\n    \n    @IBAction func web(_ sender: NSTextField) {\n        UserDefaultsManagement.sftpWeb = sender.stringValue\n    }\n    \n    @IBAction func username(_ sender: NSTextField) {\n        UserDefaultsManagement.sftpUsername = sender.stringValue\n    }\n    \n    @IBAction func password(_ sender: NSSecureTextField) {\n        UserDefaultsManagement.sftpPassword = sender.stringValue\n    }\n    \n    @IBAction func passphrase(_ sender: NSSecureTextField) {\n        UserDefaultsManagement.sftpPassphrase = sender.stringValue\n    }\n    \n    @IBAction func privateKey(_ sender: Any) {\n        let openPanel = NSOpenPanel()\n        openPanel.allowsMultipleSelection = true\n        openPanel.canChooseFiles = true\n        openPanel.begin { (result) -> Void in\n            if result == .OK {\n                if openPanel.urls.count != 2 {\n                    let alert = NSAlert()\n                    alert.alertStyle = .warning\n                    alert.informativeText = NSLocalizedString(\"Please select private and public key\", comment: \"\")\n                    alert.runModal()\n                    return\n                }\n                \n                var bookmarks = [URL: Data]()\n                for url in openPanel.urls {\n                    do {\n                        let data = try url.bookmarkData(options: NSURL.BookmarkCreationOptions.withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil)\n                        \n                        bookmarks[url] = data\n                    } catch {\n                        print(error.localizedDescription)\n                    }\n                }\n                \n                let data = try? NSKeyedArchiver.archivedData(withRootObject: bookmarks, requiringSecureCoding: true)\n                UserDefaultsManagement.sftpAccessData = data\n                \n                self.rsaPath.url = openPanel.urls[0]\n            }\n        }\n    }\n    \n    @IBAction func test(_ sender: Any) {\n        var publicKeyURL: URL?\n        var privateKeyURL: URL?\n        \n        if let accessData = UserDefaultsManagement.sftpAccessData,\n           let bookmarks = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSData.self], from: accessData) as? [URL: Data] {\n            \n            for bookmark in bookmarks {\n                if bookmark.key.path.hasSuffix(\".pub\") {\n                    publicKeyURL = bookmark.key\n                } else {\n                    privateKeyURL = bookmark.key\n                }\n            }\n        }\n        \n        let host = UserDefaultsManagement.sftpHost\n        let port = UserDefaultsManagement.sftpPort\n        let username = UserDefaultsManagement.sftpUsername\n        let password = UserDefaultsManagement.sftpPassword\n        let passphrase = UserDefaultsManagement.sftpPassphrase\n        \n        if password.count == 0, publicKeyURL == nil || publicKeyURL == nil {\n            uploadError(text: \"Please set private and public keys\")\n            return\n        }\n        \n        let path = Bundle.main.path(forResource: \"MPreview\", ofType: \".bundle\")\n        let url = NSURL.fileURL(withPath: path!)\n        let bundle = Bundle(url: url)\n\n        guard let bundleResourceURL = bundle?.resourceURL\n            else {\n            uploadError(text: \"Test bundle can not found\")\n            return\n        }\n        \n        let localJsDir = bundleResourceURL.appendingPathComponent(\"js\", isDirectory: true)\n        let localFontsDir = bundleResourceURL.appendingPathComponent(\"fonts\", isDirectory: true)\n        let localCssFile = bundleResourceURL.appendingPathComponent(\"main.css\")\n        \n        let alert = NSAlert()\n\n        do {\n            let ssh = try SSH(host: host, port: port)\n            \n            guard let remoteDir = UserDefaultsManagement.sftpPath else { throw \"Please enter remote path\" }\n            \n            let remoteJsDir = \"\\(remoteDir)js/\"\n            let remoteFontsDir = \"\\(remoteDir)fonts/\"\n            \n            guard let files = try? FileManager.default.contentsOfDirectory(atPath: localJsDir.path) else { return }\n            guard let fontFiles = try? FileManager.default.contentsOfDirectory(atPath: localFontsDir.path) else { return }\n            \n            if password.count > 0 {\n                try ssh.authenticate(username: username, password: password)\n            } else if let publicKeyURL = publicKeyURL, let privateKeyURL = privateKeyURL {\n                try ssh.authenticate(username: username, privateKey: privateKeyURL.path, publicKey: publicKeyURL.path, passphrase: passphrase)\n            }\n            \n            _ = try ssh.execute(\"mkdir -p \\(remoteJsDir)\")\n            _ = try ssh.execute(\"mkdir -p \\(remoteFontsDir)\")\n            \n            let permissions = Permissions(arrayLiteral: .write, .read, .execute)\n            let filePerm = FilePermissions(owner: permissions, group: permissions, others: permissions)\n            \n            let sftp = try ssh.openSftp()\n            \n            for file in files {\n                let localURL = localJsDir.appendingPathComponent(file)\n                try? sftp.upload(localURL: localURL, remotePath: remoteJsDir + file, permissions: filePerm)\n            }\n            \n            for file in fontFiles {\n                let localURL = localFontsDir.appendingPathComponent(file)\n                try? sftp.upload(localURL: localURL, remotePath: remoteFontsDir + file, permissions: filePerm)\n            }\n            \n            try sftp.upload(localURL: localCssFile, remotePath: remoteDir + \"main.css\", permissions: filePerm)\n            \n            alert.alertStyle = .informational\n            alert.messageText = NSLocalizedString(\"Connection established successfully 🤟\", comment: \"\")\n        } catch let sshError as SSHError {\n            alert.alertStyle = .critical\n            alert.informativeText = sshError.description\n            alert.messageText = NSLocalizedString(\"SSH error\", comment: \"\")\n        } catch {\n            alert.alertStyle = .critical\n            alert.informativeText = error.localizedDescription\n            alert.messageText = NSLocalizedString(\"SSH error\", comment: \"\")\n        }\n        \n        alert.beginSheetModal(for: self.view.window!)\n    }\n    \n    private func uploadError(text: String) {\n        let alert = NSAlert()\n        alert.alertStyle = .critical\n        alert.informativeText = NSLocalizedString(\"Upload error\", comment: \"\")\n        alert.messageText = text\n        alert.beginSheetModal(for: self.view.window!)\n    }\n    \n    @IBAction func publishTo(_ sender: NSButton) {\n        if sender.tag == 0 {\n            publishCustom.state = .off\n                        \n            toggleState(state: false)\n        } else {\n            publishFSNotes.state = .off\n            \n            toggleState(state: true)\n        }\n        \n        UserDefaultsManagement.customWebServer = publishCustom.state == .on\n    }\n    \n    public func toggleState(state: Bool) {\n        host.isEnabled = state\n        port.isEnabled = state\n        path.isEnabled = state\n        web.isEnabled = state\n        username.isEnabled = state\n        password.isEnabled = state\n        passphrase.isEnabled = state\n        uploadAndTest.isEnabled = state\n        key.isEnabled = state\n    }\n    \n    @IBAction func resetWebKeys(_ sender: NSButton) {\n        UserDefaultsManagement.sftpAccessData = nil\n        rsaPath.url = nil\n    }\n    \n    func controlTextDidChange(_ notification: Notification) {\n        guard let textField = notification.object as? NSTextField, let value = textField.identifier?.rawValue else { return }\n\n        switch value {\n        case \"settingsWebHost\":\n            UserDefaultsManagement.sftpHost = host.stringValue\n        case \"settingsWebPort\":\n            UserDefaultsManagement.sftpPort = Int32(port.stringValue) ?? 22\n        case \"settingsWebPath\":\n            UserDefaultsManagement.sftpPath = path.stringValue\n        case \"settingsWebWeb\":\n            UserDefaultsManagement.sftpWeb = web.stringValue\n        case \"settingsWebUsername\":\n            UserDefaultsManagement.sftpUsername = username.stringValue\n        case \"settingsWebPassword\":\n            UserDefaultsManagement.sftpPassword = password.stringValue\n        case \"settingsWebPassphrase\":\n            UserDefaultsManagement.sftpPassphrase = passphrase.stringValue\n        default: break\n        }\n    }\n}\n\nextension String: LocalizedError { // Adds error.localizedDescription to Error instances\n    public var errorDescription: String? { return self }\n}\n"
  },
  {
    "path": "FSNotes/Preferences/SettingsViewController.swift",
    "content": "//\n//  SettingsViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.03.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport AppKit\n\nclass SettingsViewController: NSViewController, NSTextFieldDelegate {\n\n    public var gitProject: Project?\n    public var project: Project?\n    public var progress: GitProgress?\n\n    override func viewDidAppear() {\n        passphrase.delegate = self\n        origin.delegate = self\n    }\n\n    @IBOutlet weak var origin: NSTextField!\n    @IBOutlet weak var keyStatus: NSTextField!\n    @IBOutlet weak var logTextField: NSTextField!\n    @IBOutlet weak var removeButton: NSButton!\n    @IBOutlet weak var cloneButton: NSButton!\n    @IBOutlet weak var passphrase: NSSecureTextField!\n    @IBOutlet weak var progressIndicator: NSProgressIndicator!\n\n    @IBAction func removeRepository(_ sender: Any) {\n        gitProject?.removeRepository(progress: progress)\n\n        updateButtons()\n    }\n\n    @IBAction func origin(_ sender: Any) {\n        gitProject?.settings.setOrigin(origin.stringValue)\n        gitProject?.saveSettings()\n\n        updateButtons()\n    }\n\n    @IBAction func passphrase(_ sender: Any) {\n        gitProject?.settings.gitPrivateKeyPassphrase = passphrase.stringValue\n        gitProject?.saveSettings()\n    }\n\n    @IBAction func clonePull(_ sender: Any) {\n        guard let project = self.gitProject else { return }\n\n        if let origin = project.settings.gitOrigin, origin.startsWith(string: \"https://\") {\n            let alert = NSAlert()\n            alert.messageText = \"Wrong configuration\"\n            alert.alertStyle = .critical\n            alert.informativeText = \"Please use ssh keys, https auth is not supported\"\n            alert.runModal()\n            return\n        }\n\n        let action = project.getRepositoryState()\n        updateButtons(isActive: true)\n\n        ViewController.gitQueue.addOperation({\n            defer {\n                ViewController.gitQueueOperationDate = nil\n                ViewController.gitQueueBusy = false\n                \n                DispatchQueue.main.async {\n                    self.updateButtons(isActive: false)\n                }\n            }\n\n            ViewController.gitQueueOperationDate = Date()\n            ViewController.gitQueueBusy = true\n\n            if let message = project.gitDo(action, progress: self.progress) {\n                DispatchQueue.main.async {\n                    let alert = NSAlert()\n                    alert.alertStyle = .critical\n                    alert.informativeText = message\n                    alert.messageText = NSLocalizedString(\"git error\", comment: \"\")\n                    alert.runModal()\n                }\n            }\n        })\n    }\n\n    @IBAction func privateKey(_ sender: Any) {\n        let openPanel = NSOpenPanel()\n        openPanel.allowsMultipleSelection = true\n        openPanel.canChooseFiles = true\n        openPanel.begin { (result) -> Void in\n            if result == .OK {\n                if openPanel.urls.count != 1 {\n                    let alert = NSAlert()\n                    alert.alertStyle = .warning\n                    alert.informativeText = NSLocalizedString(\"Please select private key\", comment: \"\")\n                    alert.runModal()\n                    return\n                }\n\n                self.gitProject?.settings.gitPrivateKey = try? Data(contentsOf: openPanel.urls[0])\n                self.gitProject?.saveSettings()\n\n                self.keyStatus.stringValue = \"✅\"\n            }\n        }\n    }\n\n    @IBAction func resetKey(_ sender: Any) {\n        gitProject?.removeSSHKey()\n        gitProject?.settings.gitPrivateKey = nil\n        gitProject?.saveSettings()\n\n        keyStatus.stringValue = \"\"\n    }\n\n    public func controlTextDidChange(_ notification: Notification) {\n        guard let textField = notification.object as? NSTextField else { return }\n\n        let id = textField.identifier?.rawValue\n        \n        if id == \"gitOrigin\" || id == \"gitOriginMain\" {\n            gitProject?.settings.setOrigin(textField.stringValue)\n            updateButtons()\n        }\n\n        if id == \"gitPassphrase\" || id == \"gitPassphraseMain\" {\n            gitProject?.settings.gitPrivateKeyPassphrase = textField.stringValue\n        }\n\n        DispatchQueue.global(qos: .background).async {\n            self.gitProject?.saveSettings()\n        }\n    }\n\n    public func updateButtons(isActive: Bool? = nil) {\n        guard let project = gitProject else { return }\n\n        progressIndicator.isHidden = !project.isActiveGit\n        cloneButton.title = project.getRepositoryState().title\n        removeButton.isEnabled = project.hasRepository()\n\n        if let isActive = isActive {\n            if isActive {\n                progressIndicator.startAnimation(nil)\n                progressIndicator.isHidden = false\n            } else {\n                progressIndicator.stopAnimation(nil)\n                progressIndicator.isHidden = true\n            }\n        }\n    }\n\n    public func loadGit(project: Project) {\n        var project = project\n\n        if project.isVirtual  {\n            if let defaultProject = Storage.shared().getDefault() {\n                project = defaultProject\n            }\n        }\n\n        self.gitProject = project\n\n        origin.stringValue = project.settings.gitOrigin ?? \"\"\n        passphrase.stringValue = project.settings.gitPrivateKeyPassphrase ?? \"\"\n        keyStatus.stringValue = project.settings.gitPrivateKey != nil ? \"✅\" : \"\"\n\n        updateButtons()\n        progress = GitProgress(statusTextField: logTextField, project: project)\n\n        // Global instance for libgit2 callbacks\n        AppDelegate.gitProgress = progress\n\n        if let status = project.gitStatus {\n            logTextField.stringValue = status\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/PrefsViewController.swift",
    "content": "//\n//  PrefsViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/4/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport MASShortcut\nimport CoreData\n\nclass PrefsViewController: NSTabViewController  {\n\n    @IBOutlet weak var generalTabViewItem: NSTabViewItem!\n    @IBOutlet weak var libraryTabViewItem: NSTabViewItem!\n    @IBOutlet weak var editorTabViewItem: NSTabViewItem!\n    @IBOutlet weak var securityTabViewItem: NSTabViewItem!\n    @IBOutlet weak var gitTabViewItem: NSTabViewItem!\n    @IBOutlet weak var webTabViewItem: NSTabViewItem!\n    @IBOutlet weak var advancedTabViewItem: NSTabViewItem!\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Settings\", comment: \"\") \n        super.viewDidLoad()\n\n        if #available(macOS 11.0, *) {\n            let general = NSImage.init(systemSymbolName: \"gearshape\", accessibilityDescription: nil)\n            let library = NSImage.init(systemSymbolName: \"sidebar.left\", accessibilityDescription: nil)\n            let editor = NSImage.init(systemSymbolName: \"doc.richtext\", accessibilityDescription: nil)\n            let security = NSImage.init(systemSymbolName: \"lock\", accessibilityDescription: nil)\n            let git = NSImage.init(systemSymbolName: \"arrow.triangle.pull\", accessibilityDescription: nil)\n            let web = NSImage.init(systemSymbolName: \"globe\", accessibilityDescription: nil)\n            let advanced = NSImage.init(systemSymbolName: \"slider.vertical.3\", accessibilityDescription: nil)\n\n            if let general = general, let library = library, let editor = editor, let security = security, let git = git, let web = web, let advanced = advanced {\n                generalTabViewItem.image = general\n                libraryTabViewItem.image = library\n                editorTabViewItem.image = editor\n                securityTabViewItem.image = security\n                gitTabViewItem.image = git\n                webTabViewItem.image = web\n                advancedTabViewItem.image = advanced\n            }\n        }\n    }\n\n    override func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {\n        let toolbarItem = super.toolbar(toolbar, itemForItemIdentifier: itemIdentifier, willBeInsertedIntoToolbar: flag)\n\n        if\n            let toolbarItem = toolbarItem,\n            let tabViewItem = tabViewItems.first(where: { ($0.identifier as? String) == itemIdentifier.rawValue })\n        {\n            if let name = tabViewItem.identifier as? String, name == \"git\" {\n                toolbarItem.label = \"\\(tabViewItem.label)          \"\n                return toolbarItem\n            }\n\n            if let name = tabViewItem.identifier as? String, ![\"advanced\", \"security\"].contains(name)  {\n                toolbarItem.label = \"\\(tabViewItem.label)    \"\n            }\n        }\n        \n        return toolbarItem\n    }\n}\n"
  },
  {
    "path": "FSNotes/PrefsWindowController.swift",
    "content": "//\n//  PrefsWindowController.swift\n//  FSNotes\n//\n//  Created by Jeff Hanbury on 13/08/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass PrefsWindowController: NSWindowController, NSWindowDelegate {\n\n    override func windowDidLoad() {\n        super.windowDidLoad()\n        self.window?.delegate = self\n        self.window?.title = NSLocalizedString(\"Settings\", comment: \"\")\n    }\n}\n"
  },
  {
    "path": "FSNotes/ProjectSettingsViewController.swift",
    "content": "//\n//  ProjectSettingsViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 11/23/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Carbon.HIToolbox\n\nclass ProjectSettingsViewController: SettingsViewController {\n\n    @IBOutlet weak var modificationDate: NSButton!\n    @IBOutlet weak var creationDate: NSButton!\n    @IBOutlet weak var titleButton: NSButton!\n    @IBOutlet weak var sortByGlobal: NSButton!\n    @IBOutlet weak var directionASC: NSButton!\n    @IBOutlet weak var directionDESC: NSButton!\n    @IBOutlet weak var showInAll: NSButton!\n    @IBOutlet weak var firstLineAsTitle: NSButton!\n    @IBOutlet weak var nestedFoldersContent: NSButton!\n    @IBOutlet weak var gitView: NSView!\n    @IBOutlet weak var gitViewHeight: NSLayoutConstraint!\n    \n    override func viewDidLoad() {\n        gitView.isHidden = true\n        gitViewHeight.constant = 0\n    }\n    \n    @IBAction func sortBy(_ sender: NSButton) {\n        guard let project = project else { return }\n        \n        let sortBy = SortBy(rawValue: sender.identifier!.rawValue)!\n        project.settings.sortBy = sortBy\n        project.saveSettings()\n        \n        guard let vc = ViewController.shared() else { return }\n\n        vc.buildSearchQuery()\n        vc.updateTable()\n    }\n    \n    @IBAction func sortDirection(_ sender: NSButton) {\n        guard let project = project else { return }\n        \n        project.settings.sortDirection = SortDirection(rawValue: sender.identifier!.rawValue)!\n        project.saveSettings()\n        \n        guard let vc = ViewController.shared() else { return }\n\n        vc.buildSearchQuery()\n        vc.updateTable()\n    }\n    \n    \n    @IBAction func showNotesInMainList(_ sender: NSButton) {\n        project?.settings.showInCommon = sender.state == .on\n        project?.saveSettings()\n    }\n    \n    @IBAction func firstLineAsTitle(_ sender: NSButton) {\n        guard let project = self.project else { return }\n        \n        project.settings.firstLineAsTitle = sender.state == .on\n        project.saveSettings()\n        \n        let notes = Storage.shared().getNotesBy(project: project)\n        for note in notes {\n            note.invalidateCache()\n        }\n        \n        guard let vc = ViewController.shared() else { return }\n        vc.notesTableView.reloadData()\n    }\n    \n    @IBAction func close(_ sender: Any) {\n        self.dismiss(nil)\n    }\n    \n    @IBAction func showNestedFoldersContent(_ sender: NSButton) {\n        guard let project = self.project else { return }\n        \n        project.settings.showNestedFoldersContent = sender.state == .on\n        project.saveSettings()\n        \n        guard let vc = ViewController.shared() else { return }\n        vc.updateTable()\n    }\n\n    public func load(project: Project) {\n        self.project = project\n        \n        if project.isVirtual {\n            showInAll.isEnabled = false\n            nestedFoldersContent.isEnabled = false\n            firstLineAsTitle.isEnabled = false\n        }\n\n        showInAll.state = project.settings.showInCommon ? .on : .off\n        firstLineAsTitle.state = project.settings.isFirstLineAsTitle() ? .on : .off\n        nestedFoldersContent.state = project.settings.showNestedFoldersContent ? .on : .off\n\n        modificationDate.state = project.settings.sortBy == .modificationDate ? .on : .off\n        creationDate.state = project.settings.sortBy == .creationDate ? .on : .off\n        titleButton.state = project.settings.sortBy == .title ? .on : .off\n        sortByGlobal.state = project.settings.sortBy == .none ? .on : .off\n\n        directionASC.state = project.settings.sortDirection == .asc ? .on : .off\n        directionDESC.state = project.settings.sortDirection == .desc ? .on : .off\n\n        if project.parent == nil && !project.isTrash && !project.isEncrypted {\n            gitView.isHidden = false\n            gitViewHeight.constant = 150\n        }\n        \n        loadGit(project: project)\n    }\n\n    override func keyDown(with event: NSEvent) {\n        if event.keyCode == kVK_Return || event.keyCode == kVK_Escape {\n            self.dismiss(nil)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/SidebarScrollView.swift",
    "content": "//\n//  SidebarScrollView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/9/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass SidebarNotesView: NSView {\n    override func draw(_ dirtyRect: NSRect) {\n        super.draw(dirtyRect)\n        layer?.backgroundColor = NSColor.white.cgColor\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/AboutImageView.swift",
    "content": "//\n//  AboutImage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 08.01.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass AboutImageView: NSImageView {\n    override func mouseEntered(with event: NSEvent) {\n        image = NSImage(named: \"friend\")\n    }\n    \n    override func mouseExited(with event: NSEvent) {\n        image = NSImage(named: \"modern\")\n    }\n    \n    override func updateTrackingAreas() {\n        super.updateTrackingAreas()\n\n        for trackingArea in self.trackingAreas {\n            self.removeTrackingArea(trackingArea)\n        }\n        \n        let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeAlways]\n        let trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)\n        self.addTrackingArea(trackingArea)\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/ClickableTextField.swift",
    "content": "//\n//  ClickableTextField.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 13.08.2024.\n//  Copyright © 2024 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass ClickableTextField: NSTextField {\n    override func mouseDown(with event: NSEvent) {\n        super.mouseDown(with: event)\n        \n        guard let vc = ViewController.shared(),\n            let projects = vc.sidebarOutlineView.getSelectedProjects() else { return }\n\n        vc.getMasterPassword() { password in\n            vc.sidebarOutlineView.unlock(projects: projects, password: password, action: nil)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditTextView+Clicked.swift",
    "content": "//\n//  EditTextView+Clicked.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 13.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AppKit\n\nextension EditTextView {\n    public func handleEmailLink(_ link: Any) -> Bool {\n        guard let emailString = link as? String,\n              emailString.isValidEmail(),\n              let mailURL = URL(string: \"mailto:\\(emailString)\") else {\n            return false\n        }\n        \n        NSWorkspace.shared.open(mailURL)\n        return true\n    }\n\n    public func handleAnchorLink(_ link: Any) -> Bool {\n        guard let linkString = link as? String,\n              linkString.startsWith(string: \"#\") else {\n            return false\n        }\n        \n        let title = String(linkString.dropFirst()).replacingOccurrences(of: \"-\", with: \" \")\n        guard let textRange = textStorage?.string.range(of: \"# \" + title),\n              let nsRange = textStorage?.string.nsRange(from: textRange) else {\n            return false\n        }\n        \n        setSelectedRange(nsRange)\n        scrollRangeToVisible(nsRange)\n        return true\n    }\n\n    public func isAttachmentAtPosition(_ charIndex: Int) -> Bool {\n        let range = NSRange(location: charIndex, length: 1)\n        let char = attributedSubstring(forProposedRange: range, actualRange: nil)\n        return char?.attribute(.attachment, at: 0, effectiveRange: nil) != nil\n    }\n\n    public func handleRegularLink(_ link: Any, at charIndex: Int) -> Bool {\n        guard let url = convertToURL(link) else {\n            super.clicked(onLink: link, at: charIndex)\n            return true\n        }\n        \n        // Handle file:// URLs\n        if url.scheme == \"file\" {\n            DispatchQueue.main.async {\n                NSWorkspace.shared.activateFileViewerSelecting([url])\n            }\n            return true\n        }\n        \n        // Handle non-fsnotes URLs with modifiers\n        if url.scheme != \"fsnotes\" {\n            if let handled = handleURLWithModifiers(url, at: charIndex) {\n                return handled\n            }\n        }\n        \n        super.clicked(onLink: link, at: charIndex)\n        return true\n    }\n\n    private func convertToURL(_ link: Any) -> URL? {\n        if let url = link as? URL {\n            return url\n        }\n        \n        if let linkString = link as? String {\n            return linkString.createURL(for: self.note)\n        }\n        \n        return nil\n    }\n\n    private func handleURLWithModifiers(_ url: URL, at charIndex: Int) -> Bool? {\n        guard let event = NSApp.currentEvent else {\n            return nil\n        }\n        \n        // Shift: Open without activation\n        if event.modifierFlags.contains(.shift) {\n            let configuration = NSWorkspace.OpenConfiguration()\n            configuration.activates = false\n            NSWorkspace.shared.open(url, configuration: configuration, completionHandler: nil)\n            return true\n        }\n        \n        // Command: Open normally\n        if event.modifierFlags.contains(.command) {\n            NSWorkspace.shared.open(url)\n            return true\n        }\n        \n        // No modifier: Check user preferences\n        if !UserDefaultsManagement.clickableLinks {\n            setSelectedRange(NSRange(location: charIndex, length: 0))\n            return true\n        }\n        \n        return nil\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditTextView+Complete.swift",
    "content": "//\n//  EditTextView+Complete.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 06.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AppKit\n\n// MARK: - Completion Context\nenum CompletionContext: Equatable {\n    case wikiLink(startPos: Int)\n    case tag(startPos: Int)\n    case codeBlock(startPos: Int)\n    case none\n    \n    var startPosition: Int? {\n        switch self {\n        case .wikiLink(let pos), .tag(let pos), .codeBlock(let pos):\n            return pos\n        case .none:\n            return nil\n        }\n    }\n}\n\nextension EditTextView {    \n    // MARK: - Context Detection\n    func detectCompletionContext() -> CompletionContext {\n        let location = selectedRange().location\n        let text = string as NSString\n        \n        if let codeBlockContext = detectCodeBlockContext(at: location, in: text) {\n            return codeBlockContext\n        }\n        \n        \n        // Disable completion in code blocks\n        guard let ranges = note?.codeBlockRangesCache,\n              !ranges.contains(where: { $0.contains(location) }) else { return .none }\n                \n        if let tagContext = detectTagContext(at: location, in: text) {\n            return tagContext\n        }\n        \n        if let wikiContext = detectWikiContext(at: location, in: text) {\n            return wikiContext\n        }\n        \n        return .none\n    }\n    \n    private func detectCodeBlockContext(at location: Int, in text: NSString) -> CompletionContext? {\n        guard location >= 3 else { return nil }\n        guard let ranges = note?.codeBlockRangesCache,\n            ranges.contains(where: { $0.contains(location) })\n                || (\n                    // Allow if no code block before\n                    !ranges.contains(where: { $0.contains(location - 1) }) &&\n                    !ranges.contains(where: { $0.contains(location) })\n                )\n        else {\n            return nil\n        }\n\n        let checkRange = NSRange(location: location - 3, length: 3)\n        let lastChars = text.substring(with: checkRange)\n        \n        guard lastChars == \"```\" else {\n            return detectCodeBlockLanguageInput(at: location, in: text)\n        }\n        \n        let lineStart = findLineStart(at: location - 3, in: text)\n        \n        if lineStart < location - 3 {\n            let beforeRange = NSRange(location: lineStart, length: location - 3 - lineStart)\n            let beforeText = text.substring(with: beforeRange)\n            \n            for char in beforeText {\n                if char != \" \" && char != \"\\t\" {\n                    return nil\n                }\n            }\n        }\n        \n        return .codeBlock(startPos: location)\n    }\n    \n    private func detectCodeBlockLanguageInput(at location: Int, in text: NSString) -> CompletionContext? {\n        var searchPos = location - 1\n        \n        while searchPos >= 0 && location - searchPos < 30 {\n            if searchPos + 3 <= text.length {\n                let checkRange = NSRange(location: searchPos, length: 3)\n                let chars = text.substring(with: checkRange)\n                \n                if chars == \"```\" {\n                    let lineStart = findLineStart(at: searchPos, in: text)\n                    \n                    if lineStart < searchPos {\n                        let beforeRange = NSRange(location: lineStart, length: searchPos - lineStart)\n                        let beforeText = text.substring(with: beforeRange)\n                        \n                        var isValidStart = true\n                        for char in beforeText {\n                            if char != \" \" && char != \"\\t\" {\n                                isValidStart = false\n                                break\n                            }\n                        }\n                        \n                        if !isValidStart {\n                            return nil\n                        }\n                    }\n                    \n                    let betweenRange = NSRange(location: searchPos + 3, length: location - searchPos - 3)\n                    let betweenText = text.substring(with: betweenRange)\n                    \n                    if !betweenText.contains(\"\\n\") {\n                        return .codeBlock(startPos: searchPos + 3)\n                    }\n                    \n                    return nil\n                }\n            }\n            searchPos -= 1\n        }\n        \n        return nil\n    }\n    \n    private func findLineStart(at position: Int, in text: NSString) -> Int {\n        var pos = position - 1\n        \n        while pos >= 0 {\n            let char = text.substring(with: NSRange(location: pos, length: 1))\n            if char == \"\\n\" {\n                return pos + 1\n            }\n            pos -= 1\n        }\n        \n        return 0\n    }\n    \n    private func detectTagContext(at location: Int, in text: NSString) -> CompletionContext? {\n        guard UserDefaultsManagement.inlineTags && location >= 1 else { return nil }\n        \n        var searchPos = location - 1\n        \n        while searchPos >= 0 && location - searchPos < 50 {\n            let char = text.substring(with: NSRange(location: searchPos, length: 1))\n            \n            if char == \"#\" {\n                if isValidTagStart(at: searchPos, in: text) {\n                    return .tag(startPos: searchPos)\n                }\n                break\n            } else if isWhitespace(char) {\n                break\n            }\n            \n            searchPos -= 1\n        }\n        \n        return nil\n    }\n    \n    private func detectWikiContext(at location: Int, in text: NSString) -> CompletionContext? {\n        var searchPos = location\n        \n        while searchPos >= 2 && location - searchPos < 100 {\n            let checkRange = NSRange(location: searchPos - 2, length: 2)\n            let chars = text.substring(with: checkRange)\n            \n            if chars == \"[[\" {\n                let betweenRange = NSRange(location: searchPos, length: location - searchPos)\n                let betweenText = text.substring(with: betweenRange)\n                \n                if !betweenText.contains(\"]]\") {\n                    return .wikiLink(startPos: searchPos)\n                }\n            }\n            searchPos -= 1\n        }\n        \n        return nil\n    }\n    \n    // MARK: - Helpers\n    private func isValidTagStart(at position: Int, in text: NSString) -> Bool {\n        guard position >= 0 else { return false }\n        \n        if position == 0 {\n            return true\n        }\n        \n        let charBefore = text.substring(with: NSRange(location: position - 1, length: 1))\n        return isWhitespace(charBefore)\n    }\n    \n    private func isWhitespace(_ char: String) -> Bool {\n        return char == \" \" || char == \"\\n\" || char == \"\\t\"\n    }\n    \n    private func checkForClosingBrackets(at position: Int, in text: NSString) -> Bool {\n        guard position + 2 <= text.length else { return false }\n        \n        let nextRange = NSRange(location: position, length: 2)\n        let nextChars = text.substring(with: nextRange)\n        return nextChars == \"]]\"\n    }\n    \n    // MARK: - Completion Handlers\n    func handleCompletions(index: UnsafeMutablePointer<Int>) -> [String]? {\n        let context = detectCompletionContext()\n        let currentPos = selectedRange().location\n        let text = string as NSString\n        \n        index.pointee = 0\n        \n        switch context {\n        case .codeBlock(let startPos):\n            return getCodeBlockCompletions(startPos: startPos, currentPos: currentPos, text: text)\n            \n        case .tag(let startPos):\n            return getTagCompletions(startPos: startPos, currentPos: currentPos, text: text)\n            \n        case .wikiLink(let startPos):\n            return getWikiCompletions(startPos: startPos, currentPos: currentPos, text: text)\n            \n        case .none:\n            return nil\n        }\n    }\n    \n    private func getCodeBlockCompletions(startPos: Int, currentPos: Int, text: NSString) -> [String]? {\n        let searchLength = currentPos - startPos\n        \n        let codeLanguages = NotesTextProcessor.getHighlighter().getLanguages()\n            .sorted()\n        \n        if searchLength == 0 {\n            return codeLanguages\n        }\n        \n        let searchRange = NSRange(location: startPos, length: searchLength)\n        let searchText = text.substring(with: searchRange)\n        \n        let filtered = codeLanguages\n            .filter { $0.localizedCaseInsensitiveContains(searchText) }\n            .sorted { a, b in\n                let aStarts = a.range(of: searchText, options: [.caseInsensitive, .anchored]) != nil\n                let bStarts = b.range(of: searchText, options: [.caseInsensitive, .anchored]) != nil\n\n                if aStarts != bStarts {\n                    return aStarts && !bStarts\n                }\n\n                return a.localizedCaseInsensitiveCompare(b) == .orderedAscending\n            }\n        \n        return filtered.isEmpty ? nil : filtered\n    }\n    \n    private func getTagCompletions(startPos: Int, currentPos: Int, text: NSString) -> [String]? {\n        let searchLength = currentPos - startPos - 1\n        \n        if searchLength == 0 {\n            if let tags = viewDelegate?.sidebarOutlineView.getAllTags() {\n                return tags.sorted()\n            }\n        }\n        \n        let searchRange = NSRange(location: startPos + 1, length: searchLength)\n        let searchText = text.substring(with: searchRange)\n        \n        if let tags = viewDelegate?.sidebarOutlineView.getAllTags() {\n            let filtered = tags\n                .filter { $0.startsWith(string: searchText) }\n                .sorted()\n            \n            return filtered.isEmpty ? nil : filtered\n        }\n        \n        return nil\n    }\n    \n    private func getWikiCompletions(startPos: Int, currentPos: Int, text: NSString) -> [String]? {\n        let searchLength = currentPos - startPos\n        \n        if searchLength == 0 {\n            let titles = storage.noteList\n                .map { String($0.title) }\n                .filter { !$0.isEmpty }\n                .sorted()\n            \n            return titles\n        }\n        \n        let searchRange = NSRange(location: startPos, length: searchLength)\n        let searchText = text.substring(with: searchRange)\n        \n        if let notes = storage.getBy(contains: searchText) {\n            let titles = notes\n                .map { String($0.title) }\n                .filter { $0.localizedCaseInsensitiveContains(searchText) && !$0.isEmpty && $0 != searchText }\n                .sorted()\n            \n            return titles\n        }\n        \n        return nil\n    }\n    \n    func handleInsertCompletion(word: String, movement: Int, isFinal flag: Bool) {\n        guard flag && movement == NSReturnTextMovement else {\n            return\n        }\n        \n        let context = detectCompletionContext()\n        \n        switch context {\n        case .codeBlock(let startPos):\n            insertCodeBlockCompletion(word, startPos: startPos)\n            \n        case .tag(let startPos):\n            insertTagCompletion(word, startPos: startPos)\n            \n        case .wikiLink(let startPos):\n            insertWikiCompletion(word, startPos: startPos)\n            \n        case .none:\n            break\n        }\n    }\n    \n    private func insertCodeBlockCompletion(_ word: String, startPos: Int) {\n        let currentPos = selectedRange().location\n        let replaceRange = NSRange(location: startPos, length: currentPos - startPos)\n        \n        let nextLineRange = NSRange(location: currentPos + 1, length: 3)\n        let nextLine = (self.string as NSString)\n            .safeSubstring(with: nextLineRange)\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n\n        let nextLineHasBackticks = (nextLine == \"```\")\n\n        var completion = nextLineHasBackticks\n            ? \"\\(word)\\n\"\n            : \"\\(word)\\n\\n```\"\n\n        // Inside code block without ```\n        if let ranges = note?.codeBlockRangesCache {\n            for r in ranges where r.contains(startPos) {\n                completion = word\n                break\n            }\n        }\n\n        suppressCompletion = true\n\n        if shouldChangeText(in: replaceRange, replacementString: completion) {\n            replaceCharacters(in: replaceRange, with: completion)\n            didChangeText()\n            setSelectedRange(NSRange(location: startPos + word.count + 1, length: 0))\n        }\n    }\n    \n    private func insertTagCompletion(_ word: String, startPos: Int) {\n        let currentPos = selectedRange().location\n        let replaceRange = NSRange(location: startPos + 1, length: currentPos - startPos - 1)\n        \n        if shouldChangeText(in: replaceRange, replacementString: word) {\n            replaceCharacters(in: replaceRange, with: word)\n            \n            let spacePos = startPos + 1 + word.count\n            if shouldChangeText(in: NSRange(location: spacePos, length: 0), replacementString: \" \") {\n                replaceCharacters(in: NSRange(location: spacePos, length: 0), with: \" \")\n            }\n            \n            didChangeText()\n            \n            let newPos = startPos + 1 + word.count + 1\n            setSelectedRange(NSRange(location: newPos, length: 0))\n        }\n    }\n    \n    private func insertWikiCompletion(_ word: String, startPos: Int) {\n        let text = string as NSString\n        let currentPos = selectedRange().location\n        \n        let hasClosingBrackets = checkForClosingBrackets(at: currentPos, in: text)\n        let replaceRange = NSRange(location: startPos, length: currentPos - startPos)\n        let completion = hasClosingBrackets ? word : \"\\(word)]]\"\n        \n        if shouldChangeText(in: replaceRange, replacementString: completion) {\n            replaceCharacters(in: replaceRange, with: completion)\n            didChangeText()\n            \n            let newPos = hasClosingBrackets ? startPos + word.count + 2 : startPos + completion.count\n            setSelectedRange(NSRange(location: newPos, length: 0))\n        }\n    }\n    \n    func calculateCompletionRange() -> NSRange {\n        let location = selectedRange().location\n        let context = detectCompletionContext()\n        \n        switch context {\n        case .codeBlock(let startPos):\n            return NSRange(location: startPos, length: location - startPos)\n            \n        case .tag(let startPos):\n            return NSRange(location: startPos + 1, length: location - startPos - 1)\n            \n        case .wikiLink(let startPos):\n            return NSRange(location: startPos, length: location - startPos)\n            \n        case .none:\n            return NSRange(location: location, length: 0)\n        }\n    }\n}\n\nextension NSString {\n    func safeSubstring(with range: NSRange) -> String {\n        let length = self.length\n\n        if length == 0 { return \"\" }\n\n        let safeLocation = max(0, min(range.location, length - 1))\n        let safeLength = max(0, min(range.length, length - safeLocation))\n\n        if safeLength == 0 { return \"\" }\n\n        let safeRange = NSRange(location: safeLocation, length: safeLength)\n        return self.substring(with: safeRange)\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditTextView+DragOperation.swift",
    "content": "//\n//  EditTextView+DragOperation.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.10.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension EditTextView\n{\n    public func handleAttributedText(_ pasteboard: NSPasteboard, note: Note, storage: NSTextStorage, replacementRange: NSRange) -> Bool {\n\n        let locationDiff = selectedRange().location > replacementRange.location\n            ? replacementRange.location\n            : replacementRange.location - selectedRange().length\n\n        let insertRange = NSRange(location: locationDiff, length: 0)\n        let removeRange = selectedRange()\n\n        // drag\n        insertText(\"\", replacementRange: removeRange)\n\n        guard let data = pasteboard.data(forType: NSPasteboard.attributed),\n              let attributedString = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? NSAttributedString else { return false }\n\n        // drop\n        insertText(attributedString, replacementRange: insertRange)\n\n        // select\n        let selectedRange = NSRange(location: locationDiff, length: attributedString.length)\n        setSelectedRange(selectedRange)\n\n        return true\n    }\n\n    public func handleNoteReference(_ pasteboard: NSPasteboard, note: Note, replacementRange: NSRange) -> Bool {\n        guard\n            let archivedData = pasteboard.data(forType: NSPasteboard.note),\n            let urls = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSURL.self], from: archivedData) as? [URL],\n            let url = urls.first,\n            let draggableNote = Storage.shared().getBy(url: url),\n            let textStorage = self.textStorage\n        else { return false }\n        \n        let title = \"[[\\(draggableNote.title)]]\"\n        \n        DispatchQueue.main.async {\n            self.window?.makeFirstResponder(self)\n            \n            guard let undoManager = self.undoManager else { return }\n            undoManager.beginUndoGrouping()\n            \n            if self.shouldChangeText(in: replacementRange, replacementString: title) {\n                textStorage.replaceCharacters(in: replacementRange, with: title)\n                self.didChangeText()\n                \n                self.setSelectedRange(NSRange(location: replacementRange.location + title.count, length: 0))\n            }\n            \n            undoManager.endUndoGrouping()\n            undoManager.setActionName(\"Insert Note Reference\")\n        }\n        \n        return true\n    }\n\n    public func handleURLs(_ pasteboard: NSPasteboard, note: Note, replacementRange: NSRange) -> Bool {\n        guard let urls = pasteboard.readObjects(forClasses: [NSURL.self]) as? [URL],\n              !urls.isEmpty else { return false }\n\n        note.save(attributed: attributedString())\n\n        let group = DispatchGroup()\n        let total = urls.count\n        var results = Array<NSAttributedString?>(repeating: nil, count: total)\n\n        for (index, url) in urls.enumerated() {\n            group.enter()\n            fetchDataFromURL(url: url) { data, error in\n                defer { group.leave() }\n                guard let data = data, error == nil else { return }\n                \n                if url.isWebURL {\n                    let title = self.getHTMLTitle(from: data) ?? url.lastPathComponent\n                    let text = \"[\\(title)](\\(url.absoluteString))\"\n                    results[index] = NSAttributedString(string: text)\n                } else if let filePath = ImagesProcessor.writeFile(data: data, url: url, note: note),\n                          let fileURL = note.getAttachmentFileUrl(\n                            name: filePath.removingPercentEncoding ?? filePath\n                          ) {\n                    let attributed = NSMutableAttributedString(\n                        url: fileURL,\n                        title: \"\",\n                        path: filePath\n                    )\n                    results[index] = attributed\n                }\n            }\n        }\n        \n        group.notify(queue: .main) {\n            let final = NSMutableAttributedString()\n            for i in 0..<total {\n                guard let part = results[i] else { continue }\n                final.append(part)\n                if i < total - 1 {\n                    final.append(NSAttributedString(string: \"\\n\\n\"))\n                }\n            }\n            \n            self.window?.makeFirstResponder(self)\n            \n            guard let undoManager = self.undoManager,\n                  let textStorage = self.textStorage else {\n                \n                self.insertText(final, replacementRange: replacementRange)\n                self.setSelectedRange(\n                    NSRange(location: replacementRange.location + final.length, length: 0)\n                )\n                self.viewDelegate?.notesTableView.reloadRow(note: note)\n                return\n            }\n            \n            undoManager.beginUndoGrouping()\n            \n            if self.shouldChangeText(in: replacementRange, replacementString: final.string) {\n                textStorage.replaceCharacters(in: replacementRange, with: final)\n                self.didChangeText()\n                \n                self.setSelectedRange(\n                    NSRange(location: replacementRange.location + final.length, length: 0)\n                )\n            }\n            \n            undoManager.endUndoGrouping()\n            undoManager.setActionName(\"Insert URLs\")\n            \n            self.viewDelegate?.notesTableView.reloadRow(note: note)\n        }\n        \n        return true\n    }\n\n}\n"
  },
  {
    "path": "FSNotes/View/EditTextView+MoveLines.swift",
    "content": "//\n//  EditTextView+MoveLines.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension EditTextView {\n    func moveSelectedLinesUp() {\n        guard let textStorage = textStorage,\n              textStorage.length > 0 else { return }\n        \n        let selectedRange = selectedRange()\n        \n        let lineRange = textStorage.mutableString.lineRange(for: selectedRange)\n        if lineRange.location == 0 {\n            NSSound.beep()\n            return\n        }\n        \n        let previousLineStart = textStorage.mutableString.lineRange(\n            for: NSRange(location: lineRange.location - 1, length: 0)\n        ).location\n        \n        let previousLineRange = NSRange(\n            location: previousLineStart,\n            length: lineRange.location - previousLineStart\n        )\n        \n        let currentLinesAttr = textStorage.attributedSubstring(from: lineRange)\n        let previousLineAttr = textStorage.attributedSubstring(from: previousLineRange)\n        \n        let offsetInLine = selectedRange.location - lineRange.location\n        \n        let currentLinesString = currentLinesAttr.string\n        let needsNewline = !currentLinesString.hasSuffix(\"\\n\")\n        \n        let newContent = NSMutableAttributedString()\n        newContent.append(currentLinesAttr)\n        \n        if needsNewline {\n            let attrs = currentLinesAttr.length > 0\n                ? currentLinesAttr.attributes(at: currentLinesAttr.length - 1, effectiveRange: nil)\n                : [:]\n            newContent.append(NSAttributedString(string: \"\\n\", attributes: attrs))\n        }\n        \n        var previousToAppend = previousLineAttr\n        if needsNewline && previousLineAttr.string.hasSuffix(\"\\n\") {\n            let trimmedPrevious = NSMutableAttributedString(attributedString: previousLineAttr)\n            trimmedPrevious.deleteCharacters(in: NSRange(location: trimmedPrevious.length - 1, length: 1))\n            previousToAppend = trimmedPrevious\n        }\n        \n        newContent.append(previousToAppend)\n        \n        let combinedRange = NSRange(\n            location: previousLineRange.location,\n            length: previousLineRange.length + lineRange.length\n        )\n        \n        newContent.saveData()\n        if shouldChangeText(in: combinedRange, replacementString: newContent.string) {\n            insertText(newContent, replacementRange: combinedRange)\n            didChangeText()\n        }\n        \n        let newSelectionLocation = previousLineRange.location + offsetInLine\n        \n        setSelectedRange(NSRange(\n            location: newSelectionLocation,\n            length: selectedRange.length\n        ))\n        \n        scrollRangeToVisible(self.selectedRange())\n    }\n\n    func moveSelectedLinesDown() {\n        guard let textStorage = textStorage,\n              textStorage.length > 0 else { return }\n        \n        let selectedRange = selectedRange()\n        let lineRange = textStorage.mutableString.lineRange(for: selectedRange)\n        \n        if NSMaxRange(lineRange) >= textStorage.length {\n            NSSound.beep()\n            return\n        }\n        \n        let nextLineRange = textStorage.mutableString.lineRange(\n            for: NSRange(location: NSMaxRange(lineRange), length: 0)\n        )\n        \n        let currentLinesAttr = textStorage.attributedSubstring(from: lineRange)\n        let nextLineAttr = textStorage.attributedSubstring(from: nextLineRange)\n        \n        let offsetInLine = selectedRange.location - lineRange.location\n        \n        let nextLineString = nextLineAttr.string\n        let needsNewline = !nextLineString.hasSuffix(\"\\n\")\n        \n        let newContent = NSMutableAttributedString()\n        var nextLineFinalLength = nextLineAttr.length\n        \n        newContent.append(nextLineAttr)\n        \n        if needsNewline {\n            let attrs = nextLineAttr.length > 0\n                ? nextLineAttr.attributes(at: nextLineAttr.length - 1, effectiveRange: nil)\n                : [:]\n            newContent.append(NSAttributedString(string: \"\\n\", attributes: attrs))\n            nextLineFinalLength += 1\n        }\n        \n        var currentToAppend = currentLinesAttr\n        if needsNewline && currentLinesAttr.string.hasSuffix(\"\\n\") {\n            let trimmedCurrent = NSMutableAttributedString(attributedString: currentLinesAttr)\n            trimmedCurrent.deleteCharacters(in: NSRange(location: trimmedCurrent.length - 1, length: 1))\n            currentToAppend = trimmedCurrent\n        }\n        \n        newContent.append(currentToAppend)\n        \n        let combinedRange = NSRange(\n            location: lineRange.location,\n            length: lineRange.length + nextLineRange.length\n        )\n        \n        newContent.saveData()\n        if shouldChangeText(in: combinedRange, replacementString: newContent.string) {\n            textStorage.replaceCharacters(in: combinedRange, with: newContent)\n            didChangeText()\n        }\n        \n        let newSelectionLocation = lineRange.location + nextLineFinalLength + offsetInLine\n        \n        setSelectedRange(NSRange(\n            location: newSelectionLocation,\n            length: selectedRange.length\n        ))\n        \n        scrollRangeToVisible(self.selectedRange())\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditTextView+Todo.swift",
    "content": "//\n//  EditTextView+Todo.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nextension EditTextView {\n    func clearCompletedTodos() {\n        guard let textStorage = textStorage else { return }\n        \n        let fullRange = NSRange(location: 0, length: textStorage.length)\n        let text = textStorage.string as NSString\n        \n        undoManager?.beginUndoGrouping()\n        \n        var linesToRemove: [NSRange] = []\n        textStorage.enumerateAttribute(.todo, in: fullRange, options: []) { value, range, stop in\n            if let value = value as? Int, value == 1 {\n                let lineRange = text.lineRange(for: range)\n                \n                if !linesToRemove.contains(where: { $0.intersection(lineRange) != nil }) {\n                    linesToRemove.append(lineRange)\n                }\n            }\n        }\n        \n        for lineRange in linesToRemove.sorted(by: { $0.location > $1.location }) {\n            if shouldChangeText(in: lineRange, replacementString: \"\") {\n                textStorage.replaceCharacters(in: lineRange, with: \"\")\n                didChangeText()\n            }\n        }\n        \n        undoManager?.endUndoGrouping()\n        undoManager?.setActionName(\"Remove TODO Lines\")\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditTextView.swift",
    "content": "//\n//  EditTextView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/11/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Carbon.HIToolbox\n\nclass EditTextView: NSTextView, NSTextFinderClient, NSSharingServicePickerDelegate {\n    \n    public var editorViewController: EditorViewController?\n    public var textStorageProcessor: TextStorageProcessor?\n    public var note: Note?\n    public var viewDelegate: ViewController?\n    \n    let storage = Storage.shared()\n    let caretWidth: CGFloat = 2\n    var downView: MPreviewView?\n    \n    public var timer: Timer?\n    public var tagsTimer: Timer?\n    public var markdownView: MPreviewContainerView?\n    public var isLastEdited: Bool = false\n    \n    @IBOutlet weak var previewMathJax: NSMenuItem!\n\n    public var imagesLoaderQueue = OperationQueue.init()\n    public var attributesCachingQueue = OperationQueue.init()\n    \n    private var preview = false\n    \n    public var isScrollPositionSaverLocked = false\n    \n    override func becomeFirstResponder() -> Bool {        \n        if let note = self.note {\n            if note.container == .encryptedTextPack {\n                return false\n            }\n\n            textStorage?.removeHighlight()\n        }\n        \n        loadSelectedRange()\n        \n        return super.becomeFirstResponder()\n    }\n\n    //MARK: caret width\n\n    override func draw(_ dirtyRect: NSRect) {\n        super.draw(dirtyRect)\n\n        guard UserDefaultsManagement.inlineTags else { return }\n\n        if #available(OSX 10.16, *) {\n            guard let textStorage = self.textStorage,\n                  let layoutManager = self.layoutManager\n            else { return }\n\n            let fullRange = NSRange(location: 0, length: textStorage.length)\n\n            attributedString().enumerateAttributes(in: fullRange, options: .reverse) { attributes, range, _ in\n                guard range.location >= 0,\n                      range.location + range.length <= textStorage.length else { return }\n                \n                guard attributes.index(forKey: .tag) != nil,\n                      let font = attributes[.font] as? NSFont\n                else { return }\n\n                let tag = attributedString().attributedSubstring(from: range).string\n                let tagAttributes = attributedString().attributes(at: range.location, effectiveRange: nil)\n\n                let glyphRange = layoutManager.glyphRange(forCharacterRange: range, actualCharacterRange: nil)\n                \n                let ascent = font.ascender\n                let descent = abs(font.descender)\n                let fontHeight = ascent + descent\n\n                layoutManager.enumerateLineFragments(forGlyphRange: glyphRange) { rect, usedRect, textContainer, lineGlyphRange, stop in\n\n                    let intersectionRange = NSIntersectionRange(glyphRange, lineGlyphRange)\n                    guard intersectionRange.length > 0 else { return }\n                    \n                    var fragmentRect = layoutManager.boundingRect(forGlyphRange: intersectionRange, in: textContainer)\n                    \n                    fragmentRect.origin.x += self.textContainerOrigin.x\n                    fragmentRect.origin.y += self.textContainerOrigin.y\n                    fragmentRect = self.convertToLayer(fragmentRect)\n                    fragmentRect = fragmentRect.integral\n\n                    let verticalInset = max(0, (fragmentRect.height - fontHeight) / 2)\n                    var tagRect = NSRect(\n                        x: fragmentRect.minX,\n                        y: fragmentRect.minY + verticalInset,\n                        width: fragmentRect.width - 3,\n                        height: fontHeight\n                    )\n\n                    let oneCharSize = (\"A\" as NSString).size(withAttributes: tagAttributes)\n                    tagRect.size.width += oneCharSize.width * 0.25\n                    tagRect = tagRect.integral\n\n                    NSGraphicsContext.saveGraphicsState()\n                    let path = NSBezierPath(roundedRect: tagRect, xRadius: 3, yRadius: 3)\n                    NSColor.tagColor.setFill()\n                    path.fill()\n\n                    let fragmentCharRange = layoutManager.characterRange(forGlyphRange: intersectionRange, actualGlyphRange: nil)\n                    let fragmentText = (tag as NSString).substring(with: NSRange(\n                        location: fragmentCharRange.location - range.location,\n                        length: fragmentCharRange.length\n                    ))\n\n                    var drawAttrs = tagAttributes\n                    drawAttrs[.font] = font\n                    drawAttrs[.foregroundColor] = NSColor.white\n                    drawAttrs.removeValue(forKey: .link)\n                    drawAttrs.removeValue(forKey: .baselineOffset)\n\n                    let baselineOrigin = NSPoint(x: tagRect.minX, y: tagRect.minY + descent - 3)\n\n                    (fragmentText as NSString).draw(at: baselineOrigin, withAttributes: drawAttrs)\n\n                    NSGraphicsContext.restoreGraphicsState()\n                }\n            }\n        }\n    }\n\n    public func initTextStorage() {\n        let processor = TextStorageProcessor()\n        processor.editor = self\n        \n        textStorageProcessor = processor\n        textStorage?.delegate = processor\n\n        guard let textStorage = self.textStorage,\n              let oldLayoutManager = self.layoutManager,\n              let textContainer = self.textContainer else { return }\n        \n        textStorage.removeLayoutManager(oldLayoutManager)\n\n        let customLayoutManager = LayoutManager()\n        customLayoutManager.addTextContainer(textContainer)\n        customLayoutManager.delegate = customLayoutManager\n        \n        customLayoutManager.processor = processor\n        \n        textStorage.addLayoutManager(customLayoutManager)\n    }\n    \n    public func configure() {\n        DispatchQueue.main.async {\n            self.updateTextContainerInset()\n        }\n            \n        attributesCachingQueue.qualityOfService = .background\n        textContainerInset.height = 10\n        isEditable = false\n\n        let isOpenedWindow = window?.contentViewController as? NoteViewController != nil\n        \n        layoutManager?.allowsNonContiguousLayout =\n            isOpenedWindow\n                ? false\n                : UserDefaultsManagement.nonContiguousLayout\n\n        layoutManager?.defaultAttachmentScaling = .scaleProportionallyDown\n        \n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        defaultParagraphStyle = paragraphStyle\n        typingAttributes[.paragraphStyle] = paragraphStyle\n        typingAttributes[.font] = UserDefaultsManagement.noteFont\n    }\n\n    public func invalidateLayout() {\n        if let length = self.textStorage?.length {\n            self.textStorage?.layoutManagers.first?.invalidateLayout(forCharacterRange: NSRange(location: 0, length: length), actualCharacterRange: nil)\n        }\n    }\n\n    func sharingServicePicker(_ sharingServicePicker: NSSharingServicePicker, sharingServicesForItems items: [Any], proposedSharingServices proposedServices: [NSSharingService]) -> [NSSharingService] {\n        return []\n    }\n    \n    // MARK: Overrides\n\n    override func drawInsertionPoint(in rect: NSRect, color: NSColor, turnedOn flag: Bool) {\n        var newRect = rect\n        newRect.size.width = caretWidth\n        \n        // Fixes last line height\n        \n        if let textStorage = self.textStorage,\n           let layoutManager = self.layoutManager as? LayoutManager {\n            let insertionPoint = self.selectedRange().location\n            \n            if insertionPoint == textStorage.length, insertionPoint > 0 {\n                let lastIndex = insertionPoint - 1\n                let attributes = textStorage.attributes(at: lastIndex, effectiveRange: nil)\n                \n                let isNewline: Bool = {\n                    let ns = textStorage.string as NSString\n                    return ns.character(at: lastIndex) == 0x0A // '\\n'\n                }()\n\n                let fontToUse: NSFont\n                if !isNewline, let font = attributes[.font] as? NSFont {\n                    fontToUse = font\n                } else {\n                    fontToUse = UserDefaultsManagement.noteFont\n                }\n                \n                newRect.size.height = layoutManager.lineHeight(for: fontToUse)\n            }\n        }\n        \n        let clr = NSColor(red: 0.47, green: 0.53, blue: 0.69, alpha: 1.0)\n        super.drawInsertionPoint(in: newRect, color: clr, turnedOn: flag)\n    }\n\n    override func updateInsertionPointStateAndRestartTimer(_ restartFlag: Bool) {\n        super.updateInsertionPointStateAndRestartTimer(true)\n    }\n    \n    override func setNeedsDisplay(_ invalidRect: NSRect) {\n        var newInvalidRect = NSRect(origin: invalidRect.origin, size: invalidRect.size)\n        newInvalidRect.size.width += self.caretWidth - 1\n        super.setNeedsDisplay(newInvalidRect)\n    }\n    \n    override func toggleContinuousSpellChecking(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.continuousSpellChecking = (menu.state == .off)\n        }\n        super.toggleContinuousSpellChecking(sender)\n    }\n    \n    override func toggleGrammarChecking(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.grammarChecking = (menu.state == .off)\n        }\n        super.toggleGrammarChecking(sender)\n    }\n    \n    override func toggleAutomaticSpellingCorrection(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.automaticSpellingCorrection = (menu.state == .off)\n        }\n        super.toggleAutomaticSpellingCorrection(sender)\n    }\n    \n    override func toggleSmartInsertDelete(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.smartInsertDelete = (menu.state == .off)\n        }\n        super.toggleSmartInsertDelete(sender)\n    }\n    \n    override func toggleAutomaticQuoteSubstitution(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.automaticQuoteSubstitution = (menu.state == .off)\n        }\n        super.toggleAutomaticQuoteSubstitution(sender)\n    }\n    \n    override func toggleAutomaticDataDetection(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.automaticDataDetection = (menu.state == .off)\n        }\n        super.toggleAutomaticDataDetection(sender)\n    }\n    \n    override func toggleAutomaticLinkDetection(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.automaticLinkDetection = (menu.state == .off)\n        }\n        super.toggleAutomaticLinkDetection(sender)\n    }\n    \n    override func toggleAutomaticTextReplacement(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.automaticTextReplacement = (menu.state == .off)\n        }\n        super.toggleAutomaticTextReplacement(sender)\n    }\n    \n    override func toggleAutomaticDashSubstitution(_ sender: Any?) {\n        if let menu = sender as? NSMenuItem {\n            UserDefaultsManagement.automaticDashSubstitution = (menu.state == .off)\n        }\n        super.toggleAutomaticDashSubstitution(sender)\n    }\n\n    private var dragDetected = false\n\n    override func mouseDown(with event: NSEvent) {\n        guard let note = self.note else { return }\n        guard note.container != .encryptedTextPack else {\n            editorViewController?.unLock(notes: [note])\n            editorViewController?.vcNonSelectedLabel?.isHidden = false\n            return\n        }\n\n        if editorViewController?.vcEditor?.isPreviewEnabled() == false {\n            self.isEditable = true\n        }\n\n        let range = selectedRange\n        if handleTodo(event) {\n            self.window?.makeFirstResponder(self)\n            setSelectedRange(range)\n            self.window?.makeFirstResponder(nil)\n            return\n        }\n        \n        dragDetected = false\n        super.mouseDown(with: event)\n        saveSelectedRange()\n\n        if !self.dragDetected {\n            self.handleClick(event)\n            self.dragDetected = false\n        }\n    }\n    \n    private func handleTodo(_ event: NSEvent) -> Bool {\n        guard let container = self.textContainer,\n              let manager = self.layoutManager\n        else { return false }\n\n        let point = self.convert(event.locationInWindow, from: nil)\n        let properPoint = NSPoint(x: point.x - textContainerInset.width, y: point.y)\n\n        let index = manager.characterIndex(for: properPoint, in: container, fractionOfDistanceBetweenInsertionPoints: nil)\n\n        let glyphRect = manager.boundingRect(forGlyphRange: NSRange(location: index, length: 1), in: container)\n\n        guard glyphRect.contains(properPoint) else { return false }\n        \n        if isTodo(index) {\n            guard let f = self.getTextFormatter() else { return false }\n            f.toggleTodo(index)\n\n            DispatchQueue.main.async {\n                NSCursor.pointingHand.set()\n            }\n\n            return true\n        }\n        \n        return false\n    }\n\n    private func handleClick(_ event: NSEvent) {\n        guard let container = self.textContainer,\n              let manager = self.layoutManager\n        else { return }\n\n        let point = self.convert(event.locationInWindow, from: nil)\n        let properPoint = NSPoint(x: point.x - textContainerInset.width, y: point.y)\n\n        let index = manager.characterIndex(for: properPoint, in: container, fractionOfDistanceBetweenInsertionPoints: nil)\n\n        let glyphRect = manager.boundingRect(forGlyphRange: NSRange(location: index, length: 1), in: container)\n\n        guard glyphRect.contains(properPoint) else { return }\n\n        if hasAttachment(at: index) {\n            if event.modifierFlags.contains(.command) {\n                openTitleEditor(at: index)\n            } else {\n                openFileViewer(at: index)\n            }\n\n            return\n        }\n    }\n\n    private func openTitleEditor(at: Int) {\n        guard let vc = editorViewController,\n              let window = vc.view.window,\n              var attachment = getAttachment(at: at) else { return }\n\n        vc.alert = NSAlert()\n        let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 290, height: 20))\n        field.placeholderString = \"All Hail the Crimson King\"\n        field.stringValue = attachment.title\n\n        vc.alert?.messageText = NSLocalizedString(\"Please enter image title:\", comment: \"Edit area\")\n        vc.alert?.accessoryView = field\n        vc.alert?.alertStyle = .informational\n        vc.alert?.addButton(withTitle: \"OK\")\n        vc.alert?.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n            if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                attachment.title = field.stringValue\n\n                var range = NSRange()\n                if self.textStorage?.attribute(.attachment, at: at, effectiveRange: &range) as? NSTextAttachment != nil {\n                    self.textStorage?.addAttribute(.attachmentTitle, value: attachment.title, range: range)\n\n                    let content = NSMutableAttributedString(attributedString: self.attributedString())\n                    _ = self.note?.save(content: content)\n                }\n            }\n            vc.alert = nil\n        }\n\n        DispatchQueue.main.async {\n            field.becomeFirstResponder()\n        }\n    }\n\n    private func openFileViewer(at: Int) {\n        guard let attachment = getAttachment(at: at) else { return }\n\n        let url = attachment.url\n\n        if !url.isImage {\n            NSWorkspace.shared.activateFileViewerSelecting([url])\n            return\n        }\n\n        NSWorkspace.shared.open(url)\n    }\n\n    override func mouseMoved(with event: NSEvent) {\n        if editorViewController?.vcNonSelectedLabel?.isHidden == false {\n            NSCursor.arrow.set()\n            return\n        }\n\n        let point = self.convert(event.locationInWindow, from: nil)\n        let properPoint = NSPoint(\n            x: point.x - textContainerInset.width,\n            y: point.y - textContainerInset.height\n        )\n\n        guard let container = self.textContainer,\n              let manager = self.layoutManager,\n              let textStorage = self.textStorage else { return }\n\n        let index = manager.characterIndex(for: properPoint, in: container, fractionOfDistanceBetweenInsertionPoints: nil)\n\n        guard index < textStorage.length else { return }\n\n        let glyphRect = manager.boundingRect(forGlyphRange: NSRange(location: index, length: 1), in: container)\n\n        if glyphRect.contains(properPoint), self.isTodo(index) || self.hasAttachment(at: index) {\n            NSCursor.pointingHand.set()\n            return\n        }\n\n        if glyphRect.contains(properPoint),\n           let link = textStorage.attribute(.link, at: index, effectiveRange: nil) {\n\n            if textStorage.attribute(.tag, at: index, effectiveRange: nil) != nil {\n                NSCursor.pointingHand.set()\n                return\n            }\n\n            if link as? URL != nil {\n                if UserDefaultsManagement.clickableLinks\n                    || event.modifierFlags.contains(.command)\n                    || event.modifierFlags.contains(.shift)\n                {\n                    NSCursor.pointingHand.set()\n                    return\n                }\n\n                NSCursor.iBeam.set()\n                return\n            }\n        }\n\n        if editorViewController?.vcEditor?.isPreviewEnabled() == true {\n            return\n        }\n\n        super.mouseMoved(with: event)\n    }\n\n    public func hasAttachment(at: Int) -> Bool {\n        guard let storage = textStorage,\n                  at >= 0,\n                  at < storage.length else { return false }\n        \n        guard textStorage?.attribute(.attachment, at: at, effectiveRange: nil) as? NSTextAttachment != nil else {\n            return false\n        }\n\n        return textStorage?.getMeta(at: at) != nil\n    }\n\n    public func getAttachment(at: Int) -> (url: URL, title: String, path: String)? {\n        if textStorage?.attribute(.attachment, at: at, effectiveRange: nil) as? NSTextAttachment != nil,\n           let meta = textStorage?.getMeta(at: at) {\n            return meta\n        }\n\n        return nil\n    }\n\n    public func isTodo(_ location: Int) -> Bool {\n        guard let storage = self.textStorage else { return false }\n        \n        let range = (storage.string as NSString).paragraphRange(for: NSRange(location: location, length: 0))\n        let string = storage.attributedSubstring(from: range).string as NSString\n\n        if storage.attribute(.todo, at: location, effectiveRange: nil) != nil {\n            return true\n        }\n\n        var length = string.range(of: \"- [ ] \").length\n        if length == 0 {\n            length = string.range(of: \"- [x] \").length\n        }\n        \n        if length > 0 {\n            let upper = range.location + length\n            if location >= range.location && location <= upper {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    override var writablePasteboardTypes: [NSPasteboard.PasteboardType] {\n        get {\n            return [\n                NSPasteboard.attributed,\n                NSPasteboard.PasteboardType.string,\n            ]\n        }\n    }\n\n    override var readablePasteboardTypes: [NSPasteboard.PasteboardType] {\n        get {\n            return super.readablePasteboardTypes + [NSPasteboard.attributed]\n        }\n    }\n\n    override func writeSelection(to pboard: NSPasteboard, type: NSPasteboard.PasteboardType) -> Bool {\n        guard let storage = textStorage else { return false }\n\n        dragDetected = true\n        \n        let range = selectedRange()\n        let attributedString = NSMutableAttributedString(attributedString: storage.attributedSubstring(from: range))\n\n        if type == .string {\n            let plainText = attributedString.unloadAttachments().string\n            pboard.setString(plainText, forType: .string)\n            return true\n        }\n\n        if type == NSPasteboard.attributed {\n            let attributedString = attributedString.unloadTasks()\n            attributedString.saveData()\n\n            if let data = try? NSKeyedArchiver.archivedData(\n                withRootObject: attributedString,\n                requiringSecureCoding: false\n            ) {\n                pboard.setData(data, forType: NSPasteboard.attributed)\n                return true\n            }\n        }\n\n        return false\n    }\n\n    // Copy empty string\n    override func copy(_ sender: Any?) {\n        let attrString = attributedSubstring(forProposedRange: self.selectedRange, actualRange: nil)\n\n        if self.selectedRange.length == 1,\n            let url = attrString?.attribute(.attachmentUrl, at: 0, effectiveRange: nil) as? URL\n        {\n            let pb = NSPasteboard.general\n            pb.clearContents()\n            pb.writeObjects([url as NSURL])\n            return\n        }\n\n        if selectedRanges.count > 1 {\n            var combined = String()\n            for range in selectedRanges {\n                if let range = range as? NSRange, let sub = attributedSubstring(forProposedRange: range, actualRange: nil) as? NSMutableAttributedString {\n\n                    combined.append(sub.unloadAttachments().string + \"\\n\")\n                }\n            }\n\n            let pasteboard = NSPasteboard.general\n            pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n            pasteboard.setString(combined.trim().removeLastNewLine(), forType: NSPasteboard.PasteboardType.string)\n            return\n        }\n\n        if self.selectedRange.length == 0, let paragraphRange = self.getParagraphRange(), let paragraph = attributedSubstring(forProposedRange: paragraphRange, actualRange: nil) {\n            let pasteboard = NSPasteboard.general\n            pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n            pasteboard.setString(paragraph.string.trim().removeLastNewLine(), forType: NSPasteboard.PasteboardType.string)\n            return\n        }\n        \n        if let menuItem = sender as? NSMenuItem,\n           menuItem.identifier?.rawValue == \"copy:\",\n           self.selectedRange.length > 0 {\n            \n            let attrString = attributedSubstring(forProposedRange: self.selectedRange, actualRange: nil)\n            \n            if let attrString = attrString,\n               let link = attrString.attribute(.link, at: 0, effectiveRange: nil) as? String {\n                \n                let pasteboard = NSPasteboard.general\n                pasteboard.declareTypes([.string], owner: nil)\n                pasteboard.setString(link, forType: .string)\n                return\n            }\n        }\n\n        super.copy(sender)\n    }\n\n    override func paste(_ sender: Any?) {\n        guard let note = self.note else { return }\n\n        // RTFD\n        if let rtfdData = NSPasteboard.general.data(forType: NSPasteboard.attributed),\n           let attributed = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(rtfdData) as? NSAttributedString {\n\n            let mutable = NSMutableAttributedString(attributedString: attributed)\n            mutable.loadTasks()\n\n            breakUndoCoalescing()\n            insertText(mutable, replacementRange: selectedRange())\n            breakUndoCoalescing()\n            \n            return\n        }\n\n        // Plain text\n        if let clipboard = NSPasteboard.general.string(forType: NSPasteboard.PasteboardType.string),\n            NSPasteboard.general.string(forType: NSPasteboard.PasteboardType.fileURL) == nil {\n\n            let attributed = NSMutableAttributedString(string: clipboard.trim())\n            attributed.loadTasks()\n\n            breakUndoCoalescing()\n            insertText(attributed, replacementRange: selectedRange())\n            breakUndoCoalescing()\n\n            return\n        }\n\n        if let url = NSURL(from: NSPasteboard.general) {\n            if url.isFileURL && saveFile(url: url as URL, in: note) {\n                return\n            }\n        }\n\n        // Images png or tiff\n        for type in [NSPasteboard.PasteboardType.png, .tiff] {\n            if let data = NSPasteboard.general.data(forType: type) {\n                guard let attributed = NSMutableAttributedString.build(data: data) else { continue }\n\n                breakUndoCoalescing()\n                insertText(attributed, replacementRange: selectedRange())\n                breakUndoCoalescing()\n                \n                return\n            }\n        }\n\n        super.paste(sender)\n    }\n    \n    override func pasteAsPlainText(_ sender: Any?) {\n        let currentRange = selectedRange()\n        var plainText: String?\n\n        if let rtfd = NSPasteboard.general.data(forType: NSPasteboard.attributed),\n           let attributedString = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(rtfd) as? NSAttributedString {\n\n            let mutable = NSMutableAttributedString(attributedString: attributedString)\n            plainText = mutable.unloadAttachments().string\n        } else if let clipboard = NSPasteboard.general.string(forType: NSPasteboard.PasteboardType.string), NSPasteboard.general.string(forType: NSPasteboard.PasteboardType.fileURL) == nil {\n            plainText = clipboard\n        } else if let url = NSPasteboard.general.string(forType: NSPasteboard.PasteboardType.fileURL) {\n            plainText = url\n        }\n\n        if let plainText = plainText {\n            self.breakUndoCoalescing()\n            self.insertText(plainText, replacementRange: currentRange)\n            self.breakUndoCoalescing()\n\n            return\n        }\n\n        return paste(sender)\n    }\n\n    override func cut(_ sender: Any?) {\n        guard nil != self.note else {\n            super.cut(sender)\n            return\n        }\n\n        if self.selectedRange.length == 0, let paragraphRange = self.getParagraphRange(), let paragraph = attributedSubstring(forProposedRange: paragraphRange, actualRange: nil) {\n            let pasteboard = NSPasteboard.general\n            pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n            pasteboard.setString(paragraph.string.trim().removeLastNewLine(), forType: NSPasteboard.PasteboardType.string)\n\n            insertText(String(), replacementRange: paragraphRange)\n            return\n        }\n\n        super.cut(sender)\n    }\n\n    func getSelectedNote() -> Note? {\n        return ViewController.shared()?.notesTableView?.getSelectedNote()\n    }\n    \n    public func isEditable(note: Note) -> Bool {\n        if note.container == .encryptedTextPack { return false }\n\n        guard let editor = editorViewController?.vcEditor else { return false }\n\n        if editor.isPreviewEnabled() {\n            return false\n        }\n        \n        return true\n    }\n\n    public func getVC() -> EditorViewController {\n        return self.window?.contentViewController as! EditorViewController\n    }\n    \n    public func getEVC() -> EditorViewController? {\n        return self.window?.contentViewController as? EditorViewController\n    }\n\n    public func save() {\n        guard let note = self.note else { return }\n\n        note.save(attributed: self.attributedString())\n    }\n\n    func fill(note: Note, highlight: Bool = false, force: Bool = false) {\n        isScrollPositionSaverLocked = true\n        \n        if !note.isLoaded {\n            note.load()\n        }\n        \n        viewDelegate?.updateCounters(note: note)\n\n        textStorage?.setAttributedString(NSAttributedString(string: \"\"))\n        \n        // Hack for invalidate prev layout data (order is important, only before fill)\n        if let length = textStorage?.length {\n            textStorage?.layoutManagers.first?.invalidateDisplay(forGlyphRange: NSRange(location: 0, length: length))\n\n            invalidateLayout()\n        }\n\n        undoManager?.removeAllActions(withTarget: self)\n        registerHandoff(note: note)\n\n        // resets timer if editor refilled \n        viewDelegate?.breakUndoTimer.invalidate()\n\n        unregisterDraggedTypes()\n        registerForDraggedTypes([\n            NSPasteboard.note,\n            NSPasteboard.PasteboardType.fileURL,\n            NSPasteboard.PasteboardType.URL,\n            NSPasteboard.PasteboardType.string\n        ])\n\n        if let label = editorViewController?.vcNonSelectedLabel {\n            label.isHidden = true\n\n            if note.container == .encryptedTextPack {\n                label.stringValue = NSLocalizedString(\"Locked\", comment: \"\")\n                label.isHidden = false\n            } else {\n                label.stringValue = NSLocalizedString(\"None Selected\", comment: \"\")\n                label.isHidden = true\n            }\n        }\n    \n        self.note = note\n        UserDefaultsManagement.lastSelectedURL = note.url\n\n        editorViewController?.updateTitle(note: note)\n\n        isEditable = isEditable(note: note)\n        \n        editorViewController?.editorUndoManager = note.undoManager\n\n        typingAttributes.removeAll()\n        typingAttributes[.font] = UserDefaultsManagement.noteFont\n\n        if isPreviewEnabled() {\n            loadMarkdownWebView(note: note, force: force)\n            return\n        }\n\n        markdownView?.removeFromSuperview()\n        markdownView = nil\n\n        guard let storage = textStorage else { return }\n\n        if note.isMarkdown(), let content = note.content.mutableCopy() as? NSMutableAttributedString {\n            textStorageProcessor?.detector = CodeBlockDetector()\n\n            storage.setAttributedString(content)\n        } else {\n            storage.setAttributedString(note.content)\n        }\n        \n        if highlight {\n            textStorage?.highlightKeyword(search: getSearchText())\n        }\n\n        viewDelegate?.restoreScrollPosition()\n    }\n\n    private func loadMarkdownWebView(note: Note, force: Bool) {\n        self.note = nil\n        textStorage?.setAttributedString(NSAttributedString())\n        self.note = note\n\n        guard let scrollView = editorViewController?.vcEditorScrollView else { return }\n        \n        if markdownView == nil {\n            let frame = scrollView.bounds\n            \n            let containerView = MPreviewContainerView(frame: frame, note: note, closure: { [weak self] in\n                if let point = self?.note?.contentOffsetWeb {\n                    self?.markdownView?.restoreScrollPosition(point)\n                }\n            })\n            markdownView = containerView\n            \n            containerView.webView.setEditorVC(evc: editorViewController)\n            if self.note == note {\n                scrollView.addSubview(containerView)\n            }\n        } else {\n            /// Resize markdownView\n            let frame = scrollView.bounds\n            markdownView?.frame = frame\n\n            /// Load note if needed\n            markdownView?.webView.load(note: note, force: force)\n        }\n    }\n\n    public func lockEncryptedView() {\n        textStorage?.setAttributedString(NSAttributedString())\n        markdownView?.removeFromSuperview()\n        markdownView = nil\n\n        isEditable = false\n        \n        if let label = editorViewController?.vcNonSelectedLabel {\n            label.stringValue = NSLocalizedString(\"Locked\", comment: \"\")\n            label.isHidden = false\n        }\n    }\n    \n    public func clear() {\n        textStorage?.setAttributedString(NSAttributedString())\n        markdownView?.removeFromSuperview()\n        markdownView = nil\n\n        isEditable = false\n        \n        window?.title = AppDelegate.appTitle\n        \n        if let label = editorViewController?.vcNonSelectedLabel {\n            label.stringValue = NSLocalizedString(\"None Selected\", comment: \"\")\n            label.isHidden = false\n            editorViewController?.dropTitle()\n        }\n        \n        self.note = nil\n        \n        if let vc = viewDelegate {\n            vc.updateCounters()\n        }\n    }\n\n    @IBAction func boldMenu(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.bold()\n    }\n\n    @IBAction func italicMenu(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.italic()\n    }\n\n    @IBAction func linkMenu(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.link()\n    }\n\n    @IBAction func underlineMenu(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.underline()\n    }\n\n    @IBAction func strikeMenu(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.strike()\n    }\n\n    @IBAction func headerMenu(_ sender: NSMenuItem) {\n        guard let note = self.note, isEditable else { return }\n\n        guard let id = sender.identifier?.rawValue else { return }\n\n        let code =\n            Int(id.replacingOccurrences(of: \"format.h\", with: \"\"))\n\n        var string = String()\n        for index in [1, 2, 3, 4, 5, 6] {\n            string = string + \"#\"\n            if code == index {\n                break\n            }\n        }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.header(string)\n    }\n    \n    @IBAction func moveSelectedLinesDown(_ sender: NSMenuItem) {\n        self.moveSelectedLinesDown()\n    }\n    \n    @IBAction func moveSelectedLinesUp(_ sender: NSMenuItem) {\n        self.moveSelectedLinesUp()\n    }\n    \n    @IBAction func clearCompletedTodos(_ sender: NSMenuItem) {\n        self.clearCompletedTodos()\n    }\n\n    func getParagraphRange() -> NSRange? {\n        guard let storage = textStorage else { return nil }\n        \n        let range = selectedRange()\n        return storage.mutableString.paragraphRange(for: range)\n    }\n    \n    // Clickable links flag changed with cmd / shift\n    override func flagsChanged(with event: NSEvent) {\n        super.flagsChanged(with: event)\n\n        if let mouseEvent = NSApp.currentEvent {\n            updateCursorForMouse(at: mouseEvent)\n        }\n    }\n\n    private func updateCursorForMouse(at event: NSEvent) {\n        guard let container = self.textContainer,\n              let manager = self.layoutManager,\n              let textStorage = self.textStorage else { return }\n\n        let pointInView = self.convert(event.locationInWindow, from: nil)\n        \n        let pointInContainer = NSPoint(\n            x: pointInView.x - textContainerInset.width,\n            y: (self.bounds.size.height - pointInView.y) - textContainerInset.height\n        )\n\n        let index = manager.characterIndex(\n            for: pointInContainer,\n            in: container,\n            fractionOfDistanceBetweenInsertionPoints: nil\n        )\n\n        guard index < textStorage.length else {\n            NSCursor.iBeam.set()\n            return\n        }\n\n        if let link = textStorage.attribute(.link, at: index, effectiveRange: nil) {\n            if textStorage.attribute(.tag, at: index, effectiveRange: nil) != nil {\n                NSCursor.pointingHand.set()\n            } else if link as? URL != nil {\n                if UserDefaultsManagement.clickableLinks\n                    || NSEvent.modifierFlags.contains(.command)\n                    || NSEvent.modifierFlags.contains(.shift) {\n                    NSCursor.pointingHand.set()\n                } else {\n                    NSCursor.iBeam.set()\n                }\n            }\n        } else {\n            NSCursor.iBeam.set()\n        }\n    }\n    \n    override func keyDown(with event: NSEvent) {\n        defer {\n            saveSelectedRange()\n        }\n        \n        // fixes backtick marked text\n        if let characters = event.characters, characters == \"`\" {\n            super.insertText(\"`\", replacementRange: selectedRange())\n            return\n        }\n\n        guard !(\n            event.modifierFlags.contains(.shift) &&\n            [\n                kVK_UpArrow,\n                kVK_DownArrow,\n                kVK_LeftArrow,\n                kVK_RightArrow\n            ].contains(Int(event.keyCode))\n        ) else {\n            super.keyDown(with: event)\n            return\n        }\n        \n        guard let note = self.note else { return }\n        \n        // Handle autoclose brackets\n        if UserDefaultsManagement.autocloseBrackets,\n           handleAutocloseBrackets(for: event) {\n            return\n        }\n\n        // hasMarkedText added for Japanese hack https://yllan.org/blog/archives/231\n        if event.keyCode == kVK_Tab && !hasMarkedText(){\n            breakUndoCoalescing()\n            \n            let formatter = TextFormatter(textView: self, note: note)\n            if formatter.isListParagraph() {\n                if NSEvent.modifierFlags.contains(.shift) {\n                    formatter.unTab()\n                } else {\n                    formatter.tab()\n                }\n                \n                breakUndoCoalescing()\n                return\n            }\n            \n            if UserDefaultsManagement.indentUsing == 0x01 {\n                let tab = TextFormatter.getAttributedCode(string: \"  \")\n                insertText(tab, replacementRange: selectedRange())\n                breakUndoCoalescing()\n                return\n            }\n            \n            if UserDefaultsManagement.indentUsing == 0x02 {\n                let tab = TextFormatter.getAttributedCode(string: \"    \")\n                insertText(tab, replacementRange: selectedRange())\n                breakUndoCoalescing()\n                return\n            }\n            super.keyDown(with: event)\n            return\n        }\n\n        if event.keyCode == kVK_Return && !hasMarkedText() && isEditable {\n            breakUndoCoalescing()\n            let formatter = TextFormatter(textView: self, note: note)\n            formatter.newLine()\n            breakUndoCoalescing()\n            return\n        }\n\n        if event.characters?.unicodeScalars.first == \"o\" && event.modifierFlags.contains(.command) {\n            guard let storage = textStorage else { return }\n\n            var location = selectedRange().location\n            if location == storage.length && location > 0 {\n                location = location - 1\n            }\n\n            if storage.length > location, let link = textStorage?.attribute(.link, at: location, effectiveRange: nil) as? String {\n                if link.isValidEmail(), let mail = URL(string: \"mailto:\\(link)\") {\n                    NSWorkspace.shared.open(mail)\n                } else if let url = URL(string: link) {\n                    _ = try? NSWorkspace.shared.open(url, options: .default, configuration: [:])\n                }\n            }\n            return\n        }\n        \n        super.keyDown(with: event)\n    }\n\n    // MARK: - Autoclose Brackets\n\n    private func handleAutocloseBrackets(for event: NSEvent) -> Bool {\n        let brackets: [String: String] = [\n            \"(\" : \")\",\n            \"[\" : \"]\",\n            \"{\" : \"}\",\n            \"\\\"\" : \"\\\"\"\n        ]\n        \n        guard let character = event.characters else {\n            return false\n        }\n        \n        // Check if user is typing a closing bracket\n        let closingBrackets = Array(brackets.values)\n        if closingBrackets.contains(character) {\n            // Check if the next character is the same closing bracket\n            let currentRange = selectedRange()\n            if currentRange.length == 0,\n               let storage = textStorage,\n               currentRange.location < storage.length {\n                let nextCharRange = NSRange(location: currentRange.location, length: 1)\n                let nextCharString = storage.attributedSubstring(from: nextCharRange).string\n                \n                if nextCharString == character {\n                    // Skip the closing bracket and move cursor forward\n                    setSelectedRange(NSMakeRange(currentRange.location + 1, 0))\n                    return true\n                }\n            }\n        }\n        \n        // Handle opening brackets\n        guard let closingBracket = brackets[character] else {\n            return false\n        }\n        \n        if selectedRange().length > 0 {\n            // Wrap selection with brackets\n            let before = NSMakeRange(selectedRange().lowerBound, 0)\n            self.insertText(character, replacementRange: before)\n            let after = NSMakeRange(selectedRange().upperBound, 0)\n            self.insertText(closingBracket, replacementRange: after)\n        } else {\n            // Insert bracket pair\n            super.keyDown(with: event)\n            self.insertText(closingBracket, replacementRange: selectedRange())\n            self.moveBackward(self)\n        }\n        \n        return true\n    }\n    \n    override func shouldChangeText(in range: NSRange, replacementString: String?) -> Bool {\n        guard let note = self.note else {\n            return super.shouldChangeText(in: range, replacementString: replacementString)\n        }\n\n        note.resetAttributesCache()\n                \n        scheduleTagScan(for: note)\n        deleteUnusedImages(checkRange: range)\n        resetTypingAttributes()\n\n        return super.shouldChangeText(in: range, replacementString: replacementString)\n    }\n    \n    // MARK: Autocomplete overrides\n    \n    var suppressCompletion = false\n    \n    public var forceSystemAutocomplete = false\n    private var isSystemCompletionSession = false\n    \n    override func didChangeText() {\n        super.didChangeText()\n        \n        if suppressCompletion {\n            suppressCompletion = false\n            return\n        }\n        \n        if detectCompletionContext() != .none {\n            complete(nil)\n        }\n    }\n    \n    override func completions(forPartialWordRange charRange: NSRange,\n                              indexOfSelectedItem index: UnsafeMutablePointer<Int>) -> [String]? {\n\n        if forceSystemAutocomplete {\n            isSystemCompletionSession = true\n            forceSystemAutocomplete = false\n            return super.completions(forPartialWordRange: charRange, indexOfSelectedItem: index)\n        }\n\n        return handleCompletions(index: index)\n    }\n\n    override func insertCompletion(_ word: String,\n                                   forPartialWordRange charRange: NSRange,\n                                   movement: Int,\n                                   isFinal flag: Bool) {\n\n        if isSystemCompletionSession {\n            super.insertCompletion(word, forPartialWordRange: charRange, movement: movement, isFinal: flag)\n\n            if flag {\n                isSystemCompletionSession = false\n            }\n            return\n        }\n\n        handleInsertCompletion(word: word, movement: movement, isFinal: flag)\n    }\n\n    override var rangeForUserCompletion: NSRange {\n        if isSystemCompletionSession {\n            return super.rangeForUserCompletion\n        }\n\n        return calculateCompletionRange()\n    }\n    \n    @objc public func scanTagsAndAutoRename() {\n        guard let vc = ViewController.shared() else { return }\n        let notes = vc.tagsScannerQueue\n\n        attributesCachingQueue.addOperation {\n            for note in notes {\n                note.cache()\n            }\n        }\n        \n        for note in notes {\n            let result = note.scanContentTags()\n            guard let outline = ViewController.shared()?.sidebarOutlineView else { return }\n\n            let added = result.0\n            let removed = result.1\n\n            if removed.count > 0 {\n                outline.removeTags(removed)\n            }\n\n            if added.count > 0 {\n                outline.addTags(added)\n            }\n\n            if let title = note.getAutoRenameTitle() {\n                note.rename(to: title)\n\n                if let editorViewController = getEVC() {\n                    editorViewController.vcTitleLabel?.updateNotesTableView()\n                    editorViewController.updateTitle(note: note)\n                }\n            }\n\n            ViewController.shared()?.tagsScannerQueue.removeAll(where: { $0 === note })\n        }\n    }\n\n    func saveSelectedRange() {\n        guard let note = self.note else { return }\n        note.setSelectedRange(range: selectedRange)\n    }\n    \n    func loadSelectedRange() {\n        guard let storage = textStorage else { return }\n\n        if let range = self.note?.getSelectedRange(), range.upperBound <= storage.length {\n            setSelectedRange(range)\n            scrollToCursor()\n        }\n    }\n\n    func setEditorTextColor(_ color: NSColor) {\n        if let note = self.note, !note.isMarkdown() {\n            textColor = color\n        }\n    }\n    \n    override func awakeFromNib() {\n        super.awakeFromNib()\n        \n        imagesLoaderQueue.maxConcurrentOperationCount = 3\n        imagesLoaderQueue.qualityOfService = .userInteractive\n    }\n\n    override var textContainerOrigin: NSPoint {\n        let origin = super.textContainerOrigin\n        return NSPoint(x: origin.x, y: origin.y - 7)\n    }\n\n    override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {\n        guard let note = self.note, let storage = textStorage else { return false }\n        \n        let pasteboard = sender.draggingPasteboard\n        let dropPoint = convert(sender.draggingLocation, from: nil)\n        let caretLocation = characterIndexForInsertion(at: dropPoint)\n        let replacementRange = NSRange(location: caretLocation, length: 0)\n\n        if handleAttributedText(pasteboard, note: note, storage: storage, replacementRange: replacementRange) { return true }\n        if handleNoteReference(pasteboard, note: note, replacementRange: replacementRange) { return true }\n        if handleURLs(pasteboard, note: note, replacementRange: replacementRange) { return true }\n\n        return super.performDragOperation(sender)\n    }\n\n    func fetchDataFromURL(url: URL, completion: @escaping (Data?, Error?) -> Void) {\n        let session = URLSession.shared\n\n        let task = session.dataTask(with: url) { (data, response, error) in\n            if let error = error {\n                completion(nil, error)\n                return\n            }\n\n            completion(data, nil)\n        }\n\n        task.resume()\n    }\n\n    \n    func getHTMLTitle(from data: Data) -> String? {\n        guard let htmlString = String(data: data, encoding: .utf8) else {\n            return nil\n        }\n        \n        return extractTitle(from: htmlString)\n    }\n\n    func getSearchText() -> String {\n        guard let search = ViewController.shared()?.search else { return String() }\n\n        if let editor = search.currentEditor(), editor.selectedRange.length > 0 {\n            return (search.stringValue as NSString).substring(with: NSRange(0..<editor.selectedRange.location))\n        }\n        \n        return search.stringValue\n    }\n\n    public func scrollToCursor() {\n        let cursorRange = NSMakeRange(self.selectedRange().location, 0)\n\n        // DispatchQueue fixes rare bug when textStorage invalidation not working (blank page instead text)\n\n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n            self.scrollRangeToVisible(cursorRange)\n        }\n    }\n    \n    public func hasFocus() -> Bool {\n        if let fr = self.window?.firstResponder, fr.isKind(of: EditTextView.self) {\n            return true\n        }\n        \n        return false\n    }\n\n    @IBAction func shiftLeft(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n        let f = TextFormatter(textView: self, note: note)\n        f.unTab()\n    }\n    \n    @IBAction func shiftRight(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n        let f = TextFormatter(textView: self, note: note)\n        f.tab()\n    }\n\n    @IBAction func todo(_ sender: Any) {\n        guard let f = self.getTextFormatter(), isEditable else { return }\n        \n        f.todo()\n    }\n\n    @IBAction func wikiLinks(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.wikiLink()\n    }\n\n    @IBAction func pressBold(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.bold()\n    }\n\n    @IBAction func pressItalic(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.italic()\n    }\n    \n    @IBAction func insertFileOrImage(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let panel = NSOpenPanel()\n        panel.allowsMultipleSelection = true\n        panel.canChooseDirectories = false\n        panel.canChooseFiles = true\n        panel.canCreateDirectories = true\n        panel.begin { (result) -> Void in\n            if result == NSApplication.ModalResponse.OK {\n                let urls = panel.urls\n\n                for url in urls {\n                    if self.saveFile(url: url, in: note) {\n                        if urls.count > 1 {\n                            self.insertNewline(nil)\n                        }\n                    }\n                }\n\n                if let vc = ViewController.shared() {\n                    vc.notesTableView.reloadRow(note: note)\n                }\n            }\n        }\n    }\n\n    @IBAction func insertCodeBlock(_ sender: NSButton) {\n        guard isEditable else { return }\n\n        let currentRange = selectedRange()\n\n        if currentRange.length > 0 {\n            let mutable = NSMutableAttributedString(string: \"```\\n\")\n            if let substring = attributedSubstring(forProposedRange: currentRange, actualRange: nil) {\n                mutable.append(substring)\n\n                if substring.string.last != \"\\n\" {\n                    mutable.append(NSAttributedString(string: \"\\n\"))\n                }\n            }\n\n            mutable.append(NSAttributedString(string: \"```\\n\"))\n\n            insertText(mutable, replacementRange: currentRange)\n            setSelectedRange(NSRange(location: currentRange.location + 3, length: 0))\n            \n            return\n        }\n        \n        insertText(\"```\\n\\n```\\n\", replacementRange: currentRange)\n        setSelectedRange(NSRange(location: currentRange.location + 3, length: 0))\n    }\n\n    @IBAction func insertCodeSpan(_ sender: NSMenuItem) {\n        guard isEditable else { return }\n\n        let currentRange = selectedRange()\n\n        if currentRange.length > 0 {\n            let mutable = NSMutableAttributedString(string: \"`\")\n            if let substring = attributedSubstring(forProposedRange: currentRange, actualRange: nil) {\n                mutable.append(substring)\n            }\n\n            mutable.append(NSAttributedString(string: \"`\"))\n\n            insertText(mutable, replacementRange: currentRange)\n            return\n        }\n\n        insertText(\"``\", replacementRange: currentRange)\n        setSelectedRange(NSRange(location: currentRange.location + 1, length: 0))\n    }\n\n    @IBAction func insertList(_ sender: NSMenuItem) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.list()\n    }\n\n    @IBAction func insertOrderedList(_ sender: NSMenuItem) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.orderedList()\n    }\n\n    @IBAction func insertQuote(_ sender: NSMenuItem) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.quote()\n    }\n\n    @IBAction func insertLink(_ sender: Any) {\n        guard let note = self.note, isEditable else { return }\n\n        let formatter = TextFormatter(textView: self, note: note)\n        formatter.link()\n    }\n    \n    private func getTextFormatter() -> TextFormatter? {\n        guard let note = self.note, isEditable else { return nil }\n        \n        return TextFormatter(textView: self, note: note)\n    }\n    \n    override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {\n        return true\n    }\n\n    override func draggingUpdated(_ sender: NSDraggingInfo) -> NSDragOperation {\n        if sender.draggingPasteboard.data(forType: NSPasteboard.note) != nil {\n            let dropPoint = convert(sender.draggingLocation, from: nil)\n            let caretLocation = characterIndexForInsertion(at: dropPoint)\n            setSelectedRange(NSRange(location: caretLocation, length: 0))\n            return .copy\n        }\n\n        return super.draggingUpdated(sender)\n    }\n    \n    override func clicked(onLink link: Any, at charIndex: Int) {\n        if handleEmailLink(link) { return }\n        \n        if handleAnchorLink(link) { return }\n\n        if !isAttachmentAtPosition(charIndex) {\n            if handleRegularLink(link, at: charIndex) { return }\n        }\n    }\n\n    override func viewDidChangeEffectiveAppearance() {\n        UserDataService.instance.isDark = effectiveAppearance.isDark\n        storage.resetCacheAttributes()\n\n        // clear preview cache\n        MPreviewView.template = nil\n        let webkitPreview = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"wkPreview\")\n        try? FileManager.default.removeItem(at: webkitPreview)\n\n        NotesTextProcessor.hl = nil\n\n        guard let note = self.note else { return }\n        NotesTextProcessor.highlight(attributedString: note.content)\n\n        let funcName = effectiveAppearance.isDark ? \"switchToDarkMode\" : \"switchToLightMode\"\n        let switchScript = \"if (typeof(\\(funcName)) == 'function') { \\(funcName)(); }\"\n\n        downView?.evaluateJavaScript(switchScript)\n\n        viewDelegate?.refillEditArea(force: true)\n    }\n\n    private func saveFile(url: URL, in note: Note) -> Bool {\n        if let data = try? Data(contentsOf: url) {\n            let preferredName = url.lastPathComponent\n\n            guard let attributed = NSMutableAttributedString.build(data: data, preferredName: preferredName) else { return false }\n\n            breakUndoCoalescing()\n            insertText(attributed, replacementRange: selectedRange())\n            breakUndoCoalescing()\n\n            return true\n        }\n\n        return false\n    }\n\n    public func updateTextContainerInset() {\n        textContainerInset.width = getInsetWidth()\n    }\n\n    public func getInsetWidth() -> CGFloat {\n        let lineWidth = UserDefaultsManagement.lineWidth\n        let margin = UserDefaultsManagement.marginSize\n        let width = frame.width\n\n        if lineWidth == 1000 {\n            return CGFloat(margin)\n        }\n\n        guard Float(width) - margin * 2 > lineWidth else {\n            return CGFloat(margin)\n        }\n\n        return CGFloat((Float(width) - lineWidth) / 2)\n    }\n\n    private func deleteUnusedImages(checkRange: NSRange) {\n        guard let storage = textStorage, self.note != nil else { return }\n\n        storage.enumerateAttribute(.attachment, in: checkRange) { (value, range, _) in\n            guard let meta = storage.getMeta(at: range.location) else { return }\n\n            do {\n                if let data = try? Data(contentsOf: meta.url) {\n                    storage.addAttribute(.attachmentSave, value: data, range: range)\n\n                    try FileManager.default.removeItem(at: meta.url)\n                }\n            } catch {\n                print(error)\n            }\n        }\n    }\n\n    @available(OSX 10.12.2, *)\n    override func makeTouchBar() -> NSTouchBar? {\n        let touchBar = NSTouchBar()\n        touchBar.delegate = self\n        touchBar.defaultItemIdentifiers = [\n            NSTouchBarItem.Identifier(\"Todo\"),\n            NSTouchBarItem.Identifier(\"Bold\"),\n            NSTouchBarItem.Identifier(\"Italic\"),\n            .fixedSpaceSmall,\n            NSTouchBarItem.Identifier(\"Link\"),\n            NSTouchBarItem.Identifier(\"Image or file\"),\n            NSTouchBarItem.Identifier(\"CodeBlock\"),\n            .fixedSpaceSmall,\n            NSTouchBarItem.Identifier(\"Indent\"),\n            NSTouchBarItem.Identifier(\"UnIndent\")\n        ]\n        return touchBar\n    }\n\n    @available(OSX 10.12.2, *)\n    override func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? {\n        switch identifier {\n        case NSTouchBarItem.Identifier(\"Todo\"):\n            if let im = NSImage(named: \"todo\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(todo(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n        case NSTouchBarItem.Identifier(\"Bold\"):\n            if let im = NSImage(named: \"bold\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(pressBold(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n        case NSTouchBarItem.Identifier(\"Italic\"):\n            if let im = NSImage(named: \"italic\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(pressItalic(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n        case NSTouchBarItem.Identifier(\"Image or file\"):\n            if let im = NSImage(named: \"image\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(insertFileOrImage(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n\n        case NSTouchBarItem.Identifier(\"Indent\"):\n            if let im = NSImage(named: \"indent\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(shiftRight(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n\n        case NSTouchBarItem.Identifier(\"UnIndent\"):\n            if let im = NSImage(named: \"unindent\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(shiftLeft(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n        case NSTouchBarItem.Identifier(\"CodeBlock\"):\n            if let im = NSImage(named: \"codeblock\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(insertCodeBlock(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n        case NSTouchBarItem.Identifier(\"Link\"):\n            if let im = NSImage(named: \"tb_link\"), im.isValid, im.size.height > 0 {\n                let image = im.tint(color: NSColor.white)\n                image.size = NSSize(width: 20, height: 20)\n                let button = NSButton(image: image, target: self, action: #selector(insertLink(_:)))\n                button.bezelColor = NSColor(red:0.21, green:0.21, blue:0.21, alpha:1.0)\n\n                let customViewItem = NSCustomTouchBarItem(identifier: identifier)\n                customViewItem.view = button\n                return customViewItem\n            }\n        default: break\n        }\n\n        return super.touchBar(touchBar, makeItemForIdentifier: identifier)\n    }\n\n    override func menu(for event: NSEvent) -> NSMenu? {\n        let menu = super.menu(for: event)\n\n        let editTitle = NSLocalizedString(\"Edit Link…\", comment: \"\")\n        if let editLink = menu?.item(withTitle: editTitle) {\n            menu?.removeItem(editLink)\n        }\n\n        let removeTitle = NSLocalizedString(\"Remove Link\", comment: \"\")\n        if let removeLink = menu?.item(withTitle: removeTitle) {\n            menu?.removeItem(removeLink)\n        }\n\n        return menu\n    }\n\n    /**\n     Handoff methods\n     */\n    override func updateUserActivityState(_ userActivity: NSUserActivity) {\n        guard let note = self.note else { return }\n\n        let position =\n            window?.firstResponder == self ? selectedRange().location : -1\n        let state = editorViewController?.vcEditor?.preview == true ? \"preview\" : \"editor\"\n        let data =\n            [\n                \"note-file-name\": note.name,\n                \"position\": String(position),\n                \"state\": state\n            ]\n\n        userActivity.addUserInfoEntries(from: data)\n    }\n\n    override func resignFirstResponder() -> Bool {\n        userActivity?.needsSave = true\n\n        return super.resignFirstResponder()\n    }\n\n    public func registerHandoff(note: Note) {\n        self.userActivity?.invalidate()\n\n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n            let updateDict:  [String: String] = [\"note-file-name\": note.name]\n            let activity = NSUserActivity(activityType: \"es.fsnot.handoff-open-note\")\n            activity.isEligibleForHandoff = true\n            activity.userInfo = updateDict\n            activity.title = NSLocalizedString(\"Open note\", comment: \"Document opened\")\n            self.userActivity = activity\n            self.userActivity?.becomeCurrent()\n        }\n    }\n    \n    public func changePreviewState(_ state: Bool) {\n        preview = state\n    }\n    \n    public func togglePreviewState() {\n        self.preview = !self.preview\n        \n        note?.previewState = self.preview\n    }\n    \n    public func isPreviewEnabled() -> Bool {\n        return preview\n    }\n    \n    public func disablePreviewEditorAndNote() {\n        preview = false\n        \n        note?.previewState = false\n    }\n    \n    public func scheduleTagScan(for note: Note) {\n        if let vc = ViewController.shared(),\n           !vc.tagsScannerQueue.contains(note) {\n            vc.tagsScannerQueue.append(note)\n        }\n\n        tagsTimer?.invalidate()\n        tagsTimer = Timer.scheduledTimer(\n            timeInterval: 2.5,\n            target: self,\n            selector: #selector(scanTagsAndAutoRename),\n            userInfo: nil,\n            repeats: false\n        )\n    }\n\n    public func resetTypingAttributes() {\n        typingAttributes.removeValue(forKey: .attachmentUrl)\n        typingAttributes.removeValue(forKey: .attachmentTitle)\n        typingAttributes.removeValue(forKey: .attachmentPath)\n        typingAttributes.removeValue(forKey: .attachmentSave)\n        typingAttributes.removeValue(forKey: .todo)\n        typingAttributes.removeValue(forKey: .tag)\n\n        if let style = typingAttributes[.paragraphStyle] as? NSMutableParagraphStyle {\n            style.alignment = .left\n        }\n        \n        typingAttributes[.font] = UserDefaultsManagement.noteFont\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditorScrollView.swift",
    "content": "//\n//  EditorScrollView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass EditorScrollView: NSScrollView {\n    private var initialHeight: CGFloat?\n\n    override var isFindBarVisible: Bool {\n        set {\n            // macOS 10.14 margin hack\n            if #available(OSX 10.14, *) {\n                if let clip = self.subviews.first as? NSClipView {\n                    clip.contentInsets.top = newValue ? 60 : 10\n\n                    if newValue, let documentView = self.documentView {\n                        documentView.scroll(NSPoint(x: 0, y: -60))\n                    }\n                }\n            }\n\n            super.isFindBarVisible = newValue\n        }\n        get {\n            return super.isFindBarVisible\n        }\n    }\n//\n//\n//    override func findBarViewDidChangeHeight() {\n//       if #available(OSX 10.14, *) {\n//            guard let currentHeight = findBarView?.frame.height else { return }\n//\n//            guard let initialHeight = self.initialHeight else {\n//                self.initialHeight = currentHeight\n//                return\n//            }\n//\n//            if let clip = self.subviews.first as? NSClipView {\n//                let margin = currentHeight > initialHeight ? 65 : 40\n//                clip.contentInsets.top = CGFloat(margin)\n//\n//                if let documentView = self.documentView {\n//                    documentView.scroll(NSPoint(x: 0, y: -margin))\n//                }\n//            }\n//        } else {\n//            super.findBarViewDidChangeHeight()\n//        }\n//    }\n}\n"
  },
  {
    "path": "FSNotes/View/EditorSplitView.swift",
    "content": "//\n//  EditorSplitView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/20/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass EditorSplitView: NSSplitView, NSSplitViewDelegate {\n    public var shouldHideDivider = false\n\n    override func draw(_ dirtyRect: NSRect) {\n        self.delegate = self\n        super.draw(dirtyRect)\n    }\n\n    override func minPossiblePositionOfDivider(at dividerIndex: Int) -> CGFloat {\n        return 0\n    }\n\n    /*\n    func splitView(_ splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {\n\n        return (shouldHideDivider || UserDefaultsManagement.horizontalOrientation) ? 0 : 200\n    }\n\n    func splitView(_ splitView: NSSplitView, constrainMaxCoordinate proposedMaximumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {\n\n        return UserDefaultsManagement.horizontalOrientation ? 99999 : 350\n    }*/\n\n    override var dividerColor: NSColor {\n        return NSColor.init(named: \"divider\")!\n    }\n\n    override var dividerThickness: CGFloat {\n        get {\n            return shouldHideDivider ? 0 : 1\n        }\n    }\n\n    func splitViewDidResizeSubviews(_ notification: Notification) {\n        ViewController.shared()?.viewDidResize()\n    }\n    \n    func splitViewWillResizeSubviews(_ notification: Notification) {\n        if let vc = ViewController.shared() {\n            vc.editor.updateTextContainerInset()\n        }\n    }\n\n}\n"
  },
  {
    "path": "FSNotes/View/EditorView.swift",
    "content": "//\n//  EditorView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 9/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass EditorView: NSView {\n    override func mouseDown(with event: NSEvent) {\n        guard let vc = ViewController.shared() else { return }\n        vc.editor.mouseDown(with: event)\n\n        NSApp.mainWindow?.makeFirstResponder(vc.editor)\n    }\n\n    override func draw(_ dirtyRect: NSRect) {\n        super.draw(dirtyRect)\n\n        NSColor(named: \"mainBackground\")!.setFill()\n        __NSRectFill(dirtyRect)\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/HyperlinkTextField.swift",
    "content": "//\n//  HyperlinkTextField.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 13.11.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\n@IBDesignable\nclass HyperlinkTextField: NSTextField {\n    @IBInspectable var href: String = \"\"\n\n    override func awakeFromNib() {\n        super.awakeFromNib()\n\n        let attributes: [NSAttributedString.Key : Any] = [\n            NSAttributedString.Key.foregroundColor: NSColor.blue,\n            NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue\n        ]\n        \n        self.attributedStringValue = NSAttributedString(string: self.stringValue, attributes: attributes)\n    }\n\n    override func mouseDown(with event: NSEvent) {\n        NSWorkspace.shared.open(URL(string: self.href)!)\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/MPreviewContainerView.swift",
    "content": "//\n//  MPreviewContainerView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 21.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport AppKit\n\nclass MPreviewContainerView: NSView {\n    \n    // UI Elements\n    public var webView: MPreviewView!\n    private var findPanel: MPreviewFindPanel!\n    private var findPanelHeightConstraint: NSLayoutConstraint!\n    \n    // Search state\n    private var currentMatchIndex = 0\n    private var totalMatches = 0\n    public var isFindPanelVisible = false\n    \n    // MARK: - Initialization\n    init(frame: NSRect, note: Note, closure: MPreviewViewClosure?, force: Bool = false) {\n        super.init(frame: frame)\n        setupWebView(note: note, closure: closure, force: force)\n        setupFindPanel()\n        setupLayout()\n    }\n    \n    required init?(coder: NSCoder) {\n        super.init(coder: coder)\n    }\n    \n    private func setupLayout() {\n        NSLayoutConstraint.activate([\n            webView.leadingAnchor.constraint(equalTo: leadingAnchor),\n            webView.trailingAnchor.constraint(equalTo: trailingAnchor),\n            webView.topAnchor.constraint(equalTo: findPanel.bottomAnchor),\n            webView.bottomAnchor.constraint(equalTo: bottomAnchor)\n        ])\n    }\n    \n    private func setupWebView(note: Note, closure: MPreviewViewClosure?, force: Bool) {\n        webView = MPreviewView(frame: bounds, note: note, closure: closure, force: force)\n        webView.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(webView)\n    }\n    \n    private func setupFindPanel() {\n        findPanel = MPreviewFindPanel()\n        findPanel.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(findPanel)\n        \n        NSLayoutConstraint.activate([\n            findPanel.leadingAnchor.constraint(equalTo: leadingAnchor),\n            findPanel.trailingAnchor.constraint(equalTo: trailingAnchor),\n            findPanel.topAnchor.constraint(equalTo: topAnchor)\n        ])\n        \n        findPanel.isHidden = true\n        findPanel.panelHeightConstraint.constant = 0\n    \n        // Callbacks\n        findPanel.onSearch = { [weak self] searchText in\n            self?.performSearch(searchText)\n        }\n        \n        findPanel.onNext = { [weak self] in\n            self?.findNext()\n        }\n        \n        findPanel.onPrevious = { [weak self] in\n            self?.findPrevious()\n        }\n        \n        findPanel.onDone = { [weak self] in\n            self?.hideFindPanel()\n        }\n    }\n    \n    // MARK: - Public API\n    \n    var previewView: MPreviewView {\n        return webView\n    }\n    \n    func showFindPanel() {\n        window?.makeFirstResponder(self)\n        \n        isFindPanelVisible = true\n        \n        let pasteboard = NSPasteboard(name: .find)\n        if let searchText = pasteboard.string(forType: .string) {\n            pasteboard.clearContents()\n            findPanel.searchField.stringValue = searchText\n            findPanel.onSearch?(searchText)\n        }\n        \n        findPanel.show()\n    }\n\n    func hideFindPanel() {\n        isFindPanelVisible = false\n        \n        findPanel.hide()\n        clearHighlights()\n    }\n    \n    func toggleFindPanel() {\n        if isFindPanelVisible {\n            hideFindPanel()\n        } else {\n            showFindPanel()\n        }\n    }\n    \n    // MARK: - Search Implementation\n    \n    private func performSearch(_ searchText: String) {\n        guard !searchText.isEmpty else {\n            clearHighlights()\n            return\n        }\n        \n        let escapedText = searchText\n            .replacingOccurrences(of: \"\\\\\", with: \"\\\\\\\\\")\n            .replacingOccurrences(of: \"'\", with: \"\\\\'\")\n            .replacingOccurrences(of: \"\\\"\", with: \"\\\\\\\"\")\n        \n        let jsCode = \"\"\"\n        (function() {\n            document.querySelectorAll('.mpreview-find-highlight').forEach(el => {\n                var parent = el.parentNode;\n                parent.replaceChild(document.createTextNode(el.textContent), el);\n                parent.normalize();\n            });\n            \n            var searchText = '\\(escapedText)';\n            if (searchText.length === 0) return 0;\n            \n            var escapedSearch = searchText.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\\\\\$&');\n            var regex = new RegExp('(' + escapedSearch + ')', 'gi');\n            \n            var walker = document.createTreeWalker(\n                document.body,\n                NodeFilter.SHOW_TEXT,\n                {\n                    acceptNode: function(node) {\n                        if (node.parentNode.nodeName === 'SCRIPT' || \n                            node.parentNode.nodeName === 'STYLE' ||\n                            node.parentNode.classList.contains('mpreview-find-highlight')) {\n                            return NodeFilter.FILTER_REJECT;\n                        }\n                        return NodeFilter.FILTER_ACCEPT;\n                    }\n                },\n                false\n            );\n            \n            var nodesToReplace = [];\n            while(walker.nextNode()) {\n                var node = walker.currentNode;\n                if(regex.test(node.textContent)) {\n                    nodesToReplace.push(node);\n                }\n            }\n            \n            var matchCount = 0;\n            nodesToReplace.forEach(function(node) {\n                var text = node.textContent;\n                var matches = text.match(regex);\n                if (!matches) return;\n                \n                var fragment = document.createDocumentFragment();\n                var lastIndex = 0;\n                \n                var tempText = text;\n                while(true) {\n                    var match = regex.exec(tempText);\n                    if (!match) break;\n                    \n                    var index = match.index;\n                    \n                    if (index > lastIndex) {\n                        fragment.appendChild(document.createTextNode(tempText.substring(lastIndex, index)));\n                    }\n                    \n                    var mark = document.createElement('mark');\n                    mark.className = 'mpreview-find-highlight';\n                    mark.setAttribute('data-index', matchCount);\n                    mark.textContent = match[0];\n                    fragment.appendChild(mark);\n                    \n                    matchCount++;\n                    lastIndex = index + match[0].length;\n                }\n                \n                if (lastIndex < text.length) {\n                    fragment.appendChild(document.createTextNode(tempText.substring(lastIndex)));\n                }\n                \n                node.parentNode.replaceChild(fragment, node);\n            });\n            \n            var firstMatch = document.querySelector('.mpreview-find-highlight');\n            if(firstMatch) {\n                firstMatch.classList.add('current-match');\n                firstMatch.scrollIntoView({behavior: 'smooth', block: 'center'});\n            }\n            \n            return matchCount;\n        })();\n        \"\"\"\n        \n        webView.evaluateJavaScript(jsCode) { [weak self] result, error in\n            if error != nil {\n                print(\"Search error: \\\\(error)\")\n            }\n            \n            if let count = result as? Int {\n                self?.totalMatches = count\n                self?.currentMatchIndex = count > 0 ? 1 : 0\n                self?.findPanel.updateStatus(current: self?.currentMatchIndex ?? 0,\n                                            total: self?.totalMatches ?? 0)\n            }\n        }\n        \n        injectHighlightStyles()\n    }\n    \n    func getSelectedText(completion: @escaping (String?) -> Void) {\n        let javascript = \"window.getSelection().toString()\"\n        \n        webView.evaluateJavaScript(javascript) { (result, error) in\n            if let error = error {\n                print(\"Error: \\(error)\")\n                completion(nil)\n            } else {\n                completion(result as? String)\n            }\n        }\n    }\n    \n    private func injectHighlightStyles() {\n        let css = \"\"\"\n        mark.mpreview-find-highlight {\n            background-color: rgba(255, 255, 0, 0.35);\n            color: inherit;\n            padding: 1px 0;\n            border-radius: 2px;\n        }\n        mark.mpreview-find-highlight.current-match {\n            background-color: rgba(255, 143, 0, 0.8) !important;\n            outline: 2px solid rgba(255, 100, 0, 0.6);\n        }\n        \"\"\"\n        \n        let escapedCSS = css\n            .replacingOccurrences(of: \"\\n\", with: \" \")\n            .replacingOccurrences(of: \"'\", with: \"\\\\'\")\n        \n        let jsCode = \"\"\"\n        (function() {\n            var style = document.getElementById('mpreview-find-style');\n            if(!style) {\n                style = document.createElement('style');\n                style.id = 'mpreview-find-style';\n                document.head.appendChild(style);\n            }\n            style.innerHTML = '\\(escapedCSS)';\n        })();\n        \"\"\"\n        \n        webView.evaluateJavaScript(jsCode)\n    }\n    \n    public func findNext() {\n        guard totalMatches > 0 else { return }\n        \n        let jsCode = \"\"\"\n        (function() {\n            var marks = document.querySelectorAll('.mpreview-find-highlight');\n            if(marks.length === 0) return 0;\n            \n            var current = document.querySelector('.current-match');\n            if(current) {\n                current.classList.remove('current-match');\n            }\n            \n            var currentIndex = current ? Array.from(marks).indexOf(current) : -1;\n            var nextIndex = (currentIndex + 1) % marks.length;\n            \n            marks[nextIndex].classList.add('current-match');\n            marks[nextIndex].scrollIntoView({behavior: 'smooth', block: 'center'});\n            \n            return nextIndex + 1;\n        })();\n        \"\"\"\n        \n        webView.evaluateJavaScript(jsCode) { [weak self] result, error in\n            if let index = result as? Int {\n                self?.currentMatchIndex = index\n                self?.findPanel.updateStatus(current: index, total: self?.totalMatches ?? 0)\n            }\n        }\n    }\n    \n    private func findPrevious() {\n        guard totalMatches > 0 else { return }\n        \n        let jsCode = \"\"\"\n        (function() {\n            var marks = document.querySelectorAll('.mpreview-find-highlight');\n            if(marks.length === 0) return 0;\n            \n            var current = document.querySelector('.current-match');\n            if(current) {\n                current.classList.remove('current-match');\n            }\n            \n            var currentIndex = current ? Array.from(marks).indexOf(current) : 0;\n            var prevIndex = currentIndex - 1;\n            if(prevIndex < 0) prevIndex = marks.length - 1;\n            \n            marks[prevIndex].classList.add('current-match');\n            marks[prevIndex].scrollIntoView({behavior: 'smooth', block: 'center'});\n            \n            return prevIndex + 1;\n        })();\n        \"\"\"\n        \n        webView.evaluateJavaScript(jsCode) { [weak self] result, error in\n            if let index = result as? Int {\n                self?.currentMatchIndex = index\n                self?.findPanel.updateStatus(current: index, total: self?.totalMatches ?? 0)\n            }\n        }\n    }\n    \n    private func clearHighlights() {\n        let jsCode = \"\"\"\n        (function() {\n            document.querySelectorAll('.mpreview-find-highlight').forEach(el => {\n                var parent = el.parentNode;\n                parent.replaceChild(document.createTextNode(el.textContent), el);\n                parent.normalize();\n            });\n        })();\n        \"\"\"\n        webView.evaluateJavaScript(jsCode)\n        totalMatches = 0\n        currentMatchIndex = 0\n        findPanel.updateStatus(current: 0, total: 0)\n    }\n    \n    @objc override func performTextFinderAction(_ sender: Any?) {\n        guard let menuItem = sender as? NSMenuItem else {\n            return\n        }\n        \n        switch NSTextFinder.Action(rawValue: menuItem.tag) {\n        case .showFindInterface:\n            showFindPanel()\n            \n        case .hideFindInterface:\n            hideFindPanel()\n            \n        case .nextMatch:\n            findNext()\n            \n        case .previousMatch:\n            findPrevious()\n            \n        case .showReplaceInterface:\n            break\n            \n        case .replace, .replaceAll, .replaceAndFind:\n            break\n            \n        case .setSearchString:\n            getSelectedText { [weak self] text in\n                if let text = text, !text.isEmpty {\n                    self?.performSearch(text)\n                }\n            }\n            \n        case .selectAll, .selectAllInSelection:\n            break\n            \n        default:\n            break\n        }\n    }\n    \n    func getScrollPosition(_ completion: @escaping (CGPoint) -> Void) {\n        let js = \"({ x: window.scrollX, y: window.scrollY })\"\n\n        webView.evaluateJavaScript(js) { result, _ in\n            if let dict = result as? [String: CGFloat],\n               let x = dict[\"x\"],\n               let y = dict[\"y\"] {\n                completion(CGPoint(x: x, y: y))\n            } else {\n                completion(.zero)\n            }\n        }\n    }\n    \n    func restoreScrollPosition(_ point: CGPoint) {\n        let js = \"window.scrollTo(\\(point.x), \\(point.y));\"\n        webView.evaluateJavaScript(js, completionHandler: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/MPreviewFindPanel.swift",
    "content": "//\n//  MPreviewFindPanel.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 21.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport WebKit\n\nfinal class MPreviewFindPanel: NSVisualEffectView, NSSearchFieldDelegate {\n\n    // MARK: UI\n\n    public let searchField = NSSearchField()\n    \n    private let previousButton = NSButton()\n    private let nextButton = NSButton()\n    private let doneButton = NSButton()\n    private let statusLabel = NSTextField()\n    private let containerView = NSView()\n\n    public var panelHeightConstraint: NSLayoutConstraint!\n    private var containerHeightConstraint: NSLayoutConstraint!\n\n    // MARK: Callbacks\n\n    var onSearch: ((String) -> Void)?\n    var onNext: (() -> Void)?\n    var onPrevious: (() -> Void)?\n    var onDone: (() -> Void)?\n\n    // MARK: Init\n\n    override init(frame frameRect: NSRect) {\n        super.init(frame: frameRect)\n        setupUI()\n    }\n\n    required init?(coder: NSCoder) {\n        super.init(coder: coder)\n        setupUI()\n    }\n\n    // MARK: Setup\n\n    private func setupUI() {\n        material = .windowBackground\n        blendingMode = .behindWindow\n        state = .active\n        \n        translatesAutoresizingMaskIntoConstraints = false\n        panelHeightConstraint = heightAnchor.constraint(equalToConstant: 36)\n        panelHeightConstraint.isActive = true\n\n        setupContainer()\n        setupControls()\n    }\n\n    private func setupContainer() {\n        containerView.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(containerView)\n\n        containerHeightConstraint = containerView.heightAnchor.constraint(equalToConstant: 28)\n\n        NSLayoutConstraint.activate([\n            containerView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 8),\n            containerView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -8),\n            containerView.centerYAnchor.constraint(equalTo: centerYAnchor),\n            containerHeightConstraint\n        ])\n    }\n\n    private func setupControls() {\n        // Search field\n        searchField.placeholderString = NSLocalizedString(\"Search\", comment: \"\")\n        searchField.delegate = self\n        prepare(searchField)\n\n        // Buttons\n        configureButton(previousButton, systemImage: \"chevron.up\", action: #selector(previousClicked))\n        configureButton(nextButton, systemImage: \"chevron.down\", action: #selector(nextClicked))\n\n        // Status\n        statusLabel.isEditable = false\n        statusLabel.isBordered = false\n        statusLabel.backgroundColor = .clear\n        statusLabel.font = .systemFont(ofSize: 11)\n        statusLabel.textColor = .secondaryLabelColor\n        statusLabel.alignment = .center\n        prepare(statusLabel)\n\n        // Done\n        doneButton.title = NSLocalizedString(\"Done\", comment: \"\")\n        doneButton.bezelStyle = .texturedRounded\n        doneButton.target = self\n        doneButton.action = #selector(doneClicked)\n        prepare(doneButton)\n\n        layoutControls()\n    }\n\n    private func prepare(_ view: NSView) {\n        view.translatesAutoresizingMaskIntoConstraints = false\n        containerView.addSubview(view)\n    }\n\n    private func configureButton(_ button: NSButton, systemImage: String, action: Selector) {\n        button.image = NSImage(systemSymbolName: systemImage, accessibilityDescription: nil)\n        button.imagePosition = .imageOnly\n        button.bezelStyle = .texturedRounded\n        button.target = self\n        button.action = action\n        prepare(button)\n    }\n\n    private func layoutControls() {\n        NSLayoutConstraint.activate([\n            searchField.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),\n            searchField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor),\n            searchField.widthAnchor.constraint(equalToConstant: 200),\n\n            previousButton.leadingAnchor.constraint(equalTo: searchField.trailingAnchor, constant: 8),\n            previousButton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor),\n            previousButton.widthAnchor.constraint(equalToConstant: 32),\n\n            nextButton.leadingAnchor.constraint(equalTo: previousButton.trailingAnchor, constant: 4),\n            nextButton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor),\n            nextButton.widthAnchor.constraint(equalToConstant: 32),\n\n            statusLabel.leadingAnchor.constraint(equalTo: nextButton.trailingAnchor, constant: 8),\n            statusLabel.centerYAnchor.constraint(equalTo: containerView.centerYAnchor),\n            statusLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 60),\n\n            doneButton.leadingAnchor.constraint(equalTo: statusLabel.trailingAnchor, constant: 8),\n            doneButton.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),\n            doneButton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor)\n        ])\n    }\n\n    // MARK: Public API\n\n    func show() {\n        isHidden = false\n        NSAnimationContext.runAnimationGroup { context in\n            context.duration = 0.25\n            panelHeightConstraint.animator().constant = 36\n            alphaValue = 1\n        } completionHandler: {\n            self.window?.makeFirstResponder(self.searchField)\n        }\n    }\n\n    func hide() {\n        NSAnimationContext.runAnimationGroup { context in\n            context.duration = 0.25\n            panelHeightConstraint.animator().constant = 0\n            alphaValue = 0\n        } completionHandler: {\n            self.isHidden = true\n        }\n    }\n\n    func updateStatus(current: Int, total: Int) {\n        statusLabel.stringValue = total > 0 ? \"\\(current) from \\(total)\" : \"Not found\"\n    }\n\n    func clear() {\n        searchField.stringValue = \"\"\n        statusLabel.stringValue = \"\"\n    }\n\n    // MARK: Actions\n\n    @objc private func searchFieldChanged(_ sender: NSSearchField) {\n        onSearch?(sender.stringValue)\n    }\n\n    @objc private func previousClicked() {\n        onPrevious?()\n    }\n\n    @objc private func nextClicked() {\n        onNext?()\n    }\n\n    @objc private func doneClicked() {\n        onDone?()\n    }\n    \n    func controlTextDidChange(_ obj: Notification) {\n        if let textField = obj.object as? NSSearchField {\n            onSearch?(textField.stringValue)\n        }\n    }\n    \n    func controlTextDidEndEditing(_ obj: Notification) {\n        let movement = obj.userInfo?[\"NSTextMovement\"] as? Int ?? 0\n        if movement == NSTextMovement.return.rawValue {\n            onNext?()\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/NameTextField.swift",
    "content": "//\n//  NameTextField.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/9/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass NameTextField: NSTextField {\n    override func becomeFirstResponder() -> Bool {\n        let status = super.becomeFirstResponder()\n\n        self.textColor = NSColor.init(named: \"mainText\")\n\n        return status\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/NoteCellView.swift",
    "content": "//\n//  NoteCellView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/31/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass NoteCellView: NSTableCellView {\n\n    @IBOutlet var name: NSTextField!\n    @IBOutlet var preview: PreviewTextField!\n    @IBOutlet var date: NSTextField!\n    @IBOutlet var pin: NSImageView!\n    \n    @IBOutlet weak var titleConstraint: NSLayoutConstraint!\n    @IBOutlet weak var imagePreview: NSImageView!\n    @IBOutlet weak var imagePreviewSecond: NSImageView!\n    @IBOutlet weak var imagePreviewThird: NSImageView!\n\n    public var note: Note?\n    public var contentLength: Int = 0\n    public var timestamp: Int64?\n\n    private var previewMaximumLineHeight: CGFloat = 12\n    private let previewLineSpacing: CGFloat = 3\n\n    public var imageKeys = [String]()\n    \n    public var tableView: NotesTableView? {\n        get {\n            guard let vc = ViewController.shared() else { return nil }\n            \n            return vc.notesTableView\n        }\n    }\n\n    public static var pinImages = [String: NSImage]()\n    public static var pinEncryptedImages = [String: NSImage]()\n    public static var pinSharedImages = [String: NSImage]()\n\n    override func prepareForReuse() {\n        super.prepareForReuse()\n        \n        imagePreview.image = nil\n        imagePreview.isHidden = true\n        \n        imagePreviewSecond.image = nil\n        imagePreviewSecond.isHidden = true\n        \n        imagePreviewThird.image = nil\n        imagePreviewThird.isHidden = true\n        \n        imageKeys = []\n        \n        timestamp = nil\n        \n        note = nil\n        \n        name.stringValue = \"\"\n        preview.stringValue = \"\"\n        date.stringValue = \"\"\n    }\n    \n    override func draw(_ dirtyRect: NSRect) {\n        super.draw(dirtyRect)\n\n        renderPin()\n        name.layer?.zPosition = 1000\n\n        if let descriptor = date.font?.fontDescriptor {\n            date.font = NSFont.init(descriptor: descriptor, size: 11)\n        }\n\n        date.layer?.cornerRadius = 5\n        date.layer?.zPosition = 1001\n        date.isHidden = UserDefaultsManagement.hideDate\n\n        titleConstraint.constant = UserDefaultsManagement.hideDate ? 0 : 5\n\n        if (UserDefaultsManagement.horizontalOrientation) {\n            preview.isHidden = true\n        } else {\n            preview.isHidden = false\n        }\n\n        if UserDefaultsManagement.hidePreviewImages || UserDefaultsManagement.horizontalOrientation {\n            imagePreview.isHidden = true\n            imagePreviewSecond.isHidden = true\n            imagePreviewThird.isHidden = true\n        }\n\n        applyPreviewStyle()\n\n        if !UserDefaultsManagement.horizontalOrientation && !UserDefaultsManagement.hidePreviewImages {\n            self.note?.loadPreviewInfo()\n        }\n    }\n\n    public func configure(note: Note) {\n        self.note = note\n    }\n    \n    func applyPreviewStyle() {\n        let additionalHeight = CGFloat(UserDefaultsManagement.cellSpacing)\n\n        guard additionalHeight >= 0 else {\n            applyPreviewAttributes()\n            return\n        }\n\n        let fontName = UserDefaultsManagement.noteFont.fontName\n        let previewFontSzie = CGFloat(UserDefaultsManagement.previewFontSize)\n        guard let font = NSFont(name: fontName, size: previewFontSzie) else { return }\n        self.previewMaximumLineHeight = font.lineHeightCustom\n\n        // vertically align\n        var numberOfLines = 0\n        var frameY = 0\n\n        if !UserDefaultsManagement.horizontalOrientation && !UserDefaultsManagement.hidePreview {\n            var size = CGFloat(0)\n            var i = -1\n\n            while true {\n                if size > additionalHeight - 8 {\n                    break\n                }\n\n                i += 1\n                if i == 1 {\n                    size += previewMaximumLineHeight\n                } else {\n                    size += previewLineSpacing + previewMaximumLineHeight\n                }\n            }\n\n            numberOfLines = i\n        }\n\n        if numberOfLines > 1 {\n            frameY = Int(\n                (additionalHeight - previewMaximumLineHeight * CGFloat(numberOfLines) - previewLineSpacing * CGFloat(numberOfLines - 1)) / 2\n            )\n        } else {\n            let lines = numberOfLines > 0 ? numberOfLines : 0\n            frameY = Int(\n                (additionalHeight - previewMaximumLineHeight * CGFloat(lines)) / 2\n            )\n        }\n\n        // save margin\n        if frameY >= 0 {\n            let y = CGFloat(Int(frameY))\n            adjustTopMargin(margin: y)\n            UserDefaultsManagement.cellViewFrameOriginY = y\n        }\n\n        // apply font and max lines numbers\n        applyPreviewAttributes(numberOfLines)\n    }\n    \n    func applyPreviewAttributes(_ maximumNumberOfLines: Int = 1) {\n        let string = preview.stringValue\n        let fontName = UserDefaultsManagement.noteFont.fontName\n\n        let previewFontSize = CGFloat(UserDefaultsManagement.previewFontSize)\n        guard let font = NSFont(name: fontName, size: previewFontSize) else { return }\n        \n        let textParagraph = NSMutableParagraphStyle()\n        textParagraph.lineSpacing = previewLineSpacing\n        textParagraph.maximumLineHeight = previewMaximumLineHeight\n\n        let attribs = [\n            NSAttributedString.Key.font: font,\n            NSAttributedString.Key.paragraphStyle: textParagraph\n        ]\n\n        if maximumNumberOfLines > 0 {\n            preview.attributedStringValue = NSAttributedString.init(string: string, attributes: attribs)\n            preview.maximumNumberOfLines = maximumNumberOfLines\n        } else {\n            preview.attributedStringValue = NSAttributedString()\n            preview.maximumNumberOfLines = -1\n        }\n    }\n\n    public func isSelected() -> Bool {\n        if let rowView = self.superview as? NSTableRowView, rowView.isSelected, window?.firstResponder == superview?.superview {\n            return true\n        }\n\n        return false\n    }\n\n    public func isAccentColorTint() -> Bool {\n        if let rowView = self.superview as? NSTableRowView, !rowView.isSelected {\n            return true\n        }\n\n        if let rowView = self.superview as? NSTableRowView, rowView.isSelected, window?.firstResponder == superview?.superview {\n            return false\n        }\n\n        return true\n    }\n\n    func renderPin() {\n        if let value = objectValue, let note = value as? Note  {\n            if note.isPublished() {\n                if #available(macOS 12.0, *), let image = NSImage(systemSymbolName: \"globe\", accessibilityDescription: nil) {\n                    pin.image = image\n                    pin.image?.isTemplate = true\n                    pin.contentTintColor = .controlAccentColor\n                } else {\n                    pin.image = NSImage(named: \"web\")\n                    pin.image?.isTemplate = true\n                    pin.contentTintColor = .controlAccentColor\n                    pin.image?.size = NSSize(width: 14, height: 14)\n                }\n\n                pin.isHidden = false\n            } else if note.isEncrypted() {\n                let systemName = note.isUnlocked() ? \"lock.open\" : \"lock\"\n                if let image = NSImage(systemSymbolName: systemName, accessibilityDescription: nil) {\n                    pin.image = image\n                    pin.image?.isTemplate = true\n                    pin.contentTintColor = .controlAccentColor\n                }\n                pin.isHidden = false\n            } else {\n                if #available(macOS 12.0, *), let image = NSImage(systemSymbolName: \"pin\", accessibilityDescription: nil) {\n                    pin.image = image\n                    pin.image?.isTemplate = true\n                    pin.contentTintColor = .controlAccentColor\n                } else {\n                    pin.image = NSImage(named: \"pin\")\n                    pin.image?.isTemplate = true\n                    pin.contentTintColor = .controlAccentColor\n                    pin.image?.size = NSSize(width: 20, height: 20)\n                }\n\n                pin.isHidden = !note.isPinned\n            }\n        }\n    }\n\n    public func styleImageView(imageView: ImageView) {\n        imageView.isHidden = false\n        imageView.layer?.borderWidth = 1\n        imageView.layer?.borderColor = Color.darkGray.cgColor\n        imageView.layer?.cornerRadius = 4\n    }\n\n    public func getPreviewImage(imageUrl: URL, note: Note) -> Image? {\n        let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"MainNotesList\")\n\n        if !FileManager.default.fileExists(atPath: tempURL.path) {\n            try? FileManager.default.createDirectory(at: tempURL, withIntermediateDirectories: false, attributes: nil)\n        }\n\n        if let cacheName = imageUrl.absoluteString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)?.md5 {\n\n            let file = tempURL.appendingPathComponent(cacheName)\n            if FileManager.default.fileExists(atPath: file.path) {\n                if let data = try? Data(contentsOf: file), let image = NSImage(data: data) {\n                    return image\n                }\n            }\n\n            do {\n                let data = try Data(contentsOf: imageUrl)\n                if let image = NSImage(data: data) {\n                    let size = CGSize(width: 70, height: 70)\n\n                    if let resized = image.crop(to: size) {\n                        let jpegImageData = resized.jpgData\n                        try? jpegImageData?.write(to: file, options: .atomic)\n                        return resized\n                    }\n                }\n            } catch {\n                print(error.localizedDescription)\n            }\n        }\n\n        return nil\n    }\n\n    public func adjustPinPosition() {\n        for constraint in self.constraints {\n            if constraint.secondAttribute == .leading, let im = constraint.firstItem as? NSImageView {\n                if im.identifier?.rawValue == \"pin\" {\n                    if let note = objectValue as? Note, !note.showIconInList() {\n                        constraint.constant = -25\n                    } else {\n                        constraint.constant = 3\n                    }\n                }\n            }\n        }\n    }\n\n    private func adjustTopMargin(margin: CGFloat) {\n        for constraint in self.constraints {\n            if constraint.secondAttribute == .top, let item = constraint.firstItem {\n                if let firstItem = item as? NSImageView, firstItem.identifier?.rawValue == \"pin\" {\n                    constraint.constant = margin\n                    continue\n                }\n\n                if item.isKind(of: NameTextField.self) {\n                    constraint.constant = margin + 1.5\n                    continue\n                }\n\n                if let item = item as? NSTextField, item.identifier?.rawValue == \"cellDate\" {\n                    constraint.constant = margin + 3.5\n                }\n            }\n        }\n    }\n\n    public func fixTopConstraint(position: Int?, note: Note) {\n        guard let tableView = tableView else { return }\n\n        for constraint in self.constraints {\n            if [\"firstImageTop\", \"secondImageTop\", \"thirdImageTop\"].contains(constraint.identifier) {\n                let ident = constraint.identifier\n                let height = position != nil ? tableView.tableView(tableView, heightOfRow: position!) : self.frame.height\n\n                self.removeConstraint(constraint)\n                var con = CGFloat(0)\n\n                if note.getTitle() != nil {\n                    con += self.name.frame.height\n                }\n\n                let isPreviewExist = note.preview.trim().count > 0\n                if isPreviewExist {\n                    con += 3 + self.preview.frame.height\n                }\n\n                var diff = (height - con - 48) / 2\n                diff += con\n\n                var imageLink: NSImageView?\n                switch constraint.identifier {\n                case \"firstImageTop\":\n                    imageLink = self.imagePreview\n                case \"secondImageTop\":\n                    imageLink = self.imagePreviewSecond\n                case \"thirdImageTop\":\n                    imageLink = self.imagePreviewThird\n                default:\n                    imageLink = self.imagePreview\n                }\n\n                guard let firstItem = imageLink else { continue }\n\n                let secondItem = isPreviewExist ? self.preview : self\n                let secondAttribute: NSLayoutConstraint.Attribute = isPreviewExist ? .bottom : .top\n                let constant = isPreviewExist ? 6 : diff\n                let constr = NSLayoutConstraint(item: firstItem, attribute: .top, relatedBy: .equal, toItem: secondItem, attribute: secondAttribute, multiplier: 1, constant: constant)\n\n                constr.identifier = ident\n                self.addConstraint(constr)\n            }\n        }\n    }\n\n    public func attachHeaders(note: Note) {\n        if let title = note.getTitle() {\n            self.name.stringValue = title\n            self.preview.stringValue = note.preview\n        } else {\n            self.name.stringValue = \"\"\n            self.preview.stringValue = \"\"\n        }\n\n        self.date.stringValue = note.getDateForLabel()\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/NoteRowView.swift",
    "content": "//\n//  NoteRowView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/31/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass NoteRowView: NSTableRowView {\n    override func draw(_ dirtyRect: NSRect) {\n        super.draw(dirtyRect)\n    }\n    \n    override func drawSeparator(in dirtyRect: NSRect) {\n        let leftInset: CGFloat = 23\n        let rightInset: CGFloat = 15\n        let scale = window?.backingScaleFactor ?? NSScreen.main?.backingScaleFactor ?? 2.0\n        let pixel = 1.0 / scale\n\n        let y = floor(bounds.height - pixel)\n        let w = max(0, bounds.width - leftInset - rightInset)\n\n        NSColor.separatorColor.setFill()\n        NSBezierPath(rect: NSRect(x: leftInset, y: y, width: w, height: pixel)).fill()\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/NotesCounterView.swift",
    "content": "//\n//  NotesCounterView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\n\n@IBDesignable\nclass NotesCounterView: NSView {\n    \n    private var visualEffectView: NSVisualEffectView?\n    \n    override init(frame frameRect: NSRect) {\n        super.init(frame: frameRect)\n        setupView()\n    }\n    \n    required init?(coder: NSCoder) {\n        super.init(coder: coder)\n        setupView()\n    }\n    \n    private func setupView() {\n        let effectView = NSVisualEffectView(frame: bounds)\n        effectView.autoresizingMask = [.width, .height]\n        effectView.blendingMode = .behindWindow\n        effectView.material = .contentBackground\n        effectView.state = .followsWindowActiveState\n        \n        addSubview(effectView, positioned: .below, relativeTo: nil)\n        visualEffectView = effectView\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/NotesTableView.swift",
    "content": "//\n//  NotesTableView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/31/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Carbon\nimport Cocoa\n\nclass NotesTableView: NSTableView,\n    NSTableViewDataSource,\n    NSTableViewDelegate {\n    \n    private var noteList = [Note]()\n    \n    var defaultCell = NoteCellView()\n    var pinnedCell = NoteCellView()\n    var storage = Storage.shared()\n\n    public var history = [URL]()\n    public var historyPosition = 0\n    \n    private var selectedHistory: IndexSet?\n\n    override func draw(_ dirtyRect: NSRect) {\n        allowsTypeSelect = false\n        self.gridColor = NSColor.clear\n        self.dataSource = self\n        self.delegate = self\n        super.draw(dirtyRect)\n    }\n    \n    override func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool {\n        if item.action == #selector(selectAll(_:)) {\n            return numberOfRows > 0 && allowsMultipleSelection\n        }\n        \n        if item.action == #selector(copy(_:)) ||\n            item.action == #selector(delete(_:)) ||\n            item.action == #selector(forceDeleteNote(_:)) {\n            return selectedRowIndexes.count > 0\n        }\n\n        return super.validateUserInterfaceItem(item)\n    }\n\n    override func keyDown(with event: NSEvent) {\n        guard let vc = self.window?.contentViewController as? ViewController else {\n            super.keyDown(with: event)\n            return\n        }\n        \n        if event.keyCode == kVK_ANSI_N && event.modifierFlags.contains(.control) {\n            vc.noteDown(NSMenuItem())\n            return\n        }\n        \n        if event.keyCode == kVK_ANSI_P && event.modifierFlags.contains(.control) {\n            vc.noteUp(NSMenuItem())\n            return\n        }\n        \n        super.keyDown(with: event)\n    }\n    \n    override func keyUp(with event: NSEvent) {\n        guard let vc = self.window?.contentViewController as? ViewController else {\n            super.keyUp(with: event)\n            return\n        }\n        \n        if event.keyCode == kVK_Tab && !event.modifierFlags.contains(.control) {\n            if vc.editor?.isPreviewEnabled() == true {\n                NSApp.mainWindow?.makeFirstResponder(vc.editor.markdownView)\n            } else {\n                vc.focusEditArea()\n            }\n\n            return\n        }\n        \n        super.keyUp(with: event)\n    }\n    \n    override func mouseDown(with event: NSEvent) {\n        guard let vc = self.window?.contentViewController as? ViewController else { return }\n        \n        let point = convert(event.locationInWindow, from: nil)\n        let row = self.row(at: point)\n        \n        if row >= 0, noteList.indices.contains(row) {\n            let note = noteList[row]\n            if event.modifierFlags.contains(.option) {\n                NSWorkspace.shared.activateFileViewerSelecting([note.url])\n                return\n            }\n        }\n        \n        if let selectedProject = vc.sidebarOutlineView.getSelectedProject(),\n            selectedProject.isLocked()\n        {\n            vc.sidebarOutlineView.toggleFolderLock(NSMenuItem())\n            return\n        }\n        \n        UserDataService.instance.searchTrigger = false\n\n        super.mouseDown(with: event)\n    }\n\n    func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {\n        if (noteList.indices.contains(row)) {\n            saveNavigationHistory(note: noteList[row])\n        }\n        return true\n    }\n\n    override func rightMouseDown(with event: NSEvent) {\n        UserDataService.instance.searchTrigger = false\n\n        NSApp.activate(ignoringOtherApps: true)\n\n        if let window = self.window {\n            window.makeKeyAndOrderFront(nil)\n        }\n\n        let point = convert(event.locationInWindow, from: nil)\n        let rowIndex = row(at: point)\n        guard rowIndex >= 0, rowIndex < numberOfRows else { return }\n\n        saveNavigationHistory(note: noteList[rowIndex])\n\n        window?.makeFirstResponder(self)\n\n        if !selectedRowIndexes.contains(rowIndex) {\n            selectRowIndexes(IndexSet(integer: rowIndex), byExtendingSelection: false)\n            scrollRowToVisible(rowIndex)\n        }\n\n        if rowView(atRow: rowIndex, makeIfNecessary: false) as? NoteRowView != nil,\n           let menu = menu {\n            NSMenu.popUpContextMenu(menu, with: event, for: self)\n        }\n    }\n\n    @IBAction func delete(_ sender: Any) {\n        guard let vc = ViewController.shared(),\n              let notes = getSelectedNotes() else { return }\n\n        vc.removeNotes(notes: notes, forceRemove: false, rows: selectedRowIndexes)\n    }\n    \n    @IBAction func forceDeleteNote(_ sender: Any) {\n        guard let vc = ViewController.shared(),\n              let notes = getSelectedNotes() else { return }\n\n        vc.removeNotes(notes: notes, forceRemove: true, rows: selectedRowIndexes)\n    }\n    \n    public func getNoteList() -> [Note] {\n        return noteList\n    }\n    \n    public func setNoteList(notes: [Note]) {\n       noteList = notes\n    }\n    \n    public func countNotes() -> Int {\n        return noteList.count\n    }\n    \n    public func getIndex(for note: Note) -> Int? {\n        return noteList.firstIndex(where: {$0 === note})\n    }\n    \n    public func getNote(at index: Int) -> Note? {\n        return noteList.indices.contains(index) ? noteList[index] : nil\n    }\n    \n    // Custom note highlight style\n    func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {\n        return NoteRowView()\n    }\n    \n    // Populate table data\n    func numberOfRows(in tableView: NSTableView) -> Int {\n        return noteList.count\n    }\n\n    func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {\n        let height = CGFloat(21 + UserDefaultsManagement.cellSpacing)\n\n        guard row < noteList.count else { return height }\n\n        let note = noteList[row]\n        \n        if !note.isLoaded && !note.isLoadedFromCache {\n            note.load()\n        }\n        \n        if !note.isParsed {\n            note.loadPreviewInfo()\n        }\n\n        if !UserDefaultsManagement.horizontalOrientation\n            && !UserDefaultsManagement.hidePreviewImages,\n            let urls = note.imageUrl,\n            urls.count > 0{\n\n            if note.preview.count == 0 {\n                if note.getTitle() != nil {\n                    // Title + image\n                    return 79 + 17\n                }\n\n                // Images only\n                return 79\n            }\n\n            // Title + Prevew + Images\n            return height + 58\n        }\n\n        // Title + preview\n        return height\n    }\n\n    // On selected row show notes in right panel\n    func tableViewSelectionDidChange(_ notification: Notification) {\n        selectedHistory = selectedRowIndexes\n\n        let vc = self.window?.contentViewController as! ViewController\n        \n        defer {\n            vc.updateNotesCounter()\n        }\n        \n        if vc.editAreaScroll.isFindBarVisible {\n            let menu = NSMenuItem(title: \"\", action: nil, keyEquivalent: \"\")\n            menu.tag = NSTextFinder.Action.hideFindInterface.rawValue\n            vc.editor.performTextFinderAction(menu)\n        }\n\n        if UserDataService.instance.isNotesTableEscape {\n            if vc.sidebarOutlineView.selectedRow == -1 {\n                UserDataService.instance.isNotesTableEscape = false\n            }\n            \n            vc.sidebarOutlineView.deselectAll(nil)\n            vc.sidebarOutlineView.reloadTags()\n            vc.editor.clear()\n            return\n        }\n\n        // Select row\n        if (noteList.indices.contains(selectedRow)) {\n            let note = noteList[selectedRow]\n\n            guard selectedRowIndexes.count == 0x01 else {\n                vc.editor.clear()\n                return\n            }\n            \n            vc.editor.changePreviewState(note.previewState)\n            vc.editor.fill(note: note, highlight: true)\n\n            if UserDefaultsManagement.focusInEditorOnNoteSelect && !UserDataService.instance.searchTrigger {\n                vc.focusEditArea()\n            }\n\n            return\n        }\n\n        // Clean\n        vc.editor.clear()\n\n        if !UserDefaultsManagement.inlineTags {\n            vc.sidebarOutlineView.deselectAllTags()\n        }\n    }\n    \n    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {\n        if (noteList.indices.contains(row)) {\n            return noteList[row]\n        }\n        return nil\n    }\n    \n    func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {\n        var urls = [URL]()\n        var contentUrls = [URL]()\n        \n        for row in rowIndexes {\n            let note = noteList[row]\n            urls.append(note.url)\n            \n            if let url = note.getContentFileURL() {\n                contentUrls.append(url)\n            }\n        }\n        \n        pboard.clearContents()\n        pboard.writeObjects(contentUrls as [NSPasteboardWriting])\n        \n        if let data = try? NSKeyedArchiver.archivedData(withRootObject: urls, requiringSecureCoding: true) {\n            pboard.setData(data, forType: NSPasteboard.note)\n        }\n        \n        return true\n    }\n\n    @IBAction func copy(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n\n        vc.saveTextAtClipboard()\n    }\n    \n    func getNoteFromSelectedRow() -> Note? {\n        var note: Note? = nil\n        let selected = self.selectedRow\n\n        if (selected < 0) {\n            return nil\n        }\n        \n        if (noteList.indices.contains(selected)) {\n            note = noteList[selected]\n        }\n        \n        return note\n    }\n    \n    func getSelectedNote() -> Note? {\n        var note: Note? = nil\n        let row = selectedRow\n        if (noteList.indices.contains(row)) {\n            note = noteList[row]\n        }\n        return note\n    }\n    \n    func getSelectedNotes() -> [Note]? {\n        var notes = [Note]()\n        \n        for row in selectedRowIndexes {\n            if (noteList.indices.contains(row)) {\n                notes.append(noteList[row])\n            }\n        }\n        \n        if notes.isEmpty {\n            return nil\n        }\n        \n        return notes\n    }\n    \n    public func deselectNotes() {\n        self.deselectAll(nil)\n    }\n    \n    override func performKeyEquivalent(with event: NSEvent) -> Bool {\n        if event.modifierFlags.contains(.control) && event.keyCode == kVK_Tab {\n            return true\n        }\n        \n        return super.performKeyEquivalent(with: event)\n    }\n    \n    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {\n        guard noteList.indices.contains(row) else {\n            return nil\n        }\n        \n        let note = noteList[row]\n        if (note.isPinned) {\n            pinnedCell = makeCell(note: note)\n            pinnedCell.pin.frame.size.width = 23\n            return pinnedCell\n        }\n        \n        defaultCell = makeCell(note: note)\n        defaultCell.pin.frame.size.width = 0\n        return defaultCell\n    }\n    \n    func tableView(_ tableView: NSTableView, rowActionsForRow row: Int, edge: NSTableView.RowActionEdge) -> [NSTableViewRowAction] {\n        guard edge == .trailing else { return [] }\n        guard noteList.indices.contains(row) else { return [] }\n        \n        let deleteAction = NSTableViewRowAction(style: .destructive, title: NSLocalizedString(\"Delete\", comment: \"\")) { [weak self] (action, row) in\n            guard let self = self else { return }\n            guard self.noteList.indices.contains(row) else { return }\n            let noteToDelete = self.noteList[row]\n            \n            if let vc = self.window?.contentViewController as? ViewController {\n                vc.removeNotes(notes: [noteToDelete])\n            }\n        }\n        \n        deleteAction.backgroundColor = .systemRed\n        \n        return [deleteAction]\n    }\n    \n    func makeCell(note: Note) -> NoteCellView {\n        let cell = makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: \"NoteCellView\"), owner: self) as! NoteCellView\n\n        cell.imageKeys = []\n        cell.timestamp = nil\n        \n        cell.imagePreview.image = nil\n        cell.imagePreview.isHidden = true\n        cell.imagePreviewSecond.image = nil\n        cell.imagePreviewSecond.isHidden = true\n        cell.imagePreviewThird.image = nil\n        cell.imagePreviewThird.isHidden = true\n        \n        cell.configure(note: note)\n        cell.loadImagesPreview()\n        cell.attachHeaders(note: note)\n\n        return cell\n    }\n    \n    override func willOpenMenu(_ menu: NSMenu, with event: NSEvent) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if clickedRow > -1 {\n            selectRowIndexes([clickedRow], byExtendingSelection: false)\n        }\n\n        if selectedRow < 0 { return }\n        menu.autoenablesItems = false\n        \n        for menuItem in menu.items {\n            if vc.processFileMenuItems(menuItem, menuId: \"popup\") {\n                menuItem.isEnabled = true\n            } else {\n                menuItem.isEnabled = vc.processShareMenuItems(menuItem, menuId: \"popup\")\n            }\n        }\n\n        vc.loadMoveMenu()\n    }\n\n    public func selectCurrent() {\n        guard noteList.count > 0 else { return }\n\n        UserDataService.instance.searchTrigger = false\n\n        let i = selectedRowIndexes.count > 0 ? selectedRowIndexes : [0]\n\n        if let first = i.first {\n            saveNavigationHistory(note: noteList[first])\n            selectRowIndexes(i, byExtendingSelection: false)\n            scrollRowToVisible(first)\n        }\n    }\n\n    public func selectNext() {\n        UserDataService.instance.searchTrigger = false\n        \n        let i = selectedRow + 1\n        guard noteList.indices.contains(i) else { return }\n        \n        saveNavigationHistory(note: noteList[i])\n        selectRowIndexes([i], byExtendingSelection: false)\n        scrollRowToVisible(i)\n    }\n\n    public func selectPrev() {\n        UserDataService.instance.searchTrigger = false\n        \n        let i = selectedRow - 1\n        guard noteList.indices.contains(i) else { return }\n        \n        saveNavigationHistory(note: noteList[i])\n        selectRowIndexes([i], byExtendingSelection: false)\n        scrollRowToVisible(i)\n    }\n    \n    public func selectRow(_ i: Int) {\n        if (noteList.indices.contains(i)) {\n            DispatchQueue.main.async {\n                self.selectRowIndexes([i], byExtendingSelection: false)\n                self.scrollRowToVisible(i)\n            }\n        }\n    }\n\n    public func selectRowAndSidebarItem(note: Note) {\n        guard let vc = ViewController.shared() else { return }\n\n        if let index = getIndex(for: note) {\n            selectRow(index)\n        } else {\n            vc.sidebarOutlineView.select(note: note)\n        }\n    }\n\n    func setSelected(note: Note) {\n        if let i = getIndex(for: note) {\n            selectRow(i)\n            scrollRowToVisible(i)\n        }\n    }\n    \n    public func select(note: Note) {\n        if let i = getIndex(for: note) {\n            if noteList.indices.contains(i) {\n                DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n                    self.selectRowIndexes([i], byExtendingSelection: false)\n                    self.scrollRowToVisible(i)\n                }\n            }\n        }\n    }\n    \n    public func removeRows(notes: [Note]) {\n        guard let vc = ViewController.shared() else { return }\n\n        var indexSet = IndexSet()\n        for note in notes {\n            if let i = noteList.firstIndex(where: {$0 === note}) {\n                indexSet.insert(i)\n            }\n        }\n        \n        guard !indexSet.isEmpty else { return }\n        \n        beginUpdates()\n        \n        for i in indexSet.sorted().reversed() {\n            noteList.remove(at: i)\n        }\n        \n        removeRows(at: indexSet, withAnimation: .slideDown)\n        endUpdates()\n\n        if UserDefaultsManagement.inlineTags {\n            vc.sidebarOutlineView.removeTags(notes: notes)\n        }\n    }\n    \n    public func insertRows(notes: [Note]) {\n        guard let vc = self.window?.contentViewController as? ViewController else { return }\n        var insert = [Note]()\n        \n        for note in notes {\n            if noteList.first(where: { $0.isEqualURL(url: note.url) }) == nil, vc.storage.searchQuery.isFit(note: note) {\n                insert.append(note)\n            }\n        }\n        \n        guard !insert.isEmpty else { return }\n        beginUpdates()\n        \n        noteList.append(contentsOf: insert)\n        self.noteList = vc.storage.sortNotes(noteList: self.noteList)\n        \n        var indexSet = IndexSet()\n        for note in insert {\n            if let noteIndex = self.noteList.firstIndex(of: note) {\n                indexSet.insert(noteIndex)\n            }\n        }\n        \n        self.insertRows(at: indexSet, withAnimation: .effectFade)\n        endUpdates()\n        \n        for note in insert {\n            vc.sidebarOutlineView.insertTags(note: note)\n        }\n    }\n    \n    private func reloadRows(notes: [Note]) {\n        for note in notes {\n            note.invalidateCache()\n            note.loadPreviewInfo()\n            self.performReload(note: note)\n        }\n    }\n    \n    @objc public func unDelete(_ urls: [URL: URL]) {\n        guard let vc = ViewController.shared() else { return }\n        var invertedMapping: [URL: URL] = [:]\n        \n        for (src, dst) in urls {\n            do {\n                if let note = storage.getBy(url: src) {\n                    storage.removeBy(note: note)\n                    if let destination = Storage.shared().getProjectByNote(url: dst) {\n                        note.moveImages(to: destination)\n                    }\n                }\n                try FileManager.default.moveItem(at: src, to: dst)\n                invertedMapping[dst] = src\n            } catch {\n                print(error)\n            }\n        }\n        \n        // Register redo (delete again)\n        if let md = AppDelegate.mainWindowController, !invertedMapping.isEmpty {\n            let undoManager = md.notesListUndoManager\n            undoManager.registerUndo(withTarget: self) { notesTableView in\n                let restoredNotes = invertedMapping.keys.compactMap { url in\n                    vc.storage.getBy(url: url)\n                }\n                \n                if !restoredNotes.isEmpty {\n                    vc.removeNotes(notes: restoredNotes, forceRemove: false, rows: nil)\n                }\n            }\n            undoManager.setActionName(NSLocalizedString(\"Delete\", comment: \"\"))\n        }\n    }\n    \n    public func countVisiblePinned() -> Int {\n        var i = 0\n        for note in noteList {\n            if (note.isPinned) {\n                i += 1\n            }\n        }\n        return i\n    }\n\n    public func reloadRow(note: Note) {\n        DispatchQueue.global(qos: .userInitiated).async {\n            note.invalidateCache()\n            note.loadPreviewInfo()\n\n            DispatchQueue.main.async {\n                self.performReload(note: note)\n            }\n        }\n    }\n    \n    private func performReload(note: Note) {\n        guard let i = self.noteList.firstIndex(of: note) else { return }\n        let urls = note.imageUrl\n        \n        if let cell = self.view(atColumn: 0, row: i, makeIfNecessary: false) as? NoteCellView {\n            cell.date.stringValue = note.getDateForLabel()\n            cell.loadImagesPreview(position: i, urls: urls)\n            cell.attachHeaders(note: note)\n            cell.renderPin()\n            cell.applyPreviewStyle()\n            self.noteHeightOfRows(withIndexesChanged: [i])\n        }\n    }\n    \n    public func reloadDate(note: Note) {\n        DispatchQueue.main.async {\n            if self.numberOfRows > 0, let i = self.noteList.firstIndex(of: note) {\n                if let cell = self.view(atColumn: 0, row: i, makeIfNecessary: false) as? NoteCellView {\n                    cell.date.stringValue = note.getDateForLabel()\n                }\n            }\n        }\n    }\n\n    public func saveNavigationHistory(note: Note) {\n        guard history.last != note.url else {\n            historyPosition = history.count - 1\n            return\n        }\n\n        history.append(note.url)\n        \n        if history.count > 100 {\n            history.removeFirst()\n        } else {\n            historyPosition = history.count - 1\n        }\n    }\n    \n    public func enableLockedProject() {\n        ViewController.shared()?.lockedFolder.isHidden = false\n        clean()\n    }\n    \n    public func disableLockedProject() {\n        ViewController.shared()?.lockedFolder.isHidden = true\n    }\n    \n    public func clean() {\n        noteList.removeAll()\n        reloadData()\n    }\n    \n    public func doVisualChanges(results: ([Note], [Note], [Note])) {\n        guard results.0.count > 0 || results.1.count > 0 || results.2.count > 0 else {\n            return\n        }\n\n        DispatchQueue.main.async {\n            if let vc = ViewController.shared(), vc.splitView.subviews[0].frame.width > 10 {\n                self.removeRows(notes: results.0)\n                self.insertRows(notes: results.1)\n                self.reloadRows(notes: results.2)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/OutlineHeaderView.swift",
    "content": "//\n//  OutlineHeaderView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/21/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass OutlineHeaderView: NSView {\n\n    override func mouseDown(with event: NSEvent) {\n        if event.clickCount == 2 {\n            if let md = AppDelegate.mainWindowController, let actionOnDoubleClick = UserDefaults.standard.object(forKey: \"AppleActionOnDoubleClick\") as? String {\n\n                switch actionOnDoubleClick {\n                case \"Maximize\":\n                    md.maximizeWindow()\n                case \"Minimize\":\n                    md.window?.performMiniaturize(nil)\n                default:\n                    break\n                }\n            }\n        } else {\n            super.mouseDown(with: event)\n        }\n    }\n\n    override func draw(_ dirtyRect: NSRect) {\n       super.draw(dirtyRect)\n\n\n       let lightColor = NSColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)\n       let darkColor = NSColor(red:0.16, green:0.17, blue:0.18, alpha:1.0)\n\n       if NSAppearance.current.isDark {\n          darkColor.setFill()\n       } else {\n          lightColor.setFill()\n       }\n\n       dirtyRect.fill()\n    }\n\n    override var mouseDownCanMoveWindow: Bool {\n        return true\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/PreviewTextField.swift",
    "content": "//\n//  PreviewTextField.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/28/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass PreviewTextField: NSTextField {\n    override var intrinsicContentSize: NSSize {\n        if maximumNumberOfLines == -1 {\n            let width = super.intrinsicContentSize.width\n\n            return NSSize(width: width, height: 0)\n        }\n\n        return super.intrinsicContentSize\n    }\n\n    override var textColor: NSColor? {\n        set {\n            super.textColor = newValue\n\n            if attributedStringValue.length > 0 {\n                var attributes = attributedStringValue.attributes(at: 0, effectiveRange: nil)\n                attributes[.foregroundColor] = newValue\n                attributedStringValue = NSAttributedString.init(string: self.stringValue, attributes: attributes)\n            }\n        }\n        get {\n            return super.textColor\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/SearchTextField.swift",
    "content": "//\n//  SearchTextField.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/3/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Carbon.HIToolbox\n\nclass SearchTextField: NSSearchField, NSSearchFieldDelegate {\n\n    public var vcDelegate: ViewController!\n    \n    private var filterQueue = OperationQueue.init()\n\n    public var searchQuery = \"\"\n    public var selectedRange = NSRange()\n    public var skipAutocomplete = false\n\n    public var timestamp: Int64?\n    private var lastQueryLength: Int = 0\n    private var lastQuery = String()\n    public var lastSearchQuery = String()\n\n    public var searchesMenu: NSMenu? = nil\n\n    public func generateRecentMenu() -> NSMenu {\n        let recentsTitle = NSLocalizedString(\"Recents\", comment: \"\")\n        let menu = NSMenu(title: recentsTitle)\n        menu.autoenablesItems = true\n\n        if let recent = UserDefaultsManagement.recentSearches, recent.count > 0 {\n            let recentsSearchTitle = NSLocalizedString(\"Recents Search\", comment: \"\")\n            menu.addItem(withTitle: recentsSearchTitle, action: nil, keyEquivalent: \"\")\n\n            var i = 1\n            for title in recent {\n                let menuItem = NSMenuItem(title: title, action: #selector(selectRecent(_:)), keyEquivalent: String(i))\n                menuItem.target = self\n                menu.addItem(menuItem)\n                i += 1\n            }\n\n            menu.addItem(NSMenuItem.separator())\n\n            let clearTitle = NSLocalizedString(\"Clear\", comment: \"\")\n            let menuItem = NSMenuItem(title: clearTitle, action: #selector(cleanRecents(_:)), keyEquivalent: \"d\")\n            menuItem.target = self\n            menu.addItem(menuItem)\n\n            return menu\n        }\n\n        menu.addItem(withTitle: \"No Recent Search\", action: nil, keyEquivalent: \"\")\n\n        return menu\n    }\n\n    override func textDidEndEditing(_ notification: Notification) {\n        self.skipAutocomplete = false\n        self.lastQuery = String()\n        self.lastQueryLength = 0\n\n        addRecent(query: stringValue)\n    }\n\n    override func keyUp(with event: NSEvent) {\n        if (event.keyCode == kVK_DownArrow) {\n            vcDelegate.focusTable()\n            vcDelegate.notesTableView.selectCurrent()\n            return\n        }\n        \n        if (event.keyCode == kVK_LeftArrow && stringValue.count == 0) {\n            vcDelegate.sidebarOutlineView.window?.makeFirstResponder(vcDelegate.sidebarOutlineView)\n\n            let index = vcDelegate.sidebarOutlineView.selectedRowIndexes.count > 0\n                ? vcDelegate.sidebarOutlineView.selectedRowIndexes\n                : [0]\n\n            vcDelegate.sidebarOutlineView.selectRowIndexes(index, byExtendingSelection: false)\n            return\n        }\n\n        if event.keyCode == kVK_Delete || event.keyCode == kVK_ForwardDelete {\n            self.skipAutocomplete = true\n            return\n        }\n    }\n\n    func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {\n        switch commandSelector.description {\n        case \"moveDown:\":\n            if let editor = currentEditor() {\n                let text = editor.string\n                let location = editor.selectedRange.location\n                let length = editor.selectedRange.length\n                \n                if length > 0 && location > 0 && location <= text.count {\n                    let endIndex = text.index(text.startIndex, offsetBy: location, limitedBy: text.endIndex) ?? text.endIndex\n                    let query = String(text[..<endIndex])\n                    if query.count > 0 {\n                        self.stringValue = query\n                    }\n                } else {\n                    if text.count > 0 {\n                        self.stringValue = text\n                    }\n                }\n            }\n\n            addRecent(query: stringValue)\n\n            return true\n        case \"cancelOperation:\":\n            self.skipAutocomplete = true\n            self.lastQuery = String()\n            self.filterQueue.cancelAllOperations()\n            return true\n        case \"deleteBackward:\":\n            self.skipAutocomplete = true\n            self.lastQuery = String()\n            self.filterQueue.cancelAllOperations()\n            textView.deleteBackward(self)\n            return true\n        case \"insertNewline:\", \"insertNewlineIgnoringFieldEditor:\":\n            if let note = vcDelegate.editor.getSelectedNote(), stringValue.utf16.count > 0, note.title.lowercased() == stringValue.lowercased() || note.fileName.lowercased() == stringValue.lowercased() {\n\n                if note.title.lowercased() == stringValue.lowercased() && note.title != stringValue {\n                    stringValue = note.title\n                }\n\n                if note.fileName.lowercased() == stringValue.lowercased() && note.fileName != stringValue {\n                    stringValue = note.fileName\n                }\n\n                markCompleteonAsSuccess()\n\n                if vcDelegate.vcEditor?.isPreviewEnabled() == true\n                    && vcDelegate.editor.note?.container != .encryptedTextPack {\n                    vcDelegate.vcEditor?.disablePreviewEditorAndNote()\n                    \n                    DispatchQueue.main.async {\n                        self.vcDelegate.refillEditArea()\n                        NSApp.mainWindow?.makeFirstResponder(self.vcDelegate.editor)\n                    }\n                } else {\n                    DispatchQueue.main.async {\n                        self.vcDelegate.focusEditArea()\n                    }\n                }\n            } else {\n                vcDelegate.makeNote(self)\n            }\n\n            addRecent(query: stringValue)\n\n            return true\n        case \"insertTab:\":\n            markCompleteonAsSuccess()\n\n            if vcDelegate.vcEditor?.isPreviewEnabled() == true {\n                NSApp.mainWindow?.makeFirstResponder(vcDelegate.editor.markdownView)\n            } else {\n                vcDelegate.focusEditArea()\n            }\n\n            vcDelegate.editor.scrollToCursor()\n            return true\n        case \"deleteWordBackward:\":\n            self.skipAutocomplete = true\n            self.lastQuery = String()\n            self.filterQueue.cancelAllOperations()\n            textView.deleteWordBackward(self)\n            lastQueryLength = self.stringValue.utf16.count\n            return true\n        case \"noop:\":\n            if let event = NSApp.currentEvent, event.modifierFlags.contains(.command) && event.keyCode == kVK_Return {\n                vcDelegate.makeNote(self)\n                return true\n            }\n            return false\n        default:\n            return false\n        }\n    }\n\n    func controlTextDidChange(_ obj: Notification) {\n        search()\n\n        // Clean as lastSearchQuery used by highlighter\n        if stringValue.count == 0 {\n            lastSearchQuery = String()\n        }\n    }\n    \n    public func suggestAutocomplete(_ note: Note, filter: String) {\n        guard note.title.lowercased() != filter.lowercased(),\n            let editor = currentEditor()\n        else { return }\n\n        if note.title.lowercased().starts(with: filter.lowercased()) {\n\n            if note.title.lowercased() != stringValue.lowercased() {\n                stringValue = filter + String(note.title.utf16.suffix(note.title.utf16.count - filter.utf16.count))!\n                lastQuery = stringValue\n                lastQueryLength = stringValue.utf16.count\n            }\n\n            editor.selectedRange = NSRange(filter.utf16.count..<note.title.utf16.count)\n            return\n        }\n\n        if note.fileName.lowercased().starts(with: filter.lowercased()) {\n\n            if note.fileName.lowercased() != stringValue.lowercased() {\n                stringValue = filter + String(note.fileName.utf16.suffix(note.fileName.utf16.count - filter.utf16.count))!\n                lastQuery = stringValue\n                lastQueryLength = stringValue.utf16.count\n            }\n\n            editor.selectedRange = NSRange(filter.utf16.count..<note.fileName.utf16.count)\n            return\n        }\n\n        lastQuery = stringValue\n    }\n\n    @objc private func search() {\n        UserDataService.instance.searchTrigger = true\n\n        vcDelegate.buildSearchQuery()\n\n        let searchText = self.stringValue\n        let currentTextLength = searchText.count\n\n        if !skipAutocomplete {\n            let safeLength = lastQuery.dropFirst(stringValue.count).utf16.count\n            let safeLocation = lastQuery.prefix(stringValue.count).utf16.count\n\n            if lastQuery.startsWith(string: stringValue) {\n                let range = NSRange(location: safeLocation, length: safeLength)\n                stringValue = lastQuery\n                currentEditor()?.selectedRange = range\n            }\n        }\n\n        if currentTextLength > self.lastQueryLength {\n            self.skipAutocomplete = false\n        }\n\n        self.lastQueryLength = searchText.count\n\n        if let query = getSearchTextExceptCompletion() {\n            self.lastSearchQuery = query\n        }\n\n        self.filterQueue.cancelAllOperations()\n        self.filterQueue.addOperation {\n            self.vcDelegate.updateTable() {\n                if let note = self.vcDelegate.notesTableView.getNoteList().first {\n                    DispatchQueue.main.async() {\n                        if let searchQuery = self.getSearchTextExceptCompletion() {\n                            if self.lastSearchQuery != searchQuery {\n                                return\n                            }\n\n                            self.savePasteboard(value: searchQuery)\n\n                            let search = searchQuery.lowercased()\n                            if note.title.lowercased() == search || UserDefaultsManagement.textMatchAutoSelection {\n                                self.vcDelegate.notesTableView.setSelected(note: note)\n                                self.stringValue = searchQuery\n                                return\n                            } else if !self.skipAutocomplete && (note.title.lowercased().starts(with: search)\n                                || note.fileName.lowercased().starts(with: search))\n                            {\n                                self.vcDelegate.notesTableView.setSelected(note: note)\n                                self.suggestAutocomplete(note, filter: searchQuery)\n                                return\n                            } else {\n                                self.vcDelegate.editor.clear()\n                            }\n                        }\n                    }\n                } else {\n                    DispatchQueue.main.async {\n                        self.vcDelegate.editor.clear()\n                    }\n                }\n            }\n        }\n    }\n\n    // Used in NSTextFinder cmd-f | cmd-g\n\n    private func savePasteboard(value: String) {\n        let pb = NSPasteboard(name: NSPasteboard.Name.find)\n        pb.declareTypes([.textFinderOptions, .string], owner: nil)\n        pb.setString(value, forType: NSPasteboard.PasteboardType.string)\n    }\n\n    private func getSearchTextExceptCompletion() -> String? {\n        guard let editor = currentEditor() else { return nil }\n\n        if editor.selectedRange.location > 0 {\n            return String(editor.string.prefix(editor.selectedRange.location))\n        }\n\n        return nil\n    }\n\n    private func markCompleteonAsSuccess() {\n        currentEditor()?.selectedRange = NSRange(location: stringValue.count, length: 0)\n\n        self.skipAutocomplete = false\n        self.lastQuery = String()\n        self.lastQueryLength = 0\n    }\n\n    @IBAction public func selectRecent(_ sender: NSMenuItem) {\n        stringValue = sender.title\n\n        search()\n    }\n\n    @IBAction public func cleanRecents(_ sender: NSMenuItem) {\n        UserDefaultsManagement.recentSearches = nil\n        searchesMenu = generateRecentMenu()\n    }\n\n    public func addRecent(query: String) {\n        let query = query.trim()\n\n        guard query.trim().count > 0 else { return }\n\n        var recents = UserDefaultsManagement.recentSearches ?? [String]()\n\n        if recents.contains(query) {\n            if let index = recents.firstIndex(of: query) {\n                recents.remove(at: index)\n            }\n        }\n        \n        recents.insert(query, at: 0)\n\n        if recents.count > 9 {\n            recents = recents.dropLast()\n        }\n\n        UserDefaultsManagement.recentSearches = recents\n        searchesMenu = generateRecentMenu()\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/SidebarCellView.swift",
    "content": "//\n//  SidebarCellView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass SidebarCellView: NSTableCellView {\n    @IBOutlet weak var icon: NSImageView!\n    @IBOutlet weak var label: NSTextField!\n\n    public var type: SidebarItemType?\n    public var storage = Storage.shared()\n\n    @IBAction func projectName(_ sender: NSTextField) {\n        let cell = sender.superview as? SidebarCellView\n\n        guard let project = cell?.objectValue as? Project else { return }\n        \n        let src = project.url\n        let dst = project.url.deletingLastPathComponent().appendingPathComponent(sender.stringValue, isDirectory: true)\n\n        do {\n            if FileManager.default.fileExists(atPath: dst.path) {\n                sender.stringValue = project.url.lastPathComponent\n                return\n            }\n\n            try FileManager.default.moveItem(at: src, to: dst)\n        } catch {\n            sender.stringValue = project.url.lastPathComponent\n            let alert = NSAlert()\n            alert.messageText = error.localizedDescription\n            alert.runModal()\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/SidebarHeaderCellView.swift",
    "content": "//\n//  SidebarHeaderCellView.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 15.10.2019.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass SidebarHeaderCellView: NSTableCellView {\n    @IBOutlet weak var label: NSTextField!\n    @IBOutlet weak var icon: NSImageView!\n}\n"
  },
  {
    "path": "FSNotes/View/SidebarNotesView.swift",
    "content": "//\n//  SidebarNotesView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/9/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass SidebarNotesView: NSView {\n//    override func draw(_ dirtyRect: NSRect) {\n//        super.draw(dirtyRect)\n//\n//        if UserDefaultsManagement.appearanceType != AppearanceType.Custom, #available(OSX 10.13, *) {\n//            NSColor(named: \"mainBackground\")!.setFill()\n//            __NSRectFill(dirtyRect)\n//        } else {\n//            layer?.backgroundColor = NSColor.white.cgColor\n//        }\n//    }\n}\n"
  },
  {
    "path": "FSNotes/View/SidebarOutlineView.swift",
    "content": "//\n//  SidebarProjectView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/9/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Foundation\nimport Carbon.HIToolbox\n\nclass SidebarOutlineView: NSOutlineView,\n    NSOutlineViewDelegate,\n    NSOutlineViewDataSource {\n    \n    public var sidebarItems: [Any]? = nil\n    public var viewDelegate: ViewController? = nil\n    \n    public var storage = Storage.shared()\n    public var isFirstLaunch = true\n    public var selectNote: Note? = nil\n\n    private var selectedSidebarItems: [SidebarItem]?\n    private var selectedProjects: [Project]?\n    private var selectedTags: [String]?\n\n    private var cellView: SidebarCellView?\n\n    // MARK: Override\n    override func rightMouseDown(with event: NSEvent) {\n        guard let vc = ViewController.shared() else { return }\n        \n        let point = convert(event.locationInWindow, from: nil)\n        let rowIndex = row(at: point)\n        if (rowIndex < 0 || self.numberOfRows < rowIndex) {\n            return\n        }\n\n        if let item = item(atRow: rowIndex) as? SidebarItem {\n            if item.type == .Separator {\n                return\n            }\n        }\n\n        if !selectedRowIndexes.contains(rowIndex) {\n            selectRowIndexes(IndexSet(integer: rowIndex), byExtendingSelection: false)\n            scrollRowToVisible(rowIndex)\n        }\n\n        if rowView(atRow: rowIndex, makeIfNecessary: false) as? SidebarTableRowView != nil {\n            window?.makeFirstResponder(self)\n            \n            if let menu = menu {\n                menu.autoenablesItems = false\n                \n                for item in menu.items {\n                    item.isEnabled = vc.processLibraryMenuItems(item, menuId: \"folderPopup\")\n                }\n                \n                NSMenu.popUpContextMenu(menu, with: event, for: self)\n            }\n        }\n    }\n\n    override func draw(_ dirtyRect: NSRect) {\n        allowsTypeSelect = false\n        delegate = self\n        dataSource = self\n        registerForDraggedTypes([\n            NSPasteboard.PasteboardType(kUTTypeFileURL as String),\n            NSPasteboard.note,\n            NSPasteboard.project\n        ])\n        super.draw(dirtyRect)\n    }\n    \n    override func keyDown(with event: NSEvent) {\n        // Tab to search\n        if event.keyCode == kVK_Tab {\n            self.viewDelegate?.search.becomeFirstResponder()\n            return\n        }\n\n        // Focus on note list\n        if event.keyCode == kVK_RightArrow {\n            if let fr = NSApp.mainWindow?.firstResponder, let vc = self.viewDelegate, fr.isKind(of: SidebarOutlineView.self) {\n\n                if let tag = item(atRow: selectedRow) as? FSTag, tag.isExpandable(), !isItemExpanded(tag) {\n                    super.keyDown(with: event)\n                    return\n                }\n\n                if let project = item(atRow: selectedRow) as? Project, project.isExpandable(), !isItemExpanded(project) {\n                    super.keyDown(with: event)\n                    return\n                }\n\n                if let project = item(atRow: selectedRow) as? Project, project.isLocked() {\n                    toggleFolderLock(NSMenuItem())\n                    return\n                }\n                \n                vc.notesTableView.selectCurrent()\n                NSApp.mainWindow?.makeFirstResponder(vc.notesTableView)\n                return\n            }\n        }\n\n        super.keyDown(with: event)\n    }\n\n    override func expandItem(_ item: Any?, expandChildren: Bool) {\n        if let project = item as? Project {\n            project.isExpanded = true\n        }\n\n        super.expandItem(item, expandChildren: expandChildren)\n\n        storage.saveProjectsExpandState()\n    }\n\n    override func collapseItem(_ item: Any?, collapseChildren: Bool) {\n        if let project = item as? Project {\n            project.isExpanded = false\n        }\n\n        super.collapseItem(item, collapseChildren: collapseChildren)\n\n        storage.saveProjectsExpandState()\n    }\n\n    override func selectRowIndexes(_ indexes: IndexSet, byExtendingSelection extend: Bool) {\n        guard let index = indexes.first else { return }\n\n        var extend = extend\n\n        if (item(atRow: index) as? FSTag) != nil {\n            for i in selectedRowIndexes {\n                if nil != item(atRow: i) as? FSTag {\n                    deselectRow(i)\n                }\n            }\n\n            extend = true\n        }\n\n        super.selectRowIndexes(indexes, byExtendingSelection: extend)\n    }\n\n    \n    // MARK: Delegates\n\n    func outlineView(_ outlineView: NSOutlineView, acceptDrop info: NSDraggingInfo, item: Any?, childIndex index: Int) -> Bool {\n        guard let vc = ViewController.shared() else { return false }\n        guard let sidebarItems = self.sidebarItems else { return false }\n        \n        // Drag and drop project (reorder)\n        if let data = info.draggingPasteboard.string(forType: NSPasteboard.project) {\n            let url = URL(fileURLWithPath: data)\n            \n            guard let project = Storage.shared().getProjectBy(url: url) else { return false }\n            \n            // Get src index for child and root folders\n            var srcIndex: Int?\n            let dstProject = item as? Project\n            \n            if dstProject != nil, let srcParent = project.parent, !srcParent.isDefault {\n                srcIndex = srcParent.child.firstIndex(where: { $0 === project })\n            } else {\n                srcIndex = sidebarItems.firstIndex(where: { $0 as? Project === project })\n            }\n            \n            guard let srcIndex = srcIndex else { return false }\n\n            var diff = 0\n            if srcIndex > index {\n                diff = 0\n            } else {\n                diff = -1\n            }\n            \n            outlineView.moveItem(at: srcIndex, inParent: item, to: index + diff, inParent: item)\n            \n            if item == nil {\n                self.sidebarItems?.remove(at: srcIndex)\n                self.sidebarItems?.insert(project, at: index + diff)\n                \n                // Save order\n                if let si = self.sidebarItems {\n                    var toSave = [Project]()\n                    for sidebarItem in si {\n                        \n                        // Save all projects from this level\n                        if let siProject = sidebarItem as? Project, project.parent === siProject.parent\n                            || (project.isBookmark && siProject.parent?.isDefault == true)\n                            || (project.parent?.isDefault == true && siProject.isBookmark)\n                        {\n                            toSave.append(siProject)\n                        }\n                    }\n                    saveOrderFor(projects: toSave)\n                }\n            } else {\n                project.parent?.child.remove(at: srcIndex)\n                project.parent?.child.insert(project, at: index + diff)\n                \n                // Save order\n                if let projects = project.parent?.child {\n                    saveOrderFor(projects: projects)\n                }\n            }\n            \n            return true\n        }\n\n        // Drag and drop Note\n        let board = info.draggingPasteboard\n\n        var urls = [URL]()\n        if let data = info.draggingPasteboard.data(forType: NSPasteboard.note),\n           let unarchivedData = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSURL.self], from: data) as? [URL] {\n            urls = unarchivedData\n        }\n\n        // tags\n        if let tag = item as? FSTag {\n            if urls.count > 0, Storage.shared().getBy(url: urls.first!) != nil {\n                for url in urls {\n                    if let note = Storage.shared().getBy(url: url) {\n                        note.addTag(tag.getFullName())\n                        _ = note.scanContentTags()\n                        viewDelegate?.notesTableView.reloadRow(note: note)\n\n                        if viewDelegate?.editor.note == note {\n                            viewDelegate?.refillEditArea(force: true)\n                        }\n                    }\n                }\n            }\n\n            return true\n        }\n\n        // projects\n        var maybeProject: Project?\n\n        if let sidebarItem = item as? SidebarItem, let sidebarProject = sidebarItem.project {\n            maybeProject = sidebarProject\n        }\n\n        if let sidebarProject = item as? Project {\n            maybeProject = sidebarProject\n        }\n        \n        if let sidebarItem = item as? SidebarItem, sidebarItem.type == .Inbox {\n            maybeProject = Storage.shared().getDefault()\n        }\n\n        guard let project = maybeProject else { return false }\n\n        if urls.count > 0, Storage.shared().getBy(url: urls.first!) != nil {\n            var notes = [Note]()\n            for url in urls {\n                if let note = Storage.shared().getBy(url: url) {\n                    notes.append(note)\n                }\n            }\n\n            if project.isTrash {\n                vc.editor.clear()\n                vc.storage.removeNotes(notes: notes) { _ in\n                    DispatchQueue.main.async {\n                        vc.notesTableView.removeRows(notes: notes)\n                    }\n                }\n            } else {\n                vc.moveReq(notes: notes, project: project) { success in\n                    guard success else { return }\n                }\n            }\n\n            return true\n        }\n\n        guard let draggedURLs = board.readObjects(forClasses: [NSURL.self], options: nil) as? [URL] else { return false }\n\n        for url in draggedURLs {\n            var isDirectory = ObjCBool(true)\n            if FileManager.default.fileExists(atPath: url.path, isDirectory: &isDirectory), isDirectory.boolValue && !url.path.contains(\".textbundle\") {\n\n                let dirName = url.lastPathComponent\n                let dirDst = project.url.appendingPathComponent(dirName)\n\n                if !FileManager.default.fileExists(atPath: dirDst.path) {\n                    try? FileManager.default.copyItem(at: url, to: dirDst)\n                } else {\n                    let alert = NSAlert()\n                    alert.alertStyle = .critical\n\n                    let information = NSLocalizedString(\"Folder with name '%@' already exist\", comment: \"\")\n                    alert.informativeText = String(format: information, dirName)\n                    alert.runModal()\n                }\n            } else {\n                _ = vc.copy(project: project, url: url)\n            }\n        }\n\n        return true\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, pasteboardWriterForItem item: Any) -> NSPasteboardWriting? {\n        guard let project = item as? Project, getSidebarTags() == nil else { return nil }\n\n        let item = NSPasteboardItem()\n        item.setString(project.url.path, forType: NSPasteboard.project)\n\n        return item\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, validateDrop info: NSDraggingInfo, proposedItem item: Any?, proposedChildIndex index: Int) -> NSDragOperation {\n        if let archivedData = info.draggingPasteboard.string(forType: NSPasteboard.project) {\n            let url = URL(fileURLWithPath: archivedData)\n            \n            guard let project = Storage.shared().getProjectBy(url: url) else {\n                return NSDragOperation()\n            }\n            \n            let dstProject = item as? Project\n\n            if isAllowedDropIndex(srcProject: project, dstProject: dstProject, dstIndex: index) {\n                return .move\n            }\n\n            return NSDragOperation()\n        }\n        \n        let board = info.draggingPasteboard\n        var isLocalNote = false\n        var urls = [URL]()\n\n        if let archivedData = info.draggingPasteboard.data(forType: NSPasteboard.note),\n           let urlsUnarchived = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSURL.self], from: archivedData) as? [URL] {\n            urls = urlsUnarchived\n\n            if let url = urls.first, Storage.shared().getBy(url: url) != nil {\n                isLocalNote = true\n            }\n            \n            // Disable drag and drop notes between sidebar items\n            if index > -1 {\n                return NSDragOperation(rawValue: 0)\n            }\n        }\n\n        if item as? Project != nil || (item as? SidebarItem)?.project != nil {\n            return isLocalNote ? .move : .copy\n        }\n\n        if item as? FSTag != nil {\n            return .copy\n        }\n\n        guard let sidebarItem = item as? SidebarItem else { return NSDragOperation() }\n        switch sidebarItem.type {\n        case .Inbox:\n            return .move\n        case .Trash:\n            if isLocalNote {\n                return .move\n            }\n            break\n        case .Separator:\n            guard sidebarItem.isSelectable() else { break }\n            \n            if isLocalNote {\n                return .move\n            }\n            \n            if let urls = board.readObjects(forClasses: [NSURL.self], options: nil) as? [URL], urls.count > 0 {\n                return .copy\n            }\n            break\n        default:\n            break\n        }\n        \n        return NSDragOperation()\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {\n        if let tag = item as? FSTag {\n            return tag.child.count\n        }\n\n        if let project = item as? Project {\n            return project.child.count\n        }\n\n        if let sidebar = sidebarItems, item == nil {\n            return sidebar.count\n        }\n        \n        return 0\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat {\n        if let si = item as? SidebarItem {\n            if si.type == .Separator {\n                return 15\n            }\n\n            if si.type == .Header {\n                return 50\n            }\n        }\n\n        return 25\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {\n        if let tag = item as? FSTag {\n            return tag.isExpandable()\n        }\n\n        if let project = item as? Project {\n            return project.isExpandable()\n        }\n\n        return false\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {\n        if let tag = item as? FSTag {\n            return tag.child[index]\n        }\n\n        if let project = item as? Project {\n            return project.child[index]\n        }\n\n        if let sidebar = sidebarItems, item == nil {\n            return sidebar[index]\n        }\n        \n        return String()\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, objectValueFor tableColumn: NSTableColumn?, byItem item: Any?) -> Any? {\n        return item\n    }\n\n    func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {\n\n        let cell = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: \"DataCell\"), owner: self) as! SidebarCellView\n\n        cell.icon.contentTintColor = NSColor.controlAccentColor\n\n        if let tag = item as? FSTag {\n            cell.type = .Tag\n\n            let image = NSImage(named: \"sidebar_tag\")\n            image?.isTemplate = true\n\n            cell.icon.image = image\n            cell.icon.isHidden = false\n            cell.label.frame.origin.x = 25\n            cell.textField?.stringValue = tag.getName()\n\n        } else if let project = item as? Project {\n\n            if project.isEncrypted {\n                if project.isLocked() {\n                    cell.type = .ProjectEncryptedLocked\n\n                    let image = NSImage(named: \"sidebar_project_encrypted_locked\")\n                    image?.isTemplate = true\n\n                    cell.icon.image = image\n                } else {\n                    cell.type = .ProjectEncryptedUnlocked\n\n                    let image = NSImage(named: \"sidebar_project_encrypted_unlocked\")\n                    image?.isTemplate = true\n\n                    cell.icon.image = image\n                }\n            } else {\n                cell.type = .Project\n\n                let image = NSImage(named: \"sidebar_project\")\n                image?.isTemplate = true\n\n                cell.icon.image = image\n            }\n            \n            cell.icon.isHidden = false\n            cell.label.frame.origin.x = 25\n            cell.textField?.stringValue = project.label\n\n        } else if let si = item as? SidebarItem {\n            let name = si.type == .Separator ? \"\" : si.name\n            \n            cell.textField?.stringValue = name\n            cell.type = si.type\n\n            if let name = si.type.icon, let image = si.getIcon(name: name) {\n                cell.icon.image = image\n            } else {\n                cell.icon.image = nil\n            }\n\n            cell.icon.isHidden = false\n            cell.label.frame.origin.x = 25\n\n            if si.type == .Header {\n                let cell = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: \"HeaderCell\"), owner: self) as! SidebarHeaderCellView\n\n                cell.label.frame.origin.x = 2\n                cell.label.stringValue = name\n\n                return cell\n            }\n        }\n\n        return cell\n    }\n    \n    func outlineView(_ outlineView: NSOutlineView, isGroupItem item: Any) -> Bool {\n        return false\n    }\n\n    func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool {\n        if nil != item as? FSTag {\n            return true\n        }\n\n        if nil != item as? Project {\n            return true\n        }\n\n        if let sidebarItem = item as? SidebarItem {\n            return sidebarItem.isSelectable()\n        }\n        \n        return false\n    }\n\n    func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {\n        return SidebarTableRowView(frame: NSZeroRect)\n    }\n\n    func outlineViewSelectionDidChange(_ notification: Notification) {\n        defer {\n            isFirstLaunch = false\n        }\n        \n        if Storage.shared().welcomeProject != nil {\n            Storage.shared().welcomeProject = nil\n            return\n        }\n        \n        guard let vd = viewDelegate else { return }\n        guard let view = notification.object as? NSOutlineView else { return }\n\n        viewDelegate?.notesTableView.disableLockedProject()\n        \n        if UserDataService.instance.isNotesTableEscape {\n            UserDataService.instance.isNotesTableEscape = false\n        }\n\n        let hasChangedSidebarItemsState = isChangedSidebarItemsState()\n        let hasChangedProjectsState = isChangedProjectsState()\n        let hasChangedTagsState = isChangedTagsState()\n\n        if hasChangedTagsState || hasChangedProjectsState || hasChangedSidebarItemsState {\n            vd.editor.clear()\n        }\n\n        let i = view.selectedRow\n\n        if UserDefaultsManagement.inlineTags,\n            view.item(atRow: i) as? FSTag == nil,\n            hasChangedProjectsState || hasChangedSidebarItemsState {\n\n            reloadTags()\n        }\n\n        if let item = view.item(atRow: i) as? SidebarItem {\n            if UserDefaultsManagement.lastSidebarItem == item.type.rawValue\n                && !hasChangedTagsState\n                && !isFirstLaunch {\n                return\n            }\n\n            UserDefaultsManagement.lastSidebarItem = item.type.rawValue\n            UserDefaultsManagement.lastProjectURL = nil\n        }\n\n        if let selectedProject = view.item(atRow: i) as? Project {\n            if UserDefaultsManagement.lastProjectURL == selectedProject.url\n                && !hasChangedTagsState\n                && !isFirstLaunch {\n                return\n            }\n\n            UserDefaultsManagement.lastProjectURL = selectedProject.url\n            UserDefaultsManagement.lastSidebarItem = nil\n            \n            if selectedProject.isLocked() {\n                viewDelegate?.notesTableView.enableLockedProject()\n            }\n        }\n\n        if !isFirstLaunch {\n            vd.search.stringValue = \"\"\n        }\n\n        guard !UserDataService.instance.skipSidebarSelection else {\n            UserDataService.instance.skipSidebarSelection = false\n            return\n        }\n\n        vd.buildSearchQuery()\n        vd.updateTable() {\n\n            if let note = self.selectNote {\n                DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n                    if let i = vd.notesTableView.getIndex(for: note) {\n                        vd.notesTableView.selectRowIndexes([i], byExtendingSelection: false)\n                        vd.notesTableView.scrollRowToVisible(i)\n                    }\n                }\n\n                self.selectNote = nil\n            }\n        }\n    }\n\n    // MARK: Actions\n    @IBAction func revealInFinder(_ sender: Any) {\n        if getSidebarItems()?.first?.type == .Inbox {\n            if let url = Storage.shared().getDefault()?.url {\n                NSWorkspace.shared.activateFileViewerSelecting([url])\n            }\n            return\n        }\n        \n        guard let projects = getSelectedProjects() else { return }\n\n        let urls = projects.map { $0.url }\n        \n        if urls.count > 0 {\n            NSWorkspace.shared.activateFileViewerSelecting(urls)\n        }\n    }\n    \n    @IBAction func renameFolderMenu(_ sender: Any) {\n        guard let vc = ViewController.shared(),\n              let sidebarOutlineView = vc.sidebarOutlineView else { return }\n\n        if sidebarOutlineView.getSidebarTags() != nil {\n            sidebarOutlineView.renameTag(NSMenuItem())\n            return\n        }\n\n        guard sidebarOutlineView.getSelectedProject() != nil else { return }\n\n        guard let projectRow = sidebarOutlineView.rowView(atRow: sidebarOutlineView.selectedRow, makeIfNecessary: false),\n              let cell = projectRow.view(atColumn: 0) as? SidebarCellView else { return }\n        \n        cell.label.isEditable = true\n        cell.label.becomeFirstResponder()\n    }\n\n    @IBAction public func removeTags(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        guard let window = MainWindowController.shared() else { return }\n        guard let selectedTags = vc.sidebarOutlineView.getSidebarTags() else { return }\n\n        let alert = NSAlert()\n        vc.alert = alert\n\n        let messageText = NSLocalizedString(\"Are you really want to remove %d tag(s)? This action can not be undone.\", comment: \"\")\n\n        alert.messageText = NSLocalizedString(\"Remove Tags\", comment: \"\")\n        alert.informativeText = String(format: messageText, selectedTags.count)\n\n        alert.alertStyle = .informational\n        alert.addButton(withTitle: NSLocalizedString(\"Remove\", comment: \"\"))\n        alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n        alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n            if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n\n                let notes = vc.notesTableView.getNoteList()\n                var plainTags = [String]()\n                for index in vc.sidebarOutlineView.selectedRowIndexes {\n                    if let tag = vc.sidebarOutlineView.item(atRow: index) as? FSTag {\n                        plainTags.append(contentsOf: tag.getAllChild())\n                    }\n                }\n\n                vc.sidebarOutlineView.remove(tags: plainTags, from: notes)\n            }\n\n            NSApp.mainWindow?.makeFirstResponder(vc.sidebarOutlineView)\n            vc.alert = nil\n        }\n    }\n\n    @IBAction func renameTag(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        guard let window = MainWindowController.shared() else { return }\n        guard let tags = vc.sidebarOutlineView.getRawSidebarTags() else { return }\n\n        let alert = NSAlert()\n        vc.alert = alert\n\n        let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 290, height: 20))\n        if let name = tags.first?.getFullName() {\n            field.stringValue = name\n        }\n\n        alert.messageText = NSLocalizedString(\"Rename Tags\", comment: \"\")\n        alert.informativeText = NSLocalizedString(\"Please enter tag name:\", comment: \"\")\n        alert.accessoryView = field\n        alert.alertStyle = .informational\n        alert.addButton(withTitle: NSLocalizedString(\"OK\", comment: \"\"))\n        alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n        alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n            if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                let name = field.stringValue.replacingOccurrences(of: \"\\\\s\", with: \"\", options: NSString.CompareOptions.regularExpression, range: nil)\n                self.rename(tags: tags, name: name)\n            }\n\n            NSApp.mainWindow?.makeFirstResponder(vc.sidebarOutlineView)\n            vc.alert = nil\n        }\n\n        field.becomeFirstResponder()\n    }\n\n    @IBAction func delete(_ sender: Any) {\n        guard let vc = ViewController.shared(),\n              let sidebarOutlineView = vc.sidebarOutlineView else { return }\n\n        if sidebarOutlineView.getSidebarTags() != nil {\n            sidebarOutlineView.removeTags(NSMenuItem())\n            return\n        }\n\n        guard let projects = sidebarOutlineView.getSelectedProjects() else { return }\n\n        for project in projects {\n            delete(project: project)\n        }\n        \n        UserDefaultsManagement.lastSidebarItem = nil\n        UserDefaultsManagement.lastProjectURL = nil\n        UserDefaultsManagement.lastSelectedURL = nil\n    }\n\n    private func delete(project: Project) {\n        guard let vc = ViewController.shared() else { return }\n\n        if !(project.isDefault || project.isBookmark) {\n            guard let window = MainWindowController.shared() else { return }\n\n            let alert = NSAlert.init()\n            vc.alert = alert\n\n            let messageText = NSLocalizedString(\"Are you sure you want to remove project \\\"%@\\\" and all files inside?\", comment: \"\")\n\n            alert.messageText = String(format: messageText, project.label)\n            alert.informativeText = NSLocalizedString(\"This action cannot be undone.\", comment: \"Delete menu\")\n            alert.addButton(withTitle: NSLocalizedString(\"Remove\", comment: \"Delete menu\"))\n            alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"Delete menu\"))\n            alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n                if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                    do {\n                        if let note = vc.editor.note {\n                            vc.closeAllOpenedWindows(where: note)\n                            if note.project == project {\n                                vc.editor.clear()\n                            }\n                        }\n                        \n                        self.removeRows(projects: [project])\n                        try FileManager.default.removeItem(at: project.url)\n                        \n                        self.storage.cleanCachedTree(url: project.url)\n                    } catch {\n                        print(error)\n                    }\n\n                    NSApp.mainWindow?.makeFirstResponder(vc.sidebarOutlineView)\n                }\n\n                vc.alert = nil\n            }\n            return\n        }\n\n        let projects = storage.getAvailableProjects().filter({ $0.url.path.starts(with: project.url.path) })\n\n        for item in projects {\n            SandboxBookmark().removeBy(item.url)\n        }\n\n        vc.sidebarOutlineView.removeRows(projects: projects)\n        vc.sidebarOutlineView.selectRowIndexes([0], byExtendingSelection: false)\n        vc.updateTable()\n    }\n    \n    @IBAction func removeFolderEncryption(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared(),\n            let projects = vc.sidebarOutlineView.getSelectedProjects() else { return }\n\n        guard let firstProject = projects.first  else { return }\n\n        if firstProject.isEncrypted {\n            vc.getMasterPassword() { password in\n                vc.sidebarOutlineView.decrypt(projects: projects, password: password)\n            }\n        }\n    }\n\n    @IBAction func toggleFolderLock(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared(),\n            let projects = vc.sidebarOutlineView.getSelectedProjects() else { return }\n\n        guard let firstProject = projects.first  else { return }\n        \n        // Encrypt\n        if !firstProject.isEncrypted {\n            vc.getMasterPassword(forEncrypt: true) { password in\n                vc.sidebarOutlineView.encrypt(projects: projects, password: password)\n            }\n            \n            return\n        }\n        \n        // Lock password exist\n        if firstProject.password != nil {\n            vc.sidebarOutlineView.lock(projects: projects)\n\n        // Unlock\n        } else {\n            let action = sender.identifier?.rawValue\n            vc.getMasterPassword() { password in\n                vc.sidebarOutlineView.unlock(projects: projects, password: password, action: action)\n            }\n        }\n    }\n\n    public func decrypt(projects: [Project], password: String) {\n        var decryptedQty = 0\n        var total = 0\n        for project in projects {\n            let notes = project.storage.getNotesBy(project: project)\n            total += notes.count\n\n            let decrypted = project.decrypt(password: password)\n            decryptedQty = decrypted.count\n            self.showTags(notes: decrypted)\n        }\n        \n        DispatchQueue.main.async {\n            guard decryptedQty > 0 || total == 0 else {\n                self.wrongPassAlert()\n                return\n            }\n\n            guard let vc = ViewController.shared() else { return }\n\n            vc.notesTableView.disableLockedProject()\n            vc.notesTableView.reloadData()\n            \n            vc.updateTable()\n            \n            self.reloadData(forRowIndexes: self.selectedRowIndexes, columnIndexes: [0])\n        }\n    }\n    \n    public func encrypt(projects: [Project], password: String) {\n        for project in projects {\n            let encrypted = project.encrypt(password: password)\n            self.hideTags(notes: encrypted)\n        }\n        \n        DispatchQueue.main.async {\n            guard let vc = ViewController.shared() else { return }\n            vc.notesTableView.enableLockedProject()\n            \n            self.reloadData(forRowIndexes: self.selectedRowIndexes, columnIndexes: [0])\n            \n            // Lock all editors\n            let editors = AppDelegate.getEditTextViews()\n            for editor in editors {\n                if let evc = editor.editorViewController {\n                    evc.refillEditArea()\n                }\n            }\n        }\n    }\n    \n    public func lock(projects: [Project]) {\n        guard let vc = ViewController.shared() else { return }\n        \n        var locked = [Note]()\n        for project in projects {\n            locked.append(contentsOf: project.lock())\n        }\n        \n        hideTags(notes: locked)\n        \n        if let selectedProject = getSelectedProject(), projects.contains(selectedProject) {\n            vc.notesTableView.enableLockedProject()\n            vc.updateTable()\n            vc.editor.clear()\n        }\n        \n        for project in projects {\n            reloadItem(project)\n        }\n        \n        // Lock all editors\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                evc.refillEditArea()\n            }\n        }\n    }\n    \n    public func unlock(projects: [Project], password: String, action: String? = nil) {\n        var unlocked = [Note]()\n        var isEmptyDir = false\n        \n        for project in projects {\n            let result = project.unlock(password: password)\n\n            // no notes\n            if result.0.count == 0 {\n                isEmptyDir = true\n                continue\n            }\n\n            unlocked.append(contentsOf: result.1)\n        }\n        \n        self.showTags(notes: unlocked)\n        \n        DispatchQueue.main.async {\n            if unlocked.count > 0 || (projects.count == 1 && isEmptyDir) {\n                guard let vc = ViewController.shared() else { return }\n                \n                vc.notesTableView.disableLockedProject()\n                vc.updateTable() {\n                    if action == \"menu.newNote\" {\n                        DispatchQueue.main.async {\n                            _ = vc.createNote()\n                        }\n                    }\n                }\n                \n                self.reloadData(forRowIndexes: self.selectedRowIndexes, columnIndexes: [0])\n            } else {\n                self.wrongPassAlert()\n            }\n        }\n    }\n    \n    private func wrongPassAlert() {\n        let alert = NSAlert()\n        alert.alertStyle = .critical\n        alert.messageText = NSLocalizedString(\"Wrong password\", comment: \"\")\n        alert.beginSheetModal(for: self.window!) { (returnCode: NSApplication.ModalResponse) -> Void in }\n    }\n    \n    private func hideTags(notes: [Note]) {\n        var notesTags = [String]()\n        for note in notes {\n            let tags = note.tags\n            note.tags.removeAll()\n            for tag in tags {\n                if !notesTags.contains(tag) {\n                    notesTags.append(tag)\n                }\n            }\n        }\n        \n        DispatchQueue.main.async {\n            self.removeTags(notesTags)\n        }\n    }\n    \n    private func showTags(notes: [Note]) {\n        var notesTags = [String]()\n        for note in notes {\n            if note.tags.count == 0 {\n                _ = note.scanContentTags().0\n            }\n            \n            for insertTag in note.tags {\n                if !notesTags.contains(insertTag) {\n                    notesTags.append(insertTag)\n                }\n            }\n        }\n        \n        DispatchQueue.main.async {\n            self.addTags(notesTags)\n        }\n    }\n\n    // MARK: Functions\n    \n    private func isAllowedDropIndex(srcProject: Project, dstProject: Project?, dstIndex: Int) -> Bool {\n        guard let sidebarItems = self.sidebarItems else { return false }\n        \n        var srcIndex: Int?\n        \n        if dstProject != nil, let srcParent = srcProject.parent, !srcParent.isDefault {\n            srcIndex = srcParent.child.firstIndex(where: { $0 === srcProject })\n        } else {\n            srcIndex = sidebarItems.firstIndex(where: { $0 as? Project === srcProject })\n        }\n        \n        guard let srcIndex = srcIndex else { return false }\n        \n        if srcIndex == dstIndex || srcIndex + 1 == dstIndex {\n            return false\n        }\n        \n        // Allow child reordering if parent equal to dst\n        if let dstProject = dstProject, dstProject === srcProject.parent {\n            return true\n        }\n        \n        if sidebarItems.indices.contains(dstIndex - 1),\n            let proposedProject = sidebarItems[dstIndex - 1] as? Project,\n           srcProject.parent === proposedProject.parent \n            || (srcProject.isBookmark && proposedProject.parent?.isDefault == true)\n            || (srcProject.parent?.isDefault == true && proposedProject.isBookmark)\n        {\n            return true\n        }\n        \n        if sidebarItems.indices.contains(dstIndex), sidebarItems[dstIndex] as? Project == nil {\n            return false\n        }\n        \n        if sidebarItems.indices.contains(dstIndex + 1),\n            let proposedProject = sidebarItems[dstIndex + 1] as? Project,\n           srcProject.parent === proposedProject.parent \n            || (srcProject.isBookmark && proposedProject.parent?.isDefault == true)\n            || (srcProject.parent?.isDefault == true && proposedProject.isBookmark)\n        {\n            return true\n        }\n\n        return false\n    }\n    \n    private func saveOrderFor(projects: [Project]) {\n        var i = 0\n        for project in projects {\n            project.settings.priority = i\n            i += 1\n            \n            project.saveSettings()\n        }\n    }\n\n    public func removeTags(notes: [Note]) {\n        guard let vc = ViewController.shared() else { return }\n\n        var allNoteTags: Set<String> = []\n        for note in vc.notesTableView.getNoteList() {\n            for tag in note.tags {\n                if !allNoteTags.contains(tag) {\n                    allNoteTags.insert(tag)\n                }\n            }\n        }\n\n        var allRemoveTags = [String]()\n        for note in notes {\n            for tag in note.tags {\n                allRemoveTags.append(tag)\n            }\n        }\n\n        var remove = [String]()\n        for tag in allRemoveTags {\n            if !allNoteTags.contains(tag) {\n                remove.append(tag)\n            }\n        }\n\n        removeTags(remove)\n    }\n\n    public func insertTags(note: Note) {\n        var tags = [String]()\n        for tag in note.tags {\n            if !tags.contains(tag) {\n                tags.append(tag)\n            }\n        }\n\n        var sTags: Set<String> = []\n        if let allSidebarTags = sidebarItems?.filter({ ($0 as? FSTag) != nil }).map({ ($0 as? FSTag)!.getFullName() }) {\n            sTags = Set(allSidebarTags)\n        }\n\n        var insert = [String]()\n        for tag in tags {\n            if !sTags.contains(tag) {\n                insert.append(tag)\n            }\n        }\n\n        addTags(insert)\n    }\n\n    private func isChangedSidebarItemsState() -> Bool {\n        let sidebarItems = getSidebarItems()\n        let selectedItems = selectedSidebarItems\n\n        selectedSidebarItems = sidebarItems\n\n        if let current = sidebarItems, let selected = selectedItems {\n            for item in current {\n                if !selected.contains(where: { $0 === item }) {\n                    return true\n                }\n            }\n\n            return false\n        }\n\n        return sidebarItems?.count != selectedItems?.count\n    }\n\n    private func isChangedProjectsState() -> Bool {\n        let sidebarProjects = getSelectedProjects()\n        let selectedItems = selectedProjects\n\n        selectedProjects = sidebarProjects\n\n        if let current = sidebarProjects, let selected = selectedItems {\n            for item in current {\n                if !selected.contains(where: { $0 === item }) {\n                    return true\n                }\n            }\n\n            return false\n        }\n\n        return sidebarProjects?.count != selectedItems?.count\n    }\n\n    private func isChangedTagsState() -> Bool {\n        let sidebarTags = getSidebarTags()\n        let selectedItems = selectedTags\n\n        selectedTags = sidebarTags\n\n        if let current = sidebarTags, let selected = selectedTags {\n            for item in current {\n                if !selected.contains(item) {\n                    return true\n                }\n            }\n\n            return false\n        }\n\n        return sidebarTags?.count != selectedItems?.count\n    }\n\n    public func remove(project: Project) {\n        selectedProjects?.removeAll(where: { $0 === project })\n\n        if UserDataService.instance.lastProject?.path == project.url.path {\n            self.viewDelegate?.cleanSearchAndEditArea()\n            selectRowIndexes(IndexSet(integer: 0), byExtendingSelection: false)\n        }\n\n        storage.cleanCachedTree(url: project.url)\n        storage.removeBy(project: project)\n\n        guard let vc = ViewController.shared(), vc.isVisibleSidebar() else { return }\n        \n        if let parent = project.parent, !parent.isDefault {\n            if let index = parent.child.firstIndex(of: project) {\n                parent.child.removeAll(where: { $0 == project })\n                removeItems(at: [index], inParent: parent, withAnimation: .effectFade)\n                reloadItem(parent)\n            }\n        } else {\n            if let index = sidebarItems?.firstIndex(where: { ($0 as? Project) == project }) {\n                sidebarItems?.remove(at: index)\n                removeItems(at: [index], inParent: nil, withAnimation: .effectFade)\n            }\n        }\n    }\n    \n    public func insertRows(projects: [Project]) {\n        for project in projects {\n            insert(project: project)\n        }\n        \n        storage.loadProjectRelations()\n    }\n    \n    public func removeRows(projects: [Project]) {\n        \n        // Append and remove childs too if exist\n        var projects = projects\n        for item in projects {\n            let child = item.getChildProjectsByURL()\n            for childItem in child {\n                \n                // No project with url\n                if projects.first(where: { $0.url.path == childItem.url.path }) == nil {\n                    projects.append(childItem)\n                }\n            }\n        }\n        \n        for project in projects {\n            \n            // Remove notes from NoteTableView\n            let notes = project.getNotes()\n            viewDelegate?.notesTableView.removeRows(notes: notes)\n            \n            // Remove projects from SidebarOutlineView\n            remove(project: project)\n        }\n        \n        storage.loadProjectRelations()\n    }\n    \n    public func insert(project: Project) {\n        guard let vc = ViewController.shared(),\n              vc.isVisibleSidebar(),\n              let lastProjectIndex = vc.sidebarOutlineView.getProjectsSeparatorPosition() else { return }\n\n        if let parent = storage.findParent(url: project.url) {\n            if parent.isDefault {\n                let offset = lastProjectIndex + countProjects() + 1\n                vc.sidebarOutlineView.sidebarItems?.insert(project, at: offset)\n                vc.sidebarOutlineView.insertItems(at: [offset], inParent: nil, withAnimation: .effectFade)\n            } else {\n                if parent.child.filter({ $0.url == project.url }).count == 0 {\n                    parent.child.insert(project, at: 0)\n                    vc.sidebarOutlineView.insertItems(at: [0], inParent: parent, withAnimation: .effectFade)\n                }\n                \n                vc.sidebarOutlineView.reloadItem(parent)\n\n            }\n        } else {\n            let offset = lastProjectIndex + countProjects() + 1\n            vc.sidebarOutlineView.sidebarItems?.insert(project, at: offset)\n            vc.sidebarOutlineView.insertItems(at: [offset], inParent: nil, withAnimation: .effectFade)\n        }\n        \n        viewDelegate?.fsManager?.reloadObservedFolders()\n    }\n        \n    public func addRoot() {\n        let openPanel = NSOpenPanel()\n        openPanel.allowsMultipleSelection = false\n        openPanel.canChooseDirectories = true\n        openPanel.canCreateDirectories = true\n        openPanel.canChooseFiles = false\n        openPanel.begin { (result) -> Void in\n            if result == .OK {\n                guard let url = openPanel.url else { return }\n                \n                let bookmarksManager = SandboxBookmark.sharedInstance()\n                bookmarksManager.store(url: url)\n                bookmarksManager.save()\n                \n                if let results = self.storage.insert(url: url, bookmark: true) {\n                    self.insertRows(projects: results)\n                    \n                    if let vc = self.viewDelegate {\n                        vc.fsManager?.restart()\n                    }\n                }\n            }\n        }\n    }\n\n    public func getSidebarItems() -> [SidebarItem]? {\n        var items = [SidebarItem]()\n\n        for i in selectedRowIndexes {\n            if let project = item(atRow: i) as? SidebarItem {\n                items.append(project)\n            }\n        }\n\n        return items\n    }\n\n    public func getSidebarProjects() -> [Project]? {\n        guard let vc = ViewController.shared(), let v = vc.sidebarOutlineView else { return nil }\n\n        var projects = [Project]()\n        for i in v.selectedRowIndexes {\n            if let si = item(atRow: i) as? SidebarItem, let project = si.project, !project.isVirtual, si.tag == nil {\n                projects.append(project)\n            }\n        }\n\n        for i in v.selectedRowIndexes {\n            if let project = item(atRow: i) as? Project {\n                projects.append(project)\n            }\n        }\n\n        for project in projects {\n            if project.settings.showNestedFoldersContent, !project.isEncrypted, let child = project.getAllChild() {\n                for item in child {\n                    if !projects.contains(item) {\n                        projects.append(item)\n                    }\n                }\n            }\n        }\n\n        if projects.count > 0 {\n            return projects\n        }\n\n        return nil\n    }\n\n    public func getSidebarTags() -> [String]? {\n        guard let vc = ViewController.shared(), let v = vc.sidebarOutlineView else { return nil }\n\n        var tags = [String]()\n        for i in v.selectedRowIndexes {\n            if let tag = (item(atRow: i) as? FSTag)?.getFullName() {\n                tags.append(tag)\n            }\n        }\n\n        if tags.count > 0 {\n            return tags\n        }\n\n        return nil\n    }\n\n    public func getRawSidebarTags() -> [FSTag]? {\n        guard let vc = ViewController.shared(), let v = vc.sidebarOutlineView else { return nil }\n\n        var tags = [FSTag]()\n        for i in v.selectedRowIndexes {\n            if let tag = (item(atRow: i) as? FSTag) {\n                tags.append(tag)\n            }\n        }\n\n        if tags.count > 0 {\n            return tags\n        }\n\n        return nil\n    }\n\n    public func getSelectedInlineTags() -> String {\n        var inlineTags = String()\n        if let tags = getSidebarTags() {\n            for tag in tags {\n                inlineTags += \"#\\(tag) \"\n            }\n        }\n        return inlineTags\n    }\n\n    public func selectNext() {\n        let i = selectedRow + 1\n        guard let si = sidebarItems, si.indices.contains(i) else { return }\n\n        if let next = si[i] as? SidebarItem {\n            if next.type == .Separator && next.project == nil {\n                let j = i + 1\n\n                guard let si = sidebarItems, si.indices.contains(j) else { return }\n\n                if let next = si[j] as? SidebarItem, next.type != .Separator {\n                    selectRowIndexes([j], byExtendingSelection: false)\n                    return\n                }\n\n                return\n            }\n        }\n\n        selectRowIndexes([i], byExtendingSelection: false)\n    }\n\n    public func selectPrev() {\n        let i = selectedRow - 1\n        guard let si = sidebarItems, si.indices.contains(i) else { return }\n\n        if let next = si[i] as? SidebarItem {\n            if next.type == .Separator && next.project == nil {\n                let j = i - 1\n\n                guard let si = sidebarItems, si.indices.contains(j) else { return }\n\n                if let next = si[j] as? SidebarItem, next.type != .Separator {\n                    selectRowIndexes([j], byExtendingSelection: false)\n                    return\n                }\n\n                return\n            }\n        }\n\n        selectRowIndexes([i], byExtendingSelection: false)\n    }\n\n    public func getSelectedProject() -> Project? {\n        guard let vc = ViewController.shared(), let v = vc.sidebarOutlineView else { return nil }\n\n        if let project = v.item(atRow: v.selectedRow) as? Project {\n            return project\n        }\n\n        if let sidebarItem = v.item(atRow: v.selectedRow) as? SidebarItem {\n            if sidebarItem.type == .Inbox {\n                return vc.storage.getDefault()\n            }\n            \n            if let project = sidebarItem.project {\n                return project\n            }\n        }\n\n        return nil\n    }\n\n    public func getSelectedProjects() -> [Project]? {\n        var items = [Project]()\n\n        for i in selectedRowIndexes {\n            if let project = item(atRow: i) as? Project {\n                items.append(project)\n            }\n        }\n\n        return items\n    }\n\n    private func getSelectedProjectsIndexes() -> [Int]? {\n        var items = [Int]()\n\n        for i in selectedRowIndexes {\n            if item(atRow: i) as? Project != nil {\n                items.append(i)\n            }\n        }\n\n        return items\n    }\n    \n    @objc public func reloadSidebar() {\n        guard let vc = ViewController.shared() else { return }\n\n        vc.fsManager?.reloadObservedFolders()\n        vc.loadMoveMenu()\n\n        let selected = vc.sidebarOutlineView.selectedRow\n        vc.sidebarOutlineView.sidebarItems = Sidebar().getList()\n        vc.sidebarOutlineView.reloadData()\n        vc.sidebarOutlineView.selectRowIndexes([selected], byExtendingSelection: false)\n\n        if let project = getSelectedProject(), project.isLocked() {\n            vc.notesTableView.enableLockedProject()\n        }\n\n        vc.sidebarOutlineView.loadAllTags()\n    }\n    \n    public func deselectAllTags() {\n        guard let items = self.sidebarItems?.filter({($0 as? FSTag) != nil}) else { return }\n        for item in items {\n            let i = self.row(forItem: item)\n            guard i > -1 else { continue }\n\n            if let row = self.rowView(atRow: i, makeIfNecessary: false), let cell = row.view(atColumn: 0) as? SidebarCellView {\n                cell.icon.image = NSImage(named: \"sidebar_tag\")\n            }\n        }\n    }\n\n    public func selectSidebar(type: SidebarItemType) {\n        if let i = sidebarItems?.firstIndex(where: {($0 as? SidebarItem)?.type == type }) {\n            selectRowIndexes([i], byExtendingSelection: false)\n        }\n    }\n\n    public func selectSidebarRoot() {\n        if let i = sidebarItems?.firstIndex(where: { ($0 as? Project)?.isDefault == true }) {\n            selectRowIndexes([i], byExtendingSelection: false)\n        }\n    }\n\n    public func select(note: Note) {\n        let sidebarItem = sidebarItems?.first(where: {($0 as? SidebarItem)?.project == note.project || $0 as? Project == note.project })\n\n        var index = row(forItem: sidebarItem)\n        if (index == -1) {\n            var expandQueue = [Project]()\n            var project = note.project\n            \n            while let parent = project.parent, isExpandable(parent) {\n                project = parent\n                expandQueue.append(project)\n            }\n            \n            for item in expandQueue.reversed() {\n                expandItem(item)\n            }\n            \n            index = row(forItem: note.project)\n        }\n\n        if index > -1 {\n            selectNote = note\n            scrollRowToVisible(index)\n            selectRowIndexes([index], byExtendingSelection: false)\n            return\n        }\n    }\n    \n    public func remove(tag: FSTag) {\n        if let i = sidebarItems?.firstIndex(where: { ($0 as? FSTag) === tag }) {\n            self.removeItems(at: [i], inParent: nil, withAnimation: [])\n            sidebarItems?.remove(at: i)\n        }\n    }\n\n    public func remove(tagName: String) {\n        let tags = tagName.components(separatedBy: \"/\")\n        guard let parent = tags.first else { return }\n        \n        if let vc = ViewController.shared(), !vc.isVisibleSidebar() {\n            return\n        }\n\n        if let tag = sidebarItems?.first(where: {($0 as? FSTag)?.getName() == parent }) as? FSTag {\n            if tags.count == 1 {\n                let allTags = ViewController.shared()?.sidebarOutlineView.getAllTags()\n                let count = allTags?.filter({ $0.starts(with: parent + \"/\") || $0 == parent }).count ?? 0\n\n                if count == 0 {\n                    if let index = sidebarItems?.firstIndex(where: { ($0 as? FSTag)?.getName() == parent }) {\n                        removeItems(at: [index], inParent: nil, withAnimation: [])\n                        sidebarItems?.remove(at: index)\n                    }\n                }\n            } else if var foundTag = tag.find(name: tagName) {\n                while let parent = foundTag.getParent() {\n                    if let i = parent.indexOf(child: foundTag) {\n                        removeItems(at: [i], inParent: parent, withAnimation: [])\n                        parent.remove(by: i)\n                    }\n\n                    if\n                        parent.getParent() == nil\n                        && parent.child.count == 0,\n                        let i = sidebarItems?.firstIndex(where: { ($0 as? FSTag)?.getName() == parent.getName() })\n                    {\n                        if isAllowTagRemoving(parent.getName()) {\n                            removeItems(at: [i], inParent: nil, withAnimation: [])\n                            sidebarItems?.remove(at: i)\n                        }\n\n                        break\n                    }\n\n                    foundTag = parent\n                }\n            }\n        }\n    }\n\n    public func addTags(_ tags: [String], shouldUnloadOld: Bool = false) {\n        guard tags.count > 0 else {\n            unloadAllTags()\n            return\n        }\n        \n        beginUpdates()\n\n        if shouldUnloadOld {\n            unloadAllTags()\n        }\n\n        for tag in tags {\n            addTag(tag: tag)\n        }\n\n        endUpdates()\n    }\n\n    public func removeTags(_ tags: [String]) {\n        var removeTags = [String]()\n\n        for tag in tags {\n            if isAllowTagRemoving(tag) {\n                removeTags.append(tag)\n            }\n        }\n\n        beginUpdates()\n        for tag in removeTags {\n            remove(tagName: tag)\n        }\n        endUpdates()\n    }\n\n    public func isAllowTagRemoving(_ name: String) -> Bool {\n        let tags = getAllTags()\n        var allow = true\n\n        for tag in tags {\n            if tag.starts(with: name + \"/\") || tag == name {\n                allow = false\n            }\n        }\n\n        return allow\n    }\n\n    public func reloadTags() {\n        if UserDefaultsManagement.inlineTags {\n            loadAllTags()\n        }\n    }\n\n    public func unloadAllTags() {\n        if let tags = sidebarItems?.filter({ ($0 as? FSTag) != nil && ($0 as? FSTag)?.getParent()\n             == nil }) as? [FSTag] {\n            beginUpdates()\n            for tag in tags {\n                remove(tag: tag)\n            }\n            endUpdates()\n        }\n    }\n\n    public func getAllTags() -> [String] {\n        var tags: Set<String> = []\n        var projects: [Project]? = getSidebarProjects()\n        let selectedItem = item(atRow: selectedRow) as? SidebarItem\n\n\n        if selectedItem?.type == .All || projects == nil {\n            projects = storage.getProjects().filter({ !$0.isTrash && $0.settings.showInCommon })\n        }\n\n        if let projects = projects {\n            for project in projects {\n                let projectTags = project.getAllTags()\n                for tag in projectTags {\n                    if !tags.contains(tag) {\n                        tags.insert(tag)\n                    }\n                }\n            }\n        }\n\n        return Array(tags)\n    }\n\n    public func loadAllTags() {\n        let tags = getAllTags()\n\n        addTags(tags.sorted(), shouldUnloadOld: true)\n    }\n\n    public func select(tag: String) {\n        let fullTags = tag.split(separator: \"/\").map(String.init);\n        var items = sidebarItems;\n        var tagDepth: Int = 0\n        var selectedIndexes = getSelectedProjectsIndexes() ?? [tagDepth]\n\n        let currentNote = viewDelegate?.editor.note\n        selectNote = currentNote\n\n        for tagIndex in 0..<fullTags.count{\n            guard let tag = items?.first(where: {($0 as? FSTag)?.getName() == fullTags[tagIndex]}) as? FSTag else { break }\n            var index = row(forItem: tag)\n\n            if index < 0 {\n                index = items?.firstIndex(where: {($0 as? FSTag)?.getName() == fullTags[tagIndex]}) ?? 0\n                tagDepth += index + 1\n            } else {\n                tagDepth = index\n            }\n\n            expandItem(item(atRow: tagDepth))\n            scrollRowToVisible(tagDepth)\n\n            items = tag.child\n        }\n\n        if !selectedIndexes.contains(tagDepth) {\n            selectedIndexes.append(tagDepth)\n        }\n\n        super.selectRowIndexes(IndexSet(selectedIndexes), byExtendingSelection: false)\n    }\n        \n    // select and open rowIndexes\n    func selectRowIndexes(_ indexes: IndexSet, byExtendingSelection extend: Bool, _ tagIndexArr : [Int]) {\n        guard let index = indexes.first else { return }\n\n        var extend = extend\n\n        if (item(atRow: index) as? FSTag) != nil {\n            for i in selectedRowIndexes {\n                if nil != item(atRow: i) as? FSTag {\n                    deselectRow(i)\n                }\n            }\n            extend = true\n        }\n\n        tagIndexArr.forEach { tagIndex in\n            self.expandItem(item(atRow: tagIndex))\n        }\n\n        super.selectRowIndexes(indexes, byExtendingSelection: extend)\n    }\n\n    public func addTag(tag: String) {\n        guard let vc = ViewController.shared(), vc.isVisibleSidebar() else { return }\n        \n        var subtags = tag.components(separatedBy: \"/\")\n        let firstLevelName = subtags.first\n\n        if var tag = sidebarItems?.first(where: { ($0 as? FSTag)?.name == firstLevelName }) as? FSTag {\n            guard subtags.count > 1 else { return }\n\n            while subtags.count > 0 {\n                subtags = Array(subtags.dropFirst())\n\n                tag.addChild(name: subtags.joined(separator: \"/\"), completion: { (tagItem, isExist, position) in\n                    tag = tagItem\n\n                    if !isExist {\n                        insertItems(at: [position], inParent: tagItem.getParent(), withAnimation: [])\n                    }\n                })\n\n                guard subtags.count > 1 else { break }\n            }\n\n            return\n        }\n\n        let rootTag = FSTag(name: tag)\n        let position = getRootTagPosition(for: rootTag)\n        sidebarItems?.insert(rootTag, at: position)\n        self.insertItems(at: [position], inParent: nil, withAnimation: [])\n    }\n\n    public func getRootTagPosition(for tag: FSTag) -> Int {\n        guard let offset = sidebarItems?.firstIndex(where: { ($0 as? FSTag) != nil }) else {\n            return sidebarItems?.count ?? 0\n        }\n\n        guard var tags = sidebarItems?.filter({ $0 as? FSTag != nil }) as? [FSTag] else {\n            return sidebarItems?.count ?? 0\n        }\n\n        tags.append(tag)\n\n        let sorted = tags.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })\n        if let index = sorted.firstIndex(where: { $0 === tag }) {\n            return index + offset\n        }\n\n        return sidebarItems?.count ?? 0\n    }\n    \n    public func getTagsSeparatorPosition() -> Int? {\n        return sidebarItems?.firstIndex(where: { ($0 as? SidebarItem)?.type == .Separator && ($0 as? SidebarItem)?.name == \"tags\" })\n    }\n    \n    public func getProjectsSeparatorPosition() -> Int? {\n        return sidebarItems?.firstIndex(where: { ($0 as? SidebarItem)?.type == .Separator && ($0 as? SidebarItem)?.name == \"projects\" })\n    }\n    \n    public func countProjects() -> Int {\n        return sidebarItems?.filter({ ($0 as? Project) != nil }).count ?? 0\n    }\n        \n    public func deleteRoot(tag: String) {\n        guard let vc = ViewController.shared(), vc.isVisibleSidebar() else { return }\n        \n        let subtags = tag.components(separatedBy: \"/\")\n\n        if let sidebarIndex = sidebarItems?.firstIndex(where: { ($0 as? FSTag)?.name == subtags.first }) {\n            sidebarItems?.remove(at: sidebarIndex)\n            removeItems(at: [sidebarIndex], inParent: nil, withAnimation: [])\n        }\n    }\n\n    public func remove(tags: [String], from notes: [Note]) {\n        guard let notesTableView = viewDelegate?.notesTableView else { return }\n\n        for note in notes {\n            for tagName in tags.reversed() {\n                note.delete(tag: \"#\\(tagName)\")\n                note.tags.removeAll(where: { $0 == tagName })\n                _ = note.scanContentTags()\n            }\n\n            DispatchQueue.main.async {\n                notesTableView.reloadRow(note: note)\n            }\n        }\n\n        if let vc = ViewController.shared(), vc.isVisibleSidebar() {\n            beginUpdates()\n            for index in selectedRowIndexes.reversed() {\n                if let tag = item(atRow: index) as? FSTag {\n                    if let parentTag = tag.getParent() {\n                        if let childIndex = tag.getParent()?.child.firstIndex(where: { $0 === tag }) {\n                            tag.parent?.removeChild(tag: tag)\n                            removeItems(at: [childIndex], inParent: parentTag, withAnimation: [])\n                        }\n                    } else if let sidebarIndex = sidebarItems?.firstIndex(where: { ($0 as? FSTag) === tag }) {\n                        sidebarItems?.remove(at: sidebarIndex)\n                        removeItems(at: [sidebarIndex], inParent: nil, withAnimation: [])\n                    }\n                }\n            }\n            endUpdates()\n        }\n        \n        viewDelegate?.editor.clear()\n    }\n\n    public func rename(tags: [FSTag], name: String) {\n        guard let notesTableView = viewDelegate?.notesTableView else { return }\n        let notes = notesTableView.getNoteList()\n\n        let originalName = name.starts(with: \"#\") ? String(name.dropFirst()) : name\n        let name = name.starts(with: \"#\") ? name : \"#\\(name)\"\n\n        var insertTags = [String]()\n        var deleteTags = [String]()\n\n        // get all root deleted tags and all inserted from roots combined with renamed\n        for tag in tags {\n            let tagNameOriginal = tag.getFullName()\n            var fullName = tagNameOriginal\n            let firstLevel = fullName.components(separatedBy: \"/\").first ?? fullName\n            deleteTags.append(fullName)\n\n            let allTags = getAllTags()\n\n            // select all started from \"#search/level/\" or equal \"#search/level\"\n            let related = allTags.filter({ $0.starts(with: fullName + \"/\") || $0 == fullName })\n\n            // select all started i.e. \"#search/yyy\" but NOT \"#search/level/\" and \"#search/level\"\n            let relatedAdditional = allTags.filter({\n                $0.starts(with: firstLevel + \"/\")\n                && !$0.starts(with: fullName + \"/\")\n                && $0 != fullName\n            })\n\n            // rename related\n            for item in related {\n                fullName = item\n                guard let range = fullName.range(of: tagNameOriginal) else { continue }\n\n                if range.lowerBound.utf16Offset(in: tagNameOriginal) == 0 {\n                    fullName.replaceSubrange(range, with: originalName)\n                }\n\n                insertTags.append(fullName)\n            }\n\n            // and add additional\n            for item in relatedAdditional {\n                insertTags.append(item)\n            }\n        }\n\n        // rename tags in notes\n        for note in notes {\n            for tag in tags {\n\n                // rename and rescan tags ended with empty space separators or slash and skip with chars\n                let tagName = tag.getFullName()\n                note.replace(tag: \"#\\(tagName)\", with: name)\n                note.tags.removeAll(where: { $0 == tagName })\n                _ = note.scanContentTags()\n\n                // reload view in notes list\n                DispatchQueue.main.async {\n                    notesTableView.reloadRow(note: note)\n                }\n            }\n        }\n\n        // update view\n        beginUpdates()\n\n        for tag in deleteTags {\n            deleteRoot(tag: tag)\n        }\n\n        for tag in insertTags {\n            addTag(tag: tag)\n        }\n\n        endUpdates()\n\n        // select inserted\n        if let tag = insertTags.first?.components(separatedBy: \"/\").first {\n            if let tag = sidebarItems?.first(where: { ($0 as? FSTag)?.name == tag }) {\n                let index = row(forItem: tag)\n\n                scrollRowToVisible(index)\n                selectRowIndexes([index], byExtendingSelection: true)\n            }\n        }\n    }\n    \n    public func deselectAllRows() {\n        UserDefaultsManagement.lastSidebarItem = nil\n        UserDefaultsManagement.lastProjectURL = nil\n        \n        deselectAll(nil)\n    }\n\n    public func getNotesProject() -> Project? {\n        let item = sidebarItems?.first(where: {\n            ($0 as? SidebarItem)?.type == .All\n        }) as? SidebarItem\n\n        return item?.project\n    }\n    \n    public func getOrCreateProject(name: String) -> Project? {\n        guard let project = Storage.shared().getDefault() else { return nil }\n        \n        let url = project.url.appendingPathComponent(name, isDirectory: true)\n        if let exist = Storage.shared().getProjectBy(url: url) {\n            DispatchQueue.main.async {\n                self.focus(on: exist)\n            }\n            return exist\n        }\n        \n        return createProject(with: name)\n    }\n    \n    public func createProject(in project: Project? = nil, with name: String) -> Project? {\n        guard let vc = ViewController.shared(),\n              let project = project ?? Storage.shared().getDefault() else { return nil }\n        \n        var insertedProject: Project?\n        \n        do {\n            let projectURL = project.url.appendingPathComponent(name, isDirectory: true)\n            try FileManager.default.createDirectory(at: projectURL, withIntermediateDirectories: false, attributes: nil)\n            \n            guard let inserted = project.storage.insert(url: projectURL) else { return nil }\n            insertedProject = inserted.first\n            \n            // Important before main queue (Disables the fake move event handler for notes)\n            vc.fsManager?.reloadObservedFolders()\n            \n            DispatchQueue.main.async {\n                vc.sidebarOutlineView.insertRows(projects: inserted)\n                \n                guard let newProject = inserted.first else { return }\n                self.focus(on: newProject)\n                \n                print(\"sidebar table\")\n            }\n        } catch {\n            DispatchQueue.main.async {\n                let alert = NSAlert()\n                alert.messageText = error.localizedDescription\n                alert.runModal()\n            }\n        }\n        \n        return insertedProject\n    }\n    \n    public func focus(on project: Project) {\n        guard let vc = ViewController.shared() else { return }\n        let expand = project.parent\n        \n        vc.sidebarOutlineView.expandItem(expand)\n        let row = vc.sidebarOutlineView.row(forItem: project)\n        \n        guard row != -1 else { return }\n        vc.sidebarOutlineView.selectRowIndexes(\n            IndexSet(integer: row),\n            byExtendingSelection: false\n        )\n        vc.sidebarOutlineView.scrollRowToVisible(row)\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/SidebarSplitView.swift",
    "content": "//\n//  SidebarSplitView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 9/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass SidebarSplitView: NSSplitView {\n    override var dividerColor: NSColor {\n        return NSColor.init(named: \"divider\")!\n    }\n}\n\n"
  },
  {
    "path": "FSNotes/View/SidebarTableRowView.swift",
    "content": "//\n//  SidebarTableRowView.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/11/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass SidebarTableRowView: NSTableRowView {\n\n}\n"
  },
  {
    "path": "FSNotes/View/TitleBarView.swift",
    "content": "//\n//  TitleBarView.swift\n//  FSNotes\n//\n//  Created by BUDDAx2 on 10/27/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass TitleBarView: NSView {\n    \n    var onMouseEnteredClosure: (()->())?\n    var onMouseExitedClosure: (()->())?\n    \n    override func awakeFromNib() {\n        \n        addTrackingArea(NSTrackingArea(rect: bounds, options: [.activeAlways, .mouseEnteredAndExited], owner: self, userInfo: nil))\n    }\n    \n    override func layout() {\n        super.layout()\n        \n        self.trackingAreas.forEach { [weak self] area in\n            self?.removeTrackingArea(area)\n        }\n        \n        addTrackingArea(NSTrackingArea(rect: bounds, options: [.activeAlways, .mouseEnteredAndExited], owner: self, userInfo: nil))\n    }\n    \n    override func mouseEntered(with event: NSEvent) {\n        onMouseEnteredClosure?()\n    }\n    \n    override func mouseExited(with event: NSEvent) {\n        onMouseExitedClosure?()\n    }\n\n    override func mouseDown(with event: NSEvent) {\n        if event.clickCount == 2, let actionOnDoubleClick = UserDefaults.standard.object(forKey: \"AppleActionOnDoubleClick\") as? String {\n\n            switch actionOnDoubleClick {\n            case \"Maximize\":\n                self.window?.windowController?.maximizeWindow()\n            case \"Minimize\":\n                self.window?.performMiniaturize(nil)\n            default:\n                break\n            }\n        }\n    }\n    \n}\n"
  },
  {
    "path": "FSNotes/View/TitleTextField.swift",
    "content": "//\n//  TitleTextField.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 5/10/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Carbon.HIToolbox\n\nclass TitleTextField: NSTextField {\n    public var restoreResponder: NSResponder?\n\n    override func performKeyEquivalent(with event: NSEvent) -> Bool {\n        if event.modifierFlags.contains(.command)\n            && event.characters?.unicodeScalars.first == \"c\"\n            && !event.modifierFlags.contains(.shift)\n            && !event.modifierFlags.contains(.control)\n            && !event.modifierFlags.contains(.option) {\n            let pasteboard = NSPasteboard.general\n            pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n            pasteboard.setString(self.stringValue, forType: NSPasteboard.PasteboardType.string)\n        }\n\n        return super.performKeyEquivalent(with: event)\n    }\n\n    override func becomeFirstResponder() -> Bool {\n        if let vc = ViewController.shared(),\n            let note = vc.editor.note {\n            stringValue = note.getFileName()\n        }\n\n        return super.becomeFirstResponder()\n    }\n\n    override func textDidEndEditing(_ notification: Notification) {\n        guard stringValue.count > 0,\n            let vc = ViewController.shared(),\n            let note = vc.editor.note\n        else { return }\n\n        let currentTitle = stringValue\n        let currentName = note.getFileName()\n\n        defer {\n            updateNotesTableView()\n            editModeOff()\n        }\n        \n        if currentName != currentTitle {\n            rename(currentTitle: currentTitle, note: note)\n            return\n        }\n\n        vc.updateTitle(note: note)\n        self.resignFirstResponder()\n        updateNotesTableView()\n        vc.titleLabel.isEditable = false\n        vc.titleLabel.isEnabled = false\n    }\n\n    public func rename(currentTitle: String, note: Note) {\n        guard let vc = ViewController.shared() else { return }\n\n        _ = vc.lockUnlocked(notes: [note])\n\n        let currentName = note.getFileName()\n        let ext = note.url.pathExtension\n        let fileName =\n            currentTitle\n                .trimmingCharacters(in: CharacterSet.whitespaces)\n                .replacingOccurrences(of: \":\", with: \"\")\n                .replacingOccurrences(of: \"/\", with: \"\")\n\n        let dst = note.project.url\n            .appendingPathComponent(fileName)\n            .appendingPathExtension(ext)\n\n        let hasCaseSensitiveDiffOnly = currentName.lowercased() == fileName.lowercased()\n\n        if !FileManager.default.fileExists(atPath: dst.path) || hasCaseSensitiveDiffOnly {\n            _ = note.move(to: dst, forceRewrite: hasCaseSensitiveDiffOnly)\n\n            vc.updateTitle(note: note)\n            updateNotesTableView()\n\n            vc.reSort(note: note)\n        } else {\n            vc.updateTitle(note: note)\n            self.resignFirstResponder()\n            updateNotesTableView()\n            vc.titleLabel.isEditable = false\n            vc.titleLabel.isEnabled = false\n\n            let alert = NSAlert()\n            let informativeText = NSLocalizedString(\"Note with name \\\"%@\\\" already exists in selected directory.\", comment: \"\")\n\n            alert.alertStyle = .critical\n            alert.informativeText = String(format: informativeText, currentTitle)\n            alert.runModal()\n        }\n    }\n\n    public func editModeOn() {\n        self.isEnabled = true\n        self.isEditable = true\n        \n        MainWindowController.shared()?.makeFirstResponder(self)\n    }\n    \n    public func editModeOff() {\n        self.isEnabled = false\n        self.isEditable = false\n\n        guard let vc = ViewController.shared(),\n              let note = vc.editor.note else { return }\n\n        vc.updateTitle(note: note)\n    }\n    \n    public func updateNotesTableView() {\n        guard let vc = ViewController.shared(), let note = vc.editor.note else { return }\n\n        if (note.container == .encryptedTextPack && !note.isUnlocked()) || !note.project.settings.isFirstLineAsTitle() {\n            vc.notesTableView.reloadRow(note: note)\n        }\n\n        if let responder = restoreResponder {\n            window?.makeFirstResponder(responder)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/View/VerticallyAlignedTextFieldCell.swift",
    "content": "//\n//  VerticallyAlignedTextFieldCell.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 03.05.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\n\nclass VerticallyAlignedTextFieldCell: NSTextFieldCell {\n    override func drawingRect(forBounds rect: NSRect) -> NSRect {\n        let newRect = NSRect(x: 0, y: (rect.size.height - 22) / 2, width: rect.size.width, height: 22)\n        return super.drawingRect(forBounds: newRect)\n    }\n}\n"
  },
  {
    "path": "FSNotes/ViewController+Git.swift",
    "content": "//\n//  ViewController+Git.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 9/10/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Git\nimport Cgit2\n\nextension EditorViewController {\n\n    @IBAction func saveRevision(_ sender: NSMenuItem) {\n        guard let gitProject = getGitProject() else {\n            let alert = NSAlert()\n            alert.alertStyle = .critical\n            alert.informativeText = NSLocalizedString(\"Please init git repository before (Preferences -> Git -> Init/commit)\", comment: \"\")\n            alert.messageText = NSLocalizedString(\"Repository not found\", comment: \"\")\n            alert.runModal()\n            return\n        }\n\n        guard let window = self.view.window else { return }\n        if UserDefaultsManagement.askCommitMessage {\n            let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 290, height: 60))\n            if let lastMessage = UserDefaultsManagement.lastCommitMessage {\n                field.stringValue = lastMessage\n            }\n            \n            let alert = NSAlert()\n            alert.messageText = NSLocalizedString(\"Commit message:\", comment: \"\")\n            alert.accessoryView = field\n            alert.alertStyle = .informational\n            alert.addButton(withTitle: NSLocalizedString(\"OK\", comment: \"\"))\n            alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n            alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n                if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                    let commitMessage: String? = field.stringValue.count > 0 ? field.stringValue : nil\n                    \n                    if field.stringValue.count > 0 {\n                        UserDefaultsManagement.lastCommitMessage = commitMessage\n                    }\n                    \n                    self.saveRevision(project: gitProject, commitMessage: commitMessage)\n                }\n            }\n            \n            field.becomeFirstResponder()\n            return\n        }\n        \n        saveRevision(project: gitProject, commitMessage: nil)\n    }\n    \n    private func saveRevision(project: Project, commitMessage: String? = nil) {\n        guard let window = self.view.window else { return }\n\n        ViewController.gitQueue.addOperation({\n            ViewController.gitQueueOperationDate = Date()\n\n            defer {\n                ViewController.gitQueueOperationDate = nil\n            }\n\n            do {\n                try project.saveRevision(commitMessage: commitMessage)\n            } catch GitError.noAddedFiles {\n                // pass\n            } catch {\n                var message = String()\n                if let error = error as? GitError {\n                    message = error.associatedValue()\n                } else {\n                    message = error.localizedDescription\n                }\n\n                DispatchQueue.main.async {\n                    let alert = NSAlert()\n                    alert.alertStyle = .critical\n                    alert.informativeText = message\n                    alert.messageText = NSLocalizedString(\"Git error\", comment: \"\")\n                    alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in }\n                }\n            }\n        })\n    }\n\n    @IBAction func checkoutRevision(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n        guard let commit = sender.representedObject as? Commit else { return }\n        guard let note = vcEditor?.note else { return }\n\n        if vc.prevCommit == nil {\n            saveRevision(project: note.project, commitMessage: \"Auto save on history checkout\")\n        }\n\n        vc.prevCommit = commit\n        \n        note.checkout(commit: commit)\n\n        _ = note.reload()\n        NotesTextProcessor.highlight(attributedString: note.content)\n\n        reloadAllOpenedWindows(note: note)\n        \n        ViewController.shared()?.notesTableView.reloadRow(note: note)\n\n        vcEditor?.scanTagsAndAutoRename()\n    }\n\n    @IBAction private func makeFullSnapshot(_ sender: Any) {\n        let cal = Calendar.current\n        let hour = cal.component(.hour, from: Date())\n        let minute = cal.component(.minute, from: Date())\n\n        if let lastSnapshot = self.lastSnapshot {\n            if minute == lastSnapshot {\n                return\n            } else {\n                self.lastSnapshot = nil\n            }\n        }\n\n        guard UserDefaultsManagement.snapshotsInterval != 0 && (\n            hour == UserDefaultsManagement.snapshotsInterval || (\n                hour != 0 && hour % UserDefaultsManagement.snapshotsInterval == 0\n            )\n        ) else { return }\n\n        guard UserDefaultsManagement.snapshotsIntervalMinutes == minute else { return }\n        \n        lastSnapshot = minute\n\n        ViewController.gitQueue.addOperation({\n            ViewController.gitQueueOperationDate = Date()\n\n            defer {\n                ViewController.gitQueueOperationDate = nil\n            }\n\n            let storage = Storage.shared()\n            guard let projects = storage.getGitProjects() else { return }\n\n            for project in projects {\n                do {\n                    if project.hasRepository()  {\n                        try project.commit()\n                        try project.pull()\n                        try project.push()\n                    }\n                } catch {\n                    print(error)\n                }\n            }\n        })\n    }\n    \n    @IBAction private func pull(_ sender: Any) {\n\n        // Restart queue if operation stucked more then 2 minutes\n        if let date = ViewController.gitQueueOperationDate {\n            let diff = Int(Date().timeIntervalSince1970) - Int(date.timeIntervalSince1970)\n            let isBusy = ViewController.gitQueueBusy\n\n            if diff > 120 && !isBusy {\n\n                ViewController.gitQueue = OperationQueue()\n                ViewController.gitQueue.maxConcurrentOperationCount = 1\n\n                print(\"Git queue restart\")\n            } else {\n                print(\"Git pull skipped\")\n                return\n            }\n        }\n\n        ViewController.gitQueue.addOperation({\n            ViewController.gitQueueOperationDate = Date()\n\n            defer {\n                ViewController.gitQueueOperationDate = nil\n            }\n\n            Storage.shared().pullAll()\n        })\n    }\n\n    public func scheduleSnapshots() {\n        guard !UserDefaultsManagement.backupManually else { return }\n\n        DispatchQueue.main.async {\n            self.snapshotsTimer.invalidate()\n            self.snapshotsTimer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.makeFullSnapshot), userInfo: nil, repeats: true)\n        }\n    }\n    \n    public func schedulePull() {\n        guard !UserDefaultsManagement.backupManually else { return }\n\n        let interval = UserDefaultsManagement.pullInterval\n        \n        pullTimer.invalidate()\n        pullTimer = Timer.scheduledTimer(timeInterval: TimeInterval(interval), target: self, selector: #selector(pull), userInfo: nil, repeats: true)\n    }\n    \n    public func stopPull() {\n        pullTimer.invalidate()\n    }\n    \n    public func getGitProject() -> Project? {\n        guard let vc = ViewController.shared() else { return nil }\n        \n        if let project = vc.getSelectedNote()?.project.getGitProject() {\n            return project\n        }\n\n        if let project = vc.sidebarOutlineView.getSelectedProject()?.getGitProject() {\n            return project\n        }\n\n        return Storage.shared().getDefault()?.getGitProject()\n    }\n\n}\n"
  },
  {
    "path": "FSNotes/ViewController+Menu.swift",
    "content": "//\n//  ViewController+Menu.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 16.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport AppKit\n\nextension ViewController {\n    \n    func processFileMenuItems(_ menuItem: NSMenuItem, menuId: String) -> Bool {\n        \n        // Submenu\n        if menuItem.menu?.identifier?.rawValue == \"fileMenu.move\" ||\n            menuItem.menu?.identifier?.rawValue == \"fileMenu.history\" {\n            return true\n        }\n        \n        guard let vc = ViewController.shared(),\n              let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n              let id = menuItem.identifier?.rawValue else { return false }\n\n        // Sidebar\n        let tags = vc.sidebarOutlineView.getSidebarTags()\n        let projects = vc.sidebarOutlineView.getSelectedProjects()\n        let projectSelected = projects?.isEmpty == false\n        let tagSelected = tags?.isEmpty == false\n        \n        let isFirstSidebar = evc.view.window?.firstResponder?.isKind(of: SidebarOutlineView.self) == true\n        let isInbox = vc.sidebarOutlineView.getSidebarItems()?.first?.type == .Inbox\n        let isTrash = vc.sidebarOutlineView.getSidebarItems()?.first?.type == .Trash\n        \n        // Notes\n        let isFirstResponder = evc.view.window?.firstResponder?.isKind(of: NotesTableView.self) == true\n        let isFirstEditor = evc.view.window?.firstResponder?.isKind(of: EditTextView.self) == true\n        let isOpenedWindow = NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true\n        \n        let notes = vc.getSelectedNotes()\n        let greaterThanZero = notes?.isEmpty == false\n        let isOne = notes?.count == 1\n        \n        func hasEncrypted(notes: [Note]? = nil) -> Bool {\n            guard let notes = notes else { return false }\n            return notes.contains { $0.isEncrypted() && !$0.project.isEncrypted }\n        }\n        \n        switch id {\n        case \"\\(menuId).close\":\n            menuItem.title = NSLocalizedString(\"Close\", comment: \"File Menu\")\n            return true\n            \n        case \"\\(menuId).import\":\n            menuItem.title = NSLocalizedString(\"Import\", comment: \"File Menu\")\n            return true\n            \n        case \"\\(menuId).attach\":\n            menuItem.title = NSLocalizedString(\"Add External Folder...\", comment: \"Menu Library\")\n            return true\n            \n        case \"\\(menuId).backup\":\n            var title = NSLocalizedString(\"Inbox\", comment: \"\")\n            \n            if let gitProject = vc.getGitProject() {\n                title = gitProject.label\n                \n                if gitProject.isDefault {\n                    title = NSLocalizedString(\"Inbox\", comment: \"\")\n                }\n                \n                menuItem.title =  String(format: NSLocalizedString(\"Commit & Push “%@”\", comment: \"Menu Library\"), title)\n                return true\n            }\n            \n            return false\n\n        case \"\\(menuId).new\":\n            menuItem.title = NSLocalizedString(\"New Note\", comment: \"File Menu\")\n            return true\n            \n        case \"\\(menuId).newInNewWindow\":\n            menuItem.title = NSLocalizedString(\"New Note in New Window\", comment: \"File Menu\")\n            return true\n            \n        case \"\\(menuId).createFolder\":\n            menuItem.title = NSLocalizedString(\"New Folder\", comment: \"Menu Library\")\n            return !isTrash\n            \n        case \"\\(menuId).searchAndCreate\":\n            menuItem.title = NSLocalizedString(\"Search and Create\", comment: \"File Menu\")\n            return true\n            \n        case \"\\(menuId).open\":\n            menuItem.title = NSLocalizedString(\"Open Note in New Window\", comment: \"File Menu\")\n            return greaterThanZero\n            \n        case \"\\(menuId).duplicate\":\n            menuItem.title = NSLocalizedString(\"Duplicate\", comment: \"File Menu\")\n            return greaterThanZero && (isFirstResponder || isFirstEditor)\n            \n        case \"\\(menuId).rename\":\n            \n            // sidebar\n            if isFirstSidebar {\n                if tagSelected {\n                    menuItem.title = NSLocalizedString(\"Rename Tag\", comment: \"Menu Library\")\n                } else {\n                    menuItem.title = NSLocalizedString(\"Rename Folder\", comment: \"Menu Library\")\n                }\n                \n                return projectSelected || tagSelected\n            }\n            \n            menuItem.title = NSLocalizedString(\"Rename\", comment: \"File Menu\")\n            return isOne && isFirstResponder || (isFirstEditor && !isOpenedWindow)\n            \n        case \"\\(menuId).delete\":\n            menuItem.title = NSLocalizedString(\"Delete\", comment: \"File Menu\")\n            return greaterThanZero && isFirstResponder\n            \n        case \"\\(menuId).forceDelete\":\n            menuItem.title = NSLocalizedString(\"Force Delete\", comment: \"File Menu\")\n            return greaterThanZero && isFirstResponder\n            \n        case \"\\(menuId).togglePin\":\n            if let note = notes?.first, note.isPinned {\n                menuItem.title = NSLocalizedString(\"Unpin\", comment: \"File Menu\")\n            } else {\n                menuItem.title = NSLocalizedString(\"Pin\", comment: \"File Menu\")\n            }\n            return greaterThanZero\n            \n        case \"\\(menuId).decrypt\":\n            \n            // sidebar\n            if isFirstSidebar {\n                menuItem.title = NSLocalizedString(\"Decrypt Folder\", comment: \"Menu Library\")\n                \n                if let project = projects?.first, !project.isTrash, !project.isDefault, !project.isVirtual, project.isEncrypted {\n                    return true\n                }\n                \n                return false\n            }\n            \n            menuItem.title = NSLocalizedString(\"Decrypt\", comment: \"File Menu\")\n            return greaterThanZero && hasEncrypted(notes: notes)\n            \n        case \"\\(menuId).toggleLock\":\n            \n            // sidebar\n            if isFirstSidebar {\n                if let project = projects?.first, !project.isTrash, project.isLocked() {\n                    menuItem.title = NSLocalizedString(\"Unlock Folder\", comment: \"\")\n                } else {\n                    menuItem.title = NSLocalizedString(\"Lock Folder\", comment: \"Menu Library\")\n                }\n                return projectSelected\n            }\n            \n            if let note = notes?.first, note.isEncryptedAndLocked() {\n                menuItem.title = NSLocalizedString(\"Unlock\", comment: \"File Menu\")\n            } else {\n                menuItem.title = NSLocalizedString(\"Lock\", comment: \"File Menu\")\n            }\n            \n            return greaterThanZero && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).external\":\n            menuItem.title = NSLocalizedString(\"Open External\", comment: \"File Menu\")\n            return greaterThanZero\n            \n        case \"\\(menuId).reveal\":\n            if isFirstSidebar {\n                menuItem.title = NSLocalizedString(\"Reveal in Finder\", comment: \"Menu Library\")\n                return projectSelected || isInbox\n            }\n            \n            menuItem.title = NSLocalizedString(\"Reveal in Finder\", comment: \"File Menu\")\n            return greaterThanZero && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).date\":\n            menuItem.title = NSLocalizedString(\"Change Creation Date\", comment: \"File Menu\")\n            return greaterThanZero && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).toggleContainer\":\n            if let note = notes?.first, note.container == .none {\n                menuItem.title = NSLocalizedString(\"Convert to TextBundle\", comment: \"\")\n            } else {\n                menuItem.title =  NSLocalizedString(\"Convert to Plain\", comment: \"\")\n            }\n            return greaterThanZero && !hasEncrypted(notes: notes) && (isFirstResponder || isOpenedWindow)\n\n        case \"\\(menuId).move\":\n            menuItem.title = NSLocalizedString(\"Move\", comment: \"File Menu\")\n            return greaterThanZero && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).history\":\n            menuItem.title = NSLocalizedString(\"History\", comment: \"File Menu\")\n            if let note = notes?.first {\n                return isOne && (isFirstResponder || isOpenedWindow || isFirstEditor) && note.project.hasCommitsDiffsCache()\n            }\n            \n        case \"\\(menuId).print\":\n            menuItem.title = NSLocalizedString(\"Print\", comment: \"File Menu\")\n            return isOne && (isFirstResponder || isOpenedWindow || isFirstEditor)\n        default:\n            break\n        }\n        \n        return false\n    }\n    \n    func processShareMenuItems(_ menuItem: NSMenuItem, menuId: String) -> Bool {\n        guard let vc = ViewController.shared(),\n              let evc = NSApplication.shared.keyWindow?.contentViewController as? EditorViewController,\n              let id = menuItem.identifier?.rawValue else { return false }\n        \n        let isFirstResponder = evc.view.window?.firstResponder?.isKind(of: NotesTableView.self) == true\n        let isFirstEditor = evc.view.window?.firstResponder?.isKind(of: EditTextView.self) == true\n        let isOpenedWindow = NSApplication.shared.keyWindow?.contentViewController?.isKind(of: NoteViewController.self) == true\n        \n        let notes = vc.getSelectedNotes()\n        let isOne = notes?.count == 1\n        \n        switch id {\n        case \"\\(menuId).copyURL\":\n            menuItem.title = NSLocalizedString(\"Copy URL\", comment: \"File Menu\")\n            return isOne && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).copyTitle\":\n            menuItem.title = NSLocalizedString(\"Copy Title\", comment: \"File Menu\")\n            return isOne && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).uploadOverSSH\":\n            if let note = notes?.first, note.uploadPath != nil || note.apiId != nil {\n                menuItem.title = NSLocalizedString(\"Update Web Page\", comment: \"File Menu\")\n            } else {\n                menuItem.title = NSLocalizedString(\"Create Web Page\", comment: \"File Menu\")\n            }\n            return isOne && (isFirstResponder || isOpenedWindow || isFirstEditor)\n            \n        case \"\\(menuId).removeOverSSH\":\n            menuItem.title = NSLocalizedString(\"Delete Web Page\", comment: \"File Menu\")\n            if let note = notes?.first {\n                return (isFirstResponder || isOpenedWindow || isFirstEditor) && isOne && !note.isEncrypted() && (note.uploadPath != nil || note.apiId != nil)\n            }\n        default:\n            return false\n        }\n        \n        return false\n    }\n    \n    func processLibraryMenuItems(_ menuItem: NSMenuItem, menuId: String) -> Bool {\n        guard let vc = ViewController.shared(),\n              let id = menuItem.identifier?.rawValue else { return false }\n\n        let tags = vc.sidebarOutlineView.getSidebarTags()\n        let projects = vc.sidebarOutlineView.getSelectedProjects()\n        \n        let projectSelected = projects?.isEmpty == false\n        let tagSelected = tags?.isEmpty == false\n        let isFirstResponder = view.window?.firstResponder?.isKind(of: SidebarOutlineView.self) == true\n        \n        let isTrash = vc.sidebarOutlineView.getSidebarItems()?.first?.type == .Trash\n        let isInbox = vc.sidebarOutlineView.getSidebarItems()?.first?.type == .Inbox\n        let isSystem = vc.sidebarOutlineView.getSidebarItems()?.first?.isSystem() == true\n        \n        switch id {\n        case \"\\(menuId).create\":\n            menuItem.title = NSLocalizedString(\"Create Folder\", comment: \"Menu Library\")\n            return !isTrash\n            \n        case \"\\(menuId).rename\":\n            if tagSelected {\n                menuItem.title = NSLocalizedString(\"Rename Tag\", comment: \"Menu Library\")\n            } else {\n                menuItem.title = NSLocalizedString(\"Rename Folder\", comment: \"Menu Library\")\n            }\n            return isFirstResponder && (projectSelected || tagSelected)\n            \n        case \"\\(menuId).delete\":\n            if let project = projects?.first, project.isBookmark {\n                menuItem.title = NSLocalizedString(\"Unlink External Folder\", comment: \"Menu Library\")\n            } else if tagSelected {\n                menuItem.title = NSLocalizedString(\"Delete Tag\", comment: \"Menu Library\")\n            } else {\n                menuItem.title = NSLocalizedString(\"Delete Folder\", comment: \"Menu Library\")\n            }\n            return isFirstResponder && (projectSelected || tagSelected)\n            \n        case \"\\(menuId).decrypt\":\n            menuItem.title = NSLocalizedString(\"Decrypt Folder\", comment: \"Menu Library\")\n            if let project = projects?.first, !project.isTrash, !project.isDefault, !project.isVirtual, project.isEncrypted {\n                return isFirstResponder\n            }\n            \n        case \"\\(menuId).toggleLock\":\n            if let project = projects?.first, !project.isTrash, project.isLocked() {\n                menuItem.title = NSLocalizedString(\"Unlock Folder\", comment: \"\")\n            } else {\n                menuItem.title = NSLocalizedString(\"Lock Folder\", comment: \"Menu Library\")\n            }\n            return isFirstResponder && projectSelected\n            \n        case \"\\(menuId).reveal\":\n            menuItem.title = NSLocalizedString(\"Reveal in Finder\", comment: \"Menu Library\")\n            return isFirstResponder && (projectSelected || isInbox)\n            \n        case \"\\(menuId).options\":\n            menuItem.title = NSLocalizedString(\"Show Options\", comment: \"Menu Library\")\n            return isFirstResponder && (projectSelected || isSystem)\n        default:\n            break\n        }\n        \n        return false\n    }\n        \n    func loadMoveMenu() {\n        guard let vc = ViewController.shared(), let note = vc.notesTableView.getSelectedNote() else { return }\n        \n        let moveTitle = NSLocalizedString(\"Move\", comment: \"Menu\")\n        if let prevMenu = noteMenu.item(withTitle: moveTitle) {\n            noteMenu.removeItem(prevMenu)\n        }\n        \n        let moveMenuItem = NSMenuItem()\n        moveMenuItem.title = NSLocalizedString(\"Move\", comment: \"Menu\")\n        moveMenuItem.image = NSImage(systemSymbolName: \"move.3d\", accessibilityDescription: nil)\n        \n        noteMenu.addItem(moveMenuItem)\n        let moveMenu = NSMenu()\n        moveMenu.identifier = NSUserInterfaceItemIdentifier(\"fileMenu.move\")\n\n        if UserDefaultsManagement.inlineTags, let tagsMenu = noteMenu.item(withTitle: NSLocalizedString(\"Tags\", comment: \"\")) {\n            noteMenu.removeItem(tagsMenu)\n        }\n        \n        if !note.isTrash() {\n            let trashMenu = NSMenuItem()\n            trashMenu.title = NSLocalizedString(\"Trash\", comment: \"Sidebar label\")\n            trashMenu.action = #selector(vc.notesTableView.delete(_:))\n            trashMenu.tag = 555\n            moveMenu.addItem(trashMenu)\n            moveMenu.addItem(NSMenuItem.separator())\n        }\n                \n        let projects = storage.getSortedProjects()\n        for item in projects {\n            if note.project == item || item.isTrash {\n                continue\n            }\n            \n            let menuItem = NSMenuItem()\n            menuItem.title = item.getNestedLabel()\n            menuItem.representedObject = item\n            menuItem.action = #selector(vc.moveNote(_:))\n            moveMenu.addItem(menuItem)\n        }\n\n        noteMenu.setSubmenu(moveMenu, for: moveMenuItem)\n        loadHistory()\n    }\n    \n    public func loadHistory() {\n        guard let vc = ViewController.shared(),\n            let notes = vc.notesTableView.getSelectedNotes(),\n            let note = notes.first\n        else { return }\n\n        let title = NSLocalizedString(\"History\", comment: \"\")\n        let historyMenu = noteMenu.item(withTitle: title)\n        historyMenu?.submenu?.removeAllItems()\n        historyMenu?.isEnabled = false\n        historyMenu?.isHidden = !note.project.hasCommitsDiffsCache()\n\n        guard notes.count == 0x01 else { return }\n\n        DispatchQueue.global().async {\n            let commits = note.getCommits()\n\n            DispatchQueue.main.async {\n                guard commits.count > 0 else {\n                    historyMenu?.isEnabled = false\n                    return\n                }\n                \n                for commit in commits {\n                    let menuItem = NSMenuItem()\n                    menuItem.title = commit.getDate()\n                    menuItem.representedObject = commit\n                    menuItem.action = #selector(vc.checkoutRevision(_:))\n                    historyMenu?.submenu?.addItem(menuItem)\n                }\n                \n                historyMenu?.isEnabled = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/ViewController+Print.swift",
    "content": "//\n//  ViewController+Print.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 2/15/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport WebKit\n\nextension EditorViewController {\n\n    public func printMarkdownPreview() {\n        guard let note = vcEditor?.note else { return }\n\n        let printDir = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Print\")\n        try? FileManager.default.removeItem(at: printDir)\n        \n        guard let indexURL = MPreviewView.buildPage(for: note, at: printDir, print: true) else { return }\n\n        if #available(macOS 11.0, *) {\n            let pdfCreator = Printer(indexURL: indexURL)\n            pdfCreator.printWeb()\n        } else {\n            legacyPrint(indexURL: indexURL)\n        }\n    }\n\n    @available(*, deprecated, message: \"Remove after macOS 10.15 is no longer supported\")\n    public func legacyPrint(indexURL: URL) {\n        guard let vc = ViewController.shared() else { return }\n\n        vc.printerLegacy = PrinterLegacy(indexURL: indexURL)\n        vc.printerLegacy?.printWeb()\n    }\n}\n"
  },
  {
    "path": "FSNotes/ViewController+Web.swift",
    "content": "//\n//  ViewController+Web.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.09.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport Shout\n\nextension EditorViewController {\n    \n    public func getCurrentNote() -> Note? {\n        return vcEditor?.note\n    }\n    \n    @IBAction func removeWebNote(_ sender: NSMenuItem) {\n        if !UserDefaultsManagement.customWebServer, let note = getCurrentNote() {\n            ViewController.shared()?.deleteAPI(note: note, completion: {\n                DispatchQueue.main.async {\n                    ViewController.shared()?.notesTableView.reloadRow(note: note)\n                }\n            })\n            return\n        }\n        \n        guard let note = getCurrentNote(), let remotePath = note.uploadPath else { return }\n        \n        DispatchQueue.global().async {\n            do {\n                guard let ssh = self.getSSHResource() else { return }\n                \n                try ssh.execute(\"rm -r \\(remotePath)\")\n                \n                note.uploadPath = nil\n                \n                Storage.shared().saveUploadPaths()\n                \n                DispatchQueue.main.async {\n                    ViewController.shared()?.notesTableView.reloadRow(note: note)\n                }\n            } catch {\n                print(error, error.localizedDescription)\n            }\n        }\n    }\n        \n    @IBAction func uploadWebNote(_ sender: NSMenuItem) {\n        if !UserDefaultsManagement.customWebServer, let note = getCurrentNote() {\n            ViewController.shared()?.createAPI(note: note, completion: { url in\n                DispatchQueue.main.async {\n                    ViewController.shared()?.notesTableView.reloadRow(note: note)\n                    guard let url = url else { return }\n\n                    let pasteboard = NSPasteboard.general\n                    pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n                    pasteboard.setString(url.absoluteString, forType: NSPasteboard.PasteboardType.string)\n\n                    NSWorkspace.shared.open(url)\n                }\n            })\n            return\n        }\n        \n        guard let note = getCurrentNote() else { return }\n        \n        let dst = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Upload\")\n        try? FileManager.default.removeItem(at: dst)\n        \n        guard let localURL = MPreviewView.buildPage(for: note, at: dst, web: true),\n              let sftpPath = UserDefaultsManagement.sftpPath,\n              let web = UserDefaultsManagement.sftpWeb else { return }\n        \n        let latinName  = note.getLatinName()\n        let remoteDir = \"\\(sftpPath)\\(latinName)/\"\n        let resultUrl = web + latinName + \"/\"\n        \n        NSPasteboard.general.clearContents()\n        NSPasteboard.general.setString(web + latinName + \"/\", forType: .string)\n        \n        let images = note.content.getImagesAndFiles()\n\n        DispatchQueue.global().async {\n            do {\n                guard let ssh = self.getSSHResource() else { return }\n                \n                try ssh.execute(\"mkdir -p \\(remoteDir)\")\n                \n                let zipURL = localURL\n                    .deletingLastPathComponent()\n                    .appendingPathComponent(note.getLatinName())\n                    .appendingPathExtension(\"zip\")\n\n                let sftp = try ssh.openSftp()\n                \n                // Upload index.html\n                let remoteIndex = remoteDir + \"index.html\"\n                \n                _ = try ssh.execute(\"rm -r \\(remoteIndex)\")\n                try sftp.upload(localURL: localURL, remotePath: remoteIndex)\n                \n                // Upload archive\n                try? sftp.upload(localURL: zipURL, remotePath: remoteDir + note.getLatinName() + \".zip\")\n                \n                // Upload images\n                var imageDirCreationDone = false\n                for image in images {\n                    if image.path.startsWith(string: \"http://\") || image.path.startsWith(string: \"https://\") {\n                        continue\n                    }\n                    \n                    if !imageDirCreationDone {\n                        try ssh.execute(\"mkdir -p \\(remoteDir)/i\")\n                        imageDirCreationDone = true\n                    }\n                    \n                    try? sftp.upload(localURL: image.url, remotePath: remoteDir + \"i/\" + image.url.lastPathComponent)\n                }\n\n                if #available(macOS 10.14, *) {\n                    DispatchQueue.main.async {\n                        ViewController.shared()?.sendNotification()\n                        ViewController.shared()?.notesTableView.reloadRow(note: note)\n                        \n                        NSWorkspace.shared.open(URL(string: resultUrl)!)\n                    }\n                }\n                \n                print(\"Upload was successfull for note: \\(note.title)\")\n                \n                note.uploadPath = remoteDir\n                \n                Storage.shared().saveUploadPaths()\n            } catch {\n                print(error, error.localizedDescription)\n            }\n        }\n    }\n        \n    private func getSSHResource() -> SSH? {\n        let host = UserDefaultsManagement.sftpHost\n        let port = UserDefaultsManagement.sftpPort\n        let username = UserDefaultsManagement.sftpUsername\n        let password = UserDefaultsManagement.sftpPassword\n        let passphrase = UserDefaultsManagement.sftpPassphrase\n        \n        var publicKeyURL: URL?\n        var privateKeyURL: URL?\n        \n        if let accessData = UserDefaultsManagement.sftpAccessData,\n            let bookmarks = NSKeyedUnarchiver.unarchiveObject(with: accessData) as? [URL: Data] {\n            for bookmark in bookmarks {\n                if bookmark.key.path.hasSuffix(\".pub\") {\n                    publicKeyURL = bookmark.key\n                } else {\n                    privateKeyURL = bookmark.key\n                }\n            }\n        }\n        \n        if password.count == 0, publicKeyURL == nil || publicKeyURL == nil {\n            uploadError(text: \"Please set private and public keys\")\n            return nil\n        }\n        \n        do {\n            let ssh = try SSH(host: host, port: port)\n            \n            if password.count > 0 {\n                try ssh.authenticate(username: username, password: password)\n            } else if let publicKeyURL = publicKeyURL, let privateKeyURL = privateKeyURL {\n                try ssh.authenticate(username: username, privateKey: privateKeyURL.path, publicKey: publicKeyURL.path, passphrase: passphrase)\n            }\n            \n            return ssh\n        } catch {\n            print(error, error.localizedDescription)\n            \n            return nil\n        }\n    }\n    \n    public func uploadError(text: String) {\n        let alert = NSAlert()\n        alert.alertStyle = .critical\n        alert.informativeText = NSLocalizedString(\"Upload error\", comment: \"\")\n        alert.messageText = text\n        alert.beginSheetModal(for: self.view.window!)\n    }\n    \n    public func showAlert(message: String) {\n        DispatchQueue.main.async {\n            let alert = NSAlert()\n            alert.alertStyle = .critical\n            alert.informativeText = NSLocalizedString(message, comment: \"\")\n            alert.messageText = NSLocalizedString(\"Web publishing error\", comment: \"\")\n            alert.beginSheetModal(for: self.view.window!) { (returnCode: NSApplication.ModalResponse) -> Void in }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/20/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Cocoa\nimport MASShortcut\nimport Foundation\nimport Shout\nimport UserNotifications\nimport WebKit\n\nclass ViewController: EditorViewController,\n    NSSplitViewDelegate,\n    NSOutlineViewDelegate,\n    NSOutlineViewDataSource,\n    NSTextFieldDelegate,\n    UNUserNotificationCenterDelegate {\n    \n    // MARK: - Properties\n    public var fsManager: FileSystemEventManager?\n    public var projectSettingsViewController: ProjectSettingsViewController?\n\n    private var isPreLoaded = false\n    \n    let storage = Storage.shared()\n    \n    private var sidebarTimer = Timer()\n    private var selectRowTimer = Timer()\n\n    private let searchQueue = OperationQueue()\n    private let counterQueue = OperationQueue()\n\n    public static var gitQueue = OperationQueue()\n    public static var gitQueueBusy: Bool = false\n    public static var gitQueueOperationDate: Date?\n\n    public var prevCommit: Commit?\n\n    /* Git */\n    private var updateViews = [Note]()\n\n    var tagsScannerQueue = [Note]()\n\n    @available(*, deprecated, message: \"Remove after macOS 10.15 is no longer supported\")\n    public var printerLegacy: PrinterLegacy?\n\n    override var representedObject: Any? {\n        didSet { }  // Update the view, if already loaded.\n    }\n\n    // MARK: - IBOutlets\n    @IBOutlet weak var nonSelectedLabel: NSTextField!\n\n    @IBOutlet weak var splitView: EditorSplitView!\n    @IBOutlet var editor: EditTextView!\n    @IBOutlet weak var editAreaScroll: EditorScrollView!\n    @IBOutlet weak var search: SearchTextField!\n    @IBOutlet weak var notesTableView: NotesTableView!\n    @IBOutlet var noteMenu: NSMenu!\n    @IBOutlet weak var sidebarOutlineView: SidebarOutlineView!\n    @IBOutlet weak var sidebarSplitView: NSSplitView!\n    @IBOutlet weak var notesListCustomView: NSView!\n    @IBOutlet weak var outlineHeader: OutlineHeaderView!\n    @IBOutlet weak var showInSidebar: NSMenuItem!\n    @IBOutlet weak var searchTopConstraint: NSLayoutConstraint!\n\n    @IBOutlet weak var lockedFolder: NSTextField!\n    @IBOutlet weak var newNoteButton: NSButton!\n    @IBOutlet weak var titleLabel: TitleTextField! {\n        didSet {\n            let clickGesture = NSClickGestureRecognizer()\n            clickGesture.target = self\n            clickGesture.numberOfClicksRequired = 2\n            clickGesture.buttonMask = 0x1\n            clickGesture.action = #selector(switchTitleToEditMode)\n            \n            titleLabel.addGestureRecognizer(clickGesture)\n        }\n    }\n    @IBOutlet weak var shareButton: NSButton!\n    @IBOutlet weak var sortByOutlet: NSMenuItem!\n\n    @IBOutlet weak var titleBarAdditionalView: NSVisualEffectView! {\n        didSet {\n            let layer = CALayer()\n            layer.frame = titleBarAdditionalView.bounds\n            layer.backgroundColor = .clear\n            titleBarAdditionalView.wantsLayer = true\n            titleBarAdditionalView.layer = layer\n            titleBarAdditionalView.alphaValue = 0\n        }\n    }\n    @IBOutlet weak var previewButton: NSButton! {\n        didSet {\n            previewButton.state = vcEditor?.isPreviewEnabled() == true ? .on : .off\n        }\n    }\n    @IBOutlet weak var titleBarView: TitleBarView! {\n        didSet {\n            titleBarView.onMouseExitedClosure = { [weak self] in\n                DispatchQueue.main.async {\n                    NSAnimationContext.runAnimationGroup({ context in\n                        context.duration = 0.35\n                        self?.titleBarAdditionalView.alphaValue = 0\n                        self?.titleLabel.backgroundColor = .clear\n                    }, completionHandler: nil)\n                }\n            }\n            titleBarView.onMouseEnteredClosure = { [weak self] in\n                DispatchQueue.main.async {\n                    guard self?.titleLabel.isEnabled == false || self?.titleLabel.isEditable == false else { return }\n                    \n                    if let note = self?.editor.note {\n                        if note.isEncryptedAndLocked() {\n                            self?.lockUnlock.image = NSImage(named: NSImage.lockLockedTemplateName)\n                        } else {\n                            self?.lockUnlock.image = NSImage(named: NSImage.lockUnlockedTemplateName)\n                        }\n                    }\n\n                    self?.lockUnlock.isHidden = (self?.editor.note == nil)\n\n                    NSAnimationContext.runAnimationGroup({ context in\n                        context.duration = 0.35\n                        self?.titleBarAdditionalView.alphaValue = 1\n                    }, completionHandler: nil)\n                }\n            }\n        }\n    }\n\n    @IBOutlet weak var lockUnlock: NSButton!\n\n    @IBOutlet weak var sidebarScrollView: NSScrollView!\n    @IBOutlet weak var notesScrollView: NSScrollView!\n\n    @IBOutlet weak var menuChangeCreationDate: NSMenuItem!\n    \n    @IBOutlet weak var counter: NSTextField!\n    @IBOutlet weak var notesCounterViewHeight: NSLayoutConstraint!\n    @IBOutlet weak var notesCounter: NSTextField!\n    \n    // MARK: - Overrides\n    \n    override func viewDidLoad() {\n        if isPreLoaded {\n            return\n        }\n\n        isPreLoaded = true\n\n        if #available(macOS 12.0, *) {\n            let image = NSImage(systemSymbolName: \"square.and.pencil\", accessibilityDescription: nil)\n            var config = NSImage.SymbolConfiguration(textStyle: .body, scale: .large)\n            config = config.applying(.init(paletteColors: [.systemTeal, .systemGray]))\n\n            newNoteButton.image = image?.withSymbolConfiguration(config)\n        } else {\n            newNoteButton.image = NSImage(imageLiteralResourceName: \"new_note_button\").resize(to: CGSize(width: 20, height: 20))\n        }\n\n        configureShortcuts()\n        configureDelegates()\n        configureLayout()\n        configureEditor()\n\n        // Must before event manager starts\n        self.storage.checkWelcome()\n        \n        fsManager = FileSystemEventManager(storage: storage, delegate: self)\n        fsManager?.start()\n\n        loadBookmarks(data: UserDefaultsManagement.sftpAccessData)\n        loadBookmarks(data: UserDefaultsManagement.gitPrivateKeyData)\n\n        loadMoveMenu()\n        loadSortBySetting()\n        checkSidebarConstraint()\n\n    #if CLOUD_RELATED_BLOCK\n        registerKeyValueObserver()\n    #endif\n\n        ViewController.gitQueue.maxConcurrentOperationCount = 1\n\n        notesTableView.doubleAction = #selector(self.doubleClickOnNotesTable)\n\n        DispatchQueue.global().async {\n            self.storage.loadInboxAndTrash()\n\n            DispatchQueue.main.async {\n                self.buildSearchQuery()\n                self.configureSidebar()\n                self.configureNoteList()\n            }\n        }\n    }\n    \n    override func viewDidAppear() {\n        \n        // Init window size\n        if UserDefaultsManagement.isFirstLaunch {\n            if let window = self.view.window {\n                let newSize = NSSize(width: 1200, height: window.frame.height)\n                window.setContentSize(newSize)\n                window.center()\n            }\n            \n            self.sidebarSplitView.setPosition(200, ofDividerAt: 0)\n            self.splitView.setPosition(300, ofDividerAt: 0)\n            \n            UserDefaultsManagement.sidebarTableWidth = 200\n            UserDefaultsManagement.notesTableWidth = 300\n            \n            UserDefaultsManagement.isFirstLaunch = false\n        }\n        \n        // Restore window position\n        if let x = UserDefaultsManagement.lastScreenX,\n            let y = UserDefaultsManagement.lastScreenY {\n            view.window?.setFrameOrigin(NSPoint(x: x, y: y))\n\n            UserDefaultsManagement.lastScreenX = nil\n            UserDefaultsManagement.lastScreenY = nil\n        }\n\n        if UserDefaultsManagement.fullScreen {\n            view.window?.toggleFullScreen(nil)\n        }\n    }\n\n    public func preLoadProjectsData() {\n        let projectsLoading = Date()\n        let results = self.storage.getProjectDiffs()\n\n        OperationQueue.main.addOperation {\n            self.sidebarOutlineView.removeRows(projects: results.0)\n            self.sidebarOutlineView.insertRows(projects: results.1)\n            self.notesTableView.doVisualChanges(results: (results.2, results.3, []))\n        }\n\n        print(\"0. Projects diff loading finished in \\(projectsLoading.timeIntervalSinceNow * -1) seconds\")\n\n        let diffLoading = Date()\n        for project in self.storage.getProjects() {\n            let changes = project.checkNotesCacheDiff()\n            self.notesTableView.doVisualChanges(results: changes)\n        }\n\n        // Reload added projects\n        self.fsManager?.restart()\n        \n        self.storage.migrationAPIIds()\n\n        print(\"1. Notes diff loading finished in \\(diffLoading.timeIntervalSinceNow * -1) seconds\")\n\n        let tagsPoint = Date()\n\n        // Schedule git actions\n        self.scheduleSnapshots()\n        self.schedulePull()\n\n        // Loads tags\n        self.storage.loadNotesContent()\n\n        DispatchQueue.main.async {\n            if self.storage.isCrashedLastTime && !UserDefaultsManagement.showWelcome {\n\n                // Unsafe – resets selected note\n                self.restoreSidebar()\n            }\n            \n            UserDefaultsManagement.showWelcome = false\n            \n            // Safe – only tags loading\n            self.sidebarOutlineView.loadAllTags()\n        }\n\n        print(\"2. Tags loading finished in \\(tagsPoint.timeIntervalSinceNow * -1) seconds\")\n\n        let highlightCachePoint = Date()\n        for note in self.storage.noteList {\n            note.cache()\n        }\n        \n        print(\"3. Notes attributes cache for \\(self.storage.noteList.count) notes in \\(highlightCachePoint.timeIntervalSinceNow * -1) seconds\")\n\n        let gitCachePoint = Date()\n        self.cacheGitRepositories()\n        print(\"4. git history cached in \\(gitCachePoint.timeIntervalSinceNow * -1) seconds\")\n\n    }\n    \n    // MARK: - Initial configuration\n    \n    private func configureLayout() {\n        dropTitle()\n\n        editor.configure()\n        notesTableView.setDraggingSourceOperationMask(.every, forLocal: false)\n                \n        if (UserDefaultsManagement.horizontalOrientation) {\n            self.splitView.isVertical = false\n            notesCounterViewHeight.constant = 0\n            notesCounter.isHidden = true\n        }\n\n        self.menuChangeCreationDate.title = NSLocalizedString(\"Change Creation Date\", comment: \"Menu\")\n\n        self.shareButton.sendAction(on: .leftMouseDown)\n        self.setTableRowHeight()\n\n        self.sidebarOutlineView.sidebarItems = Sidebar().getList()\n        self.sidebarOutlineView.reloadData()\n\n        sidebarOutlineView.selectionHighlightStyle = .regular\n        sidebarOutlineView.backgroundColor = .windowBackgroundColor\n\n        self.sidebarSplitView.autosaveName = \"SidebarSplitView\"\n        self.splitView.autosaveName = \"EditorSplitView\"\n\n        // Always show notes list at launch\n        \n        if (self.splitView.subviews[0].frame.width < 10) {\n            self.splitView.setPosition(300, ofDividerAt: 0)\n        }\n\n        notesScrollView.scrollerStyle = .overlay\n        sidebarScrollView.scrollerStyle = .overlay\n\n        if let cell = search.cell as? NSSearchFieldCell {\n            cell.searchButtonCell?.target = self\n            cell.searchButtonCell?.action = #selector(openRecentPopup(_:))\n        }\n\n        DistributedNotificationCenter.default().addObserver(self, selector: #selector(onWakeNote(note:)), name: Notification.Name(\"com.apple.screenIsUnlocked\"), object: nil)\n\n        NSWorkspace.shared.notificationCenter.addObserver(\n            self, selector: #selector(onSleepNote(note:)),\n            name: NSWorkspace.willSleepNotification, object: nil)\n\n        NSWorkspace.shared.notificationCenter.addObserver(\n            self, selector: #selector(onUserSwitch(note:)),\n            name: NSWorkspace.sessionDidBecomeActiveNotification, object: nil)\n\n        DistributedNotificationCenter.default().addObserver(\n            self,\n            selector: #selector(onScreenLocked(note:)),\n            name: NSNotification.Name(rawValue: \"com.apple.screenIsLocked\"),\n            object: nil\n        )\n        \n        DistributedNotificationCenter.default().addObserver(\n            self,\n            selector: #selector(onAccentColorChanged(note:)),\n            name: NSNotification.Name(rawValue: \"AppleColorPreferencesChangedNotification\"),\n            object: nil\n        )\n\n        DistributedNotificationCenter.default.addObserver(\n            self,\n            selector: #selector(onAccentColorChanged(note:)),\n            name: NSNotification.Name(rawValue: \"AppleInterfaceThemeChangedNotification\"),\n            object: nil\n        )\n\n    }\n\n    public func restoreSidebar() {\n        self.sidebarOutlineView.sidebarItems = Sidebar().getList()\n        self.sidebarOutlineView.reloadData()\n\n        self.storage.restoreProjectsExpandState()\n\n        for project in self.storage.getProjects() {\n            if project.isExpanded {\n                self.sidebarOutlineView.expandItem(project)\n            }\n        }\n    }\n\n    public func configureSidebar() {\n        if isVisibleSidebar() {\n            self.restoreSidebar()\n            \n            if UserDefaultsManagement.lastSidebarItem != nil || UserDefaultsManagement.lastProjectURL != nil || Storage.shared().welcomeProject != nil {\n                if let welcome = Storage.shared().welcomeProject  {\n                    let item = self.sidebarOutlineView.row(forItem: welcome)\n                    if item > -1 {\n                        self.sidebarOutlineView.selectRowIndexes([item], byExtendingSelection: false)\n                    }\n                } else if let lastSidebarItem = UserDefaultsManagement.lastSidebarItem {\n                    let sidebarItem = self.sidebarOutlineView.sidebarItems?.first(where: { ($0 as? SidebarItem)?.type.rawValue == lastSidebarItem })\n                    let item = self.sidebarOutlineView.row(forItem: sidebarItem)\n                    if item > -1 {\n                        self.sidebarOutlineView.selectRowIndexes([item], byExtendingSelection: false)\n                    }\n                } else if let lastURL = UserDefaultsManagement.lastProjectURL, let project = self.storage.getProjectBy(url: lastURL) {\n                    let item = self.sidebarOutlineView.row(forItem: project)\n                    if item > -1 {\n                        self.sidebarOutlineView.selectRowIndexes([item], byExtendingSelection: false)\n                    }\n                }\n            }\n        }\n    }\n    \n    private func configureNoteList() {\n        updateTable() {\n            DispatchQueue.main.async {\n                \n                // Init first selected note for welcome\n                if let note = Storage.shared().welcomeNote {\n                    note.previewState = true\n                    self.notesTableView.select(note: note)\n                    \n                    Storage.shared().welcomeNote = nil\n                }\n                \n                self.restoreOpenedWindows()\n                self.importAndCreate()\n                \n                DispatchQueue.global().async {\n                    self.preLoadProjectsData()\n                }\n            }\n        }\n    }\n\n    private func configureEditor() {\n        self.editor?.linkTextAttributes = [\n            .foregroundColor:  NSColor.init(named: \"link\")!\n        ]\n\n        self.editor.usesFindBar = true\n        self.editor.isIncrementalSearchingEnabled = true\n\n        editor.initTextStorage()\n        editor.editorViewController = self\n        \n        self.editor.viewDelegate = self\n        \n        // configure editor view controller\n        \n        vcEditor = editor\n        vcTitleLabel = titleLabel\n        vcEditorScrollView = editAreaScroll\n        vcNonSelectedLabel = nonSelectedLabel\n        \n        super.initView()\n    }\n\n    private func configureShortcuts() {\n        MASShortcutMonitor.shared().register(UserDefaultsManagement.newNoteShortcut, withAction: {\n            self.makeNoteShortcut()\n        })\n        \n        MASShortcutMonitor.shared().register(UserDefaultsManagement.searchNoteShortcut, withAction: {\n            self.searchShortcut()\f\n        })\n        \n        MASShortcutMonitor.shared().register(UserDefaultsManagement.quickNoteShortcut, withAction: {\n            self.quickNote(self)\f\n        })\n        \n        MASShortcutMonitor.shared().register(UserDefaultsManagement.activateShortcut, withAction: {\n            self.searchShortcut(activate: true)\f\n        })\n        \n        NSEvent.addLocalMonitorForEvents(matching: NSEvent.EventTypeMask.flagsChanged) {\n            return $0\n        }\n        \n        NSEvent.addLocalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) {\n            if self.keyDown(with: $0) {\n                return $0\n            }\n\n            return nil\n        }\n    }\n    \n    private func configureDelegates() {\n        self.search.vcDelegate = self\n        self.search.delegate = self.search\n        self.sidebarSplitView.delegate = self\n        self.sidebarOutlineView.viewDelegate = self\n        \n        if #available(macOS 10.14, *) {\n            UNUserNotificationCenter.current().delegate = self\n        }\n    }\n    \n    // MARK: - Actions\n\n    @IBAction public func openRecentPopup(_ sender: Any) {\n        search.searchesMenu = search.generateRecentMenu()\n        let general = search.searchesMenu!.item(at: 0)\n        search.searchesMenu!.popUp(positioning: general, at: NSPoint(x: 5, y: search.frame.height + 7), in: search)\n    }\n\n    @IBAction func searchAndCreate(_ sender: Any) {\n        AppDelegate.mainWindowController?.window?.makeKeyAndOrderFront(nil)\n        \n        guard let vc = ViewController.shared() else { return }\n\n        if let view = NSApplication.shared.mainWindow?.firstResponder as? NSTextView, let textField = view.superview?.superview {\n\n            if textField.isKind(of: SearchTextField.self) {\n                if vc.search.searchesMenu != nil {\n                    vc.search.searchesMenu = nil\n                } else {\n                    vc.search.searchesMenu = vc.search.generateRecentMenu()\n                    let general = vc.search.searchesMenu!.item(at: 0)\n                    vc.search.searchesMenu!.popUp(positioning: general, at: NSPoint(x: 5, y: vc.search.frame.height + 7), in: vc.search)\n\n                    return\n                }\n            }\n        }\n\n        let size = UserDefaultsManagement.horizontalOrientation\n            ? vc.splitView.subviews[0].frame.height\n            : vc.splitView.subviews[0].frame.width\n\n        if size == 0 {\n            toggleNoteList(self)\n        }\n        \n        vc.search.window?.makeFirstResponder(vc.search)\n    }\n\n    @IBAction func sortBy(_ sender: NSMenuItem) {\n        if let id = sender.identifier {\n            let key = String(id.rawValue.dropFirst(3))\n            guard let sortBy = SortBy(rawValue: key) else { return }\n\n            if sortBy.rawValue == UserDefaultsManagement.sort.rawValue {\n                UserDefaultsManagement.sortDirection = !UserDefaultsManagement.sortDirection\n            }\n\n            UserDefaultsManagement.sort = sortBy\n\n            if let submenu = sortByOutlet.submenu {\n                for item in submenu.items {\n                    item.state = NSControl.StateValue.off\n                }\n            }\n            \n            sender.state = NSControl.StateValue.on\n            \n            ViewController.shared()?.buildSearchQuery()\n            ViewController.shared()?.updateTable()\n        }\n    }\n        \n    // Ask project password before move to encrypted\n    public func moveReq(notes: [Note], project: Project, completion: @escaping (Bool) -> ()) {\n        for note in notes {\n            if note.isEncrypted() && project.isEncrypted {\n                let alert = NSAlert()\n                alert.alertStyle = .critical\n                alert.informativeText = NSLocalizedString(\"You cannot move an already encrypted note to an encrypted directory. You must first decrypt the note and repeat the steps.\", comment: \"\")\n                alert.messageText = NSLocalizedString(\"Move error\", comment: \"\")\n                alert.runModal()\n                return\n            }\n        }\n        \n        // Encrypted and locked\n        if project.isEncrypted && project.isLocked() {\n            getMasterPassword() { password in\n                self.sidebarOutlineView.unlock(projects: [project], password: password)\n                if project.password != nil {\n                    DispatchQueue.main.async {\n                        self.move(notes: notes, project: project)\n                        \n                        for note in notes {\n                            note.encryptAndUnlock(password: password)\n                        }\n                        \n                        completion(true)\n                    }\n                    return\n                }\n                \n                completion(false)\n            }\n            return\n        }\n        \n        self.move(notes: notes, project: project)\n        \n        // Encrypted and non locked\n        if project.isEncrypted, let password = project.password {\n            for note in notes {\n                note.encryptAndUnlock(password: password)\n            }\n        }\n        \n        completion(true)\n    }\n    \n    private func move(notes: [Note], project: Project) {\n        let selectedRow = notesTableView.selectedRowIndexes.min()\n        \n        for note in notes {\n            if note.project == project {\n                continue\n            }\n\n            if note.isEncrypted() {\n                _ = note.lock()\n            }\n\n            let destination = project.url.appendingPathComponent(note.name, isDirectory: false)\n\n            note.moveImages(to: project)\n            \n            _ = note.move(to: destination, project: project)\n\n            if !storage.searchQuery.isFit(note: note) {\n                notesTableView.removeRows(notes: [note])\n\n                if let i = selectedRow, i > -1 {\n                    if notesTableView.countNotes() > i {\n                        notesTableView.selectRow(i)\n                    } else {\n                        notesTableView.selectRow(notesTableView.countNotes() - 1)\n                    }\n                }\n            }\n\n            note.invalidateCache()\n        }\n        \n        editor.clear()\n    }\n\n    override func viewDidResize() {\n        guard let vc = ViewController.shared() else { return }\n        vc.checkSidebarConstraint()\n\n        super.viewDidResize()\n    }\n\n    func reloadSideBar() {\n        guard let outline = sidebarOutlineView else { return }\n\n        sidebarTimer.invalidate()\n        sidebarTimer = Timer.scheduledTimer(timeInterval: 1.2, target: outline, selector: #selector(outline.reloadSidebar), userInfo: nil, repeats: false)\n    }\n        \n    func setTableRowHeight() {\n        notesTableView.rowHeight = CGFloat(21 + UserDefaultsManagement.cellSpacing)\n        notesTableView.reloadData()\n    }\n            \n    public func keyDown(with event: NSEvent) -> Bool {\n        guard let mw = MainWindowController.shared() else { return false }\n\n        guard self.alert == nil else {\n            if event.keyCode == kVK_Escape, let unwrapped = alert {\n                mw.endSheet(unwrapped.window)\n                self.alert = nil\n            }\n\n            return true\n        }\n\n        if event.modifierFlags.contains(.shift)\n            && event.modifierFlags.contains(.option)\n            && event.keyCode == kVK_ANSI_N {\n\n            createFolder(NSMenuItem())\n            return false\n        }\n        \n        // Return / Cmd + Return navigation\n        if event.keyCode == kVK_Return {\n            if let fr = NSApp.mainWindow?.firstResponder, self.alert == nil {\n                if event.modifierFlags.contains(.command) {\n                    if fr.isKind(of: NotesTableView.self) {\n                        NSApp.mainWindow?.makeFirstResponder(self.sidebarOutlineView)\n\n                        if sidebarOutlineView.selectedRowIndexes.count == 0 {\n                            sidebarOutlineView.selectRowIndexes([0], byExtendingSelection: false)\n                        } else {\n                            sidebarOutlineView.selectRowIndexes(sidebarOutlineView.selectedRowIndexes, byExtendingSelection: false)\n                        }\n\n                        return false\n                    }\n                    \n                    if fr.isKind(of: EditTextView.self) || fr.isKind(of: MPreviewView.self) {\n                        NSApp.mainWindow?.makeFirstResponder(self.notesTableView)\n                        return false\n                    }\n                } else {\n                    if fr.isKind(of: SidebarOutlineView.self) {\n                        self.notesTableView.selectCurrent()\n                        NSApp.mainWindow?.makeFirstResponder(self.notesTableView)\n                        return false\n                    }\n                    \n                    if let note = editor.note, fr.isKind(of: NotesTableView.self) {\n                        if note.container != .encryptedTextPack {\n                            if vcEditor?.isPreviewEnabled() == true {\n                                disablePreview()\n                            }\n                            NSApp.mainWindow?.makeFirstResponder(editor)\n                        }\n                        return false\n                    }\n                }\n            }\n            \n            return true\n        }\n        \n        // Tab / Control + Tab\n        if event.keyCode == kVK_Tab {\n            if event.modifierFlags.contains(.control) {\n                self.notesTableView.window?.makeFirstResponder(self.notesTableView)\n                return true\n            }\n\n            if let fr = NSApp.mainWindow?.firstResponder, fr.isKind(of: NotesTableView.self) {\n                NSApp.mainWindow?.makeFirstResponder(self.notesTableView)\n                return false\n            }\n        }\n        \n        if event.keyCode == kVK_Escape && event.modifierFlags.contains(.option) {\n            editor.forceSystemAutocomplete = true\n            (view.window?.firstResponder as? NSTextView)?.complete(nil)\n            return true\n        }\n                \n        // Focus search bar on ESC\n        if (\n            (\n                event.keyCode == kVK_Escape\n                || (\n                    event.characters == \".\" &&\n                    event.modifierFlags.contains(.command)\n                )\n            )\n            && NSApplication.shared.mainWindow == NSApplication.shared.keyWindow\n            && UserDefaultsManagement.shouldFocusSearchOnESCKeyDown\n            && !editor.hasMarkedText()\n        ) {\n            self.view.window?.orderFront(nil)\n            self.view.window?.makeKey()\n            \n            search.searchesMenu = nil\n\n            if NSApplication.shared.mainWindow?.firstResponder === editor, editor.selectedRange().length > 0 {\n                editor.selectedRange = NSRange(location: editor.selectedRange().upperBound, length: 0)\n                return false\n            }\n\n            if let view = NSApplication.shared.mainWindow?.firstResponder as? NSTextView, let textField = view.superview?.superview, textField.isKind(of: NameTextField.self) {\n                NSApp.mainWindow?.makeFirstResponder( self.notesTableView)\n                return false\n            }\n\n            if let mView = self.editor.markdownView, mView.isFindPanelVisible {\n                mView.hideFindPanel()\n                NSApp.mainWindow?.makeFirstResponder(mView.webView)\n                return false\n            }\n            \n            if self.editAreaScroll.isFindBarVisible {\n                cancelTextSearch()\n                NSApp.mainWindow?.makeFirstResponder(editor)\n                return false\n            }\n\n            // Renaming is in progress\n            if titleLabel.isEditable {\n                titleLabel.editModeOff()\n                titleLabel.window?.makeFirstResponder(notesTableView)\n                return false\n            }\n\n            UserDefaultsManagement.lastSidebarItem = nil\n            UserDefaultsManagement.lastProjectURL = nil\n            UserDefaultsManagement.lastSelectedURL = nil\n\n            notesTableView.scroll(.zero)\n            \n            let hasSelectedNotes = notesTableView.selectedRow > -1\n            let hasSelectedBarItem = sidebarOutlineView.selectedRow > -1\n            \n            if hasSelectedBarItem && hasSelectedNotes {\n                UserDataService.instance.isNotesTableEscape = true\n                notesTableView.deselectAll(nil)\n                NSApp.mainWindow?.makeFirstResponder(search)\n                return false\n            }\n\n            sidebarOutlineView.deselectAll(nil)\n            sidebarOutlineView.scrollRowToVisible(0)\n            cleanSearchAndEditArea()\n\n            return true\n        }\n\n        // Search cmd-f\n        if (event.characters?.unicodeScalars.first == \"f\" && event.modifierFlags.contains(.command) && !event.modifierFlags.contains(.control)) {\n            if self.notesTableView.getSelectedNote() != nil {\n                if search.stringValue.count > 0 {\n                    let fullText = search.stringValue\n                    let startIndex = fullText.startIndex\n                    \n                    let range = search.selectedRange\n                    let selectionStart = fullText.index(startIndex, offsetBy: range.location)\n                    \n                    let textBefore = String(fullText[startIndex..<selectionStart])\n                    \n                    if !textBefore.isEmpty {\n                        let pb = NSPasteboard(name: .find)\n                        pb.declareTypes([.textFinderOptions, .string], owner: nil)\n                        pb.setString(textBefore, forType: .string)\n                    }\n                }\n\n                return true\n            }\n        }\n\n        if let fr = mw.firstResponder, !fr.isKind(of: EditTextView.self), !fr.isKind(of: NSTextView.self), !event.modifierFlags.contains(.command),\n            !event.modifierFlags.contains(.control) {\n\n            if let char = event.characters {\n                let newSet = CharacterSet(charactersIn: char)\n                if newSet.isSubset(of: CharacterSet.alphanumerics) {\n                    self.search.becomeFirstResponder()\n                }\n            }\n        }\n\n        if event.modifierFlags.contains(.control)\n            && !event.modifierFlags.contains(.shift)\n            && !event.modifierFlags.contains(.option) {\n\n            switch event.characters?.unicodeScalars.first {\n            case \"1\":\n                sidebarOutlineView.selectRowIndexes([0], byExtendingSelection: false)\n            case \"2\":\n                sidebarOutlineView.selectRowIndexes([1], byExtendingSelection: false)\n            case \"3\":\n                sidebarOutlineView.selectRowIndexes([2], byExtendingSelection: false)\n            case \"4\":\n                sidebarOutlineView.selectRowIndexes([3], byExtendingSelection: false)\n            case \"5\":\n                sidebarOutlineView.selectRowIndexes([4], byExtendingSelection: false)\n            default:\n                return true\n            }\n\n            return false\n        }\n\n        if event.keyCode == kVK_RightArrow {\n            if let fr = mw.firstResponder, fr.isKind(of: NotesTableView.self) {\n                if let note = vcEditor?.note, note.isEncryptedAndLocked() {\n                    unLock(notes: [note])\n                    return true\n                }\n                \n                if vcEditor?.isPreviewEnabled() == true {\n                    NSApp.mainWindow?.makeFirstResponder(editor.markdownView)\n                } else {\n                    focusEditArea()\n                }\n\n                return false\n            }\n        }\n\n        if event.keyCode == kVK_LeftArrow {\n            if let fr = mw.firstResponder {\n                if fr.isKind(of: MPreviewView.self) {\n                    sidebarOutlineView.window?.makeFirstResponder(notesTableView)\n                    return false\n                }\n\n                if fr.isKind(of: NotesTableView.self) {\n                    sidebarOutlineView.window?.makeFirstResponder(sidebarOutlineView)\n\n                    if sidebarOutlineView.selectedRowIndexes.count == 0 {\n                        sidebarOutlineView.selectRowIndexes([0], byExtendingSelection: false)\n                    }\n\n                    return false\n                }\n            }\n        }\n        \n        return true\n    }\n\n    @objc func onWakeNote(note: NSNotification) {\n        refillEditArea()\n    }\n\n    @IBAction func noteUp(_ sender: NSMenuItem) {\n        NSApp.mainWindow?.makeFirstResponder(notesTableView)\n\n        if titleLabel.isEditable {\n            titleLabel.editModeOff()\n            titleLabel.window?.makeFirstResponder(nil)\n        }\n\n        notesTableView.selectPrev()\n    }\n\n    @IBAction func noteDown(_ sender: NSMenuItem) {\n        NSApp.mainWindow?.makeFirstResponder(notesTableView)\n\n        if titleLabel.isEditable {\n            titleLabel.editModeOff()\n            titleLabel.window?.makeFirstResponder(nil)\n        }\n\n        notesTableView.selectNext()\n    }\n\n    @IBAction func sidebarUp(_ sender: NSMenuItem) {\n        if titleLabel.isEditable {\n            titleLabel.editModeOff()\n            titleLabel.window?.makeFirstResponder(nil)\n        }\n\n        NSApp.mainWindow?.makeFirstResponder(sidebarOutlineView)\n\n        guard let cgEvent = CGEvent(keyboardEventSource: .none, virtualKey: 126, keyDown: true) else { return }\n        cgEvent.flags.remove(.maskShift)\n        guard let nsEvent = NSEvent(cgEvent: cgEvent) else { return }\n        sidebarOutlineView.keyDown(with: nsEvent)\n    }\n\n    @IBAction func sidebarDown(_ sender: NSMenuItem) {\n        if titleLabel.isEditable {\n            titleLabel.editModeOff()\n            titleLabel.window?.makeFirstResponder(nil)\n        }\n\n        NSApp.mainWindow?.makeFirstResponder(sidebarOutlineView)\n\n        guard let cgEvent = CGEvent(keyboardEventSource: .none, virtualKey: 125, keyDown: true) else { return }\n        cgEvent.flags.remove(.maskShift)\n        guard let nsEvent = NSEvent(cgEvent: cgEvent) else { return }\n        sidebarOutlineView.keyDown(with: nsEvent)\n    }\n\n    @IBAction func makeNote(_ sender: SearchTextField) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if let type = vc.getSidebarType(), type == .Trash {\n            vc.sidebarOutlineView.deselectAllRows()\n        }\n\n        _ = createNote(name: sender.stringValue)\n        sender.stringValue = String()\n    }\n    \n    @IBAction func fileMenuNewNote(_ sender: Any) {\n        AppDelegate.mainWindowController?.window?.makeKeyAndOrderFront(nil)\n        \n        guard let vc = ViewController.shared() else { return }\n        \n        // Disable notes creation if folder encrypted\n        if let project = vc.sidebarOutlineView.getSelectedProject(), project.isEncrypted, project.isLocked() {\n            let menuItem = NSMenuItem()\n            menuItem.identifier = NSUserInterfaceItemIdentifier(\"menu.newNote\")\n            vc.sidebarOutlineView.toggleFolderLock(menuItem)\n            return\n        }\n        \n        if let type = vc.getSidebarType(), type == .Trash {\n            vc.sidebarOutlineView.deselectAllRows()\n        }\n\n        let inlineTags = vc.sidebarOutlineView.getSelectedInlineTags()\n\n        _ = vc.createNote(content: inlineTags)\n    }\n        \n    @IBAction func fileName(_ sender: NSTextField) {\n        guard let note = notesTableView.getNoteFromSelectedRow() else { return }\n\n        let value = sender.stringValue\n        let url = note.url\n        \n        let newName = sender.stringValue + \".\" + note.url.pathExtension\n        let isSoftRename = note.url.lastPathComponent.lowercased() == newName.lowercased()\n        \n        if note.project.fileExist(fileName: value, ext: note.url.pathExtension), !isSoftRename {\n            self.alert = NSAlert()\n            guard let alert = self.alert else { return }\n\n            let informativeText = NSLocalizedString(\"Note with name \\\"%@\\\" already exists in selected directory.\", comment: \"\")\n\n            alert.alertStyle = .critical\n            alert.informativeText = String(format: informativeText, value)\n            alert.runModal()\n            \n            note.parseURL()\n            sender.stringValue = note.getTitleWithoutLabel()\n            return\n        }\n        \n        guard value.count > 0 else {\n            sender.stringValue = note.getTitleWithoutLabel()\n            return\n        }\n        \n        sender.isEditable = false\n        \n        let newUrl = note.getNewURL(name: value)\n        UserDataService.instance.focusOnImport = newUrl\n        \n        if note.url.path == newUrl.path {\n            return\n        }\n        \n        note.overwrite(url: newUrl)\n        \n        do {\n            try FileManager.default.moveItem(at: url, to: newUrl)\n            print(\"File moved from \\\"\\(url.deletingPathExtension().lastPathComponent)\\\" to \\\"\\(newUrl.deletingPathExtension().lastPathComponent)\\\"\")\n        } catch {\n            note.overwrite(url: url)\n        }\n    }\n            \n    @IBAction func makeMenu(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n        \n        if let type = vc.getSidebarType(), type == .Trash {\n            vc.sidebarOutlineView.deselectAllRows()\n        }\n        \n        _ = vc.createNote()\n    }\n        \n    @IBAction func renameMenu(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n        vc.titleLabel.restoreResponder = vc.view.window?.firstResponder\n        vc.switchTitleToEditMode()\n    }\n    \n    @objc func switchTitleToEditMode() {\n        guard let vc = ViewController.shared() else { return }\n\n        if vc.notesTableView.selectedRow > -1 {\n            vc.titleLabel.editModeOn()\n            vc.titleBarAdditionalView.alphaValue = 0\n            \n            if let note = vc.editor.note, note.getFileName().isValidUUID {\n                vc.titleLabel.stringValue = note.getFileName()\n            }\n\n            return\n        }\n\n        if let md = AppDelegate.mainWindowController {\n            if let actionOnDoubleClick = UserDefaults.standard.object(forKey: \"AppleActionOnDoubleClick\") as? String {\n\n                switch actionOnDoubleClick {\n                case \"Maximize\":\n                    md.maximizeWindow()\n                case \"Minimize\":\n                    md.window?.performMiniaturize(nil)\n                default:\n                    break\n                }\n            }\n        }\n    }\n\n    @IBAction func toggleNoteList(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n\n        let size = UserDefaultsManagement.horizontalOrientation\n            ? vc.splitView.subviews[0].frame.height\n            : vc.splitView.subviews[0].frame.width\n\n        if size == 0 {\n            var size = UserDefaultsManagement.notesTableWidth\n            if UserDefaultsManagement.notesTableWidth == 0 {\n                size = 300\n            }\n\n            vc.splitView.shouldHideDivider = false\n            vc.splitView.setPosition(size, ofDividerAt: 0)\n        } else if vc.splitView.shouldHideDivider {\n            vc.splitView.shouldHideDivider = false\n            vc.splitView.setPosition(UserDefaultsManagement.notesTableWidth, ofDividerAt: 0)\n        } else {\n            UserDefaultsManagement.notesTableWidth = size\n\n            vc.splitView.shouldHideDivider = true\n            vc.splitView.setPosition(0, ofDividerAt: 0)\n\n            DispatchQueue.main.async {\n                vc.splitView.setPosition(0, ofDividerAt: 0)\n            }\n        }\n\n        vc.editor.updateTextContainerInset()\n    }\n    \n    @IBAction func toggleSidebar(_ sender: Any) {\n        guard let vc = ViewController.shared() else { return }\n\n        if isVisibleSidebar() {\n            UserDefaultsManagement.sidebarTableWidth = vc.sidebarSplitView.subviews[0].frame.width\n            vc.sidebarSplitView.setPosition(0, ofDividerAt: 0)\n        } else {\n            vc.sidebarSplitView.setPosition(UserDefaultsManagement.sidebarTableWidth, ofDividerAt: 0)\n\n            vc.reloadSideBar()\n        }\n\n        vc.editor.updateTextContainerInset()\n    }\n    \n    @IBAction func emptyTrash(_ sender: NSMenuItem) {\n        let notes = storage.getAllTrash()\n        for note in notes {\n            _ = note.removeFile()\n        }\n        \n        NSSound(named: \"Pop\")?.play()\n    }\n        \n    @IBAction func lockAll(_ sender: Any) {\n        let projects = storage.getProjects().filter({ $0.isEncrypted && !$0.isLocked() })\n        sidebarOutlineView.lock(projects: projects)\n        \n        let editors = AppDelegate.getEditTextViews()\n        var unlockedEditors = [EditTextView]()\n        \n        for editor in editors {\n            if let note = editor.note, note.isUnlocked() {\n                unlockedEditors.append(editor)\n            }\n        }\n        \n        for editor in unlockedEditors {\n            editor.lockEncryptedView()\n        }\n    \n        let notes = storage.noteList.filter({ $0.isUnlocked() })\n        for note in notes {\n            if note.lock() {\n                removeTags(note: note)\n                notesTableView.reloadRow(note: note)\n            }\n        }\n        \n        if let window = notesTableView.window, window == view.window {\n            window.makeFirstResponder(notesTableView)\n        }\n    }\n        \n    @available(macOS 10.14, *)\n    public func sendNotification() {\n        let center = UNUserNotificationCenter.current()\n        center.delegate = self\n        center.requestAuthorization(options: [.badge,.sound,.alert]) { granted, error in\n            if error != nil {\n                print(\"User permission is not granted : \\(granted)\")\n            }\n        }\n\n        let content = UNMutableNotificationContent()\n        content.title = \"Upload over SSH done\"\n        content.sound = .default\n   \n        let date = Date().addingTimeInterval(1)\n        let dateComponent = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second], from: date)\n        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: false)\n    \n    \n        let uuid = UUID().uuidString\n        let request = UNNotificationRequest(identifier: uuid, content: content, trigger: trigger)\n    \n        center.add(request) { error in }\n    }\n        \n    func controlTextDidEndEditing(_ obj: Notification) {\n        guard let textField = obj.object as? NSTextField, textField == titleLabel else { return }\n        \n        if titleLabel.isEditable == true {\n            titleLabel.editModeOff()\n            fileName(titleLabel)\n            view.window?.makeFirstResponder(notesTableView)\n        }\n        else {\n            if let currentNote = notesTableView.getSelectedNote() {\n                updateTitle(note: currentNote)\n            }\n        }\n    }\n    \n    public func reSort(note: Note) {\n        if !updateViews.contains(note) {\n            updateViews.append(note)\n        }\n\n        rowUpdaterTimer.invalidate()\n        rowUpdaterTimer = Timer.scheduledTimer(timeInterval: 1.2, target: self, selector: #selector(updateTableViews), userInfo: nil, repeats: false)\n    }\n\n    public func removeForever() {\n        guard let vc = ViewController.shared() else { return }\n        guard let notes = vc.notesTableView.getSelectedNotes() else { return }\n        guard let window = MainWindowController.shared() else { return }\n\n        vc.alert = NSAlert()\n\n        guard let alert = vc.alert else { return }\n\n        alert.messageText = String(format: NSLocalizedString(\"Are you sure you want to irretrievably delete %d note(s)?\", comment: \"\"), notes.count)\n\n        alert.informativeText = NSLocalizedString(\"This action cannot be undone.\", comment: \"\")\n        alert.addButton(withTitle: NSLocalizedString(\"Remove note(s)\", comment: \"\"))\n        alert.addButton(withTitle: NSLocalizedString(\"Cancel\", comment: \"\"))\n        alert.beginSheetModal(for: window) { (returnCode: NSApplication.ModalResponse) -> Void in\n            if returnCode == NSApplication.ModalResponse.alertFirstButtonReturn {\n                let selectedRow = vc.notesTableView.selectedRowIndexes.min()\n                vc.editor.clear()\n                vc.storage.removeNotes(notes: notes, completely: true) { _ in\n                    DispatchQueue.main.async {\n                        vc.notesTableView.removeRows(notes: notes)\n                        if let i = selectedRow, i > -1 {\n                            vc.notesTableView.selectRow(i)\n                        }\n                    }\n                }\n            }\n\n            vc.alert = nil\n        }\n    }\n    \n    @objc private func updateTableViews() {\n        let editors = AppDelegate.getEditTextViews()\n        \n        notesTableView.beginUpdates()\n        for note in updateViews {\n            notesTableView.reloadRow(note: note)\n\n            if search.stringValue.count == 0 {\n                sortAndMove(note: note)\n            }\n            \n            // Reloading nstextview in multiple windows\n            \n            for editor in editors {\n                if let window = editor.window, let editorNote = editor.note, editorNote == note {\n                    if editor.viewDelegate != nil { // Main window\n                        self.updateCounters(note: editorNote)\n                    }\n                    \n                    if !editor.isLastEdited, !window.isKeyWindow {\n                        editor.editorViewController?.refillEditArea(force: true)\n                    }\n                }\n            }\n        }\n\n        updateViews.removeAll()\n        notesTableView.endUpdates()\n    }\n        \n    public func updateCounters(note: Note? = nil, charRange: NSRange? = nil) {\n        guard let note = note else {\n            self.counter.stringValue = String()\n            return\n        }\n        \n        counterQueue.cancelAllOperations()\n        \n        let operation = BlockOperation()\n        operation.addExecutionBlock { [weak self] in\n            var title = String()\n            \n            if let charRange = charRange, charRange.length > 0 {\n                if let string = note.content.string.substring(nsRange: charRange) {\n                    title = \"W: \\(string.countWords()) | C: \\(string.countChars())\"\n                    \n                }\n            } else {\n                title = \"W: \\(note.content.string.countWords()) | C: \\(note.content.string.countChars())\"\n            }\n            \n            if operation.isCancelled { return }\n            \n            DispatchQueue.main.async {\n                self?.counter.stringValue = title\n            }\n        }\n            \n        counterQueue.addOperation(operation)\n    }\n    \n    \n    public func updateNotesCounter() {\n        var i = 0\n        \n        if notesTableView.selectedRowIndexes.count > 0 {\n            i = notesTableView.selectedRowIndexes.count\n        } else {\n            i = notesTableView.countNotes()\n        }\n        \n        notesCounter.stringValue = \"N: \\(i)\"\n    }\n    \n    func getSidebarType() -> SidebarItemType? {\n        let sidebarItem = sidebarOutlineView.item(atRow: sidebarOutlineView.selectedRow) as? SidebarItem\n        \n        if let type = sidebarItem?.type {\n            return type\n        }\n        \n        return nil\n    }\n    \n    public func getSidebarItem() -> SidebarItem? {\n        if let sidebarItem = sidebarOutlineView.item(atRow: sidebarOutlineView.selectedRow) as? SidebarItem {\n            return sidebarItem\n        }\n        \n        return nil\n    }\n\n    func updateTable(completion: @escaping () -> Void = {}) {\n\n        let timestamp = Date().toMillis()\n\n        self.search.timestamp = timestamp\n        self.searchQueue.cancelAllOperations()\n\n        let operation = BlockOperation()\n        operation.addExecutionBlock { [weak self] in\n            guard let self = self else {return}\n\n            let projects = Storage.shared().searchQuery.projects\n            for project in projects {\n                self.preLoadNoteTitles(in: project)\n            }\n\n            let source = self.storage.noteList\n            var notes = [Note]()\n\n            for note in source {\n                if operation.isCancelled {\n                    completion()\n                    return\n                }\n\n                if self.storage.searchQuery.isFit(note: note) {\n                    notes.append(note)\n                }\n            }\n            \n            let orderedNotesList = self.storage.sortNotes(noteList: notes, operation: operation)\n\n            if orderedNotesList == self.notesTableView.getNoteList() {\n                \n                // important for cleanSearchAndEditArea func call\n                completion()\n                return\n            }\n\n            if operation.isCancelled {\n                return\n            }\n            \n            guard orderedNotesList.count > 0 else {\n                DispatchQueue.main.async {\n                    self.editor.clear()\n                    self.notesTableView.setNoteList(notes: orderedNotesList)\n                    self.notesTableView.reloadData()\n                    self.updateNotesCounter()\n                    completion()\n                }\n                return\n            }\n\n            DispatchQueue.main.async {\n                self.notesTableView.setNoteList(notes: orderedNotesList)\n                self.notesTableView.reloadData()\n                self.updateNotesCounter()\n                completion()\n            }\n        }\n        \n        self.searchQueue.addOperation(operation)\n    }\n\n    /*\n     Load titles in cases sort by Title\n     */\n    private func preLoadNoteTitles(in project: Project) {\n        if (UserDefaultsManagement.sort == .title || project.settings.sortBy == .title) && project.settings.isFirstLineAsTitle() {\n            let notes = storage.noteList.filter({ $0.project == project })\n            for note in notes {\n                if !note.isLoaded {\n                    note.load()\n                }\n                \n                note.loadPreviewInfo()\n            }\n        }\n    }\n    \n    public func reloadFonts() {\n        let webkitPreview = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"wkPreview\")\n        try? FileManager.default.removeItem(at: webkitPreview)\n\n        Storage.shared().resetCacheAttributes()\n\n        let editors = AppDelegate.getEditTextViews()\n        for editor in editors {\n            if let evc = editor.editorViewController {\n                MPreviewView.template = nil\n                NotesTextProcessor.resetCaches()\n                evc.refillEditArea(force: true)\n            }\n        }\n    }\n\n    public func buildSearchQuery() {\n        let searchQuery = SearchQuery()\n\n        var projects = [Project]()\n        var tags = [String]()\n        var type: SidebarItemType?\n\n        if let sidebarProjects = sidebarOutlineView.getSidebarProjects() {\n            projects = sidebarProjects\n        }\n        \n        // Iniot welcome project\n        if let project = Storage.shared().welcomeProject {\n            projects = [project]\n        }\n\n        if let sidebarTags = sidebarOutlineView.getSidebarTags() {\n            tags = sidebarTags\n            \n            let currentModifiers = NSEvent.modifierFlags\n            let isCommandPressed = currentModifiers.contains(.command)\n            let isShiftPressed = currentModifiers.contains(.shift)\n            \n            if isCommandPressed && isShiftPressed {\n                searchQuery.tagsModifierAnd(true)\n            }\n        }\n\n        if let sidebarTableView = self.sidebarOutlineView {\n            let indexPaths = sidebarTableView.selectedRowIndexes\n\n            for indexPath in indexPaths {\n                if let item = sidebarTableView.item(atRow: indexPath) as? SidebarItem {\n                    if item.type == .All ||\n                        item.type == .Untagged ||\n                        item.type == .Todo ||\n                        item.type == .Trash ||\n                        item.type == .Inbox {\n\n                        type = item.type\n                    }\n                }\n            }\n        }\n\n        if projects.count == 0 && type == nil {\n            type = .All\n        }\n\n        let filter = search.stringValue\n        searchQuery.projects = projects\n        searchQuery.tags = tags\n        searchQuery.setFilter(filter)\n\n        if let type = type {\n            searchQuery.setType(type)\n        }\n\n        self.storage.setSearchQuery(value: searchQuery)\n    }\n\n    @objc func selectNullTableRow(note: Note) {\n        self.selectRowTimer.invalidate()\n        self.selectRowTimer = Timer.scheduledTimer(timeInterval: TimeInterval(0.2), target: self, selector: #selector(self.selectRowInstant), userInfo: note, repeats: false)\n    }\n\n    @objc private func selectRowInstant(_ timer: Timer) {\n        if let note = timer.userInfo as? Note {\n            if let i = self.notesTableView.getIndex(for: note) {\n                notesTableView.selectRowIndexes([i], byExtendingSelection: false)\n                notesTableView.scrollRowToVisible(i)\n            }\n        }\n    }\n        \n    func focusTable() {\n        let index = self.notesTableView.selectedRow > -1 ? self.notesTableView.selectedRow : 0\n        self.notesTableView.window?.makeFirstResponder(self.notesTableView)\n        self.notesTableView.selectRowIndexes([index], byExtendingSelection: false)\n        self.notesTableView.scrollRowToVisible(index)\n    }\n    \n    func cleanSearchAndEditArea(shouldBecomeFirstResponder: Bool = true, completion: (() -> ())? = nil) {\n        search.stringValue = \"\"\n        search.lastSearchQuery = \"\"\n\n        if shouldBecomeFirstResponder {\n            search.becomeFirstResponder()\n        }\n\n        notesTableView.selectRowIndexes(IndexSet(), byExtendingSelection: false)\n        editor.clear()\n        updateCounters(note: nil)\n\n        self.buildSearchQuery()\n        self.updateTable() {\n            DispatchQueue.main.async {\n                if shouldBecomeFirstResponder {\n                    self.sidebarOutlineView.reloadTags()\n                }\n\n                if let completion = completion {\n                    completion()\n                    return\n                }\n            }\n        }\n    }\n    \n    func makeNoteShortcut() {\n        let clipboard = NSPasteboard.general.string(forType: NSPasteboard.PasteboardType.string)\n        \n        if let clipboard = clipboard {\n            _ = createNote(content: clipboard)\n            \n            UNUserNotificationCenter.current().getNotificationSettings { settings in\n                guard settings.authorizationStatus == .notDetermined else { return }\n\n                UNUserNotificationCenter.current().requestAuthorization(\n                    options: [.alert, .sound]\n                ) { _, _ in }\n            }\n\n            let content = UNMutableNotificationContent()\n            content.title = NSLocalizedString(\"Clipboard successfully saved\", comment: \"\")\n            content.body = clipboard\n            content.sound = .default\n\n            UNUserNotificationCenter.current().add(\n                UNNotificationRequest(\n                identifier: UUID().uuidString,\n                content: content,\n                trigger: nil\n            ))\n        }\n    }\n    \n    func searchShortcut(activate: Bool = false) {\n        guard let mainWindow = MainWindowController.shared() else { return }\n\n        if (\n            NSApplication.shared.isActive\n            && !NSApplication.shared.isHidden\n            && !mainWindow.isMiniaturized\n        ) {\n            NSApplication.shared.hide(nil)\n            return\n        }\n\n        UserDefaultsManagement.lastScreenX = nil\n        UserDefaultsManagement.lastScreenY = nil\n\n        NSApp.activate(ignoringOtherApps: true)\n        mainWindow.makeKeyAndOrderFront(self)\n        \n        guard let controller = mainWindow.contentViewController as? ViewController\n            else { return }\n        \n        if !activate {\n            mainWindow.makeFirstResponder(controller.search)\n        }\n    }\n        \n    public func sortAndMove(note: Note, project: Project? = nil) {\n        guard let srcIndex = notesTableView.getIndex(for: note) else { return }\n        let notes = notesTableView.getNoteList()\n\n        let resorted = storage.sortNotes(noteList: notes)\n        guard let dstIndex = resorted.firstIndex(of: note) else { return }\n\n        if srcIndex != dstIndex {\n            notesTableView.moveRow(at: srcIndex, to: dstIndex)\n            notesTableView.setNoteList(notes: resorted)\n        }\n    }\n    \n    func pin(selectedNotes: [Note], toggle: Bool = false) {\n        if selectedNotes.count == 0 {\n            return\n        }\n\n        var state = notesTableView.getNoteList()\n        var updatedNotes = [(Int, Note)]()\n        \n        for selectedNote in selectedNotes {\n            guard let atRow = notesTableView.getIndex(for: selectedNote),\n                  let rowView = notesTableView.rowView(atRow: atRow, makeIfNecessary: false) as? NoteRowView,\n                  let cell = rowView.view(atColumn: 0) as? NoteCellView else { continue }\n            \n            updatedNotes.append((atRow, selectedNote))\n            \n            if toggle {\n                selectedNote.togglePin()\n            }\n            \n            cell.renderPin()\n        }\n\n        let resorted = storage.sortNotes(noteList: notesTableView.getNoteList())\n\n        notesTableView.beginUpdates()\n        let nowPinned = updatedNotes.filter { _, note in note.isPinned }\n        for (row, note) in nowPinned {\n            guard let newRow = resorted.firstIndex(where: { $0 === note }) else { continue }\n            notesTableView.moveRow(at: row, to: newRow)\n            let toMove = state.remove(at: row)\n            state.insert(toMove, at: newRow)\n        }\n\n        let nowUnpinned = updatedNotes\n            .filter({ (_, note) -> Bool in !note.isPinned })\n            .compactMap({ (_, note) -> (Int, Note)? in\n                guard let curRow = state.firstIndex(where: { $0 === note }) else { return nil }\n                return (curRow, note)\n            })\n        for (row, note) in nowUnpinned.reversed() {\n            guard let newRow = resorted.firstIndex(where: { $0 === note }) else { continue }\n            notesTableView.moveRow(at: row, to: newRow)\n            let toMove = state.remove(at: row)\n            state.insert(toMove, at: newRow)\n        }\n\n        notesTableView.setNoteList(notes: resorted)\n        notesTableView.endUpdates()\n        \n        //notesTableView.reloadData()\n        //notesTableView.selectRowIndexes(newIndexes, byExtendingSelection: false)\n    }\n\n    func external(selectedNotes: [Note]) {\n        if selectedNotes.count == 0 {\n            return\n        }\n        \n        for note in selectedNotes {\n            var path = note.url.path\n            if note.isTextBundle() && !note.isUnlocked(), let url = note.getContentFileURL() {\n                path = url.path\n            }\n\n            NSWorkspace.shared.openFile(path, withApplication: UserDefaultsManagement.externalEditor)\n        }\n    }\n    \n    private func loadBookmarks(data: Data?) {\n        if let accessData = data,\n            let bookmarks = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSData.self], from: accessData) as? [URL: Data] {\n\n            for bookmark in bookmarks {\n                var isStale = false\n                \n                do {\n                    let url = try URL.init(resolvingBookmarkData: bookmark.value, options: NSURL.BookmarkResolutionOptions.withSecurityScope, relativeTo: nil, bookmarkDataIsStale: &isStale)\n                    \n                    if !url.startAccessingSecurityScopedResource() {\n                        print(\"RSA key not available: \\(url.path)\")\n                    } else {\n                        print(\"Access for RSA key is successfull restored \\(url)\")\n                    }\n                } catch {\n                    print(\"Error restoring sftp bookmark: \\(error)\")\n                }\n            }\n        }\n    }\n\n    func loadSortBySetting() {\n        let viewLabel = NSLocalizedString(\"View\", comment: \"Menu\")\n        let sortByLabel = NSLocalizedString(\"Sort by\", comment: \"View menu\")\n\n        guard\n            let menu = NSApp.menu,\n            let view = menu.item(withTitle: viewLabel),\n            let submenu = view.submenu,\n            let sortMenu = submenu.item(withTitle: sortByLabel),\n            let sortItems = sortMenu.submenu else {\n            return\n        }\n        \n        let sort = UserDefaultsManagement.sort\n        \n        for item in sortItems.items {\n            if let id = item.identifier, id.rawValue ==  \"SB.\\(sort.rawValue)\" {\n                item.state = NSControl.StateValue.on\n            }\n        }\n    }\n    \n    func registerKeyValueObserver() {\n        NotificationCenter.default.addObserver(self,\n            selector: #selector(ubiquitousKeyValueStoreDidChange(_:)),\n            name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,\n            object: NSUbiquitousKeyValueStore.default)\n\n        if NSUbiquitousKeyValueStore.default.synchronize() == false {\n            fatalError(\"This app was not built with the proper entitlement requests.\")\n        }\n        \n        NSUbiquitousKeyValueStore.default.synchronize()\n    }\n    \n    @objc func ubiquitousKeyValueStoreDidChange(_ notification: NSNotification) {\n        if let keys = notification.userInfo?[NSUbiquitousKeyValueStoreChangedKeysKey] as? [String] {\n            for key in keys {\n                if key == \"co.fluder.fsnotes.pins.shared\" {\n                    let result = storage.restoreCloudPins()\n\n                    DispatchQueue.main.async {\n                        if let added = result.added {\n                            ViewController.shared()?.pin(selectedNotes: added)\n                        }\n\n                        if let removed = result.removed {\n                            ViewController.shared()?.pin(selectedNotes: removed)\n                        }\n                    }\n                }\n                \n                if key.startsWith(string: \"es.fsnot.project-settings\") {\n                    let settingsKey = key.replacingOccurrences(of: \"es.fsnot.project-settings\", with: \"\")\n                    if let project = storage.getProjectBy(settingsKey: settingsKey) {\n                        project.reloadSettings()\n\n                        DispatchQueue.main.async {\n                            if let result = project.loadWebAPI() {\n                                let toReload = result.0 + result.1\n\n                                for note in toReload {\n                                    ViewController.shared()?.notesTableView.reloadRow(note: note)\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n    \n    func checkSidebarConstraint() {\n        if sidebarSplitView.subviews[0].frame.width > 50 {\n            searchTopConstraint.constant = 8\n            return\n        }\n        \n        if UserDefaultsManagement.hideSidebarTable || sidebarSplitView.subviews[0].frame.width < 50 {\n            \n            searchTopConstraint.constant = CGFloat(25)\n            return\n        }\n        \n        searchTopConstraint.constant = 8\n    }\n            \n    @IBAction func sidebarItemVisibility(_ sender: NSMenuItem) {\n        sender.state = sender.state == .on ? .off : .on\n        let isChecked = sender.state == .on\n\n        switch sender.tag {\n            case 1:\n                UserDefaultsManagement.sidebarVisibilityInbox = isChecked\n            case 2:\n                UserDefaultsManagement.sidebarVisibilityNotes = isChecked\n            case 3:\n                UserDefaultsManagement.sidebarVisibilityTodo = isChecked\n            case 5:\n                UserDefaultsManagement.sidebarVisibilityTrash = isChecked\n            case 6:\n                UserDefaultsManagement.sidebarVisibilityUntagged = isChecked\n            default:\n                break\n        }\n\n        ViewController.shared()?.sidebarOutlineView.reloadSidebar()\n    }\n\n    @IBAction func prevHistory(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n\n        if vc.notesTableView.historyPosition > 0 {\n            let prev = vc.notesTableView.historyPosition - 1\n            let prevUrl = vc.notesTableView.history[prev]\n\n            if let note = Storage.shared().getBy(url: prevUrl) {\n                vc.notesTableView.saveNavigationHistory(note: note)\n                vc.cleanSearchAndEditArea(completion: { () -> Void in\n                    vc.notesTableView.selectRowAndSidebarItem(note: note)\n                })\n            }\n\n            vc.notesTableView.historyPosition = prev\n        }\n    }\n\n    @IBAction func nextHistory(_ sender: NSMenuItem) {\n        guard let vc = ViewController.shared() else { return }\n\n        if vc.notesTableView.historyPosition < vc.notesTableView.history.count - 1 {\n            let next = vc.notesTableView.historyPosition + 1\n            let nextUrl = vc.notesTableView.history[next]\n\n            if let note = Storage.shared().getBy(url: nextUrl) {\n                vc.cleanSearchAndEditArea(completion: { () -> Void in\n                    vc.notesTableView.selectRowAndSidebarItem(note: note)\n                })\n            }\n\n            vc.notesTableView.historyPosition = next\n        }\n    }\n\n    func textView(_ view: NSTextView, menu: NSMenu, for event: NSEvent, at charIndex: Int) -> NSMenu? {\n        for item in menu.items {\n            if item.title == NSLocalizedString(\"Copy Link\", comment: \"\")  {\n                item.action = #selector(NSText.copy(_:))\n            }\n                        \n            if item.title == NSLocalizedString(\"Font\", comment: \"\")\n                || item.title == \"Make Link\"\n                || item.title == NSLocalizedString(\"Make Link\", comment: \"\") {\n                menu.removeItem(item)\n            }\n        }\n\n        return menu\n    }\n\n    func splitViewWillResizeSubviews(_ notification: Notification) {\n        editor.updateTextContainerInset()\n    }\n\n    public static func shared() -> ViewController? {\n        return AppDelegate.mainWindowController?.window?.contentViewController as? ViewController\n    }\n\n    public func copy(project: Project, url: URL) -> URL {\n        let fileName = url.lastPathComponent\n        let destination = project.url.appendingPathComponent(fileName)\n\n        do {\n            try FileManager.default.copyItem(at: url, to: destination)\n            return destination\n        } catch {\n            let dst = NameHelper.generateCopy(file: url, dstDir: project.url)\n            try? FileManager.default.copyItem(at: url, to: dst)\n            return dst\n        }\n    }\n\n    @objc func onSleepNote(note: NSNotification) {\n        if UserDefaultsManagement.lockOnSleep {\n            lockAll(self)\n        }\n    }\n\n    @objc func onScreenLocked(note: NSNotification) {\n        if UserDefaultsManagement.lockOnScreenActivated{\n            lockAll(self)\n        }\n    }\n    \n    @objc func onAccentColorChanged(note: NSNotification) {\n        sidebarOutlineView.reloadSidebar()\n    }\n\n    @objc func onUserSwitch(note: NSNotification) {\n        if UserDefaultsManagement.lockOnUserSwitch {\n            lockAll(self)\n        }\n    }\n\n    override func restoreUserActivityState(_ userActivity: NSUserActivity) {\n        guard let name = userActivity.userInfo?[\"note-file-name\"] as? String,\n            let state = userActivity.userInfo?[\"state\"] as? String,\n            let note = Storage.shared().getBy(name: name)\n        else { return }\n\n        vcEditor?.changePreviewState(state == \"preview\")\n        \n        note.previewState = state == \"preview\"\n\n        notesTableView.selectRowAndSidebarItem(note: note)\n    }\n\n    /*\n     Needs update UserActivity if selection did change\n     */\n    func textViewDidChangeSelection(_ notification: Notification) {\n        guard let textView = notification.object as? NSTextView else { return }\n\n        if textView.window?.firstResponder == textView {\n            let range = editor.selectedRange()\n            if let editor = self.editor, let note = editor.note {\n                self.updateCounters(note: note, charRange: range)\n            }\n            \n            // Save position\n            editor.note?.setSelectedRange(range: textView.selectedRange())\n        }\n    \n        editor.userActivity?.needsSave = true\n    }\n\n    @objc func doubleClickOnNotesTable() {\n        let selected = notesTableView.clickedRow\n\n        if (selected < 0) {\n            return\n        }\n\n        if let note = notesTableView.getNote(at: selected) {\n            openInNewWindow(note: note)\n        }\n    }\n    \n    public func restoreOpenedWindows() {\n        guard let documentDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first else { return }\n        let projectsDataUrl = documentDir.appendingPathComponent(\"editors.settings\")\n        \n        guard let data = try? Data(contentsOf: projectsDataUrl) else { return }\n        guard let unarchivedData = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSDictionary.self, NSString.self, NSData.self, NSNumber.self, NSURL.self], from: data) as? [[String: Any]] else { return }\n\n        var mainKey = false\n        for item in unarchivedData.reversed() {\n            guard let url = item[\"url\"] as? URL,\n                  let frameData = item[\"frame\"] as? Data,\n                  let main = item[\"main\"] as? Bool,\n                  let isKeyWindow = item[\"key\"] as? Bool,\n                  let preview = item[\"preview\"] as? Bool,\n                  let note = self.storage.getBy(url: url)\n            else { continue }\n            \n            if main {\n                if isKeyWindow {\n                    mainKey = true\n                }\n                \n                editor.changePreviewState(preview)\n                \n                if let i = self.notesTableView.getIndex(for: note) {\n                    note.previewState = self.editor.isPreviewEnabled()\n                    \n                    self.notesTableView.saveNavigationHistory(note: note)\n                    self.notesTableView.selectRow(i)\n                    self.notesTableView.scrollRowToVisible(i)\n\n                    self.editor.window?.makeFirstResponder(self.editor)\n                }\n            } else {\n                guard let frame = try? NSKeyedUnarchiver.unarchivedObject(ofClass: NSValue.self, from: frameData)?.rectValue else { continue }\n\n                self.openInNewWindow(note: note, frame: frame, preview: preview)\n           }\n        }\n        \n        if mainKey {\n            NSApp.activate(ignoringOtherApps: true)\n            self.view.window?.makeKeyAndOrderFront(self)\n        }\n    }\n    \n    // Important call after initial updateTable\n    \n    public func importAndCreate() {\n        if let appDelegate = NSApplication.shared.delegate as? AppDelegate {\n\n            // fsnotes://find\n\n            if let url = appDelegate.url {\n                appDelegate.url = nil\n                appDelegate.search(url: url)\n                return\n            }\n\n            // Open files in the app\n\n            if let urls = appDelegate.urls {\n                appDelegate.importNotes(urls: urls)\n                return\n            }\n\n            // fsnotes://new/?title=URI-title&txt=URI-content\n\n            let name = appDelegate.newName\n            let content = appDelegate.newContent\n\n            if nil != name || nil != content {\n                if let note = self.createNote(name: name ?? \"\", content: content ?? \"\", openInNewWindow: appDelegate.newWindow), appDelegate.newWindow {\n                    openInNewWindow(note: note)\n                }\n            }\n        }\n    }\n    \n    public func isVisibleNoteList() -> Bool {\n        guard let vc = ViewController.shared() else { return false }\n\n        let size = UserDefaultsManagement.horizontalOrientation\n            ? vc.splitView.subviews[0].frame.height\n            : vc.splitView.subviews[0].frame.width\n        \n        if size == 0 || vc.splitView.shouldHideDivider {\n            return false\n        }\n        \n        return true\n    }\n    \n    public func isVisibleSidebar() -> Bool {\n        guard let vc = ViewController.shared() else { return false }\n\n        let size = Int(vc.sidebarSplitView.subviews[0].frame.width)\n        \n        return size != 0\n    }\n\n    private func cacheGitRepositories() {\n        _ = Storage.shared().getProjects().filter({ $0.hasRepository() }).map({\n            $0.cacheHistory()\n        })\n    }\n}\n"
  },
  {
    "path": "FSNotes/modern.icon/icon.json",
    "content": "{\n  \"fill\" : \"automatic\",\n  \"groups\" : [\n    {\n      \"layers\" : [\n        {\n          \"fill-specializations\" : [\n            {\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.11674,0.11137,0.12082,1.00000\"\n              }\n            },\n            {\n              \"appearance\" : \"dark\",\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.85953,0.87116,0.86212,1.00000\"\n              }\n            }\n          ],\n          \"image-name\" : \"Untitled-5.svg\",\n          \"name\" : \"row1\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -76.92312500000003,\n              -199.8671875\n            ]\n          }\n        },\n        {\n          \"fill-specializations\" : [\n            {\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.11674,0.11137,0.12082,1.00000\"\n              }\n            },\n            {\n              \"appearance\" : \"dark\",\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.85953,0.87116,0.86212,1.00000\"\n              }\n            }\n          ],\n          \"image-name\" : \"Untitled-2 3.svg\",\n          \"name\" : \"row2\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -136.953125,\n              -51.15625\n            ]\n          }\n        },\n        {\n          \"fill-specializations\" : [\n            {\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.11674,0.11137,0.12082,1.00000\"\n              }\n            },\n            {\n              \"appearance\" : \"dark\",\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.85953,0.87116,0.86212,1.00000\"\n              }\n            }\n          ],\n          \"image-name\" : \"Untitled-3 2.svg\",\n          \"name\" : \"row3\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -199.593125,\n              98.390625\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"solid\" : \"display-p3:0.02353,0.56863,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-3 2.svg\",\n          \"name\" : \"row4\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              200.44268750000003,\n              -51.15625\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"solid\" : \"display-p3:0.02353,0.56863,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-2 3.svg\",\n          \"name\" : \"row5\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              137.8046875,\n              98.390625\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"solid\" : \"display-p3:0.02353,0.56863,1.00000,1.00000\"\n          },\n          \"glass\" : true,\n          \"image-name\" : \"Untitled-3 2.svg\",\n          \"name\" : \"row6\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              75.16468750000001,\n              247.140625\n            ]\n          }\n        }\n      ],\n      \"shadow\" : {\n        \"kind\" : \"neutral\",\n        \"opacity\" : 0.5\n      },\n      \"translucency\" : {\n        \"enabled\" : true,\n        \"value\" : 0.5\n      }\n    }\n  ],\n  \"supported-platforms\" : {\n    \"circles\" : [\n      \"watchOS\"\n    ],\n    \"squares\" : \"shared\"\n  }\n}"
  },
  {
    "path": "FSNotes/mul.lproj/Main.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"0f7-Za-V0B.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Copyright © 2017-2024 Oleksandr Hlushchenko.\\\\nAll rights reserved.\\\"; ObjectID = \\\"0f7-Za-V0B\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nVšechna práva vyhrazena.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कॉपीराइट © 2017-2024 ऑलेक्ज़ेंडर ह्लुशेंको।\\nसभी अधिकार सुरक्षित।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2023 Oleksandr Hlushchenko.\\nВсе права защищены.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Telif hakkı © 2017-2024 Oleksandr Hlushchenko.\\nHer hakkı saklıdır.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copyright © 2017-2024 Oleksandr Hlushchenko.\\nAll rights reserved.\"\n          }\n        }\n      }\n    },\n    \"0o7-iB-dtg.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Activate:\\\"; ObjectID = \\\"0o7-iB-dtg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aktivieren:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Activate:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Activar:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Activer :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सक्रिय करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Attiva:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Активировать:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etkinleştir:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Активувати:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"激活：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"啟用：\"\n          }\n        }\n      }\n    },\n    \"0Qp-Is-dNs.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"example.com\\\"; ObjectID = \\\"0Qp-Is-dNs\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"priklad.com\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"domainadi.com\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"example.com\"\n          }\n        }\n      }\n    },\n    \"1b7-l0-nxx.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Find\\\"; ObjectID = \\\"1b7-l0-nxx\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ابحث\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Find\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חפש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trova\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"찾기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoeken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查找\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"尋找\"\n          }\n        }\n      }\n    },\n    \"1cO-zi-naR.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"BackLinks\\\"; ObjectID = \\\"1cO-zi-naR\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Backlinks\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"BackLinks\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enlaces externos\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liens retour\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बैकलिंक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"BackLinks\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Обратные ссылки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"BackLinks\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зворотні посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"反向链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"反向連結\"\n          }\n        }\n      }\n    },\n    \"1HB-X5-pmA.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"2 Spaces\\\"; ObjectID = \\\"1HB-X5-pmA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 mezery\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 स्थान\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 スペース\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Spaces\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 пробела\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 Boşluk\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 пробіли\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"缩进 2 个空格\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2 個空格\"\n          }\n        }\n      }\n    },\n    \"1Kl-ap-nkv.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Locked\\\"; ObjectID = \\\"1Kl-ap-nkv\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Locked\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamčeno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abgeschlossen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Locked\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloqueado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouillé\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Locked\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लॉक की गई\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloccato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잠김\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gesloten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloqueado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloqueado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировано\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilitli\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Замкнено\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"已鎖定\"\n          }\n        }\n      }\n    },\n    \"1qV-pJ-ZQT.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Title\\\"; ObjectID = \\\"1qV-pJ-ZQT\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Title\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトル\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題\"\n          }\n        }\n      }\n    },\n    \"1sM-9Q-KeG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"List\\\"; ObjectID = \\\"1sM-9Q-KeG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قائمة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seznam\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liste\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"List\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liste\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רשימה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सूची\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リスト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"명부\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"List\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Список\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liste\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Список\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"列表\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清單\"\n          }\n        }\n      }\n    },\n    \"1Uk-jy-0qP.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Remove\\\"; ObjectID = \\\"1Uk-jy-0qP\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除\"\n          }\n        }\n      }\n    },\n    \"1Xt-HY-uBw.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"FSNotes\\\"; ObjectID = \\\"1Xt-HY-uBw\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"1XY-bI-DX7.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"TextEdit\\\"; ObjectID = \\\"1XY-bI-DX7\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"텍스트 편집기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TekstBewerken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Metin Düzenle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Текстовий редактор\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextEdit\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文字編輯\"\n          }\n        }\n      }\n    },\n    \"2CI-mu-aiB.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Dock Icon:\\\"; ObjectID = \\\"2CI-mu-aiB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"رمز الإرساء:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ikona:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock icon:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Dock Icon:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icono del Dock:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icône de Dock :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"צלמית Dock:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डॉक आइकन:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icona Dock:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock アイコン:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock 아이콘:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock icoon:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ícone da dock:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ícone da dock:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Иконка в Dock:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock Simgesi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Док іконка:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock栏图标:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock 圖示：\"\n          }\n        }\n      }\n    },\n    \"2Ci-Yj-aWK.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"New\\\"; ObjectID = \\\"2Ci-Yj-aWK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"جديد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nový\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neu\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"New\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuevo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuovo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새로운 노트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuw\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новый\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова нотатка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增\"\n          }\n        }\n      }\n    },\n    \"2Iq-vN-V2w.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"hour at\\\"; ObjectID = \\\"2Iq-vN-V2w\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ساعة في\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hodin, vždy\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"stunde um\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"hour at\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hora a las\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"heure à\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שעות ו-\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"घंटे पर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ore e\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"時間間隔 / 開始タイミング: \"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"시간 마다\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"uur bij\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"horas em\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"horas e\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"час в\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"saatte\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"годину\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"小时\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"時間於\"\n          }\n        }\n      }\n    },\n    \"2oI-Rn-ZJC.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Transformations\\\"; ObjectID = \\\"2oI-Rn-ZJC\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التحولات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformace\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformationen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Transformations\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformaciones\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformations\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"המרות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"परिवर्तने\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trasformazioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変換\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변형\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformaties\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformações\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformações\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Преобразования\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dönüşümler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Трансформація\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"转换\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"轉換\"\n          }\n        }\n      }\n    },\n    \"2un-du-hJz.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"Git\\\"; ObjectID = \\\"2un-du-hJz\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        }\n      }\n    },\n    \"2Vh-rt-1kc.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"New Note in New Window  \\\"; ObjectID = \\\"2Vh-rt-1kc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"ملاحظة جديدة في نافذة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nové okno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neu In neuem Fenster\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"New Note in New Window  \"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva nota en ventana nueva\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau dans une nouvelle fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הערה חדשה בחלון חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"नई विंडो\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova nota in una nuova finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"新しいウィンドウで新しいメモ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"새 창에서 새 메모\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nieuwe notitie in nieuw venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nova janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nova nota em nova janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новое заметка в новом окно\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Pencere\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова нотатка у новому вікні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新窗口中的新笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新視窗新增筆記\"\n          }\n        }\n      }\n    },\n    \"3fK-Ap-A5p.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Item\\\"; ObjectID = \\\"3fK-Ap-A5p\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Element verschieben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Item\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover elemento\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer l'élément\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आइटम हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta elemento\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Öğeyi Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити елемент\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移动项目\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動項目\"\n          }\n        }\n      }\n    },\n    \"3IN-sU-3Bg.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Spelling and Grammar\\\"; ObjectID = \\\"3IN-sU-3Bg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التهجئة والقواعد اللغوية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pravopis a gramatika\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechtschreibung und Grammatik\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Spelling and Grammar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografía y gramática\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Orthographe et grammaire\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"איות ודקדוק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तनी और व्याकरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografia e Grammatica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スペルと文法\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"맞춤법 및 문법\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spelling en grammatica\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografia e Gramática\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografia e Gramática\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Орфография и грамматика\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazım ve Dilbilgisi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Орфографія і граматика\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拼写和语法\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拼字與文法\"\n          }\n        }\n      }\n    },\n    \"3kn-9C-fsB.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Copy Title\\\"; ObjectID = \\\"3kn-9C-fsB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ العنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Title kopieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Copy Title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier le titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトルをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목 복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığı Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製標題\"\n          }\n        }\n      }\n    },\n    \"3RO-C7-NOO.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Change Master Password\\\"; ObjectID = \\\"3RO-C7-NOO\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير كلمة السر الرئيسية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit hlavní heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master Password ändern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Change Master Password\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar contraseña maestra\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Changer le mot de passe\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה סיסמה ראשית\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मास्टर पासवर्ड बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia la Master Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マスターパスワードを変更…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"마스터 암호 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verander Hoofdwachtwoord\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mudar senha mestra\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe Mestra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменение мастер-пароля\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana Parolayı Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити головний пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改管理员密码\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更主密碼\"\n          }\n        }\n      }\n    },\n    \"3rS-ZA-NoH.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Speech\\\"; ObjectID = \\\"3rS-ZA-NoH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řeč\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sprachausgabe\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Speech\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Habla\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Langage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הקראה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"भाषण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voce\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スピーチ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"말하기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spraak\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fala\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fala\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Диктовка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konuşma\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Промова\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"语音\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"語音\"\n          }\n        }\n      }\n    },\n    \"3rt-IC-kru.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"None Selected\\\"; ObjectID = \\\"3rt-IC-kru\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected \"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nic nevybráno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Keine ausgewählt\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"None Selected\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ninguno Seleccionado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected \"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected \"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई भी नहीं चुना गया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nessuno selezionato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選択なし\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택되지 않음\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geen geselecteerd\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nada selecionado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nenhum selecionado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нет выбранных\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hiçbiri Seçilmedi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не вибрано\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无选择\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未選取\"\n          }\n        }\n      }\n    },\n    \"3tV-h0-YEb.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Open External\\\"; ObjectID = \\\"3tV-h0-YEb\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřít externí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Öffnen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Open External\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाहरी खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開く…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Open\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir External\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть во внешнем\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Açık Harici\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打开\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在外部開啟\"\n          }\n        }\n      }\n    },\n    \"3zv-SD-lSX.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Create Folder\\\"; ObjectID = \\\"3zv-SD-lSX\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مجلد جديد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neuer Ordner\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Create Folder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיקיה חדשה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फोल्डर बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規フォルダ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새로운 폴더\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuwe map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова директорія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增資料夾\"\n          }\n        }\n      }\n    },\n    \"4cz-zj-dkH.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Sort By:\\\"; ObjectID = \\\"4cz-zj-dkH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ترتيب حسب:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řadit podle:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sortieren nach:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Sort By:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trier par :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מייו לפי:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इसके अनुसार क्रमबद्ध करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordina per:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示順序:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다음으로 정렬\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sorteer op:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортировать по:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Göre sırala:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортувати за:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式：\"\n          }\n        }\n      }\n    },\n    \"4EN-yA-p0u.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Find\\\"; ObjectID = \\\"4EN-yA-p0u\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Find\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חפש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trova\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"찾기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoeken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Искать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查找\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"尋找\"\n          }\n        }\n      }\n    },\n    \"4gs-Bc-GHG.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"hlushchenko\\\"; ObjectID = \\\"4gs-Bc-GHG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ह्लुशेंको\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"hlushchenko\"\n          }\n        }\n      }\n    },\n    \"4J7-dP-txa.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Enter Full Screen\\\"; ObjectID = \\\"4J7-dP-txa\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الدخول بشاشة كاملة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spustit režim celé obrazovky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vollbildmodus aktivieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Enter Full Screen\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usar pantalla completa\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrer en mode plein écran\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עבור למסך מלא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्ण स्क्रीन दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Accedi a Schermo intero\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フルスクリーンにする\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"전체 화면 시작\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schakel schermvullende weergave in\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrar no modo de tela cheia\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrar em modo de ecrã completo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вход в полноэкранный режим\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tam Ekrana Yap\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Повноекранний режим\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"进入全屏幕\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"進入全螢幕\"\n          }\n        }\n      }\n    },\n    \"4sb-4s-VLi.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Quit FSNotes\\\"; ObjectID = \\\"4sb-4s-VLi\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الخروج من FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ukončit FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes beenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Quit FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salir de FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Quitter FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיים FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes बंद करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esci da FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotesを終了\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 종료\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stop FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sair do FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sair do FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выход из FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes'tan Çık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завершити роботу FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"退出 FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"結束 FSNotes\"\n          }\n        }\n      }\n    },\n    \"4Sj-5v-Clo.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"git@github.com:username/repo.git\\\"; ObjectID = \\\"4Sj-5v-Clo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:uzivatel/repo.git\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"git@github.com:username/repo.git\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:username/repo.git\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:username/repo.git\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:username/repo.git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:kullanıcıadı/repo.git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://github.com/glushchenko/fsnotes.git\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:username/repo.git\"\n          }\n        }\n      }\n    },\n    \"5gL-j7-Zq8.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Decrypt\\\"; ObjectID = \\\"5gL-j7-Zq8\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"ازالة التشفير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Odebrat šifrování\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entschlüsseln\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Decrypt\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar encriptación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le chiffrement\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסר הצפנה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"एन्क्रिप्शन हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrittografa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"ロックを解除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"암호화 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Verwijder versleuteling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Remover criptografia\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Remover criptografia\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить шифрование\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifrelemeyi Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити шифрування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除加密\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密\"\n          }\n        }\n      }\n    },\n    \"5kV-Vb-QxS.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"About FSNotes\\\"; ObjectID = \\\"5kV-Vb-QxS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حول FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"O aplikaci FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Über FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"About FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Acerca de FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A propos de FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אודות FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes के बारे में\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Informazioni su FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotesについて\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes에 관하여\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Over FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sobre o FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Acerca de FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Про FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes Hakkında\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Про FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"关于 FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"關於 FSNotes\"\n          }\n        }\n      }\n    },\n    \"5LV-Vi-n79.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Copy Title\\\"; ObjectID = \\\"5LV-Vi-n79\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ العنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Title kopieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Copy Title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier le titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトルをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목 복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığı Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製標題\"\n          }\n        }\n      }\n    },\n    \"05n-RU-nOV.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Sort By\\\"; ObjectID = \\\"05n-RU-nOV\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ترتيب حسب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řadit podle\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sortieren nach\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Sort By\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trier par\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מיין לפי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इसके अनुसार क्रमबद्ध करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordina per\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示順序\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다음으로 정렬\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sorteer op\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортировать по\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Göre sırala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортувати за\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        }\n      }\n    },\n    \"5QF-Oa-p0T.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Edit\\\"; ObjectID = \\\"5QF-Oa-p0T\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تعديل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upravit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bearbeiten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Edit\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Éditer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עריכה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संपादन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編集\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"편집\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Edit\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düzenle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редагування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"编辑\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編輯\"\n          }\n        }\n      }\n    },\n    \"6AI-tL-TDI.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Hide images preview\\\"; ObjectID = \\\"6AI-tL-TDI\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اخفاء معاينة الصور\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt náhled obrázků\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bildvorschau ausblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide images preview\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar la previsualización de imágenes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer l'aperçu des images\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר תמונות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"छवियों का पूर्वावलोकन छिपाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi anteprima immagini\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像プレビューを非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이미지 미리보기 가리기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verberg voorvertoning afbeeldingen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar pré-visualização das imagens\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar pré-visualização de imagens\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать превью изображений\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görüntü önizlemesini gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сховати прев'ю зображень\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏图像预览\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏圖片預覽\"\n          }\n        }\n      }\n    },\n    \"6dh-zS-Vam.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Redo\\\"; ObjectID = \\\"6dh-zS-Vam\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استرجاع\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opakovat akci\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wiederholen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Redo\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rehacer\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Refaire\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חזור על הפעולה האחרונה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फिर से करे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripeti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"やり直し\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"실행 복귀\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opnieuw doen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Refazer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Refazer\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вперёд\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeniden yap\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Повторити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重做\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重做\"\n          }\n        }\n      }\n    },\n    \"6F0-Cb-DVX.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Code Theme:\\\"; ObjectID = \\\"6F0-Cb-DVX\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code ثيم:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Motiv kódu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Design:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Code Theme:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Theme de code :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ערכת נושא לקוד:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड थीम:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema grafico del Codice:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードテーマ:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"코드 테마:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Thema:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema do código:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema de código:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема для кода:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod Teması:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема коду:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码主题:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"程式碼主題：\"\n          }\n        }\n      }\n    },\n    \"7GB-y2-EMo.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Close\\\"; ObjectID = \\\"7GB-y2-EMo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اغلاق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zavřít\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schließen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Close\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fermer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סגור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बंद करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chiudi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"閉じる\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"닫기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sluit\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрыть\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kapat\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"关闭\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"關閉\"\n          }\n        }\n      }\n    },\n    \"7iL-1X-EtS.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Clone\\\"; ObjectID = \\\"7iL-1X-EtS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klonovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्लोन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Склонировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"克隆\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製專案 (Clone)\"\n          }\n        }\n      }\n    },\n    \"7me-g8-vOq.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Current Password:\\\"; ObjectID = \\\"7me-g8-vOq\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور الحالية:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Současné heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aktuelle Passwort:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Current Password:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña actual:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe actuel\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה נוכחית:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तमान पासवर्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password corrente:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"現在のパスワード:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"기존 암호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Huidig wachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha atual\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe actual\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Текущий пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mevcut Şifre:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поточний пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"当前密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"目前密碼：\"\n          }\n        }\n      }\n    },\n    \"7MT-fy-lXN.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Open External\\\"; ObjectID = \\\"7MT-fy-lXN\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح خارجي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřít externí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In externem Editor öffnen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Open External\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir externo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir en externe\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח חיצוני\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाहरी खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri esternamente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外部エディターで開く...\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"외부에서 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Open extern\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir External\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir externamente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Внешний редактор\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Açık Harici\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити зовні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打开外部\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在外部開啟\"\n          }\n        }\n      }\n    },\n    \"7od-TM-cUB.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Set\\\"; ObjectID = \\\"7od-TM-cUB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مجموعة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Setzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escoger\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Appliquer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בחר\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सेट करें\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"설정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instelling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Установить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Встановити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        }\n      }\n    },\n    \"7xA-9l-dja.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Change\\\"; ObjectID = \\\"7xA-9l-dja\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التغيير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ändern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Change\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Changer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verander\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modificar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更\"\n          }\n        }\n      }\n    },\n    \"8AQ-IN-Edm.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Small\\\"; ObjectID = \\\"8AQ-IN-Edm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"صغير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Malé\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klein\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Small\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pequeño\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Petit\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קטן\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"छोटा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Piccolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"小さい\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"작게\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klein\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pequeno\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pequeno\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Маленький\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Küçük\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Маленький\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"小\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"小\"\n          }\n        }\n      }\n    },\n    \"8cf-5K-KZh.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Ordered List\\\"; ObjectID = \\\"8cf-5K-KZh\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قائمة مرتبة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řazený seznam\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bestellliste\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Ordered List\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista ordenada\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liste ordonnée\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רשימה ממוספרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्रमबद्ध सूची\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista Ordinata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"番号付きリスト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"주문 된 목록\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordered List\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista ordenada\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"List Ordenada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Упорядоченный список\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıralı Liste\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Упорядкований список\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"有序列表\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編號清單\"\n          }\n        }\n      }\n    },\n    \"8dk-Cf-bSg.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Lock when user switched\\\"; ObjectID = \\\"8dk-Cf-bSg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل عند تحول المستخدم\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout při přepnutí uživatele\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sperren, wenn der Benutzer wechselt\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock when user switched\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear al cambiar de usuario\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller au changement d'utilisateur\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל בהחלפת משתמש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"उपयोगकर्ता बदलने पर लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca quando viene cambiato utente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ユーザー切り替え時\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사용자 변경시 잠금\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel bij verandering van gebruiker\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear quando alterar usuário\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear quando alterar utilizador\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать при смене польз.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kullanıcı değiştiğinde kilitle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати при перемиканні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"用户切换时自动锁定\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切換使用者時鎖定\"\n          }\n        }\n      }\n    },\n    \"8om-Y6-O8e.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Credentials:\\\"; ObjectID = \\\"8om-Y6-O8e\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"أوراق اعتماد:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přístupové údaje\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Berechtigungsnachweise:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Credentials:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cartas credenciales:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Identifiants:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אישורים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साख:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Credenziali:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"資格:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"신임장:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inloggegevens:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Credenciais:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Credenciais:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Реквизиты для входа:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kimlik Bilgileri:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Облікові дані:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"证书:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"憑證：\"\n          }\n        }\n      }\n    },\n    \"9ic-FL-obx.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Substitutions\\\"; ObjectID = \\\"9ic-FL-obx\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استبدالات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Záměny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ersetzungen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Substitutions\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sustituciones\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substitutions\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"החלפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रतिस्थापन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sostituzioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動置換\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"대체\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vervangingen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substituições\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substituições\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Замены\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İkameler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заміни\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"替换\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"替代\"\n          }\n        }\n      }\n    },\n    \"9pM-sd-qhm.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Port:\\\"; ObjectID = \\\"9pM-sd-qhm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पोर्ट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Порт:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Port:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Порт:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"端口:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"連接埠：\"\n          }\n        }\n      }\n    },\n    \"9w3-fa-di3.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"2/23/11\\\"; ObjectID = \\\"9w3-fa-di3\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2/23/11\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"2/23/11\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2/23/11\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2/23/11\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2/23/11\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2/23/11\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"9yt-4B-nSM.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Smart Copy/Paste\\\"; ObjectID = \\\"9yt-4B-nSM\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ/لصق الذكي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inteligentní kopírování/vkládání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intelligente Kopieren / Einfügen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Smart Copy/Paste\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiado/pegado Inteligente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier/Coller intelligent\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתקה והדבקה חכמות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्मार्ट कॉपी/पेस्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia/Incolla Smart\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スマートコピー/ペースト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"스마트 복사하기/붙여넣기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Slim Kopiëren/Plakken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar/colar inteligente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar/Colar Inteligente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Смарт-копирование/вставка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Akıllı Kopyala/Yapıştır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розумне копіювання/вставка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智能拷贝/粘贴\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智慧型複製/貼上\"\n          }\n        }\n      }\n    },\n    \"13t-eQ-kOr.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Translators:\\\"; ObjectID = \\\"13t-eQ-kOr\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مترجمين:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Překladatelé\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Translators:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Translators:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Traductores:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Traducteurs :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מתרגמים‫:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अनुवादक:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Traduttori:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"翻訳者:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"번역자:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vertalers:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tradutores:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tradutores:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переводчики:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tercümanlar:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перекладачі:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"翻译:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"翻譯貢獻者：\"\n          }\n        }\n      }\n    },\n    \"44f-my-fi3.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Passphrase:\\\"; ObjectID = \\\"44f-my-fi3\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عبارة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přístupová fráze:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passprobe:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase de contraseña:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ביטוי סיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासफ्रेज:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase d'accesso:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"암호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoordzin:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase secreta:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Парольная фраза:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Кодова фраза:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"通關密語：\"\n          }\n        }\n      }\n    },\n    \"63m-us-3j9.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Code Font:\\\"; ObjectID = \\\"63m-us-3j9\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"خط الكود:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Písmo kódu:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Schrift:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Code Font:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fuente:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Police de code :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גופן קוד:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड फ़ॉन्ट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font Codice:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードフォント:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"코드 서체:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Lettertype:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Código fonte:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Letra de código:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт кода:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod Yazı Tipi:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт коду:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码字体:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"程式碼字體：\"\n          }\n        }\n      }\n    },\n    \"78Y-hA-62v.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Correct Spelling Automatically\\\"; ObjectID = \\\"78Y-hA-62v\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تصحيح الإملاء تلقائيًا\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automaticky opravovat pravopis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechtschreibung automatisch korrigieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Correct Spelling Automatically\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corregir ortografía automáticamente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corriger automatiquement l'orthographe\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תקן איות באופן אוטומטי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तनी स्वतः सही करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Correggi Ortografia Automaticamente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スペルを自動的に修正\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"맞춤법 자동 수정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corrigeer Spelling Automatisch\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corrigir ortografia automaticamente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corrigir Ortografia Automáticamente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматическое исправление орфографии\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otomatik Olarak Doğru Yazımı Düzelt\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматично коригувати правописання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自动纠正拼写\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動修正拼字\"\n          }\n        }\n      }\n    },\n    \"a1w-ll-Djh.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"empty log\\\"; ObjectID = \\\"a1w-ll-Djh\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खाली लॉग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"log vazio\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Boş Log\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清空記錄\"\n          }\n        }\n      }\n    },\n    \"A5V-Wm-if2.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Minimize\\\"; ObjectID = \\\"A5V-Wm-if2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تصغير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimalizovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Minimize\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimizar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimizer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מזער\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"छोटा करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimizza\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"しまう\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"최소화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimaliseren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimizar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Minimizar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Минимизировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Küçült\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приховати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最小化\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"縮到最小\"\n          }\n        }\n      }\n    },\n    \"a6n-hz-V8D.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Search shortcut:\\\"; ObjectID = \\\"a6n-hz-V8D\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اختصار البحث:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verknüpfung suchen:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Search shortcut:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Función rápida de búsqueda:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Raccourci recherche:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קיצור דרך לחפש:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोज शॉर्टकट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ricerca rapida:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索ショートカット:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"검색 단축키:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek snelkoppeling:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar atalho:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar atalho:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поиск:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Arama kısayolu:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Швидкий пошук:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索快捷方式:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜尋快速鍵：\"\n          }\n        }\n      }\n    },\n    \"a9t-hD-WYR.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Host:\\\"; ObjectID = \\\"a9t-hD-WYR\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hostitel:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"होस्ट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Хост:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Host:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Хост:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主机Host:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主機：\"\n          }\n        }\n      }\n    },\n    \"aGv-BR-Oc8.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Upload and test initial data\\\"; ObjectID = \\\"aGv-BR-Oc8\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحميل واختبار البيانات الأولية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nahrát a otestovat úvodní data\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hochladen und Testen der ersten Daten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Upload and test initial data\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cargar y probar datos iniciales\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Télécharger et tester les données initiales\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העלה ובדוק נתונים ראשוניים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारंभिक डेटा अपलोड करें और उसका परीक्षण करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carica e testa i dati iniziali\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"初期データのアップロードとテスト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"초기 데이터 업로드 및 테스트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Upload en test initiële gegevens\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carregar e testar dados iniciais\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carregar e testar dados iniciais\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Загрузить исходные данные и протестировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İlk verileri yükleyin ve test edin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завантаження та перевірка вихідних даних\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上传和测试初始数据\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上傳並測試初始資料\"\n          }\n        }\n      }\n    },\n    \"aLg-MQ-amx.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Italic:\\\"; ObjectID = \\\"aLg-MQ-amx\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kursiv:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Italic:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cursiva:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Italique :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतालिक:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corsivo:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Курсив:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İtalik:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Курсив:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"斜体：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"斜體：\"\n          }\n        }\n      }\n    },\n    \"ASf-hd-2fT.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Repositories:\\\"; ObjectID = \\\"ASf-hd-2fT\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"المستودعات:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repozitáře:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositories:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Repositories:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositorios:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dépôts :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מאגרים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रिपोजिटरी:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repository:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リポジトリ:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"저장소:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opslagplaatsen:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositórios:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositórios:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Репозитории:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Depolar:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Репозиторії:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"存储库:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"儲存庫：\"\n          }\n        }\n      }\n    },\n    \"Atd-Fs-Chq.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Origin:\\\"; ObjectID = \\\"Atd-Fs-Chq\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Origin:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"उद्गम:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origem:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git ориджин:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menşei:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git origin:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Origin:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"來源 (Origin)：\"\n          }\n        }\n      }\n    },\n    \"auW-wa-jbc.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"History\\\"; ObjectID = \\\"auW-wa-jbc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historie\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versionsverlauf\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"History\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historia\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historique\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"היסטוריה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतिहास\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cronologia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"履歴\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경 이력\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschiedenis\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"История\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarih\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Історія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记历史版本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"歷程記錄\"\n          }\n        }\n      }\n    },\n    \"aVa-yH-IpC.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Format: yyyyMMddHHmmss\\\"; ObjectID = \\\"aVa-yH-IpC\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التنسيق: yyyyMMddHHmmss\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: yyyyMMddHHmmss\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyyMMddHHmmss\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format: yyyyMMddHHmmss\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyyMMddHHmmss\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyyMMddHHmmss\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט: yyyyMMddHHmmss\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: yyyyMMddHHmmss\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyyMMddHHmmss\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: yyyyMMddHHmmss\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"체재: yyyyMMddHHmmss\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyyMMddHHmmss\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyyMMddHHmmss\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyyMMddHHmmss\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyyMMddHHmmss\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: yyyyMMddHHmmss\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyyMMddHHmmss\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式: yyyyMMddHHmmss\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式：yyyyMMddHHmmss\"\n          }\n        }\n      }\n    },\n    \"aX0-yU-aew.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"iCloud Drive\\\"; ObjectID = \\\"aX0-yU-aew\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud ड्राइव\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Sürücüsü\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud 雲碟\"\n          }\n        }\n      }\n    },\n    \"axA-pN-Zf2.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Set\\\"; ObjectID = \\\"axA-pN-Zf2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تعيين\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Satz\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Establecer\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Régler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Impostare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"세트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выбрать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вибрати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        }\n      }\n    },\n    \"AYu-sK-qS6.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Main Menu\\\"; ObjectID = \\\"AYu-sK-qS6\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"القائمة الرئيسية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hlavní nabídka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hauptmenü\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Main Menu\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menú principal\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menu principal\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Main Menu\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मुख्य मेन्यू\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menù principale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"メインメニュー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"주 메뉴\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hoofdmenu\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menu principal\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menu Principal\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Основное Меню\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana Menü\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Головне меню\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主菜单\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主選單\"\n          }\n        }\n      }\n    },\n    \"B7t-9v-bSk.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSSearchFieldCell\\\"; placeholderString = \\\"Search or create\\\"; ObjectID = \\\"B7t-9v-bSk\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث او انشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat / vytvořit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen oder erstellen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Search or create\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar o crear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher ou créer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חיפוש ויצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजें या बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerca o crea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索/新規作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"검색 및 추가\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek of maak\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar ou criar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar ou criar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти или создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara veya oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти або створити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索或创建（按下回车即可创建）\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜尋或新增\"\n          }\n        }\n      }\n    },\n    \"bCL-eg-DgP.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\".md\\\"; ObjectID = \\\"bCL-eg-DgP\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \".md\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".md\"\n          }\n        }\n      }\n    },\n    \"bdD-JA-K8P.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"/var/www/example.com\\\"; ObjectID = \\\"bdD-JA-K8P\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/priklad.com\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"/var/www/example.com\"\n          }\n        }\n      }\n    },\n    \"BHF-CB-P9C.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Change\\\"; ObjectID = \\\"BHF-CB-P9C\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ändern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Change\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Changer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Change\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verander\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modificar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更\"\n          }\n        }\n      }\n    },\n    \"bJC-he-nDV.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Note Font:\\\"; ObjectID = \\\"bJC-he-nDV\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"خط الملاحظة:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Písmo poznámky:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizschrift:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Note Font:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fuente:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Police :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גופן פתקים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट फ़ॉन्ट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font Note:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォント:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 서체:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notitie Lettertype:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fonte da nota:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipo de letra de notas:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not Yazı Tipi:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记字体:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"筆記字體：\"\n          }\n        }\n      }\n    },\n    \"bJv-E9-bwW.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Show icon in dock\\\"; ObjectID = \\\"bJv-E9-bwW\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار الأيقونة في شريط  الايقونات \"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ikonu v Docku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icon in dock anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show icon in dock\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar icono en el Dock\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher l'icône dans le Dock\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג צלמית ב-Dock\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डॉक में आइकन दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra icona nel dock\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dockにアイコンを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock에서 아이콘 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon icoon in dock\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar ícone na dock\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostar icone na dock\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать иконку в доке\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dock'ta simgeyi göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відображати іконку в док панелі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在Dock栏中显示图标\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在 Dock 中顯示圖示\"\n          }\n        }\n      }\n    },\n    \"BoD-Jy-zeE.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Clear Completed Todos\\\"; ObjectID = \\\"BoD-Jy-zeE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abgeschlossene Aufgaben löschen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Clear Completed Todos\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Borrar tareas completadas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Effacer les tâches terminées\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूरे हुए कार्य हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancella attività completate\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистить выполненные задачи\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamamlanan Görevleri Temizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистити виконані завдання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清除已完成事项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清除已完成的待辦事項\"\n          }\n        }\n      }\n    },\n    \"BOF-NM-1cW.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Preferences…\\\"; ObjectID = \\\"BOF-NM-1cW\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التفضيلات ...\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Předvolby…\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen…\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Preferences…\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferencias…\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Préférences…\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העדפות...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं...\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferenze…\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"環境設定…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"환경설정...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorkeuren...\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки…\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tercihler…\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好设置…\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好設定…\"\n          }\n        }\n      }\n    },\n    \"Bri-cl-z86.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"minutes\\\"; ObjectID = \\\"Bri-cl-z86\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الدقائق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minut po celé\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minutes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"minutes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minuto\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minutes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"דקות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मिनट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minuti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"분에 실행\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minuten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minutos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"minutos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"минуту часа\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"dakikalar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"хвилин\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分钟\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分鐘\"\n          }\n        }\n      }\n    },\n    \"BtV-Z4-7Vq.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Down in the Notes List\\\"; ObjectID = \\\"BtV-Z4-7Vq\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحرك لأسفل في قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posunout dolů v seznamu poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In der Notizliste nach unten gehen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Down in the Notes List\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover abajo en la lista de notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note suivante\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עבור למטה ברשימת הפתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट्स सूची में नीचे जाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Muovi in basso nella Lista Note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"下に移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메모 목록에서 아래로 이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Move Down In The Notes List\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover para baixo na lista de notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descer na lista de Notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вниз в списке заметок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notlar Listesinde Aşağıya Git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вниз у списку нотаток\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在笔记列表中下移\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在筆記清單中下移\"\n          }\n        }\n      }\n    },\n    \"buJ-ug-pKt.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Use Selection for Find\\\"; ObjectID = \\\"buJ-ug-pKt\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استخدم التحديد للبحث\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat výběr\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Auswahl suchen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Use Selection for Find\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usar selección para buscar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utiliser la sélection pour Rechercher\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"השתמש במלל הנבחר לחיפוש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजने के लिए चयन का उपयोग करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usa Selezione per Trovare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選択部分を検索に使用\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택 부분으로 찾기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruik selectie voor Zoeken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usar seleção para procurar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar selecção para Procura\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Использовать выбранное для поиска\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçimi Bulmak İçin Kullan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Використати вибране для пошуку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用选择查找\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用選取範圍進行尋找\"\n          }\n        }\n      }\n    },\n    \"bUL-WS-rIS.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Publish notes to:\\\"; ObjectID = \\\"bUL-WS-rIS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"انشر الملاحظات على:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zveřejnit poznámky na:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veröffentlichen Sie Notizen an:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Publish notes to:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publicar notas sobre:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publier des notes sur:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פרסם הערות על:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट प्रकाशित करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pubblica note su:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"以下に関するメモを公開します。\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다음에 대한 메모 게시:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publiceer notities over:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publicar notas para:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publicar notas para:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Публиковать заметки на:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notları şuraya yayınla:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Публікувати нотатки на:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"发布笔记到:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"發布筆記至：\"\n          }\n        }\n      }\n    },\n    \"BX0-nb-tVk.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Untagged\\\"; ObjectID = \\\"BX0-nb-tVk\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بدون علامات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neoznačené\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ungetaggt\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Untagged\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sin etiquetar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sans libellé\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ללא תגים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बिना टैग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note senza Tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグ無し\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"태그가 없는\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Niet gelabeld\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sem tag\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sem tag\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без тегов\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketsiz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без тегів\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未加標籤\"\n          }\n        }\n      }\n    },\n    \"bXK-wP-sZc.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Note List Spacing:\\\"; ObjectID = \\\"bXK-wP-sZc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التباعد في قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rozestup v seznamu poznámek:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Listenhöhe:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Note List Spacing:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaciado en la lista:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espacement :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מרווח רשימות פתקים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट सूची रिक्ति:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spaziatura elenco note:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートリストのマージン:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 목록 간격:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notitie lijst spatiëring:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaçamento da lista de notas:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaçamento da lista:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Высота в списке:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not Listesi Aralığı:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відстань між нотатками:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记列表间距:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"筆記清單間距：\"\n          }\n        }\n      }\n    },\n    \"c8a-y6-VQd.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Transformations\\\"; ObjectID = \\\"c8a-y6-VQd\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التحولات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformace\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformations\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Transformations\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformaciones\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformations\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"המרות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"परिवर्तने\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trasformazioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変換\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변형\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformaties\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformações\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformações\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Трансформация\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dönüşümler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Трансформація\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"转换\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"轉換\"\n          }\n        }\n      }\n    },\n    \"cfe-sv-2gm.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Official Site\\\"; ObjectID = \\\"cfe-sv-2gm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الموقع الرسمي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oficiální stránka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Offizielle Seite\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Official Site\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sitio web de FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Site officiel\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אתר רשמי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आधिकारिक साइट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sito ufficiale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"公式サイト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"공식 사이트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Officiële site\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Site oficial\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Site oficial\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Официальный сайт\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resmi Site\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Офіційна сторінка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"官方网址\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"官方網站\"\n          }\n        }\n      }\n    },\n    \"cmH-fQ-bVK.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Format: UUID\\\"; ObjectID = \\\"cmH-fQ-bVK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: UUID\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format: UUID\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט: UUID\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: UUID\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: UUID\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: UUID\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: UUID\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"UUID\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式：UUID\"\n          }\n        }\n      }\n    },\n    \"cq7-SM-dez.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Header 6\\\"; ObjectID = \\\"cq7-SM-dez\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان ٦\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis 6\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 6\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Header 6\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezado 6\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre 6\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת 6\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हेडर 6\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazione 6\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘッダー 6\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 6\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kop 6\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 6\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 6\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 6\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık 6\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 6\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"6级标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題 6\"\n          }\n        }\n      }\n    },\n    \"cQ8-sF-a4g.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Remove\\\"; ObjectID = \\\"cQ8-sF-a4g\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remove\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除\"\n          }\n        }\n      }\n    },\n    \"ctD-Qn-kDS.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Format:\\\"; ObjectID = \\\"ctD-Qn-kDS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تنسيق:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"형식:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formaat:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расширение:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розширення:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"编辑器格式:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式：\"\n          }\n        }\n      }\n    },\n    \"cUI-cw-eo5.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Big\\\"; ObjectID = \\\"cUI-cw-eo5\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كبير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Velké\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Groß\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Big\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grande\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grand\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גדול\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बड़ा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grande\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"大きい\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"크게\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Groot\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grande\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grande\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Большой\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Büyük\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Великий\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"较大\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"大\"\n          }\n        }\n      }\n    },\n    \"CvG-Kp-kdK.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move\\\"; ObjectID = \\\"CvG-Kp-kdK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نقل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přesunout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschieben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העבר\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्थानांतरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verplaats\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移动\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動\"\n          }\n        }\n      }\n    },\n    \"cwL-P1-jid.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Smart Links\\\"; ObjectID = \\\"cwL-P1-jid\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"روابط ذكية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inteligentní odkazy\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intelligente Links\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Smart Links\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enlaces inteligentes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liens intelligents\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קישורים חכמים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्मार्ट लिंक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link Smart\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スマートリンク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"스마트 링크\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Slimme Links\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Links inteligentes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ligações Inteligentes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Смарт-ссылки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Akıllı Bağlantılar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розумні посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智能链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智慧型連結\"\n          }\n        }\n      }\n    },\n    \"cYB-6U-8ac.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Header 2\\\"; ObjectID = \\\"cYB-6U-8ac\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان ٢\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis ě\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 2\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Header 2\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezado 2\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre 2\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת 2\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हेडर 2\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazione 2\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘッダー 2\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 2\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kop 2\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 2\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 2\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 2\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 2\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"2级标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題 2\"\n          }\n        }\n      }\n    },\n    \"d9M-CD-aMd.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Make Lower Case\\\"; ObjectID = \\\"d9M-CD-aMd\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اجعله حروف صغيرة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Převést na malá písmena\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kleinschreiben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Make Lower Case\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Todo en minúsculas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passer en minuscules\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הפוך לאותיות קטנות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लोअर केस बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rendi tutto Minuscolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"小文字にする\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"소문자로 만들기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Maak kleine letters\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tornar minúsculas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformar em minúsculas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перевести в нижний регистр\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Küçük Harf Yap\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нижній регістр\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"转换为小写\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更為小寫\"\n          }\n        }\n      }\n    },\n    \"dCc-l5-XB2.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Modification Date\\\"; ObjectID = \\\"dCc-l5-XB2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ التعديل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum změny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Änderungsdatum\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Modification Date\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fecha de modificación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de modification\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תאריך שינוי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सुधार की तारीख\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di modifica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更日\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"수정일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wijzigingsdatum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de modificação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de modificação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата модификации\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değişiklik Tarihi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Датою модифікації\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"修改日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"修改日期\"\n          }\n        }\n      }\n    },\n    \"DCh-5P-PZe.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Hide/Show Sidebar\\\"; ObjectID = \\\"DCh-5P-PZe\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إخفاء / إظهار الشريط الجانبي\\n\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt/zobrazit boční panel\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seitenleiste ein/ausblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide/Show Sidebar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar/ocultar barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer/Afficher la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר/הצג סרגל צד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार छिपाएँ/दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi/Mostra sidebar\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバーを表示/非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드바 숨기기/보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verbergen/tonen zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar/mostrar menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar/mostrar barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать/показать сайдбар\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunu Gizle/Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приховати/показати сайдбар\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏/显示侧边栏\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏/顯示側邊欄\"\n          }\n        }\n      }\n    },\n    \"DcN-1g-hEi.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Medium\\\"; ObjectID = \\\"DcN-1g-hEi\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"متوسط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Střední\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mittel\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Medium\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mediano\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Moyen\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בינוני\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मध्यम\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Medio\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"普通\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보통\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Medium\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Médio\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Médio\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Средний\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Orta\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Середній\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"中等的\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"中\"\n          }\n        }\n      }\n    },\n    \"DeU-hy-pvi.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Shift Left\\\"; ObjectID = \\\"DeU-hy-pvi\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحول اليسار\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posunout doleva\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Text nach links bewegen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Shift Left\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tabular a la izquierda\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Décaler vers la gauche\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הזחה שמאלה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाईं ओर शिफ्ट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta a sinistra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"左にシフト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"들여쓰기 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschuif Links\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover para direita\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deslocar à Esquerda\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сдвиг влево\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sola kaydır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зміщення вліво\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"左移\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"向左位移\"\n          }\n        }\n      }\n    },\n    \"dgD-xe-DVG.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"v2.9.0\\\"; ObjectID = \\\"dgD-xe-DVG\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"v2.9.0\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"v2.9.0\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"v2.9.0\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"v2.9.0\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"v2.9.0\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"v2.9.0\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"v2.9.0\"\n          }\n        }\n      }\n    },\n    \"doI-Mu-yZG.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"no key\\\"; ObjectID = \\\"doI-Mu-yZG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"bez klíče\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई चाबी नहीं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ключ не выбран\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無金鑰\"\n          }\n        }\n      }\n    },\n    \"dop-ho-N26.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Separate .git in project dir (except iCloud Drive)\\\"; ObjectID = \\\"dop-ho-N26\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oddělený .git soubor ve složce projektu (kromě iCloud Drive)\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रोजेक्ट निर्देशिका से .git अलग करे (iCloud ड्राइव को छोड़कर)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".git в каталоге проекта (кроме iCloud Drive)\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Proje dizininde .git'i ayırın (iCloud Drive hariç)\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Separate .git in project dir (except iCloud Drive)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在项目目录中分隔.git (iCloud 除外)\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在專案目錄中分離 .git（iCloud 雲碟除外）\"\n          }\n        }\n      }\n    },\n    \"Dp7-4n-ilt.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Custom Server\\\"; ObjectID = \\\"Dp7-4n-ilt\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"خادم مخصص\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vlastní server\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Benutzerdefinierter Server\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Custom Server\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servidor personalizado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serveur personnalisé\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שרת מותאם אישית\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कस्टम सर्वर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Server personalizzato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"カスタムサーバー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"커스텀 서버\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aangepaste server\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servidor personalizado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servidor personalizado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пользовательский сервер\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Özel Sunucu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Користувацький сервер\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自定义服务器\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自訂伺服器\"\n          }\n        }\n      }\n    },\n    \"dqy-22-ETG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Decrypt Folder\\\"; ObjectID = \\\"dqy-22-ETG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"تشفير المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Zašifrovat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner entschlüsseln\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Decrypt Folder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cifrar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crypter le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצפנת תיקיה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"फ़ोल्डर एन्क्रिप्ट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrittografa cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"フォルダの暗号化\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"폴더 암호화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Map versleutelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Criptografar pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Criptografar pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зашифровать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Şifrele\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розшифрувати директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"加密文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密資料夾\"\n          }\n        }\n      }\n    },\n    \"dRJ-4n-Yzg.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Undo\\\"; ObjectID = \\\"dRJ-4n-Yzg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تراجع\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odvolat akci\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rückgängig machen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Undo\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deshacer\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ביטול\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्ववत\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Indietro\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取り消す\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"실행 취소\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ongedaan maken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desfazer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desfazer\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geri al\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відмінити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"撤销\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"復原\"\n          }\n        }\n      }\n    },\n    \"Dv1-io-Yv7.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Spelling and Grammar\\\"; ObjectID = \\\"Dv1-io-Yv7\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التهجئة والقواعد اللغوية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pravopis a gramatika\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechtschreibung und Grammatik\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Spelling and Grammar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografía y gramática\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Orthographe et grammaire\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"איות ודקדוק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तनी और व्याकरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografia e Grammatica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スペルと文法\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"맞춤법 및 문법\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spelling en Grammatica\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografia e Gramática\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ortografia e Gramática\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Орфография и грамматика\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazım ve Dilbilgisi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Орфографія і граматика\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拼写和语法\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拼字與文法\"\n          }\n        }\n      }\n    },\n    \"DWe-bx-jfM.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Header 5\\\"; ObjectID = \\\"DWe-bx-jfM\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان ٥\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis 5\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 5\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Header 5\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezado 5\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre 5\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת 5\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हेडर 5\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazione 5\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘッダー 5\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 5\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kop 5\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 5\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 5\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 5\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık 5\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 5\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5级标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題 5\"\n          }\n        }\n      }\n    },\n    \"DXE-kd-1X3.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Password:\\\"; ObjectID = \\\"DXE-kd-1X3\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kennwort:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Password:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clave:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola d'ordine:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワード:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"비밀번호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifre :\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密碼：\"\n          }\n        }\n      }\n    },\n    \"dZD-Db-KHs.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Language:\\\"; ObjectID = \\\"dZD-Db-KHs\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اللغة (تحتاج إلى إعادة تشغيل التطبيق):\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Jazyk:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sprache (Neustart erforderlich):\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Language:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Idioma (requiere reiniciar):\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Langue (redémarrage de l'app) :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שפה (דורש אתחול):\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"भाषा:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lingua:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"言語 (再起動後に反映):\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"언어 (재시작 필요)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taal (start app opnieuw op):\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Idioma:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Idioma (reinicia a aplicação)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Язык (требуется перезапуск):\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dil :\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мова (потрібен перезапуск):\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"语言 (需要重启FSNotes):\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"語言：\"\n          }\n        }\n      }\n    },\n    \"e0G-y0-N0C.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Todo\\\"; ObjectID = \\\"e0G-y0-N0C\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قائمة المهام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Úkoly\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Todo\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Todo\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pendientes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tâches\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מטלות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टुडू\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Da Fare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タスク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"할 일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Te Doen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A fazer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarefa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Задачи\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yapılacaklar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завдання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"待办事项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"待辦事項\"\n          }\n        }\n      }\n    },\n    \"E1U-fG-XBw.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"SSH configuration:\\\"; ObjectID = \\\"E1U-fG-XBw\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH ترتيب:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH konfigurace:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH-Konfiguration:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"SSH configuration:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH configuración:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paramétrage SSH:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH תְצוּרָה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH कॉन्फ़िगरेशन:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Configurazione SSH:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH 構成:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH 구성:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH configuratie:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH configuração:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH configuração:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Конфигурация SSH:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH yapılandırması:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH конфігурація:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH 配置:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"SSH 設定：\"\n          }\n        }\n      }\n    },\n    \"E6I-n5-dsi.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Duplicate\\\"; ObjectID = \\\"E6I-n5-dsi\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عمل نسخة مكررة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplikovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplizieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Duplicate\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliquer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שכפל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नकल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"복제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliceren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать копию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дублювати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"副本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"製作複本\"\n          }\n        }\n      }\n    },\n    \"e7y-7Z-36y.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"_\\\"; ObjectID = \\\"e7y-7Z-36y\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"_\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"_\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"e15-ps-th1.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Hide date\\\"; ObjectID = \\\"e15-ps-th1\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اخفاء التاريخ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt datum\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum ausblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide date\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar la fecha\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer la date\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר תאריך\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"तारीख छुपाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi data\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"日付を非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"날짜 숨기기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verberg datum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar data\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar data\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать дату\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarihi gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сховати дату\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏日期\"\n          }\n        }\n      }\n    },\n    \"EC3-YF-sGZ.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Preview\\\"; ObjectID = \\\"EC3-YF-sGZ\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Náhled\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Preview\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्वावलोकन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Önizleme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Попередній перегляд\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"eCt-xc-KgN.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Share\\\"; ObjectID = \\\"eCt-xc-KgN\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Teilen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Share\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Compartir\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Partager\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साझा करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Condividi\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поделиться\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paylaş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поділитися\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分享\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分享\"\n          }\n        }\n      }\n    },\n    \"egX-yM-Suq.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Path:\\\"; ObjectID = \\\"egX-yM-Suq\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cesta:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pfad:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पथ:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sentiero:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caminho:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Path:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Путь:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yol:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шлях:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"路径:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"路徑：\"\n          }\n        }\n      }\n    },\n    \"Ehk-CU-fbX.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Set\\\"; ObjectID = \\\"Ehk-CU-fbX\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مجموعة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Setzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escoger\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Appliquer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בחר\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सेट करें\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"설정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instelling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Установить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Встановити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        }\n      }\n    },\n    \"EK1-kN-kK3.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Strikethrough\\\"; ObjectID = \\\"EK1-kN-kK3\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نص يتوسطه خط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přeškrtnuté\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Durchgestrichen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Strikethrough\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tachado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Barrer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קו חוצה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्ट्राइकथ्रू\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Barrato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取り消し線\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"취소선\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Doorhalen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Riscar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suprimir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перечёркнутый\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Üstü çizili\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перекреслений\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除线\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除線\"\n          }\n        }\n      }\n    },\n    \"eKQ-lM-8Z4.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Font preview\\\"; ObjectID = \\\"eKQ-lM-8Z4\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"معاينة الخط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Náhled písma\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font Vorschau\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Font preview\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font preview\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aperçu de la police\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תצוגת גופן\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ॉन्ट पूर्वावलोकन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Anteprima Font\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォントプレビュー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"서체 미리보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lettertype voorvertoning\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualização da fonte\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualizar tipo de letra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Предпросмотр шрифта\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazı tipi önizlemesi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт попереднього перегляда\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字体预览\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字體預覽\"\n          }\n        }\n      }\n    },\n    \"ELw-Y4-DV0.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Version\\\"; ObjectID = \\\"ELw-Y4-DV0\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الاصدار\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verze\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Version\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Version\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versión\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Version\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גרסה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संस्करण\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"버전\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versão\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Версия\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versiyon\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Версія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"版本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"版本\"\n          }\n        }\n      }\n    },\n    \"eTL-dh-GvM.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Creation Date\\\"; ObjectID = \\\"eTL-dh-GvM\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ الانشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstellungsdatum\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Creation Date\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fecha de creación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de création\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תאריך יצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तारीख\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"생성일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aanmaakdatum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturulma Tarihi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Датою створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立日期\"\n          }\n        }\n      }\n    },\n    \"EYG-WM-BFN.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Ascending\\\"; ObjectID = \\\"EYG-WM-BFN\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تصاعدي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vzestupně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aufsteigend\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Ascending\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ascendente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ascendant\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עולה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आरोही\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crescente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"昇順\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"오름차순\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oplopend\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ascendente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ascendente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Восходящее\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yükselen\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Висхідний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"升序\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"遞增\"\n          }\n        }\n      }\n    },\n    \"F2S-fz-NVQ.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Help\\\"; ObjectID = \\\"F2S-fz-NVQ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مساعدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nápověda\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hilfe\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Help\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayuda\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aide\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עזרה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सहायता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aiuto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘルプ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"도움말\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Help\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajuda\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajuda\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Помощь\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yardım\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Допомога\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"帮助\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"輔助說明\"\n          }\n        }\n      }\n    },\n    \"F6G-ua-MNX.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Hide preview\\\"; ObjectID = \\\"F6G-ua-MNX\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اخفاء المعاينة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt náhled textu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vorschau ausblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide preview\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar la previsualización de notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer l'apercu\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר תצוגה מקדימה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्वावलोकन छुपाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi anteprima note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リストプレビューを非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"미리보기 숨기기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verberg voorvertoning\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar pré-visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar pré-visualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отключить предпросмотр\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Önizlemeyi gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сховати прев'ю\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏预览\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏預覽\"\n          }\n        }\n      }\n    },\n    \"f33-1h-Hvh.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Show nested folders content\\\"; ObjectID = \\\"f33-1h-Hvh\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار محتوى المجلدات المتداخلة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit obsah podsložek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Show nested folders content\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show nested folders content\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar el contenido de las carpetas anidadas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher le contenu sous-jacent\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג תכני תיקיה מקוננים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नेस्टेड फ़ोल्डर्स सामग्री दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra il contenuto delle cartelle\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"深い階層にあるフォルダの内容も表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"중첩 폴더 콘텐츠 표시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Show nested folders content\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar conteúdo das pastas aninhadas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostarr conteúdo das pastas contíguas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать содержимое подпапок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İç içe klasörlerin içeriğini göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показувати вміст підпапок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示嵌套文件夹内容\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示巢狀資料夾內容\"\n          }\n        }\n      }\n    },\n    \"FeM-D8-WVr.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Substitutions\\\"; ObjectID = \\\"FeM-D8-WVr\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تبديلات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Záměny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ersetzungen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Substitutions\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sustituciones\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substitutions\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"החלפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रतिस्थापन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sostituzioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動置換\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"대체\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vervangingen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substituições\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substituições\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Подстановка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İkameler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заміни\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"替换\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"替代\"\n          }\n        }\n      }\n    },\n    \"fHG-zk-g0k.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Delete\\\"; ObjectID = \\\"fHG-zk-g0k\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Löschen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Delete\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मिटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除\"\n          }\n        }\n      }\n    },\n    \"FKE-Sm-Kum.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"FSNotes Help\\\"; ObjectID = \\\"FKE-Sm-Kum\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes مساعدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nápověda pro FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes Hilfe\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes Help\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayuda de FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aide de FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עזרה בנושא FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes सहायता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Guida di FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotesヘルプ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 도움말\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes-hulp\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajuda do FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajuda do FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Помощь FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes Yardım\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Допомога FSNotes \"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes帮助\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 輔助說明\"\n          }\n        }\n      }\n    },\n    \"FKf-Ph-LiA.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Icons design:\\\"; ObjectID = \\\"FKf-Ph-LiA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تصميم الأيقونات:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Design ikon:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icons design:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Icons design:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icons design:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Design des icônes :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עיצוב צלמיות:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चिह्न डिजाइन:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Design icone:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"アイコンデザイン:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"아이콘 디자인:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pictogrammen ontwerp:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Design dos ícones:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Design dos ícones:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дизайн иконки:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Simge tasarımı:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дизайн іконок:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"图标设计:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"圖示設計：\"\n          }\n        }\n      }\n    },\n    \"fkH-Wf-n87.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Decrypt\\\"; ObjectID = \\\"fkH-Wf-n87\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"ازالة التشفير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Odebrat šifrování\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entschlüsseln\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Decrypt\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Quitar encriptación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le chiffrement\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסר הצפנה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"एन्क्रिप्शन हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrittografa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"ロックを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"암호화 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Verwijder versleuteling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Remover criptografia\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Remover criptografia\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Снять шифрование\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifrelemeyi Kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розшифрувати нотатку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除加密\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密\"\n          }\n        }\n      }\n    },\n    \"fmS-eE-nne.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Default Storage:\\\"; ObjectID = \\\"fmS-eE-nne\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الخزن الافتراضي:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Výchozí úložiště\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Standardspeicherort:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Default Storage:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Almacenamiento por defecto:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stockage par défaut:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אחסון ברירת מחדל:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डिफ़ॉल्ट संग्रहण:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Storage predefinito:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"デフォルトストレージ:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"기본 저장소:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Standaard opslag:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Armazenamento padrão:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Armazenamento por defeito:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Хранилище по умолчанию:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Varsayılan Depolama:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розташування за замовчуванням:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"默认存储:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"預設儲存空間：\"\n          }\n        }\n      }\n    },\n    \"FQV-5x-ffs.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Zoom\\\"; ObjectID = \\\"FQV-5x-ffs\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تقريب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přiblížení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoomen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הגדל/הקטן\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ज़ूम\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拡大\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"확대\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoom\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Увеличить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yakınlaştır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Наблизити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"缩放\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"縮放\"\n          }\n        }\n      }\n    },\n    \"frt-CF-STi.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Change\\\"; ObjectID = \\\"frt-CF-STi\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ändern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Change\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Changer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verander\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更\"\n          }\n        }\n      }\n    },\n    \"FS0-ZJ-WvJ.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Files Naming:\\\"; ObjectID = \\\"FS0-ZJ-WvJ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تسمية الملفات:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pojmenování souborů:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Benennung der Dateien:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Files Naming:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nombre de archivos:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nommage des fichiers:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שם קבצים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ाइल नामकरण:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Denominazione dei file:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファイル名:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"파일 이름 지정:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bestandsnaamgeving:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nomenclatura dos arquivos:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nomenclatura de ficheiros:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Именование файлов:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dosya Adlandırma:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Іменування файлів:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件命名中:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檔案命名：\"\n          }\n        }\n      }\n    },\n    \"fsF-5N-tWg.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Made with ❤️ in Ukraine 🇺🇦 \\\"; ObjectID = \\\"fsF-5N-tWg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مصنوع من ❤️ في أوكرانيا 🇺🇦 \"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořeno s ❤️ v Ukrajině 🇺🇦 \"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hergestellt mit ❤️ in der Ukraine 🇺🇦\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Made with ❤️ in Ukraine 🇺🇦 \"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hecho con ❤️ en Ucrania 🇺🇦 \"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fait avec ❤️ en Ukraine 🇺🇦 \"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נבנה ב-❤️ באוקראינה 🇺🇦\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"यूक्रेन 🇺🇦 में ❤️ के साथ बनाया गया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realizzato con ❤️ in Ucraina 🇺🇦 \"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウクライナで❤️を使って作られました🇺🇦\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"우크라이나에서 ❤️으로 만든 🇺🇦\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gemaakt met ❤️ in Ukraine 🇺🇦 \"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Feito com ❤️ na Ucrânia 🇺🇦\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Feito com ❤️ na Ucrânia 🇺🇦\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сделано с ❤️ в Украине 🇺🇦\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ukrayna'da ❤️ ile yapıldı 🇺🇦\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зроблено з ❤️ в Україні 🇺🇦\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"乌克兰 ❤️ 制造 🇺🇦 \"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"來自烏克蘭的 ❤️ 製作\"\n          }\n        }\n      }\n    },\n    \"fzU-ZR-Ubv.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Rename Folder\\\"; ObjectID = \\\"fzU-ZR-Ubv\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تسمية المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner umbenennen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Rename Folder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שם תיקיה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर का नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダの名称変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"폴더 이름 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Yeniden Adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名資料夾\"\n          }\n        }\n      }\n    },\n    \"fzY-c6-DaK.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Auto-lock for Encrypted Notes:\\\"; ObjectID = \\\"fzY-c6-DaK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"القفل التلقائي للملاحظات المشفرة:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automaticky zamykat šifrované poznámky:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische Sperre für verschlüsselte Notizen:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Auto-lock for Encrypted Notes:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear autómaticamente las notas encriptadas:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller automatiquement les notes chiffrées :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעילה אוטומטית לפתקים מוצפנים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"एन्क्रिप्टेड नोट्स के लिए स्वतः लॉक:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocco automatico per note cifrate:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロックされたノートを自動で閉じる:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"암호화된 노트 자동 잠금:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatisch vergrendelen voor versleutelde notities:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear automaticamente notas criptografadas:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear automático para notas criptografadas:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоблокировка:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifreli Notlar için Otomatik Kilit:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Авто-блокування:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自动锁定加密的笔记:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"加密筆記自動鎖定：\"\n          }\n        }\n      }\n    },\n    \"g5W-YF-jAC.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Scan inline tags\\\"; ObjectID = \\\"g5W-YF-jAC\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مسح العلامات المضمنة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detekovat značky v textu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scan inline tags\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Scan inline tags\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escanear etiquetas automáticamente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Balayer les tags en ligne\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סרוק תגים מוטבעים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इनलाइन टैग स्कैन करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scansiona i tag in linea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"インラインタグをスキャンする\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"인라인 태그 스캔\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inline-tags scannen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escanear tags inline\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Examinar etiquetas em linha\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сканировать встроенные теги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Satır içi etiketleri tarayın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cканувати вбудовані теги\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"扫描内联标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"掃描行內標籤\"\n          }\n        }\n      }\n    },\n    \"gbE-yH-ECm.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Save clipboard shortcut:\\\"; ObjectID = \\\"gbE-yH-ECm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حفظ اختصار الحافظة:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit ze schránky:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aus Zwischenablage kopieren:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Save clipboard shortcut:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"F. rápida guardar portapapeles:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauvegarder le presse-papier :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קיצור דרך לשמור את לוח העריכה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्लिपबोर्ड सहेजें शॉर्टकट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salva appunti in una nuova nota:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クリップボードから新規作成:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"클립보드 저장 단축키:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opslaan klembord-snelkoppeling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salvar atalho na área de transferência\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Guardar no 'clipboard':\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сохранить из буфера:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Panoya kaydetme kısayolu:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Швидке збереження:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"保存剪贴板快捷方式:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"儲存剪貼簿快速鍵：\"\n          }\n        }\n      }\n    },\n    \"Gbf-V7-5Ra.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"seconds\\\"; ObjectID = \\\"Gbf-V7-5Ra\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ثواني\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"sekund\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שניות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"segundos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"секунды\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"saniyeler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"seconds\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"秒\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"秒\"\n          }\n        }\n      }\n    },\n    \"GCG-C6-9cg.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Modification date\\\"; ObjectID = \\\"GCG-C6-9cg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ التعديل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum změny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Änderungsdatum\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Modification date\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fecha de modificación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de modification\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תאריך שינוי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सुधार की तारीख\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di modifica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更日\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"수정일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wijzigingsdatum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de modificação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de modificação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата модификации\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değişiklik tarihi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Датою модифікації\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"修改日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"修改日期\"\n          }\n        }\n      }\n    },\n    \"GcP-oI-0b4.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Cancel\\\"; ObjectID = \\\"GcP-oI-0b4\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الغاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zrušit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abbrechen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Cancel\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ביטול\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रद्द करे\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"취소\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuleer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İptal\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скасувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消\"\n          }\n        }\n      }\n    },\n    \"GEO-Iw-cKr.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Format\\\"; ObjectID = \\\"GEO-Iw-cKr\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تنسيق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"형식\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formaat\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Форматирование\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Форматування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式\"\n          }\n        }\n      }\n    },\n    \"gFA-SA-v9T.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"FSNotes Server\\\"; ObjectID = \\\"gFA-SA-v9T\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"خادم FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes server\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes Server\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes Server\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servidor de FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serveur FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes שרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes सर्वर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Server FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes サーバー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 서버\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes-server\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servidor do FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servidor FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сервер FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes Sunucu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes сервер\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 服务器\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 伺服器\"\n          }\n        }\n      }\n    },\n    \"Gg5-NO-KIQ.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"None Selected\\\"; ObjectID = \\\"Gg5-NO-KIQ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected \"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nic nevybráno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Keine ausgewählt\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"None Selected\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ninguno Seleccionado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected \"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None Selected \"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई भी नहीं चुना गया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nessuno selezionato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選択なし\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택되지 않음\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geen geselecteerd\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nada selecionado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nenhum selecionado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не выбрано\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçilmedi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не вибрано\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无选择\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未選取\"\n          }\n        }\n      }\n    },\n    \"ghI-ln-bql.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Web:\\\"; ObjectID = \\\"ghI-ln-bql\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Веб:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Веб:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主页:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web：\"\n          }\n        }\n      }\n    },\n    \"GhL-6I-558.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Header 4\\\"; ObjectID = \\\"GhL-6I-558\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان ٤\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis 4\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 4\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Header 4\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezado 4\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre 4\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת 4\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हेडर 4\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazione 4\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘッダー 4\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 4\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kop 4\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 4\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 4\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 4\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık 4\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 4\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4级标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題 4\"\n          }\n        }\n      }\n    },\n    \"goN-LO-L7l.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Reveal in Finder\\\"; ObjectID = \\\"goN-LO-L7l\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Zobrazit ve Finderu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reveal in Finder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Localiser dans le Finder\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג ב-Finder\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Finder में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Finder\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Finderに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Finder에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Toon in Finder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в Finder\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder'da göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати у Finder\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在访达中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於 Finder\"\n          }\n        }\n      }\n    },\n    \"gra-E2-dYh.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Show in Finder\\\"; ObjectID = \\\"gra-E2-dYh\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ve Finderu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show in Finder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Localiser dans le Finder\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג ב-Finder\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Finder\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finderに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon in Finder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Finder\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в Finder\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder'da göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати в Finder\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在访达中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於 Finder\"\n          }\n        }\n      }\n    },\n    \"GrP-W1-7ZQ.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Lock All Encrypted\\\"; ObjectID = \\\"GrP-W1-7ZQ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل جميع المشفرة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout všechny šifrované\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alle verschlüsselte sperren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock All Encrypted\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear todas las notas encriptadas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tout verrouiller\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל פתקים מוצפנים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सभी एन्क्रिप्टेड लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca tutte le note criptate\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロックされたノートをすべて閉じる\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모든 암호 노트 잠금\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel alle versleutelde\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear todos os criptografados\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear Todos os Criptografados\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать все секретные\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tüm Şifrelenmişleri Kilitle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати всі секретні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定所有加密的笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定所有加密項目\"\n          }\n        }\n      }\n    },\n    \"gVA-U4-sdL.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Paste\\\"; ObjectID = \\\"gVA-U4-sdL\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لصق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vložit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einfügen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Paste\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pegar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Coller\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הדבק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पेस्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Incolla\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ペースト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"붙여넣기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Plakken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Colar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Colar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вставить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yapıştır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вставити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"粘贴\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"貼上\"\n          }\n        }\n      }\n    },\n    \"gWb-su-EdI.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"FSNotes\\\"; ObjectID = \\\"gWb-su-EdI\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"Gwp-vX-YaR.headerCell.title\" : {\n      \"comment\" : \"Class = \\\"NSTableColumn\\\"; headerCell.title = \\\"Library\\\"; ObjectID = \\\"Gwp-vX-YaR\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"المكتبة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Knihovna\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Library\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Library\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Librería\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bibliothèque\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Library\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पुस्तकालय\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Libreria\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ライブラリ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"라이브러리\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bibliotheek\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biblioteca\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biblioteca\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Библиотека\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kütüphane\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Бібліотека\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"资源库\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"資料庫\"\n          }\n        }\n      }\n    },\n    \"gY8-zt-Iak.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Dark\\\"; ObjectID = \\\"gY8-zt-Iak\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"داكن\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tmavý\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dunkel\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Dark\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oscuro\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sombre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חשוך\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dark\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Scuro\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ダーク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다크\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Donker\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escuro\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escuro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тёмная\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Karanlık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Темна\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"深色\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"深色\"\n          }\n        }\n      }\n    },\n    \"gYQ-MC-Xwt.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Zoom Out\\\"; ObjectID = \\\"gYQ-MC-Xwt\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تصغير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zmenšit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verkleinern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Zoom Out\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alejar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dézoomer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"להקטין את התצוגה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ज़ूम आउट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ingrandimento\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ズームアウト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"축소\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uitzoomen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reduzir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reduzir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Уменьшить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uzaklaştır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зменшити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"缩小\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"縮小\"\n          }\n        }\n      }\n    },\n    \"H8h-7b-M4v.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"View\\\"; ObjectID = \\\"H8h-7b-M4v\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Darstellung\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"View\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualización\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Affichage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תצוגה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"देखें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weergave\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vista\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вид\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünüm\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вигляд\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"视图\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檢視\"\n          }\n        }\n      }\n    },\n    \"Hdn-bm-lbP.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Reset Settings\\\"; ObjectID = \\\"Hdn-bm-lbP\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اعادة الضبط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetovat nastavení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen zurücksetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset Settings\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Restablecer la configuración\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Réinitialiser les paramètres\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אפס הגדרות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं रीसेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripristino delle impostazioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定のリセット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"설정 초기화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instellingen resetten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Redefinir configurações\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repor definições\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сбросить настройки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarları sıfırla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скинути налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重置设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設設定\"\n          }\n        }\n      }\n    },\n    \"HFo-cy-zxI.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Show Spelling and Grammar\\\"; ObjectID = \\\"HFo-cy-zxI\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض التدقيق الإملائي والنحوي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit pravopis a gramatiku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechtschreibung und Grammatik einblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show Spelling and Grammar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar ortografía y gramática\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher Orthographe et grammaire\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג איות ודקדוק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तनी और व्याकरण दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra Ortografia e Grammatica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スペルと文法を表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"맞춤법 및 문법 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon Spelling en Grammatica\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar Ortografia e Gramática\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar Ortografia e Gramática\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать орфографию и грамматику\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazım ve Dilbilgisini Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати правопис та граматику\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示拼写和语法\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示拼字與文法\"\n          }\n        }\n      }\n    },\n    \"HFQ-gK-NFA.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Text Replacement\\\"; ObjectID = \\\"HFQ-gK-NFA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استبدال النص\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nahrazovat text\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Text ersetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Text Replacement\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reemplazar texto\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remplacement de texte\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מלל חלופי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पाठ प्रतिस्थापन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sostituzione Testo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ユーザー辞書\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"텍스트 대치\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tekstvervanging\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substituição de texto\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Substituição de Texto\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Замена текста\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Metin Değiştirme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заміна тексту\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文本替换\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文字替代\"\n          }\n        }\n      }\n    },\n    \"HK7-Qq-ilB.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\".markdown\\\"; ObjectID = \\\"HK7-Qq-ilB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".markdown\"\n          }\n        }\n      }\n    },\n    \"HmK-lp-ASv.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Open Note in New Window\\\"; ObjectID = \\\"HmK-lp-ASv\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"افتح في نافذة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Otevřít v novém okně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In neuem Fenster öffnen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Open Note in New Window\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir en Nueva ventana\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir dans une nouvelle fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח בחלון חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"नई विंडो में खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri in una nuova finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"新しいウィンドウで開きます\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"새 창에서 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Notitie openen in nieuw venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Abrir em nova janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Abrir em nova janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть в новом окне\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Pencerede Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити у новому вікні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新窗口中打开\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新視窗開啟筆記\"\n          }\n        }\n      }\n    },\n    \"HPa-9J-5dS.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Reset\\\"; ObjectID = \\\"HPa-9J-5dS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة ضبط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zurücksetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reiniciar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Réinitialiser\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אִתחוּל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रीसेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripristina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リセット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"초기화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Redefinir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сбросить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıfırla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скинути\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設\"\n          }\n        }\n      }\n    },\n    \"hPY-aY-QOE.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Search and Create\\\"; ObjectID = \\\"hPY-aY-QOE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث وانشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat a vytvořit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen und ersetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Search and Create\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar y crear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher et créer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חיפוש יצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजें और बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerca e crea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索または新規作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"검색 및 추가\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek en creëer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e criar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e criar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти и создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara ve oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти або створити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索或创建（按下回车即可创建）\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜尋並新增\"\n          }\n        }\n      }\n    },\n    \"hQb-2v-fYv.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Smart Quotes\\\"; ObjectID = \\\"hQb-2v-fYv\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اقتباسات ذكية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inteligentní uvozovky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intelligente Anführungszeichen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Smart Quotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Comillas tipográficas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Guillemets intelligents\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מרכאות חכמות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्मार्ट उद्धरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Virgolette Smart\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スマート引用符\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"스마트 인용\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Slimme Aanhalingstekens\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aspas inteligentes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aspas Inteligentes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Смарт-кавычки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Akıllı Alıntılar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розумні лапки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智能引号\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智慧型引號\"\n          }\n        }\n      }\n    },\n    \"hqQ-4C-VJL.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"WikiLinks\\\"; ObjectID = \\\"hqQ-4C-VJL\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ويكيلينكس\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"위키 링크\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"WikiLinks\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Викиссылки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wiki Bağlantıları\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вікіпосилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"维基链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"維基連結\"\n          }\n        }\n      }\n    },\n    \"Hqu-Sx-xgo.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Up in the Notes List\\\"; ObjectID = \\\"Hqu-Sx-xgo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحرك لأعلى في قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posunout nahoru v seznamu poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In der Notizliste aufsteigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Up in the Notes List\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover arriba en la lista de notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note précédente\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עבור למעלה ברשימת הפתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट्स सूची में ऊपर जाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Muovi in Alto nella Lista Note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上に移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메모 목록에서 위로 이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Omhoog gaan in de notitielijst\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover para cima lista de notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Subir na lista de Notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вверх в списке заметок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notlar Listesinde Yukarı Çık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вгору у списку нотаток\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在笔记列表中上移\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在筆記清單中上移\"\n          }\n        }\n      }\n    },\n    \"HyV-fh-RgO.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"View\\\"; ObjectID = \\\"HyV-fh-RgO\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Darstellung\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"View\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualización\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Affichage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תצוגה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"देखें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weergave\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vista\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вид\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünüm\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вигляд\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"视图\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檢視\"\n          }\n        }\n      }\n    },\n    \"hz2-CU-CR7.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Check Document Now\\\"; ObjectID = \\\"hz2-CU-CR7\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فحص المستند الآن\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zkontrolovat dokument\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dokument jetzt prüfen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Check Document Now\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Comprobar documento ahora\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vérifier le document maintenant\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בדוק את המסמך כעט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दस्तावेज़ अभी जांचें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controlla ora il documento\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"今すぐドキュメントをチェック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"지금 도큐멘트 검사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controleer Document Nu\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar documento agora\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar Documentos Agora\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Проверить документ\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Belgeyi Şimdi Kontrol Et\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перевіряти документ\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"立即检查文档\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"立即檢查文件\"\n          }\n        }\n      }\n    },\n    \"hz9-B4-Xy5.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Services\\\"; ObjectID = \\\"hz9-B4-Xy5\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الخدمات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Služby\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servicios\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שירותים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सेवाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servizi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サービス\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"서비스\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serviços\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serviços\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Услуги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hizmetler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сервіси\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"服务\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"服務\"\n          }\n        }\n      }\n    },\n    \"i2S-pt-KQH.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Trash:\\\"; ObjectID = \\\"i2S-pt-KQH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الملهملات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Koš\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papierkorb:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Trash:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papelera:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corbeille:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פח אשפה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कूडा:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cestino:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ゴミ箱:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"휴지통:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prullenmand:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lixo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lixo:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Корзина:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çöp:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сміття:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"废弃:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"垃圾桶：\"\n          }\n        }\n      }\n    },\n    \"IHG-4U-pF1.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Inbox\\\"; ObjectID = \\\"IHG-4U-pF1\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الوارد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Příchozí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posteingang\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Inbox\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrada\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Boîte de réception\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיבת דואר נכנס\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इनबॉक्स\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Entrata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未整理\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"받은 편지함\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Postvak In\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caixa de entrada\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caixa de entrada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Входящие\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gelen kutusu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вхідні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"收集箱\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"收件匣\"\n          }\n        }\n      }\n    },\n    \"iIP-wI-OaZ.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Commit & Push\\\"; ObjectID = \\\"iIP-wI-OaZ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"تخزين النسخ الاحتياطي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Zálohovat nyní\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Commit & Push\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Almacenamiento de respaldo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauvegarder le stockage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גבה עכשיו\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"अभी बैकअप लें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salva archivio\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"今すぐバックアップ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"저장소 백업\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Back-up opslag\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Fazer backup agora\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Cópia de segurança de armazenamento\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать резервную копию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit & Push\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"提交並推送\"\n          }\n        }\n      }\n    },\n    \"IlF-tS-GFG.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Lock on screen saver activated\\\"; ObjectID = \\\"IlF-tS-GFG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل عند تفعيل شاشة التوقف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout při spořiči obrazovky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sperren, wenn der Bildschirmschoner aktiv\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock on screen saver activated\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear cuando se active el salvapantallas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller à l'activation de l'économiseur d'écran\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל בהפעלת שומר מסך\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्क्रीन सेवर सक्रिय होने पर लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca a screen saver attivato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スクリーンセーバー起動時\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"화면 보호기 실행시 잠금\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel bij activering schermbeveiliging\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear quando o protetor de tela ativar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear quando o protector de ecrã activar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать при включении скринсейвера\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ekran koruyucusu etkinken kilitlendi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Блокувати при активації скрінсейвера\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"系统激活屏幕保护后自动锁定\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"啟動螢幕保護程式時鎖定\"\n          }\n        }\n      }\n    },\n    \"iNK-dg-n5E.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"New Password:\\\"; ObjectID = \\\"iNK-dg-n5E\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور الجديدة:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nové heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neue Passwort:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"New Password:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña nueva:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau mot de passe :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה חדשה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया पासवर्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova password:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新しいパスワード:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새 비밀번호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuw wachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova senha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova palavra-passe:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новый пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni şifre :\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новий пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新的密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新密碼：\"\n          }\n        }\n      }\n    },\n    \"ioc-u5-XRA.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Hint:\\\"; ObjectID = \\\"ioc-u5-XRA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تلميحة :\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nápověda:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hint:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hint:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Indicación:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pense-bête :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רמז:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संकेत:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suggerimento:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヒント:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"힌트:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hint:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dica:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dica:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Подсказка:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İpucu:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Підказка:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"提示:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"提示：\"\n          }\n        }\n      }\n    },\n    \"IPu-Ll-IBE.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Shift Right\\\"; ObjectID = \\\"IPu-Ll-IBE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحول اليمين\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posunout doprava\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Text nach rechts bewegen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Shift Right\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tabular a la derecha\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Décaler vers la droite\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הזחה ימינה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दांयी ओर शिफ्ट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta a destra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"右にシフト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"들여쓰기 추가\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschuif Rechts\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover para esquerda\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deslocar à Direita\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сдвиг вправо\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sağa kaydır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зміщення вправо\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"右移\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"向右位移\"\n          }\n        }\n      }\n    },\n    \"iQ9-lm-lFb.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"no key\\\"; ObjectID = \\\"iQ9-lm-lFb\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"bez klíče\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई चाबी नहीं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"нет ключа\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"anahtar yok\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"no key\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無金鑰\"\n          }\n        }\n      }\n    },\n    \"IQv-IB-iLA.title\" : {\n      \"comment\" : \"Class = \\\"NSWindow\\\"; title = \\\"FSNotes\\\"; ObjectID = \\\"IQv-IB-iLA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"iUm-Zm-zeg.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Line Spacing:\\\"; ObjectID = \\\"iUm-Zm-zeg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تباعد الاسطر\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rozestup řádků:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zeilenabstand:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Line Spacing:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaciado de línea:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espacement des lignes :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מרווח בין שורות:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पंक्ति रिक्ति:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Interlinea:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行間隔:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"줄 간격:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Regelafstand:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaçamento da linha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaçamento de linhas:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Межстрочный интервал:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Satır Aralığı:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Міжрядковий інтервал:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行间距:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行距：\"\n          }\n        }\n      }\n    },\n    \"IWL-lp-G1M.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Format: Untitled Note\\\"; ObjectID = \\\"IWL-lp-G1M\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التنسيق: Untitled Note\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: Poznámka bez názvu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: Untitled Note\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format: Untitled Note\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: Nota sin título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: Untitled Note\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט: Untitled Note\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: शीर्षक रहित नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: Nota senza titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: 名称未設定\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"체재: Untitled Note\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: Untitled Note\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: nota sem título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: Nota sem título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: Untitled Note\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: Başlıksız Not\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: Нотатка без назви\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式: 无标题笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式：無標題筆記\"\n          }\n        }\n      }\n    },\n    \"Izt-6v-pKO.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Line Width:\\\"; ObjectID = \\\"Izt-6v-pKO\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الخط:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Šířka textu:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Linienbreite:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Line Width:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ancho de línea:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Largeur de ligne :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רוחב שורות:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पंक्ति चौडाई:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Larghezza linea:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行幅:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"줄 간격:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lijnbreedte:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Largura da linha\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Largura da linha:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ширина строки:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çizgi Genişliği:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ширина рядка:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行宽:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行寬：\"\n          }\n        }\n      }\n    },\n    \"jFN-Dp-LON.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Pin/Unpin\\\"; ObjectID = \\\"jFN-Dp-LON\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"دبوس / إلغاء التثبيت\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Připnout/odepnout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixieren/Loslösen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Pin/Unpin\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Anclar/Desanclar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Épingler/Désépingler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצמד/בטל הצמדה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पिन/अनपिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fissa/sblocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ピンで固定/ピン固定を解除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"고정/고정 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin/VerwijderPin\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixar/Desafixar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixar/soltar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Прикрепить/открепить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sabitle/Sabitlemeyi kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закріпити/відкріпити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"置顶/取消置顶\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"釘選/取消釘選\"\n          }\n        }\n      }\n    },\n    \"jLq-8F-n0X.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Rename\\\"; ObjectID = \\\"jLq-8F-n0X\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اعادة تسمية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Umbenennen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Rename\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名称変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이름 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeniden isimlendir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名\"\n          }\n        }\n      }\n    },\n    \"jQ1-6K-9ar.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"🔗fsnotes/contributors\\\"; ObjectID = \\\"jQ1-6K-9ar\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/katkıda bulunanlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"🔗fsnotes/contributors\"\n          }\n        }\n      }\n    },\n    \"jrj-ea-xmm.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Visibility:\\\"; ObjectID = \\\"jrj-ea-xmm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الرؤية:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Viditelnost:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sichtbarkeit:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Visibility:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilidad:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilité :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ראות:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दृश्यता:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilità:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"視認性:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"가시성:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zichtbaarheid:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilidade:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilidade:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видимость:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünürlük:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видимість:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可见性:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"能見度：\"\n          }\n        }\n      }\n    },\n    \"jRm-BN-BNK.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Header 1\\\"; ObjectID = \\\"jRm-BN-BNK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان ١\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis 1\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 1\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Header 1\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezado 1\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre 1\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת 1\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हेडर 1\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazione 1\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘッダー 1\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 1\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kop 1\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 1\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 1\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 1\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık 1\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 1\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1级标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題 1\"\n          }\n        }\n      }\n    },\n    \"jRr-Ih-RYc.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"**\\\"; ObjectID = \\\"jRr-Ih-RYc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"**\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"**\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"juB-By-EsE.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Set\\\"; ObjectID = \\\"juB-By-EsE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تعيين\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Satz\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Establecer\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Régler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מַעֲרֶכֶת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Impostare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"세트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Set\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выбрать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вибрати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        }\n      }\n    },\n    \"jxT-CU-nIS.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Format\\\"; ObjectID = \\\"jxT-CU-nIS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تنسيق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"형식\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formaat\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Форматирование\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Форматування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式\"\n          }\n        }\n      }\n    },\n    \"K4N-le-FPU.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Delete Web Page\\\"; ObjectID = \\\"K4N-le-FPU\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف صفحة الويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geteilte löschen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Delete Web Page\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer la page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק דף אינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Delete Web Page\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina verwijderen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Excluir página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sayfasını Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除网页\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除網頁\"\n          }\n        }\n      }\n    },\n    \"k32-YP-yyI.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Italic\\\"; ObjectID = \\\"k32-YP-yyI\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مائل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kurzíva\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kursiv\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Italic\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cursiva\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Italique\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נטוי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"तिरछा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Italic\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"イタリック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이텔릭체\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cursief\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Itálico\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Itálico\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Курсив\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İtalik\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Курсив\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"斜体\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"斜體\"\n          }\n        }\n      }\n    },\n    \"KaC-Mz-siK.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Password:\\\"; ObjectID = \\\"KaC-Mz-siK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلمة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Password:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contraseña:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de p. :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola d'ordine:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワード:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"암호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passe:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifre:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密碼：\"\n          }\n        }\n      }\n    },\n    \"kbK-Um-cQk.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Use first line as title\\\"; ObjectID = \\\"kbK-Um-cQk\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استخدم اول سطر كعنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Použít první řádek jako nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erste Zeile als Titel verwenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Use first line as title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar la primera línea como título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utiliser la première ligne comme titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"השתמש בשורה הראשונה ככותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रथम पंक्ति को शीर्षक के रूप में उपयोग करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usa la prima riga come titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最初の行をタイトルとして使用\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"첫 줄을 제목으로 사용\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruik eerste regel als titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usar primeira linha como título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar a primeira linha como título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Первая строка как заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İlk satırı başlık olarak kullanın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перший рядок як заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"将内容第一行提取为标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用第一行作為標題\"\n          }\n        }\n      }\n    },\n    \"Kd2-mp-pUS.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Show All\\\"; ObjectID = \\\"Kd2-mp-pUS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الكل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit vše\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alle anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show All\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar todo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tout afficher\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג הכל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सब दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra Tutto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべてを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모두 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon alle\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar todos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar Todos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать все\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hepsini göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати все\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示全部\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示全部\"\n          }\n        }\n      }\n    },\n    \"kg2-3u-V99.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Lock/Unlock\\\"; ObjectID = \\\"kg2-3u-V99\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فقل/فتح الفقل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout/odemknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sperren/Entsperren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock/Unlock\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear/desbloquear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller/Déverrouiller\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל/פתח\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लॉक/अनलॉक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca/sblocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック/ロックの削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잠금/잠금 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel/ontgrendel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear/desbloquear\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear/desbloquear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать/разблокировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilitle/Kilidi Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати/розблокувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定/解锁\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定/解鎖\"\n          }\n        }\n      }\n    },\n    \"kIy-TN-XMS.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Close\\\"; ObjectID = \\\"kIy-TN-XMS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اغلاق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zavřít\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schließen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Close\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fermer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סגור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बंद करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chiudi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"閉じる\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"닫기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sluit\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрыть\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kapat\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"关闭\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"關閉\"\n          }\n        }\n      }\n    },\n    \"KIz-OO-IQT.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Preview MathJax\\\"; ObjectID = \\\"KIz-OO-IQT\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"معاينة MathJax \"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Náhled MathJax\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vorschau MathJax\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Preview MathJax\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Previsualizar MathJax\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aperçu MathJax\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תצוגת MathJax\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्वावलोकन MathJax\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Anteprima MathJax\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJaxをプレビュー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"미리보기 MathJax\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorvertoning MathJax\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualização do MathJax\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualizar MathJax\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Предпросмотр MathJax\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJaxı Önizleyin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Попередній перегляд MathJax\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"预览 MathJax\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"預覽 MathJax\"\n          }\n        }\n      }\n    },\n    \"kqJ-Fr-EeB.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"1\\\"; ObjectID = \\\"kqJ-Fr-EeB\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"1\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"1\"\n          }\n        }\n      }\n    },\n    \"KST-y3-KvM.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Allow Touch ID to unlock notes\\\"; ObjectID = \\\"KST-y3-KvM\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"السماح لبصمة الاصبع لفتح الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Povolit Touch ID pro odemykání poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TouchID erlauben zum Entsperren von Notizen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Allow Touch ID to unlock notes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Permitir desbloquar las notas con Touch ID\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déverrouillage de notes par Touch ID\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אפשר ל-Touch ID לפתוח פתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टच आईडी को नोट्स अनलॉक करने की अनुमति दें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Consenti a Touch ID di sbloccare le note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch IDを使ってロックされたノートを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID를 이용하여 노트 잠금 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sta Touch ID toe om notities te ontgrendelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Permitir Touch ID para bloquear notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Permitir desbloquear notas com Touch ID\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Разблокировка Touch ID\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notların kilidini açmak için Touch ID'ye izin verin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Використовувати Touch ID \"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"允许使用 Touch ID 解锁笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"允許使用 Touch ID 解鎖筆記\"\n          }\n        }\n      }\n    },\n    \"L20-FT-VZz.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Origin for main project:\\\"; ObjectID = \\\"L20-FT-VZz\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin للمشروع الرئيسي:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin pro hlavní projekt:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin for main project:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Origin for main project:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin para el proyecto principal:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin pour le projet principal:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin לפרויקט הראשי:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मुख्य प्रोजैक्ट का उद्गम स्थान:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin per il progetto principale:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin メインプロジェクト用:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin 메인 프로젝트를 위해:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin voor hoofdproject::\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origem do projeto principal:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin para projeto principal:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удаленный репозиторий (origin):\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana projenin kökeni:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remote origin основного проекту:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Origin 主要项目:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主要專案來源：\"\n          }\n        }\n      }\n    },\n    \"ldu-U8-PD1.title\" : {\n      \"comment\" : \"Class = \\\"NSWindow\\\"; title = \\\"Preferences\\\"; ObjectID = \\\"ldu-U8-PD1\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التفضيلات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Předvolby\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Preferences\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferencias\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Préférences\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העדפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferenze\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"環境設定…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"환경설정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorkeuren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Окно\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tercihler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вікно\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好設定\"\n          }\n        }\n      }\n    },\n    \"LFw-De-3DP.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Actual Size\\\"; ObjectID = \\\"LFw-De-3DP\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الحجم الأصلي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skutečná velikost\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tatsächliche Größe\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Actual Size\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamaño real\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taille réelle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גודל אמיתי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वास्तविक आकार\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dimensione reale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"実寸\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"실제 크기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Werkelijke grootte\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamanho real\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamanho real\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фактический размер\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gerçek Boyut\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фактичний розмір\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"实际尺寸\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"實際大小\"\n          }\n        }\n      }\n    },\n    \"lhy-wX-Q4T.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Reset:\\\"; ObjectID = \\\"lhy-wX-Q4T\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة ضبط:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetovat:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zurücksetzen:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Restablecer:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Réinitialiser :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אִתחוּל:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रीसेट करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Azzeramento:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リセット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"초기화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Redefinir:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repor:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сброс:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıfırla:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скинути:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設：\"\n          }\n        }\n      }\n    },\n    \"LKs-o1-uhL.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Share\\\"; ObjectID = \\\"LKs-o1-uhL\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Teilen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Share\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Compartir\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Partager\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साझा करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Condividi\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поделиться\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paylaş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поділитися\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分享\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分享\"\n          }\n        }\n      }\n    },\n    \"Lmy-lE-9MZ.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Header 3\\\"; ObjectID = \\\"Lmy-lE-9MZ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان ٣\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis 3\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 3\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Header 3\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezado 3\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre 3\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת 3\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हेडर 3\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazione 3\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘッダー 3\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Header 3\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kop 3\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 3\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cabeçalho 3\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 3\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık 3\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок 3\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3级标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題 3\"\n          }\n        }\n      }\n    },\n    \"LPT-uW-BtF.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Title\\\"; ObjectID = \\\"LPT-uW-BtF\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Title\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトル\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題\"\n          }\n        }\n      }\n    },\n    \"ltm-qj-nke.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Images Width:\\\"; ObjectID = \\\"ltm-qj-nke\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الصور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Šířka obrázků:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bilder Breite:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Images Width:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ancho de imágenes:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Largeur des images :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רוחב תמונות:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"छवियाँ चौड़ाई:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Larghezza delle immagini:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像の幅:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이미지 가로폭:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afbeeldingen breedte:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Largura das imagens:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Largura de imagens:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ширина изображений:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resim Genişliği:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ширина зображення:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"图像宽度:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"圖片寬度：\"\n          }\n        }\n      }\n    },\n    \"LTw-w4-tEo.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Bold\\\"; ObjectID = \\\"LTw-w4-tEo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"سميك\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tučné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fett\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Bold\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Negrita\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gras\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עבה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बोल्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grassetto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ボールド\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"볼드\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vet\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Negrito\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realçado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Жирный\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kalın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Жирний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"粗体\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"粗體\"\n          }\n        }\n      }\n    },\n    \"LZ2-uY-6YK.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Private key\\\"; ObjectID = \\\"LZ2-uY-6YK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soukromý klíč\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निजी कुंजी\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chave privada\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрытый ключ\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Özel anahtar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"私密金鑰\"\n          }\n        }\n      }\n    },\n    \"M29-fW-FJa.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Hide FSNotes when activating another application\\\"; ObjectID = \\\"M29-fW-FJa\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إخفاء FSNotes عند تفعيل تطبيق آخر\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt FSNotes při aktivaci jiné aplikace\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes ausblenden, wenn andere Anwendung aktiv\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide FSNotes when activating another application\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar FSNotes cuando no sea la aplicación activa\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer FSNotes à l'activation d'une autre app\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר את FSNotes כשמפעילים אפליקציה אחרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"किसी अन्य एप्लिकेशन को सक्रिय करते समय FSNotes छिपाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi FSNotes quando usi altre app\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"他のアプリケーションがアクティブ時にFSNotesを非表示にする\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다른 애플리케이션 활성화 시 FSNotes 숨기기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verberg FSNotes bij het activeren van een andere applicatie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar o FSNotes ao ativar outro aplicativo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar FSNotes quando há outra aplicação activa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Прятать окно если активно другое приложение\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başka bir uygulamayı etkinleştirirken FSNotes'u gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сховати при активуванні іншої программи\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"激活其他应用时自动隐藏 FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"啟動其他應用程式時隱藏 FSNotes\"\n          }\n        }\n      }\n    },\n    \"MCR-1v-3Wc.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"TextBundle\\\"; ObjectID = \\\"MCR-1v-3Wc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حزمة النص\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"텍스트 번들\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MetinPaketi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        }\n      }\n    },\n    \"ME1-My-h4q.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"atom-one\\\"; ObjectID = \\\"ME1-My-h4q\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"atom-one\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Atom One Light\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"atom-one\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"mK0-16-Mxo.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"4 Spaces\\\"; ObjectID = \\\"mK0-16-Mxo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 mezery\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 स्थान\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 スペース\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 espaços\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Spaces\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 пробела\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 Boşluk\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 пробіли\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"缩进 4 个空格\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"4 個空格\"\n          }\n        }\n      }\n    },\n    \"mK6-2p-4JG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Check Grammar With Spelling\\\"; ObjectID = \\\"mK6-2p-4JG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحقق من القواعد مع التدقيق الإملائي\\n\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kontrolovat gramatiku a pravopis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grammatik und Rechtschreibung prüfen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Check Grammar With Spelling\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Comprobar gramática con la ortografía\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vérifier la grammaire avec l'orthographe\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בדוק דקדוק ביחד עם איות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वर्तनी के साथ व्याकरण की जाँच करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controlla Ortografia e Grammatica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スペルと一緒に文法をチェック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"맞춤법 및 문법 검사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controleer grammatica tegelijk met spelling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar Ortografia e Gramática\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar gramática com ortografia\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Проверить грамматику с орфографией\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazımla Dilbilgisini Kontrol Et\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перевіряти граматику та правопис\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"检查拼写和语法\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檢查拼字與文法\"\n          }\n        }\n      }\n    },\n    \"MlK-p2-CxF.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Window\\\"; ObjectID = \\\"MlK-p2-CxF\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نافذة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Okno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fenster\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Window\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ventana\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חלון\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"विंडो\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウィンドウ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"윈도우\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Окно\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pencere\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вікно\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"窗口\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"視窗\"\n          }\n        }\n      }\n    },\n    \"mr6-e8-9hL.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"https://example.com/\\\"; ObjectID = \\\"mr6-e8-9hL\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://priklad.com/\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://domainadi.com/\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"https://example.com/\"\n          }\n        }\n      }\n    },\n    \"mvt-gI-iG0.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"Advanced\\\"; ObjectID = \\\"mvt-gI-iG0\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"متقدمة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pokročilé\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erweitert\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Advanced\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avanzado\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avancé\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מתקדם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"उन्नत\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avanzate\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"詳細\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"고급\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geavanceerd\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avançado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avançado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расширенные\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gelişmiş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розширені\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"高级\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"進階\"\n          }\n        }\n      }\n    },\n    \"mXw-d9-js5.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Container:\\\"; ObjectID = \\\"mXw-d9-js5\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الحاوية:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kontejner:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Container:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contenedor:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Conteneur :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מיכל:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कंटेनर:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コンテナ:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"컨테이너:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Contentor:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Контейнер:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konteyner:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Контейнер:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"容器:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"容器：\"\n          }\n        }\n      }\n    },\n    \"n0M-SN-fzg.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Toggle Todo\\\"; ObjectID = \\\"n0M-SN-fzg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تبديل Todo\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přepnout úkol\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Auf Todo umschalten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Toggle Todo\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Insertar Pendiente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cocher la tâche\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"החלף מצב מטלה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टॉगल टूडू\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passa a Da Fare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タスクの切り替え\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"할 일 토글\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wissel Te Doen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar 'A fazer'\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alternar tarefa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переключить Todo\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geçiş Yap\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завдання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切换待办事项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切換待辦事項狀態\"\n          }\n        }\n      }\n    },\n    \"N8h-ep-HFG.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Clickable links\\\"; ObjectID = \\\"N8h-ep-HFG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klikatelné odkazy\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liens cliquables\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קישורים ללחיצה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्लिक करने योग्य लिंक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クリック可能なリンク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Links clicáveis\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clickable links\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Кликабельные ссылки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tıklanabilir bağlantılar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Клікабельні посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可点击的链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可點擊連結\"\n          }\n        }\n      }\n    },\n    \"nBn-aV-7mt.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Change\\\"; ObjectID = \\\"nBn-aV-7mt\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bearbeiten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Change\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Changer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verander\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更\"\n          }\n        }\n      }\n    },\n    \"NcS-0N-6uU.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Passphrase:\\\"; ObjectID = \\\"NcS-0N-6uU\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عبارة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přístupová fráze:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase de contraseña:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ביטוי סיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासफ्रेज:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase d'accesso:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスフレーズ:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"암호:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoordzin:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase secreta:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Парольная фраза:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Парольна фраза:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"通關密語：\"\n          }\n        }\n      }\n    },\n    \"Ncv-c4-Dmg.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Tab\\\"; ObjectID = \\\"Ncv-c4-Dmg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tabulátor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैब\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タブ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Таб\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sekme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Таб\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tab\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分頁\"\n          }\n        }\n      }\n    },\n    \"nCW-CZ-qC7.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Print\\\"; ObjectID = \\\"nCW-CZ-qC7\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"طباعة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tisknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Drucken\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Print\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הדפס\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रिंट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stampa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"印刷\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"프린트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Druk af\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Печать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazdır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Роздрукувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打印\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"列印\"\n          }\n        }\n      }\n    },\n    \"Ng2-HH-bmY.label\" : {\n      \"comment\" : \"Class = \\\"NSTabViewItem\\\"; label = \\\"Web\\\"; ObjectID = \\\"Ng2-HH-bmY\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"편물\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Веб\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Веб\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"生成网页\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"網頁\"\n          }\n        }\n      }\n    },\n    \"NHv-lG-vxt.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"General\\\"; ObjectID = \\\"NHv-lG-vxt\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Obecné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"General\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"General\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"General\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Général\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כללי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सामान्य\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"일반\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Algemeen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Главные\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Genel\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Головні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"常规\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"一般\"\n          }\n        }\n      }\n    },\n    \"NMo-om-nkz.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Services\\\"; ObjectID = \\\"NMo-om-nkz\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الخدمات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Služby\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servicios\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שירותים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सेवाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Servizi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サービス\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"서비스\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Services\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serviços\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Serviços\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сервисы\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hizmetler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сервіси\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"服务\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"服務\"\n          }\n        }\n      }\n    },\n    \"nTf-oq-7k2.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Use TextBundle info.json to store c/mtime\\\"; ObjectID = \\\"nTf-oq-7k2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استخدام TextBundle Info.json لتخزين c/متى\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Použití TextBundle info.json pro uložení c/mtime\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle info.json zum Speichern von c/mtime verwenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Use TextBundle info.json to store c/mtime\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar TextBundle info.json para almacenar c/mtime\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utiliser le TextBundle info.json pour stocker le c/mtime\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"השתמש בקובץ info.json של TextBundle כדי לאחסן c/mtime\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"c/mtime संग्रहीत करने के लिए TextBundle info.json का उपयोग करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usare TextBundle info.json per memorizzare c/mtime\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"c/mtimeを格納するためにTextBundle info.jsonを使用する。\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"텍스트 번들 info.json을 사용하여 c/mtime을 저장합니다.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruik TextBundle info.json om c/mtime op te slaan\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Use TextBundle info.json para armazenar c/mtime\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar TextBundle info.json para armazenar c/mtime\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Использовать TextBundle info.json для хранения c/mtime\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hizmetler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Використовувати TextBundle info.json для зберігання c/mtime\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用 TextBundle info.json 存储 c/mtime\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用 TextBundle info.json 儲存建立/修改時間\"\n          }\n        }\n      }\n    },\n    \"Nw2-km-iDW.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Touch ID:\\\"; ObjectID = \\\"Nw2-km-iDW\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بصمة الاصبع:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टच आईडी:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vingerafdruk ID:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dokunmatik Kimlik:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Touch ID：\"\n          }\n        }\n      }\n    },\n    \"NZK-ki-p6Z.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Zoom In\\\"; ObjectID = \\\"NZK-ki-p6Z\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تكبير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zvětšit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einzoomen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Zoom In\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Acercar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Agrandir\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"לְהִתְמַקֵד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ज़ूम इन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ingrandisci\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拡大表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"줌인\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inzoomen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aumentar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ampliar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Увеличить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yakınlaştır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Збільшити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"放大\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"放大\"\n          }\n        }\n      }\n    },\n    \"o2f-1e-Dvp.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Reset\\\"; ObjectID = \\\"o2f-1e-Dvp\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रीसेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сбросить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıfırla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設\"\n          }\n        }\n      }\n    },\n    \"o6a-px-wp7.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Show in Terminal\\\"; ObjectID = \\\"o6a-px-wp7\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اظهار فيTerminal\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit v Terminálu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zeigen in Terminal\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show in Terminal\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar en la terminal\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher dans le Terminal\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג במסוף\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टर्मिनल में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Terminale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ターミナルで開く\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"터미널에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon in Terminal\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Terminal\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no Terminal\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в терминале\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Terminalde göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати в терміналі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在终端中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在終端機中顯示\"\n          }\n        }\n      }\n    },\n    \"O8Z-cg-XnH.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Import\\\"; ObjectID = \\\"O8Z-cg-XnH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"استيراد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Import\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ייבא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आयात\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取り込む...\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"가져오기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importeren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Импортировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İçe aktar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Імпортувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"导入\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"匯入\"\n          }\n        }\n      }\n    },\n    \"O9f-Lf-HF6.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Show in Sidebar\\\"; ObjectID = \\\"O9f-Lf-HF6\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار في الشريط الجانبي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit v bočním panelu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In der Seitenleiste anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show in Sidebar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar en la barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher dans la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג בסרגל צד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार में दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nella barra laterale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバーに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드 바에 표시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon in zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar no menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar na barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать в сайдбаре\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunda Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показувати на бічній панелі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在侧边栏中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於側邊欄\"\n          }\n        }\n      }\n    },\n    \"O9K-a1-3eu.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Title\\\"; ObjectID = \\\"O9K-a1-3eu\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"العنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Title\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトル\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題\"\n          }\n        }\n      }\n    },\n    \"oeL-rE-fXz.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"5\\\"; ObjectID = \\\"oeL-rE-fXz\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"5\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"5\"\n          }\n        }\n      }\n    },\n    \"oer-ZB-VOx.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"None (Use global settings)\\\"; ObjectID = \\\"oer-ZB-VOx\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لا شيء (استخدام الإعدادات العامة)\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Žádné (použít globální nastavení)\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Globale einstellungen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"None (Use global settings)\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajustes globales\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aucun (Utiliser les param. globaux)\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ללא (השתמש בהגדרות גלובליות)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई नहीं (वैश्विक सेटिंग का उपयोग करें)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nessuno (Usa impostazioni globali)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"지정 안함 (기본 설정 사용)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geen (Gebruik globale instellingen)\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nenhum (use configuração padrão)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nenhum (Utilizar definições globais)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не использовать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hiçbiri (Genel ayarları kullan)\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Глобальні налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无(使用全局设置)\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無 (使用全域設定)\"\n          }\n        }\n      }\n    },\n    \"oL6-fG-vHv.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Create Web Page\\\"; ObjectID = \\\"oL6-fG-vHv\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إنشاء صفحة ويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web-Seite erstellen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Create Web Page\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crear página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer une page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"צור דף אינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crea pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページの作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 만들기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina maken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfası Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建为网页URL\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立網頁\"\n          }\n        }\n      }\n    },\n    \"Olw-nP-bQN.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Hide FSNotes\\\"; ObjectID = \\\"Olw-nP-bQN\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اخفاء FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes ausblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר את FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes छिपाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotesを非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes 숨기기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verbergen FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar o FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes'u gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сховати FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏 FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏 FSNotes\"\n          }\n        }\n      }\n    },\n    \"OOL-dM-zIE.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Code Block\\\"; ObjectID = \\\"OOL-dM-zIE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الاكواد البرمجية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blok kódu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocksatz\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Code Block\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloque de código\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloc de code\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בלוק קוד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड ब्लॉक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocco codice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードブロック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"코드 영역\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Codeblok\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloco de código\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloco de código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Блок кода\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod Bloğu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Блок коду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码块\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"程式碼區塊\"\n          }\n        }\n      }\n    },\n    \"oQE-3t-6pa.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Forward\\\"; ObjectID = \\\"oQE-3t-6pa\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إلى الأمام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vpřed\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vorwärts\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Forward\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adelante\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Navigation vers l'avant\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קדימה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आगे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avanti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"進む\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"앞으로\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vooruit\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avançar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avançar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вперёд\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İleri\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вперед\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"向前\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"前進\"\n          }\n        }\n      }\n    },\n    \"OV0-om-POJ.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Print\\\"; ObjectID = \\\"OV0-om-POJ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"طباعة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tisknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Drucken\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Print\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir…\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הדפס\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रिंट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stampa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"印刷\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"프린트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Druk af\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imprimir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Печать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazdır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Роздрукувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打印\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"列印\"\n          }\n        }\n      }\n    },\n    \"OwM-mh-QMV.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Find Previous\\\"; ObjectID = \\\"OwM-mh-QMV\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"البحث السابق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat předchozí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weitersuchen (rückwärts)\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Find Previous\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar anterior\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Précédente occurrence\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מצא את הקודם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पिछला खोजे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trova precedente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"前を探す\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이전 찾기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek Vorige\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar anteriores\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar Anterior\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти предыдущий\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Öncekini Bul\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти попередній\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查找上一个\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"尋找上一個\"\n          }\n        }\n      }\n    },\n    \"Oyz-dy-DGm.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Stop Speaking\\\"; ObjectID = \\\"Oyz-dy-DGm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ايقاف التحدث\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zastavit předčítání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sprachausgabe stoppen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Stop Speaking\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detener locución\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Arrêter la diction\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הפסק הקראה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बोलना बंद करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ferma Lettura\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"読み上げを停止\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"말하기 중단\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stop met Praten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parar de falar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parar Ditado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Остановить диктовку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konuşmayı Bitir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зупинити диктування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"停止朗读\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"停止朗讀\"\n          }\n        }\n      }\n    },\n    \"P2a-yk-5Rx.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"Layout\\\"; ObjectID = \\\"P2a-yk-5Rx\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسق\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rozložení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Layout\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Layout\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Disposición\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Agencement\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מערך\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लेआउट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Layout\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"レイアウト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"레이아웃\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Indeling\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Layout\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Layout\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Интерфейс\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düzen\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Інтерфейс\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"布局\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"版面配置\"\n          }\n        }\n      }\n    },\n    \"P4M-cL-lfo.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Indent Using:\\\"; ObjectID = \\\"P4M-cL-lfo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مسافة بادئة باستخدام:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odsazovat pomocí:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einzug mit:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Indent Using:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sangría usando:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instantanés automatiques:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שימוש בהזחה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इंडेंट के लिए उपयोग करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rientro utilizzando:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"インデント:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"자동 스냅샷:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische snapshots:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Indentar usando:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Recuar usando:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отступы:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Giriş Kullanarak:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відступ за допомогою:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用缩进:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"縮排方式：\"\n          }\n        }\n      }\n    },\n    \"P31-Ka-9HV.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Automatic Snapshots:\\\"; ObjectID = \\\"P31-Ka-9HV\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لقطات تلقائية:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatické snímky:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatisches Backup:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Automatic Snapshots:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia de seguridad automática:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clichés instantanés automatiques :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תמונות מצב אוטומטיות:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्वचालित स्नैपशॉट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Snapshot automatici:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動スナップショット:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"자동 스냅샷:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische snapshots:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Snapshots automáticos:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Snapshots automáticos:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Стратегия резервного копирования:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otomatik Anlık Görüntüler:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматичні резервні копії:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自动快照:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動快照：\"\n          }\n        }\n      }\n    },\n    \"pa3-QI-u2k.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Delete\\\"; ObjectID = \\\"pa3-QI-u2k\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Löschen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Delete\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मिटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除\"\n          }\n        }\n      }\n    },\n    \"PdU-Em-Ugm.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Toggle Preview\\\"; ObjectID = \\\"PdU-Em-Ugm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تبديل معاينة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přepnout náhled\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vorschau umschalten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Toggle Preview\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar previsualización\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher l'aperçu\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג/הסתר תצוגה מקדימה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पूर्वावलोकन टॉगल करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passa all'anteprima\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プレビューの切り替え\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"미리보기 토글\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wissel voorvertoning\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar pré-visualização\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alternar pré-visualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переключить предпросмотр\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Önizlemeyi Aç/Kapat\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переключити прев'ю\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切换预览\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切換預覽\"\n          }\n        }\n      }\n    },\n    \"PJ2-3m-IGm.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"git@github.com:glushchenko/example.git\\\"; ObjectID = \\\"PJ2-3m-IGm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/priklad.git\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/ornek.git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"git@github.com:glushchenko/example.git\"\n          }\n        }\n      }\n    },\n    \"PLH-LL-geH.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Repeat Password:\\\"; ObjectID = \\\"PLH-LL-geH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اعد كتابة كلمة المرور:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zopakujte heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort wiederholen:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Repeat Password:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repetir contraseña:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Retaper le mot de passe :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אישור סיסמה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड दोहराएं:\"\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        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"확인:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Herhaal wachtwoord:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repita senha:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repetir palavra-passe\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Повторите пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifreyi tekrar girin:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль ще раз:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重复密码:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"再次輸入密碼：\"\n          }\n        }\n      }\n    },\n    \"pnm-dP-GKO.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Duplicate\\\"; ObjectID = \\\"pnm-dP-GKO\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخة مكررة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplikovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplizieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Duplicate\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliquer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שכפל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नकल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"복제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliceer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать копию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дублювати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"生成副本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"製作複本\"\n          }\n        }\n      }\n    },\n    \"PXw-YJ-q6A.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"Security\\\"; ObjectID = \\\"PXw-YJ-q6A\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الحماية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zabezpečení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sicherheit\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Security\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seguridad\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sécurité\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אבטחה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सुरक्षा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sicurezza\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"セキュリティ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보안\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veiligheid\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Segurança\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Segurança\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Безопасность\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Güvenlik\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Безпека\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"安全性\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"安全性\"\n          }\n        }\n      }\n    },\n    \"PY8-lr-5qr.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Creation date\\\"; ObjectID = \\\"PY8-lr-5qr\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ الانشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstellungsdatum\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Creation date\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fecha de creación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de création\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תאריך יצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तारीख\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"생성일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aanmaakdatum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturulma tarihi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Датою створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立日期\"\n          }\n        }\n      }\n    },\n    \"Pzb-TG-43d.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Headers\\\"; ObjectID = \\\"Pzb-TG-43d\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopfzeilen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Headers\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezados\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"En-têtes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazioni\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlıklar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題\"\n          }\n        }\n      }\n    },\n    \"PzH-8q-38O.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Delete Web Page\\\"; ObjectID = \\\"PzH-8q-38O\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف صفحة الويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geteilte aktualisieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Delete Web Page\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer la page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק דף אינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina verwijderen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Excluir página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfasını Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除网页\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除網頁\"\n          }\n        }\n      }\n    },\n    \"q09-fT-Sye.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Find Next\\\"; ObjectID = \\\"q09-fT-Sye\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث عن التالي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat další\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weitersuchen (vorwärts)\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Find Next\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar siguiente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prochaine occurrence\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מצא את הבא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अगला खोजे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trova successivo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"次を探す\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다음 찾기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek Volgende\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar próximo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar Próximo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти следующий\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sonrakini Bul\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти далі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查找下一个\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"尋找下一個\"\n          }\n        }\n      }\n    },\n    \"Q9n-yE-Ul0.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Report Bugs or Feature Requests\\\"; ObjectID = \\\"Q9n-yE-Ul0\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تبليغ عن خطأ برمجي او  طلب ميزة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ohlásit chyby nebo návrhy pro zlěpšení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Report Bugs or Feature Requests\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Report Bugs or Feature Requests\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Informar de Errores o Mejoras\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remonter des bugs ou des demandes de fonctionnalités\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"דוחות באגים ובקשות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"समस्या या सुविधा अनुरोध की रिपोर्ट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Segnala bug o richiedi una funzionalità\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"バグや機能要望の報告\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"버그 보고 및 기능 제안\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Meld bugs of functieverzoeken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reportar erros ou solicitação de funcionalidades\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reportar Bugs ou Pedir Funcionalidades\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сообщить об ошибках\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hataları veya Özellik İsteklerini Bildirin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Повідомити про помилки або запитати про нові функції\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"报告错误或者提交功能请求\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"回報錯誤或功能請求\"\n          }\n        }\n      }\n    },\n    \"QdU-og-lQH.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Change Creation Date\\\"; ObjectID = \\\"QdU-og-lQH\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تغيير تاريخ الإنشاء\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstellungsdatum ändern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Change Creation Date\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cambiar fecha de creación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifier la date de création\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה את תאריך היצירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तारीख बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifica data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日の変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"생성 날짜 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wijzig de aanmaakdatum\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar data de criação\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alterar data de criação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить дату создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturma Tarihini Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Змінити дату створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改创建日期\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更建立日期\"\n          }\n        }\n      }\n    },\n    \"Qkz-nR-Fh5.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Git repository:\\\"; ObjectID = \\\"Qkz-nR-Fh5\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"أو استخدم المفتاح الخاص .ssh (موصى به):\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repozitář:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oder verwenden Sie einen privaten .ssh-Schlüssel (empfohlen):\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Git repository:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"O use la clave privada .ssh (recomendado):\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ou utilisez la clé privée .ssh (recommandé):\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"או השתמש במפתח פרטי .ssh (מומלץ):\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट रिपोजिटरी\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oppure usa la chiave privata .ssh (consigliato):\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"または、.ssh 秘密鍵を使用します (推奨):\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"또는 .ssh 개인 키 사용(권장):\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Of gebruik de .ssh-privésleutel (aanbevolen):\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositório Git:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ou use a chave privada .ssh (recomendado):\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git репозиторий:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git deposu:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Або використовуйте .ssh приватний ключ (рекомендується):\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"或使用 .ssh 私钥（推荐）:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 儲存庫：\"\n          }\n        }\n      }\n    },\n    \"qn1-vy-8oB.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Format: yyyy-MM-dd hh.mm.ss a\\\"; ObjectID = \\\"qn1-vy-8oB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פורמט: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"체재: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式：yyyy-MM-dd hh.mm.ss a\"\n          }\n        }\n      }\n    },\n    \"qNE-oZ-zJr.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Back\\\"; ObjectID = \\\"qNE-oZ-zJr\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عودة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zpět\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zurück\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Back\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Atrás\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Navigation vers l'arrière\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אחורה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पीछे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Indietro\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"戻る\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"뒤\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Terug\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voltar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voltar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Назад\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geri\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Назад\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"返回\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"返回\"\n          }\n        }\n      }\n    },\n    \"qs2-5J-Q3n.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Show Options\\\"; ObjectID = \\\"qs2-5J-Q3n\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الاعدادات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit možnosti\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show Options\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ver configuración\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher les options d'affichage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג אפשרויות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"विकल्प दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra opzioni vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"オプションを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"보기 옵션\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon weergaveopties\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar as opções\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar opções de visualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настроить вид\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçenekleri Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування вигляду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示视图选项\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示選項\"\n          }\n        }\n      }\n    },\n    \"QxK-39-9yF.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Direction:\\\"; ObjectID = \\\"QxK-39-9yF\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اتجاه:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Směr:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Richtung:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Direction:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dirección:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direction :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"סדר:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दिशा:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direzione:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"方向:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"방향:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Richting:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direção:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direcção:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Направление:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yön:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Напрямок:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"方向:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"方向：\"\n          }\n        }\n      }\n    },\n    \"qZf-Xp-kDW.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Main Window\\\"; ObjectID = \\\"qZf-Xp-kDW\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"النافذة الرئيسية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hlavní okno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hauptfenster\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Main Window\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ventana principal\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fenêtre principale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חלון ראשי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मुख्य विंडो\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finestra principale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"メインウィンドウ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"주 윈도우\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hoofd Venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Janela principal\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Janela Principal\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Главное окно\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana Pencere\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Головне Вікно\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主窗口\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主視窗\"\n          }\n        }\n      }\n    },\n    \"r2R-xe-eCA.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Focus in editor when selecting note\\\"; ObjectID = \\\"r2R-xe-eCA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التركيز في المحرر عند اختيار المذكرة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Při výběru poznámky přepnout do editoru\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fokus im Editor bei Auswahl der Notiz\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Focus in editor when selecting note\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Empezar con la edición al seleccionar una nota\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Curseur dans l'éditeur lorsqu'une note est sélectionnée\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"התמקד בעורך בבחירת פתק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट चुनते समय संपादक में फ़ोकस करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Evidenzia nell'editor quando si seleziona la nota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート選択時にエディタへ移動する\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 선택 시 편집기 활성화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Focus in editor bij selecteren notitie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Foco no editor ao selecionar a nota\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Focar no editor quando seleccionar nota\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фокус в редактор при выборе заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not seçerken düzenleyicide odaklanın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фокус в редактор при виборі нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"当选中笔记时编辑器自动聚焦（笔记内容处理编辑状态）\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選取筆記時將焦點移至編輯器\"\n          }\n        }\n      }\n    },\n    \"r69-B6-vT3.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Margin Size:\\\"; ObjectID = \\\"r69-B6-vT3\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حجم الهامش:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Velikost okrajů:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Absatzgröße: \"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Margin Size:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamaño del margen: \"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taille de marge: \"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גודל שוליים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मार्जिन आकार:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dimensione margine: \"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マージン幅:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"여백 크기:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Marge grootte: \"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamanho da margem:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamanho da margem:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отступ абзаца:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Marj Boyutu:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відступ абзацу:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"边距大小: \"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"邊界大小：\"\n          }\n        }\n      }\n    },\n    \"rbD-Rh-wIN.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Check Spelling While Typing\\\"; ObjectID = \\\"rbD-Rh-wIN\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحقق من التدقيق الإملائي أثناء الكتابة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kontrolovat pravopis během psaní\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Während der Texteingabe prüfen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Check Spelling While Typing\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Comprobar ortografía mientras se escribe\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vérifier l'orthographe pendant l'écriture\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בדוק איות תוך כדי הקלדה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टाइप करते समय वर्तनी जाँचें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controlla l'ortografia durante la digitazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"入力中にスペルをチェック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"입력하는 동안 맞춤법 검사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controleer Spelling Tijdens Typen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar ortografia enquanto digita\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar gramática durante a escrita\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Проверять во время набора\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazarken Yazım Denetimi Yapın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перевіряти правопис під час набору\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"键入时检查拼写\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"輸入時同步檢查拼字\"\n          }\n        }\n      }\n    },\n    \"rbM-i0-QFp.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Reset\\\"; ObjectID = \\\"rbM-i0-QFp\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة ضبط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zurücksetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reiniciar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Réinitialiser\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אִתחוּל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रीसेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripristina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リセット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"초기화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Redefinir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сбросить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıfırla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скинути\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設\"\n          }\n        }\n      }\n    },\n    \"RdI-N4-pR2.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Trash\\\"; ObjectID = \\\"RdI-N4-pR2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الملهملات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Koš\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papierkorb\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Trash\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papelera\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corbeille\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פח אשפה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कूडा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cestino\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ゴミ箱\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"휴지통\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prullenmand\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lico\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lixo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Корзина\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çöp\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сміття\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"回收站\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"垃圾桶\"\n          }\n        }\n      }\n    },\n    \"Rg2-j1-Foz.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Copy URL\\\"; ObjectID = \\\"Rg2-j1-Foz\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ  URL\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat URL\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL kopieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Copy URL\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier l'URL\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק כתובת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"यूआरएल कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia URL\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL 복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer URL\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar URL\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar endereço URL\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать ссылку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLyi Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝 URL\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製網址\"\n          }\n        }\n      }\n    },\n    \"rgM-f4-ycn.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Smart Dashes\\\"; ObjectID = \\\"rgM-f4-ycn\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"شرطات ذكية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inteligentní pomlčky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intelligente Bindestriche\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Smart Dashes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Guiones inteligentes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tirets intelligents\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מיקוף חכם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्मार्ट डैश\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trattini Smart\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スマートダッシュ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"스마트 대시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Slimme Streepjes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Traços inteligentes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Traços Inteligentes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Смарт-тире\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Akıllı çizgi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розумні тире\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智能破折号\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"智慧型破折號\"\n          }\n        }\n      }\n    },\n    \"rHB-xF-GgG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Sort By\\\"; ObjectID = \\\"rHB-xF-GgG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ترتيب حسب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řadit podle\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sortiere nach\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Sort By\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trier par\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מיין לפי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इसके अनुसार क्रमबद्ध करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordina per\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"整頓順序\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"다음으로 정렬\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sorteer op\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordernar por\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Упорядочить по\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Göre sırala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортувати за\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        }\n      }\n    },\n    \"Ri7-Yr-qyB.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Clone\\\"; ObjectID = \\\"Ri7-Yr-qyB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klonovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्लोन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clonar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Клонировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klon\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clone\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"克隆\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製專案\"\n          }\n        }\n      }\n    },\n    \"RSs-wb-GNg.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Lock/Unlock\\\"; ObjectID = \\\"RSs-wb-GNg\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فقل/فتح الفقل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout/odemknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sperren/Entsperren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock/Unlock\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear/desbloquear\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller/déverrouiller\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל/פתח\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लॉक/अनलॉक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca/sblocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック/ロックの削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잠금/잠금 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel/ontgrendel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear/desbloquear\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear/desbloquear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать/разблокировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilitle/Kilidi Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати/розблокувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定/解锁\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定/解鎖\"\n          }\n        }\n      }\n    },\n    \"rSZ-Wo-Rtj.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"System\\\"; ObjectID = \\\"rSZ-Wo-Rtj\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"النظام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Systém\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"System\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"System\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sistema\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Système\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מערכת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सिस्टम\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sistema\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"システム\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"시스템\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Systeem\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sistema\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sistema\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Система\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sistem\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Системна\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"系统\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"系統\"\n          }\n        }\n      }\n    },\n    \"Ruw-6m-B2m.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Select All\\\"; ObjectID = \\\"Ruw-6m-B2m\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحديد الكل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vybrat vše\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alles auswählen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Select All\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleccionar todo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tout sélectionner\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בחר הכל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सबका चयन करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleziona Tutto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべてを選択\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모두 선택\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecteer Alles\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecionar todos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleccionar todos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выбрать всё\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hepsini Seç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вибрати все\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"选择全部\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"全選\"\n          }\n        }\n      }\n    },\n    \"RwR-P0-ycK.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Delete Folder\\\"; ObjectID = \\\"RwR-P0-ycK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner löschen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Delete Folder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק תיקיה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फोल्डर हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダを削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"폴더 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Deletar pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dosyayı Sİl\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити директорію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"刪除資料夾\"\n          }\n        }\n      }\n    },\n    \"rXU-X3-UjC.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Reveal in Finder\\\"; ObjectID = \\\"rXU-X3-UjC\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ve Finderu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Finder anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reveal in Finder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar en el Finder\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Localiser dans le Finder\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג ב-Finder\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Finder\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finderに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Onthul in Finder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Revelar no Finder\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realçar no Finder\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в Finder\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder'da ortaya çıkar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати в Finder\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在访达中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於 Finder\"\n          }\n        }\n      }\n    },\n    \"rzB-ln-uyl.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSSecureTextFieldCell\\\"; placeholderString = \\\"passphrase\\\"; ObjectID = \\\"rzB-ln-uyl\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"přístupová fráze\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासफ्रेज\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"frase secreta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"通關密語\"\n          }\n        }\n      }\n    },\n    \"S0p-oC-mLd.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Jump to Selection\\\"; ObjectID = \\\"S0p-oC-mLd\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"الانتقال الى المحدد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přeskočit na výběr\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zur Auswahl\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Jump to Selection\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ir a la selección\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauter vers la sélection\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קפוץ לבחירה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चयन पर जाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vai alla selezione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Jump to Selection\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택 부분으로 이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spring naar Selectie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pular para seleção\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Saltar para a selecção\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти к выбранному\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçime Git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти до вибраного\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"跳到所选内容\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"跳至選取範圍\"\n          }\n        }\n      }\n    },\n    \"s6A-tQ-Sbe.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Bring All to Front\\\"; ObjectID = \\\"s6A-tQ-Sbe\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"أحضر الكل إلى الأمام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Převést vše do popředí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alle nach vorne bringen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Bring All to Front\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Traer todo al frente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tout afficher en premier plan\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הבא הכל קדימה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सबको सामने लाये\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Porta tutto in primo piano\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべてを手前に移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모두 앞으로 가져오기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Breng alles naar voren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trazer todos para frente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trazer todos para a frente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить на передний план\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hepsini Öne Getir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити все на передній план\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"前置全部窗口\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"將此程式所有視窗移至最前\"\n          }\n        }\n      }\n    },\n    \"S8Z-Js-fwB.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Add External Folder...\\\"; ObjectID = \\\"S8Z-Js-fwB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ارفاق تخزين...\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přidat externí složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Speicher anschließen...\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Add External Folder...\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adjuntar almacenamiento...\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Attacher un stockage...\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הוסף תיקיה חיצונית...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाह्य फ़ोल्डर जोड़ें...\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Collega archivio...\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外部フォルダを追加…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"저장소 추가...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Koppelen opslag...\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adicionar pasta externa...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Adicionar armazenamento...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Подключить хранилище...\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Harici Klasör Ekle...\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Підключити сховище...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"附件存储...\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"加入外部資料夾…\"\n          }\n        }\n      }\n    },\n    \"sAn-Wm-FfY.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Commit/Push every\\\"; ObjectID = \\\"sAn-Wm-FfY\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"النسخ الاحتياطي كل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commit/push každých\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sichern Sie jeden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Commit/Push every\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Respaldar cada\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauvegarder toutes les \"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גבה אוטומטית כל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कमिट/पुश आवृत्ति\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salva ogni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"次の間隔でバックアップ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"백업\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Back-up elke\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Commi/Push todos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cópia de seg. a cada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Копия каждый\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Her Taahhüt Et/İt\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Резервна копія кожну\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"提交或推送间隔每\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動提交/推送頻率\"\n          }\n        }\n      }\n    },\n    \"Scc-aD-CFQ.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Notes List:\\\"; ObjectID = \\\"Scc-aD-CFQ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seznam poznámek:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizlist:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Notes List:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista de notas:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liste de notes :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"רשימת פתקים:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट सूची:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista Note:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート一覧:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 목록:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notitielijst:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista de notas:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista de notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Список заметок:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not Listesi:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Лист нотаток:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记列表:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"筆記清單：\"\n          }\n        }\n      }\n    },\n    \"sdE-ZM-6cq.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Up in the Sidebar\\\"; ObjectID = \\\"sdE-ZM-6cq\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحرك لأعلى في الشريط الجانبي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posunout nahoru v bočním panelu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In der Seitenleiste aufsteigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Up in the Sidebar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover arriba en la barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Élément précédent de la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עבור למעלה בסרגל הצד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार में ऊपर जाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Muovi in Alto nella Sidebar\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバー項目を上に移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드바에서 위로 이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Omhoog gaan in de zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover para cima no menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Subir na barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вверх в боковой панели\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunda Yukarı Çık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вгору на бічній панелі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在侧边栏中向上移动\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在側邊欄中上移\"\n          }\n        }\n      }\n    },\n    \"SdL-vK-KjH.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Window\\\"; ObjectID = \\\"SdL-vK-KjH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نافذة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Okno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fenster\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Window\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ventana\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חלון\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"विंडो\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウィンドウ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"윈도우\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Window\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pencere\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вікно\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"窗口\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"視窗\"\n          }\n        }\n      }\n    },\n    \"SDz-2X-4yJ.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Reset Caches\\\"; ObjectID = \\\"SDz-2X-4yJ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة تعيين ذاكرة التخزين المؤقت\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyprázdnit cache\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caches zurücksetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset Caches\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Restablecer cachés\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Réinitialiser les caches\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אפס מטמונים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कैश रीसेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripristino delle cache\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"キャッシュのリセット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"캐시 초기화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caches resetten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Redefinir caches\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repor caches\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сбросить кэш\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Önbellekleri Sıfırla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скинути кеші\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重置缓存\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設快取\"\n          }\n        }\n      }\n    },\n    \"SeY-r8-n3w.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"File\\\"; ObjectID = \\\"SeY-r8-n3w\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soubor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datei\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"File\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Archivo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fichier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קובץ\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ाइल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"File\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファイル\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"파일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bestand\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Arquivo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ficheiro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файл\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dosya\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файл\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檔案\"\n          }\n        }\n      }\n    },\n    \"Shc-VO-eTc.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Code Font\\\"; ObjectID = \\\"Shc-VO-eTc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كود الخط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Písmo kódu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Font\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Code Font\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Font\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Police de code\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גופן קוד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड फ़ॉन्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Font Codice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードフォント\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"코드 서체\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Lettertype\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Código fonte\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipo de letra de código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт кода\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod Yazı Tipi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт коду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码字体\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"程式碼字體\"\n          }\n        }\n      }\n    },\n    \"Snd-dJ-uj5.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"History\\\"; ObjectID = \\\"Snd-dJ-uj5\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historie\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Die geschichte\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"History\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historia\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historique\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"היסטוריה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतिहास\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cronologia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"履歴\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경 이력\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschiedenis\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"История\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarih\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Історія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记历史版本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"歷程記錄\"\n          }\n        }\n      }\n    },\n    \"SpX-N8-9td.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"solarized\\\"; ObjectID = \\\"SpX-N8-9td\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"solarized\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Solarized Light\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Salaried-light\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"solarized\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"SrH-fe-Hog.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"New Folder\\\"; ObjectID = \\\"SrH-fe-Hog\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"مجلد جديد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Vytvořit složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neuer Ordner\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"New Folder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouveau dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תיקיה חדשה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"फोल्डर बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"フォルダを作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"새로운 폴더\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nieuwe map\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Criar pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nova pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова директорія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新增資料夾\"\n          }\n        }\n      }\n    },\n    \"ssC-ed-19K.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"Editor\\\"; ObjectID = \\\"ssC-ed-19K\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"المحرر\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Éditeur\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עורך\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संपादक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"エディタ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"편집기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактор\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editör\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактор\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"编辑器\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編輯器\"\n          }\n        }\n      }\n    },\n    \"SSY-US-gmJ.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Show icon in menu bar\\\"; ObjectID = \\\"SSY-US-gmJ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"عرض الايقونة في شريط القوائم\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ikonu v řádku nabídek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icon in der Menüleiste anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show icon in menu bar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar icono en la barra de menús\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher l'icône dans la barre de menu\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג צלמית בשורת הטפריטים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मेनू बार में आइकन दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra icona nella barra del menù\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"メニューバーにアイコンを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"메뉴바에서 아이콘 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon icoon in menubalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar ícone na barra de menu\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar ícone na barra de menu\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать иконку в меню баре\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Menü çubuğunda simgeyi göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відображати іконку в меню барі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在菜单栏中显示图标\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在選單列顯示圖示\"\n          }\n        }\n      }\n    },\n    \"STm-3f-GNu.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Selected Lines Down\\\"; ObjectID = \\\"STm-3f-GNu\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ausgewählte Zeilen nach unten verschieben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Selected Lines Down\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover líneas seleccionadas hacia abajo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer les lignes sélectionnées vers le bas\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चुनी हुई पंक्तियों को नीचे ले जाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta righe selezionate verso il basso\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить выбранные строки вниз\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçili Satırları Aşağı Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити вибрані рядки вниз\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"选中行向下移动\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"將選取的行下移\"\n          }\n        }\n      }\n    },\n    \"sWS-bo-99f.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Dylan Seeger — https://www.lovably.com\\\\nOlena Hlushcneko\\\"; ObjectID = \\\"sWS-bo-99f\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dylan Seeger — https://www.lovably.com\\nOlena Hlushcneko\"\n          }\n        }\n      }\n    },\n    \"t3f-wS-BqN.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Automatic iCloud Drive conflicts resolution\\\"; ObjectID = \\\"t3f-wS-BqN\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حل تعارضات iCloud Drive تلقائيًا\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatické řešení konfliktů na iCloud Drive\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische Auflösung von iCloud Drive-Konflikten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Automatic iCloud Drive conflicts resolution\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resolver automáticamente conflictos de iCloud Drive\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Résolution automatique des conflits avec iCloud Drive\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתור אוטומטית התנגשויות iCloud Drive\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्वचालित iCloud ड्राइव विवाद समाधान\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Risoluzione automatica dei conflitti di iCloud Drive\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Driveの競合を自動的に解決する\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive 충돌 자동 해결\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatisch iCloud Drive-conflicten oplossen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resolva automaticamente conflitos do iCloud Drive\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resolva automaticamente conflitos do iCloud Drive\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматически разрешать конфликты iCloud Drive\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otomatik iCloud Drive çakışma çözümü\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматичне вирішення конфліктів у iCloud Drive\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自动解决 iCloud Drive 冲突\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動解決 iCloud 雲碟衝突\"\n          }\n        }\n      }\n    },\n    \"TCI-Xs-mwm.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Descending\\\"; ObjectID = \\\"TCI-Xs-mwm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تنازلي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sestupně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Absteigend\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Descending\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descendiendo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descendant\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"יורד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अवरोही\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrescente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"降順\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"내림차순\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aflopend\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descendente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descendente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нисходящее\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Azalan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Низхідний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"降序\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"遞減\"\n          }\n        }\n      }\n    },\n    \"TfH-z4-HHY.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\".txt\\\"; ObjectID = \\\"TfH-z4-HHY\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \".txt\"\n          }\n        }\n      }\n    },\n    \"Tjy-Pz-wrj.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Appearance:\\\"; ObjectID = \\\"Tjy-Pz-wrj\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مظهر خارجي:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vzhled:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Design:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Appearance:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apariencia:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apparence :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מראה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्वरूप:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aspetto:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外観モード:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"외관:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschijning:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aparência:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aparência:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dış görünüş:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外观:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外觀：\"\n          }\n        }\n      }\n    },\n    \"TKE-yB-wPs.ibShadowedToolTip\" : {\n      \"comment\" : \"Class = \\\"NSImageView\\\"; ibShadowedToolTip = \\\"In memory of Mars. ? - 25.08.2022\\\"; ObjectID = \\\"TKE-yB-wPs\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Věnování: Mars. ?–25.08.2022\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मंगल की याद में. ? - 25.08.2022\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Em memória de Mars. ? - 25.08.2022\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"В память о Марсе. ? - 25.08.2022\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mars'ın anısına. ? - 25.08.2022\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In memory of Mars. ? - 25.08.2022\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"紀念 Mars。? - 2022.08.25\"\n          }\n        }\n      }\n    },\n    \"tMJ-Dj-OZc.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"First line as title\\\"; ObjectID = \\\"tMJ-Dj-OZc\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اول سطر كعنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"První řádek jako nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erste Zeile als Titel\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"First line as title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Primera línea como título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Première ligne comme titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שורה ראשונה ככותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक के रूप में पहली पंक्ति\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prima riga come titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最初の行をタイトルとして使用\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"첫 줄을 제목으로 사용\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eerste regel als titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Primeira linha como título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Primeira linha como título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Первая строка как заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık olarak ilk satır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перший рядок як заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"将内容第一行提取为标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用第一行作為標題\"\n          }\n        }\n      }\n    },\n    \"tR0-Uj-4tB.title\" : {\n      \"comment\" : \"Class = \\\"NSTabViewController\\\"; title = \\\"Preferences\\\"; ObjectID = \\\"tR0-Uj-4tB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"التفضيلات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Předvolby\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Preferences\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferencias\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Préférences\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העדפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferenze\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"환경설정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorkeuren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Preferências\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tercihler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好设置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"偏好設定\"\n          }\n        }\n      }\n    },\n    \"tRr-pd-1PS.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Data Detectors\\\"; ObjectID = \\\"tRr-pd-1PS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كاشفات البيانات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detektory dat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datendetektoren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Data Detectors\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detectores de datos\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Détecteurs de données\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גלאי נתונים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डेटा डिटेक्टर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rilevatori di dati\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"データ検出\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"데이터 탐색기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data Detectoren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detecção de data\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Detectores de dados\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Детекторы данных\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veri Dedektörleri\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Детектори даних\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"数据检测器\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"資料偵測器\"\n          }\n        }\n      }\n    },\n    \"tZ6-GT-LxK.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Pull every\\\"; ObjectID = \\\"tZ6-GT-LxK\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull každých\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tirez chaque\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पुल आवृत्ति\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull todos\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Подтягивать каждые\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Her birini çek\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull every\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拉取分支每隔\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"每隔…拉取 \"\n          }\n        }\n      }\n    },\n    \"u88-5C-vTe.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Open\\\"; ObjectID = \\\"u88-5C-vTe\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"افتح في نافذة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Otevřít v novém okně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In neuem Fenster öffnen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Open\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir en Nueva ventana\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir dans une nouvelle fenêtre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח בחלון חדש\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"नई विंडो में खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri in una nuova finestra\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"新しいウィンドウで開きます\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"새 창에서 열기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Openen in een nieuw venster\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Abrir em nova janela\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Abrir em nova janela\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть в новом окне\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Pencerede Aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити у новому вікні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在新窗口中打开\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開啟\"\n          }\n        }\n      }\n    },\n    \"UdE-8N-Qit.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Label\\\"; ObjectID = \\\"UdE-8N-Qit\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Štítek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लेबल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiqueta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Label\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiket\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ярлик\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标签\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標籤\"\n          }\n        }\n      }\n    },\n    \"UEZ-Bs-lqG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Capitalize\\\"; ObjectID = \\\"UEZ-Bs-lqG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تكبير\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Velká počáteční písmena\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Großbuchstaben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Capitalize\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mayúsculas iniciales\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajouter les majuscules aux mots\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אות ראשונה גדולה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मूल बनाए\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tutte le iniziali Maiuscole\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"語頭を大文字にする\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"대문자로 만들기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Met hoofdletters schrijven\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Capitalizar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Capitalizar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Озаглавить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Büyük harfle yazmak\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Усі прописні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"首字母大写\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"首字大寫\"\n          }\n        }\n      }\n    },\n    \"UFh-mf-ZKG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Light\\\"; ObjectID = \\\"UFh-mf-ZKG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مشمس\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Světlý\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hell\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Light\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Claro\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clair\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בהיר\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Light\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chiaro\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ライト\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"라이트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Licht\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Claro\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Claro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Светлая\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Işık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Світла\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"浅色\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"淺色\"\n          }\n        }\n      }\n    },\n    \"uHf-35-KHR.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"22\\\"; ObjectID = \\\"uHf-35-KHR\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"22\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"22\"\n          }\n        }\n      }\n    },\n    \"Ukg-MO-eaB.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Code Span\\\"; ObjectID = \\\"Ukg-MO-eaB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"امتداد الرمز\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Úsek kódu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Codespanne\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Code Span\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intervalo de código\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code Span\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קוד מוטבע\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड स्पैन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intervallo di Codice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"インラインコード\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"코드 들여쓰기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code inline\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Código de span\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lapso de código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Диапазон кода\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod aralığı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Проміжок коду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码缩进\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"程式碼區段\"\n          }\n        }\n      }\n    },\n    \"UMi-Hx-Z1c.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Headers\\\"; ObjectID = \\\"UMi-Hx-Z1c\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopfzeilen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Headers\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encabezados\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"En-têtes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Intestazioni\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlıklar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标题\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"標題\"\n          }\n        }\n      }\n    },\n    \"uMZ-sI-7ja.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"File\\\"; ObjectID = \\\"uMZ-sI-7ja\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملف\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soubor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datei\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"File\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Archivo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fichier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קובץ\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ाइल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"File\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファイル\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"파일\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bestand\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Arquivo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ficheiro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файл\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dosya\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файл\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"檔案\"\n          }\n        }\n      }\n    },\n    \"uQ1-ej-ufE.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Copy URL\\\"; ObjectID = \\\"uQ1-ej-ufE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ URL\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat URL\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL kopieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Copy URL\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier l'URL\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק כתובת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"यूआरएल कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia URL\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLをコピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URL 복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer URL\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar URL\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar endereço URL\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать ссылку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"URLyi Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝URL\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製網址\"\n          }\n        }\n      }\n    },\n    \"uQy-DD-JDr.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"FSNotes\\\"; ObjectID = \\\"uQy-DD-JDr\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"uRl-iY-unG.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Cut\\\"; ObjectID = \\\"uRl-iY-unG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قص\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyjmout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ausschneiden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Cut\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cortar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Couper\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גזור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"काटे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taglia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"カット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"오려두기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Knip\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cortar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cortar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вырезать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kes\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вирізати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"剪切\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"剪下\"\n          }\n        }\n      }\n    },\n    \"v1K-9W-2aB.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"github\\\"; ObjectID = \\\"v1K-9W-2aB\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"github\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"v9k-wu-2xL.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; placeholderString = \\\"empty log\\\"; ObjectID = \\\"v9k-wu-2xL\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खाली लॉग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"log vazio\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Boş Log\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"empty log\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清空記錄\"\n          }\n        }\n      }\n    },\n    \"Vdr-fp-XzO.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Hide Others\\\"; ObjectID = \\\"Vdr-fp-XzO\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إخفاء الآخرين\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt ostatní\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alle andere Apps verstecken\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide Others\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar otros\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer les autres\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר אחרים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अन्य को छिपाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi le altre finestre\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ほかを非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"기타 가리기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verberg anderen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar outros\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar outros\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать другие\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Diğerlerini Gizle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приховати інші\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏其它\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏其他\"\n          }\n        }\n      }\n    },\n    \"Ve2-qz-vtH.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Lock on sleep\\\"; ObjectID = \\\"Ve2-qz-vtH\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"غلق عند النوم\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout při uspání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Im Schlafmodus sperren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock on sleep\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquar al entrar en reposo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller au passage en veille\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל במעבר למצב שינה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्लीप पर लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca se in sospensione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スリープ時\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"잠자기 시 잠금\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel bij slapen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear no repouso\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear ao suspender\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать в режиме сна\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uyku modunda kilitle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати при засипанні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"系统休眠后自动锁定\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"睡眠時鎖定\"\n          }\n        }\n      }\n    },\n    \"vfT-nF-vst.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Or use .ssh private key:\\\"; ObjectID = \\\"vfT-nF-vst\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"أو استخدم المفتاح الخاص .ssh:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nebo použijte soukromý .ssh klíč:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oder verwenden Sie einen privaten .ssh-Schlüssel:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Or use .ssh private key:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"O use la clave privada .ssh:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ou utilisez la clé privée .ssh:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"או השתמש במפתח פרטי .ssh:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"या .ssh निजी कुंजी का उपयोग करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oppure usa la chiave privata .ssh:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"または、.ssh 秘密鍵を使用します。\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"또는 .ssh 개인 키를 사용하십시오.\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Of gebruik de .ssh-privésleutel:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ou use a chave privada .ssh\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ou use a chave privada .ssh:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Или используйте закрытый ключ .ssh:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"veya .ssh özel anahtarını kullanın:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Або використовуйте .ssh приватний ключ:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"或使用 .ssh 私钥:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"或使用 .ssh 私密金鑰：\"\n          }\n        }\n      }\n    },\n    \"VJs-0B-jGe.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Ask commit message on note save\\\"; ObjectID = \\\"VJs-0B-jGe\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ptát se na popisek commitu při uložení poznámky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट सेव करने पर कमिट संदेश पूछें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pedir mensagem de confirmação ao salvar notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Запрашивать название коммита перед сохранением заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not kaydetmede öneri mesajını sor\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ask commit message on note save\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在笔记保存时询问提交消息\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"儲存筆記時詢問提交訊息\"\n          }\n        }\n      }\n    },\n    \"vmV-6d-7jI.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Make Upper Case\\\"; ObjectID = \\\"vmV-6d-7jI\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"جعله حروف كبيرة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Převést na velká písmena\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Großschreiben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Make Upper Case\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Todo en mayúsculas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passer en capitales\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הפוך לאותיות גדולות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अपर केस बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rendi tutto Maiuscolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"大文字にする\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"대문자로 만들기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Maak Hoofdletters\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tornar maiúsculas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Transformar em Maiúsculas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"В верхний регистр\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Büyük Harf Yap\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Верхній регістр\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"变为大写\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"變更為大寫\"\n          }\n        }\n      }\n    },\n    \"vrs-XL-lyE.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Down in the Sidebar\\\"; ObjectID = \\\"vrs-XL-lyE\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تحرك لأسفل في الشريط الجانبي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posunout dolů v bočním panelu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In der Seitenleiste nach unten gehen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Down in the Sidebar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover abajo en la barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Élément suivant de la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עבור למטה בסרגל הצד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार में नीचे जाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Muovi in Basso nella Sidebar\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバー項目を下に移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드바에서 아래로 이동\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naar beneden verplaatsen in de zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover para baixo no menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descer na barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вниз в боковой панели\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunda Aşağıya Hareket Et\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейти вниз на бічній панелі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在侧边栏中向下移动\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在側邊欄中下移\"\n          }\n        }\n      }\n    },\n    \"VV2-X2-moA.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"*\\\"; ObjectID = \\\"VV2-X2-moA\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"*\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"*\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"Vwq-Ek-K2v.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Focus on search bar when ESC is pressed\\\"; ObjectID = \\\"Vwq-Ek-K2v\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ركز على شريط البحث عند الضغط على ESC\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stisknutím Esc přepnout do vyhledávání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fokus auf Suchleiste, wenn ESC gedrückt wird\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Focus on search bar when ESC is pressed\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar la barra de búsqueda al presionar la tecla ESC\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Focus on Search bar when ESC is pressed\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"התמקד בשורת החיפוש בהקשת Esc\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ESC दबाने पर खोज बार पर ध्यान केंद्रित करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Evidenzia la barra di ricerca quando premi ESC\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Escボタンを押して検索バーに移動\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ESC를 눌렀을 때 검색창에 초점 맞추기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Focus op zoekbalk wanneer ESC wordt ingedrukt\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Focar na barra de pesquisa quando ESC é pressionado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Focar na barra de pesquisa quando pressionar ESC\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фокус на поиске по ESC\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ESC tuşuna basıldığında arama çubuğuna odaklan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фокус на пошуку по ESC\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"按下 ESC 时聚焦于搜索栏\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"按下 ESC 時將焦點移至搜尋列\"\n          }\n        }\n      }\n    },\n    \"vZO-Tx-X1j.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Create Web Page\\\"; ObjectID = \\\"vZO-Tx-X1j\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إنشاء صفحة ويب\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Online teilen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Create Web Page\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crear página web\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer une page Web\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"צור דף אינטרנט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crea pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページの作成\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"웹 페이지 만들기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina maken\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página Web\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfası Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建为网页\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"建立網頁\"\n          }\n        }\n      }\n    },\n    \"w7R-OL-Nfh.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Lock Folder\\\"; ObjectID = \\\"w7R-OL-Nfh\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قفل المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner sperren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Lock Folder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear carpeta\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller le dossier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"נעל תיקייה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर लॉक करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダのロック\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"폴더 잠금\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map vergrendelen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear pasta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bloquear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать директорию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Kilitle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати папку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"锁定文件夹\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"鎖定資料夾\"\n          }\n        }\n      }\n    },\n    \"W48-6f-4Dl.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Edit\\\"; ObjectID = \\\"W48-6f-4Dl\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تعديل\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Úpravy\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bearbeiten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Edit\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Éditer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עריכה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संपादन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編集\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"편집\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Edit\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düzzenle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редагування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"编辑\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"編輯\"\n          }\n        }\n      }\n    },\n    \"wa2-sX-NOx.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSSecureTextFieldCell\\\"; placeholderString = \\\"optional\\\"; ObjectID = \\\"wa2-sX-NOx\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اختياري\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"nepovinné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"optional\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"optional\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"opcional\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"optionnelle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אופציונאלי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वैकल्पिक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"opzionale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"オプション\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택 과목\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"optioneel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opcional\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"opcional\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"необязательный\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"isteğe bağlı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"необов'язково\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可选的\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選填\"\n          }\n        }\n      }\n    },\n    \"wDP-Yg-13R.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSPathCell\\\"; placeholderString = \\\"id_rsa key is not selected\\\"; ObjectID = \\\"wDP-Yg-13R\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"id_rsa klíč není vybraný\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"id_rsa key is not selected\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"id_rsa कुंजी चयनित नहीं है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"id_rsa key não foi selecionado\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ключ id_rsa не выбран\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"id_rsa anahtarı seçilmedi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"~/.ssh/id_rsa\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未選取 id_rsa 金鑰\"\n          }\n        }\n      }\n    },\n    \"WeT-3V-zwk.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Paste and Match Style\\\"; ObjectID = \\\"WeT-3V-zwk\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لصق ومطابقة النمط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vložit a použít styl\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einsetzen und Stil anpassen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Paste and Match Style\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pegar con el mismo estilo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Coller et appliquer le style\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הדבק והתאם לסגנון\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पेस्ट और मैच स्टाइल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Incolla e abbina lo stile\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ペーストしてスタイルを合わせる\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"붙여넣고 스타일 일치시킴\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Plak en pas stijl aan\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Colar e combinar estilo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Colar e igualar o estilo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вставить в соответствии стилю\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yapıştır ve Stili Eşleştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вставити з відповідним стилем\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"粘贴并匹配样式\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"貼上並符合樣式\"\n          }\n        }\n      }\n    },\n    \"WHt-T4-l9c.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Hide/Show Note List\\\"; ObjectID = \\\"WHt-T4-l9c\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إخفاء / إظهار قائمة الملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Skrýt/zobrazit seznam poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizliste an/ausblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Hide/Show Note List\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar/mostrar notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Masquer/afficher la liste de notes\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הסתר/הצג רשימת פתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट सूची छिपाएँ/दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nascondi/mostra l'elenco delle note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート一覧の表示/非表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"노트 목록 숨기기/보이기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verbergen/tonen notitielijst\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar/mostar listar de notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ocultar/mostrar lista de notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спрятать/показать список заметок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not Listesini Gizle/Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приховати/показати нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隐藏/显示笔记列表\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"隱藏/顯示筆記清單\"\n          }\n        }\n      }\n    },\n    \"wpr-3q-Mcd.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Help\\\"; ObjectID = \\\"wpr-3q-Mcd\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مساعدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nápověda\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hilfe\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Help\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayuda\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aide\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"עזרה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सहायता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aiuto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ヘルプ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"도움말\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Help\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajuda\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ajuda\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Помощь\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yardım\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Допомога\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"帮助\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"輔助說明\"\n          }\n        }\n      }\n    },\n    \"Ws8-ql-C52.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Arrange note list above editor\\\"; ObjectID = \\\"Ws8-ql-C52\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"وضع قائمة الملاحظات فوق المحرر\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Umístit seznam poznámek nad editor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Die Notizenliste über dem Editor anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Arrange note list above editor\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Colocar la lista de notas encima del editor\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher la liste des notes au-dessus de l'éditeur\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"להציג את רשימת ההערות מעל העורך\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संपादक के ऊपर नोट्स की सूची रखें।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Posizionare l'elenco delle note sopra l'editor\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"エディタの上にメモの一覧を表示する\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"편집기 위에 메모 목록 배치하기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"De lijst met notities boven de editor plaatsen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Exibir a lista de notas acima do editor\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Colocar a lista de notas acima do editor\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расположить список заметок над редактором\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not listesini düzenleyicinin üstüne yerleştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розмістити список нотаток над редактором\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在编辑器上方显示备忘录列表\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"將備忘錄清單置於編輯器上方\"\n          }\n        }\n      }\n    },\n    \"WsG-JA-VQd.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Passphrase:\\\"; ObjectID = \\\"WsG-JA-VQd\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přístupová fráze:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासफ्रेज:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Frase secreta:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Парольная фраза:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"通關密語：\"\n          }\n        }\n      }\n    },\n    \"wW6-4n-sve.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Auto Rename By Title\\\"; ObjectID = \\\"wW6-4n-sve\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة تسمية تلقائية بالعنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Podle nadpisu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Auto rename by title\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Auto Rename By Title\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombrar automáticamente por título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selon le titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תן שם לפי כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक द्वारा स्वतः नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina automaticamente per titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトルをファイル名に自動反映\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"제목으로 자동 이름 바꾸기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatisch hernoemen op titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear automaticamente por título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear automaticamente por título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"По заголовку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığa Göre Otomatik Yeniden Adlandırma\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматичне перейменування за назвою\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"按标题自动重命名\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"依標題自動重新命名\"\n          }\n        }\n      }\n    },\n    \"wxM-bE-TE9.label\" : {\n      \"comment\" : \"Class = \\\"NSTabViewItem\\\"; label = \\\"Git\\\"; ObjectID = \\\"wxM-bE-TE9\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        }\n      }\n    },\n    \"X3S-sG-ykW.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Quote\\\"; ObjectID = \\\"X3S-sG-ykW\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اقتبس\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Citát\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zitat\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Quote\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Citar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Citation\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ציטוט\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"उद्धरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Citazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"引用符\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"인용문\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Quote\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aspas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Citação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Цитата\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alıntı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Цитата\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"引用\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"引用\"\n          }\n        }\n      }\n    },\n    \"x3v-GG-iWU.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Copy\\\"; ObjectID = \\\"x3v-GG-iWU\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"نسخ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieren\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Copy\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"העתק\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コピー\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"복사\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Копировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製\"\n          }\n        }\n      }\n    },\n    \"X76-X8-PbG.title\" : {\n      \"comment\" : \"Class = \\\"NSViewController\\\"; title = \\\"Publish\\\"; ObjectID = \\\"X76-X8-PbG\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ينشر\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zveřejnit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veröffentlichen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Publish\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publicar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"לְפַרְסֵם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रकाशित करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pubblicare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publish\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"게시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publiceren\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publicar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Publicar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Публикация\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yayımla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Опублікувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"发布\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"發布\"\n          }\n        }\n      }\n    },\n    \"XBB-Sr-T1D.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Rename\\\"; ObjectID = \\\"XBB-Sr-T1D\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اعادة تسمية\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Umbenennen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Rename\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renombrar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שנה שם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名前を変更\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이름 변경\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeniden isimlendirmek\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重新命名\"\n          }\n        }\n      }\n    },\n    \"xeP-Zg-vmO.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Bold:\\\"; ObjectID = \\\"xeP-Zg-vmO\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fett:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Bold:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Negrita:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gras :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बोल्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grassetto:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Жирный:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kalın:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Жирний:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"粗体：\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"粗體：\"\n          }\n        }\n      }\n    },\n    \"XEU-Ia-4j2.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Reset\\\"; ObjectID = \\\"XEU-Ia-4j2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إعادة ضبط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zurücksetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reset\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Reiniciar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Réinitialiser\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אִתחוּל\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रीसेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ripristina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リセット\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"초기화\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resetar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Redefinir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сбросить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıfırla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скинути\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重置\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重設\"\n          }\n        }\n      }\n    },\n    \"xfW-7n-cIw.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Link\\\"; ObjectID = \\\"xfW-7n-cIw\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"رابط\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odkaz\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enlace\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lien\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"קישור\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लिंक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"リンク\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"링크\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ligação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ссылка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Link\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Посилання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"链接\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"連結\"\n          }\n        }\n      }\n    },\n    \"xjf-5G-e5Q.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Show in Sidebar\\\"; ObjectID = \\\"xjf-5G-e5Q\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار في الشريط الجانبي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit v bočním panelu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In der Seitenleiste anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show in Sidebar\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar en la barra lateral\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher dans la barre latérale\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג בסרגל צד\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"साइडबार में दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nella barra laterale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイトバーに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사이드 바에 표시\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon in zijbalk\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar menu lateral\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar na barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать в сайдбаре\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kenar Çubuğunda Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показувати на бічній панелі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在侧边栏中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於側邊欄\"\n          }\n        }\n      }\n    },\n    \"xJQ-ch-Xlp.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Preview Font Size:\\\"; ObjectID = \\\"xJQ-ch-Xlp\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"معاينة حجم الخط:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veilkost písma v náhledu:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vorschauschrift:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Preview Font Size:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamaño de fuente de la previsualización:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taille de l'aperçu :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גודל גופן תצוגה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ॉन्ट आकार पूर्वावलोकन:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dimensione carattere:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プレビューフォントサイズ:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"서체 크기 미리보기:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voorvertoning Lettertypegrootte:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualização da fonte do texto:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualizar tamanho do tipo de letra:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт предпросмотра:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Önizleme Yazı Boyutu:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт прев'ю:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"预览字号:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"預覽字體大小：\"\n          }\n        }\n      }\n    },\n    \"xPh-BC-Xxl.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"History\\\"; ObjectID = \\\"xPh-BC-Xxl\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تاريخ\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historie\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Die geschichte\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"History\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historia\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historique\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"היסטוריה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतिहास\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cronologia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"履歴\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"변경 이력\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschiedenis\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histórico\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"История\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarih\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Історія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记历史版本\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"歷程記錄\"\n          }\n        }\n      }\n    },\n    \"xPz-yo-VwM.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Notes\\\"; ObjectID = \\\"xPz-yo-VwM\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Poznámky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Notes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notas\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remarques\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתקים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべて\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"모든 노트\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notes\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"筆記\"\n          }\n        }\n      }\n    },\n    \"xrE-MZ-jX0.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Speech\\\"; ObjectID = \\\"xrE-MZ-jX0\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"كلام\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řeč\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sprachausgabe\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Speech\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Habla\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Langage\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הקראה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"भाषण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voce\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スピーチ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"말하기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spraak\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fala\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ditar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Диктовка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konuşma\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Диктування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"语音\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"語音\"\n          }\n        }\n      }\n    },\n    \"xSO-lW-k8f.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Reveal in Finder\\\"; ObjectID = \\\"xSO-lW-k8f\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح المجلد\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit ve Finderu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Finder anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Reveal in Finder\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar en el Finder\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Localiser dans le Finder\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג ב-Finder\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder में दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra nel Finder\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finderに表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder에서 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Onthul in Finder\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Revelar no Finder\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realçar no Finder\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать в Finder\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Finder'da göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати в Finder\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在访达中显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示於 Finder\"\n          }\n        }\n      }\n    },\n    \"xWi-IK-gJS.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSSecureTextFieldCell\\\"; placeholderString = \\\"optional\\\"; ObjectID = \\\"xWi-IK-gJS\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اختياري\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"nepovinné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"optional\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"optional\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"opcional\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"optionnelle\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"אופציונאלי\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वैकल्पिक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"opzionale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"オプション\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"선택 과목\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"optioneel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opcional\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"opcional\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"необязательный\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"isteğe bağlı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"необов'язково\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可选的\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選填\"\n          }\n        }\n      }\n    },\n    \"xX0-9b-KDq.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Code block live highlighting\\\"; ObjectID = \\\"xX0-9b-KDq\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تسليط الضوء على كتلة التعليمات البرمجية (إعادة تشغيل التطبيق مطلوب)\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Živé zvýraznění u bloku kódu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Syntax automatisch hervorheben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Code block live highlighting\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resaltado sintáctico de código\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Surbrillance de code\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הדגש בלוקי קוד בזמן אמת (דורש אתחול)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड ब्लॉक लाइव हाइलाइटिंग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Evidenzia il blocco di codice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードブロックの色付け\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"코드 영역 실시간 강조\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Codeblok live markering\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Destacar em tempo real o bloco de código\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realçar bloco de código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Живая подсветка кода\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod bloğu canlı vurgulama\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Миттєве підсвічування коду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码块实时高亮显示\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"程式碼區塊即時突顯\"\n          }\n        }\n      }\n    },\n    \"xxB-ic-LFu.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"None\\\"; ObjectID = \\\"xxB-ic-LFu\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بلا\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Žádné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"None\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"None\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ninguno\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aucun\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ללא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई भी नहीं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nessuno\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"なし\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"없음\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nada\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nenhum\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Не использовать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hiçbiri\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Немає\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無\"\n          }\n        }\n      }\n    },\n    \"xyK-fE-4CD.placeholderString\" : {\n      \"comment\" : \"Class = \\\"NSSecureTextFieldCell\\\"; placeholderString = \\\"passphrase\\\"; ObjectID = \\\"xyK-fE-4CD\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"přístupová fráze\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासफ्रेज\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"frase secreta\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"passphrase\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"通關密語\"\n          }\n        }\n      }\n    },\n    \"Xz5-n4-O0W.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Find…\\\"; ObjectID = \\\"Xz5-n4-O0W\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ابحث ...\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat…\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen …\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Find…\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar…\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher…\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"חפש...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजे...\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trova…\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"찾기...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoeken…\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти…\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bul…\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查找…\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"尋找…\"\n          }\n        }\n      }\n    },\n    \"y4W-TV-iZ3.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Toggle Container\\\"; ObjectID = \\\"y4W-TV-iZ3\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zapnout/vypnout kontejner\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टॉगल कंटेनर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Alternar Container\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить контейнер\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konteyneri Aç/Kapat\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toggle Container\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切换容器\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"切換容器\"\n          }\n        }\n      }\n    },\n    \"y5T-sb-gw4.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Autoname by Title (30s)\\\"; ObjectID = \\\"y5T-sb-gw4\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"التسمية التلقائية حسب العنوان\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Automatické pojmenování podle názvu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische Benennung nach Titel\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Autoname by Title (30s)\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Asignación automática de nombres por título\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dénomination automatique par titre\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מתן שמות אוטומטית לפי כותרת\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"शीर्षक के अनुसार स्वचालित नामकरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Denominazione automatica per titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"タイトルによる自動命名\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"제목별 자동 이름 지정\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Automatische naamgeving op titel\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nomeação automática por título\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"needs_review\",\n            \"value\" : \"Nomeação automática por título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоименование по заголовку (30с)\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığa Göre Otomatik Adlandırma\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоіменування за заголовком (30c)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"按标题自动命名\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"依標題自動命名 (30s)\"\n          }\n        }\n      }\n    },\n    \"y7T-Rc-etT.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Name\\\"; ObjectID = \\\"y7T-Rc-etT\\\"; Note = \\\"#bc-ignore!\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"jméno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Name\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नाम\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İsim\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Name\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"ybG-au-Sf4.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Git repository\\\"; ObjectID = \\\"ybG-au-Sf4\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repozitář\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट रिपोजिटरी\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Repositório Git\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git репозиторий\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git deposu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git repository\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 儲存庫\"\n          }\n        }\n      }\n    },\n    \"YEy-JH-Tfz.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Find and Replace…\\\"; ObjectID = \\\"YEy-JH-Tfz\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بحث واستبدال ...\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat a nahradit…\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen und ersetzen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Find and Replace…\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Buscar y reemplazar…\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher et remplacer…\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מצא והחלף...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजे और बदलें…\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trova e Sostituisci…\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索と置換…\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"찾기 및 대치...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoeken en Vervangen…\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar e substituir...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e Substituir\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти и заменить…\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bul ve Değiştir…\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти та замінити...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查找和替换…\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"尋找與取代…\"\n          }\n        }\n      }\n    },\n    \"yMK-aK-OV2.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Move Selected Lines Up\\\"; ObjectID = \\\"yMK-aK-OV2\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ausgewählte Zeilen nach oben verschieben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Selected Lines Up\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover líneas seleccionadas hacia arriba\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer les lignes sélectionnées vers le haut\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चुनी हुई पंक्तियों को ऊपर ले जाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta righe selezionate verso l'alto\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить выбранные строки вверх\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seçili Satırları Yukarı Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити вибрані рядки вгору\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"选中行向上移动\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"將選取的行上移\"\n          }\n        }\n      }\n    },\n    \"yMX-hz-B8Y.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"__\\\"; ObjectID = \\\"yMX-hz-B8Y\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"__\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"__\"\n          }\n        }\n      },\n      \"shouldTranslate\" : false\n    },\n    \"yNE-Yn-AWj.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Quick note:\\\"; ObjectID = \\\"yNE-Yn-AWj\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظة سريعة:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rychlá poznámka:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kurze Anmerkung:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Quick note:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota rápida:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note rapide:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הערה מהירה:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"त्वरित नोट:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota veloce:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クイックノート:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"빠른 메모:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Snelle notitie:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota rápida:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nota rápida:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Быстрая заметка:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kısa not:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Швидка нотатка:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"速记:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"快速筆記：\"\n          }\n        }\n      }\n    },\n    \"Ynk-f8-cLZ.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Start Speaking\\\"; ObjectID = \\\"Ynk-f8-cLZ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"بدء التحدث\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spustit předčítání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sprachausgabe starten\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Start Speaking\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Iniciar locución\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Démarrer la diction\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"התחל להקריא\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बोलना शुरू करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avvia Lettura\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"読み上げを開始\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"말하기 시작\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Start met Praten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Começar a falar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Começar Ditado\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Начать диктовку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Konuşmaya Başla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Почати диктування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"开始朗读\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"開始朗讀\"\n          }\n        }\n      }\n    },\n    \"You-zo-rbl.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Pin/Unpin\\\"; ObjectID = \\\"You-zo-rbl\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"تثبيت / فك التثبيت\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Připnout/odepnout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixieren/Loslösen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Pin/Unpin\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Anclar/desanclar\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Épingler/Désépingler\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצמד/בטל הצמדה\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पिन/अनपिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fissa/Sblocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"メモをピンで固定/ピン固定の解除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"고정/고정 해제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin/VerwijderPin\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixar/Desafixar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixar/soltar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрепить/открепить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sabitle/Sabitlemeyi kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закріпити/відкріпити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"置顶/取消置顶\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"釘選/取消釘選\"\n          }\n        }\n      }\n    },\n    \"ypO-g0-1Xo.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Automatically insert closing braces and close quotes\\\"; ObjectID = \\\"ypO-g0-1Xo\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إدراج تلقائي لغلق الاقواس والاقتباسات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automaticky zavírat závorky a uvozovky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klammern und Anführungszeichen automatisch einfügen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Automatically insert closing braces and close quotes\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerrar corchetes y comillas automáticamente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parenthèses et guillemets fermants automatiques\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הכנס באופן אוטומטי סוגריים ומרכאות סוגרים\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्वचालित रूप से समापन ब्रेसिज़ और समापन उद्धरण सम्मिलित करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiungi in automatico parentesi e virgolette di chiusura\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動的に閉じ括弧や右引用符を挿入\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"자동으로 괄호와 인용 닫기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatisch invoegen sluithaken en sluit aanhalingstekens \"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar automaticamente aspas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fechar automáticamente parêntesis e aspas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматически закрывать скобки и кавычки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otomatik olarak kapanış parantezlerini ve kapanış tırnak işaretlerini ekle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматично закривати дужки та лапки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自动补全右括号和右引号\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動插入結尾括號與引號\"\n          }\n        }\n      }\n    },\n    \"yVt-tz-tMy.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Username:\\\"; ObjectID = \\\"yVt-tz-tMy\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"اسم المستخدم:\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uživatelské jméno:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Benutzername:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Username:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nombre de usuario:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nom d'utilisateur:\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"שם משתמש:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"उपयोगकर्ता नाम:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nome utente:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ユーザー名:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"사용자 이름:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruikersnaam:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nome de usuário: \"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nome de usuário:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Имя:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kullanıcı Adı:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ім'я користувача:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"用户名:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用者名稱：\"\n          }\n        }\n      }\n    },\n    \"yx6-SW-3vn.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Image or File\\\"; ObjectID = \\\"yx6-SW-3vn\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"صورة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Obrázek nebo soubor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bild\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Image or File\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imagen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Image ou fichier\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"תמונה או קובץ\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"छवि या फ़ाइल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Immagine o file\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像またはファイル\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"이미지\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afbeelding of bestand\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imagem ou arquivo\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Imagem ou ficheiro\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изображение или файл\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resim veya Dosya\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зображення або файл\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"图像\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"圖片或檔案\"\n          }\n        }\n      }\n    },\n    \"z6F-FW-3nz.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Show Substitutions\\\"; ObjectID = \\\"z6F-FW-3nz\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"مشاهدة التبديلات\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit záměny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ersetzungen einblenden\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show Substitutions\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar substituciones\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher les Substitutions\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג החלפות\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रतिस्थापन दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra Sostituzioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動置換を表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"대체 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon Vervangingen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar substituições\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar Substituições\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать замены\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yerine Geçenleri Göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати заміни\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示替换\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"顯示替代\"\n          }\n        }\n      }\n    },\n    \"zcY-e5-gKs.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"Open in External Editor:\\\"; ObjectID = \\\"zcY-e5-gKs\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"فتح في محرر خارجي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřít v externím editoru:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In externem Editor öffnen:\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Open in External Editor:\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir en editor externo:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir dans un éditeur externe :\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"פתח בעורך חיצוני:\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाहरी संपादक में खोलें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri in un editor esterno:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外部エディタで開く:\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"외부 편집기에서 열기:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Open in externe editor:\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir em editor externo:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir no editor externo:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Внешний редактор:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Harici Düzenleyicide Aç:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрити в редакторі:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在外部编辑器中打开:\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在外部編輯器開啟：\"\n          }\n        }\n      }\n    },\n    \"zd2-Rs-DPm.title\" : {\n      \"comment\" : \"Class = \\\"NSMenuItem\\\"; title = \\\"Force Delete\\\"; ObjectID = \\\"zd2-Rs-DPm\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"حذف اجباري\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vynutit smazání\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Force Delete\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Force Delete\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forzar eliminación\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forcer la suppression\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"מחק מיידית\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बलपूर्वक हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forza Cancellazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"強制的に削除\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"강제 삭제\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forceer verwijderen\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forçar deletar\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Forçar Apagar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Принудительное удаление\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zorla Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Примусово видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"强制删除\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"強制刪除\"\n          }\n        }\n      }\n    },\n    \"ZDl-8b-mam.title\" : {\n      \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; title = \\\"10\\\"; ObjectID = \\\"ZDl-8b-mam\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"10\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"10\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"10\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"10\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"10\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"10\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"3\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"10\"\n          }\n        }\n      }\n    },\n    \"Ze0-SZ-STw.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Back up manually\\\"; ObjectID = \\\"Ze0-SZ-STw\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"قم بعمل نسخة احتياطية يدويًا\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zálohovat ručně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Manuell sichern\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Back up manually\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia de seguridad manual\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauvegarder manuellement\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"גבה באופן ידני\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मैन्युअल रूप से बैकअप लें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esegui il backup manualmente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"手動バックアップ\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"수동으로 백업\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Back-up handmatig\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Backup manualmente\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cópia de segurança manual\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Резервные копии вручную\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Manuel olarak yedekleyin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вручну\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"手动备份\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"手動備份\"\n          }\n        }\n      }\n    },\n    \"ZqK-gu-KdQ.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Note auto selection when body text matched\\\"; ObjectID = \\\"ZqK-gu-KdQ\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"لاحظ التحديد التلقائي عند مطابقة النص الأساسي\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automaticky vybrat poznámku při shodě textu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notiz automatisch wählen, wenn der Text übereinstimmt\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Note auto selection when body text matched\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleccionar la nota automáticamente cuando el texto coincida\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sélec. auto de note lorsqu'un corps correspond\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"בחירה אוטומטית בפתקים כשגוף הטקסט תואם\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मुख्य पाठ मिलने पर नोट का स्वतः चयन करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleziona la nota che contiente nel corpo il testo cercato\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索でヒットしたノートを自動で選択する\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"본문 텍스트 발견 시 노트 자동 선택\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecteer notitie automatisch als de hoofdtekst overeenkomt\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seleção automática de notas quando o texto do corpo coincide\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Auto-seleccionar nota quando o texto corresponde\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выбирать заметку, если тело соответствует запросу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gövde metni eşleştiğinde otomatik seçimi not edin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автовибір нотатки при збігу тексту\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"正文文本匹配时自动选择笔记\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"內文符合時自動選取筆記\"\n          }\n        }\n      }\n    },\n    \"zRJ-Z2-Lsa.title\" : {\n      \"comment\" : \"Class = \\\"NSMenu\\\"; title = \\\"Move Item\\\"; ObjectID = \\\"zRJ-Z2-Lsa\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Element verschieben\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Move Item\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover elemento\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer l'élément\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आइटम हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta elemento\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Öğeyi Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移动项目\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動項目\"\n          }\n        }\n      }\n    },\n    \"Zzw-01-JH7.title\" : {\n      \"comment\" : \"Class = \\\"NSButtonCell\\\"; title = \\\"Show notes in \\\\\\\"Notes\\\\\\\" and \\\\\\\"Todo\\\\\\\" lists\\\"; ObjectID = \\\"Zzw-01-JH7\\\";\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"إظهار الملاحظات في قائمة \\\"ملاحظات\\\" و \\\"قائمة المهام\\\"\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit poznámky v seznamech „Poznámky“ a „Úkoly“\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizen in den Listen \\\"Notizen\\\" und \\\"Todo\\\" anzeigen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Show notes in \\\"Notes\\\" and \\\"Todo\\\" lists\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostras las notas en las listas \\\"Notas\\\" y \\\"Pendientes\\\"\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voir les notes dans \\\"Notes\\\" et \\\"Tâches\\\"\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"הצג פתקים ברשימות ״פתקים״ ו-״מטלות״\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"नोट्स\\\" और \\\"टुडू\\\" सूचियों में नोट्स दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostra le note negli elenchi \\\"Note\\\" e \\\"Da Fare\\\"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"すべて\\\" と \\\"タスク\\\" にノートを表示\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"모든 노트\\\"와 \\\"할 일\\\"에 있는 노트 보기\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon notities in \\\"Notes\\\" en \\\"Todo\\\" lijsten\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar notas em \\\\\\\"Notes\\\\\\\" and \\\\\\\"Todo\\\\\\\" listas\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar notas nas listas \\\"Notas\\\" e \\\"Tarefas\\\"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать заметки в общих\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notları “Notlar” ve “Yapılacaklar” listelerinde gösterme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показувати у \\\"Нотатках\\\" і \\\"Завданнях\\\"\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在\\\"笔记\\\"和\\\"待办事项\\\"列表中显示备注\"\n          }\n        },\n        \"zh-Hant\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在「筆記」與「待辦事項」清單中顯示筆記\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "FSNotes Info (Notarized).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>ATSApplicationFontsPath</key>\n\t<string>.</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundleDocumentTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>etp</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>EncryptedTextPack</string>\n\t\t\t<key>CFBundleTypeMIMETypes</key>\n\t\t\t<array/>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Encrypted Text Pack</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Owner</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>es.fsnot.etp.package</string>\n\t\t\t</array>\n\t\t\t<key>LSTypeIsPackage</key>\n\t\t\t<integer>0</integer>\n\t\t\t<key>NSDocumentClass</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>textbundle</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Default</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>org.textbundle.package</string>\n\t\t\t</array>\n\t\t\t<key>LSTypeIsPackage</key>\n\t\t\t<integer>1</integer>\n\t\t\t<key>NSDocumentClass</key>\n\t\t\t<string></string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>md</string>\n\t\t\t\t<string>markdown</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Default</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>rtf</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>RTF</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Rich Text</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Alternate</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>public.rtf</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>txt</string>\n\t\t\t\t<string>plain-text</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFile</key>\n\t\t\t<string>Text</string>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Text</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Alternate</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>public.plain-text</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleURLTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>makeNote</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.fsnotes</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>fsnotes</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>makeNote</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.fsnotes</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>nv</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>makeNote</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.fsnotes</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>nvalt</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.productivity</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>LSUIElement</key>\n\t<false/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2017-2022 Oleksandr Hlushchenko. All rights reserved.</string>\n\t<key>NSMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n\t<key>NSUbiquitousContainers</key>\n\t<dict>\n\t\t<key>iCloud.co.fluder.fsnotes</key>\n\t\t<dict>\n\t\t\t<key>NSUbiquitousContainerIsDocumentScopePublic</key>\n\t\t\t<true/>\n\t\t\t<key>NSUbiquitousContainerName</key>\n\t\t\t<string>FSNotes</string>\n\t\t\t<key>NSUbiquitousContainerSupportedFolderLevels</key>\n\t\t\t<string>One</string>\n\t\t</dict>\n\t</dict>\n\t<key>NSUserActivityTypes</key>\n\t<array>\n\t\t<string>es.fsnot.handoff-open-note</string>\n\t</array>\n\t<key>UTExportedTypeDeclarations</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.data</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Encrypted Text Pack</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>EncryptedTextPack</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>es.fsnot.etp.package</string>\n\t\t\t<key>UTTypeReferenceURL</key>\n\t\t\t<string>https://fsnot.es</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>etp</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array/>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>com.apple.package</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>org.textbundle.package</string>\n\t\t\t<key>UTTypeReferenceURL</key>\n\t\t\t<string>http://www.textbundle.org</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>textbundle</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.plain-text</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>md</string>\n\t\t\t\t\t<string>markdown</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>text/markdown</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.text</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Plain Text</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>Text</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>public.plain-text</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>txt</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>text/plain</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.text</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Rich Text</string>\n\t\t\t<key>UTTypeIconFile</key>\n\t\t\t<string>RTF</string>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>public.rtf</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>rtf</string>\n\t\t\t\t</array>\n\t\t\t\t<key>public.mime-type</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>text/rtf</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes iOS/.bartycrouch.toml",
    "content": "[update]\ntasks = [\"interfaces\", \"code\", \"transform\", \"normalize\"]\n\n[update.interfaces]\npaths = [\".\"]\ndefaultToBase = true\nignoreEmptyStrings = false\nunstripped = false\n\n[update.code]\ncodePaths = [\".\"]\nlocalizablePaths = [\".\"]\ndefaultToKeys = true\nadditive = false\nunstripped = false\nplistArguments = true\n\n[update.transform]\ncodePaths = [\".\"]\nlocalizablePaths = [\".\"]\ntransformer = \"foundation\"\nsupportedLanguageEnumPath = \".\"\ntypeName = \"BartyCrouch\"\ntranslateMethodName = \"translate\"\n\n[update.normalize]\npaths = [\".\"]\nsourceLocale = \"en\"\nharmonizeWithSource = true\nsortByKeys = true\n\n[lint]\npaths = [\".\"]\nduplicateKeys = false\nemptyValues = true\n"
  },
  {
    "path": "FSNotes iOS/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\n//\n//  AppDelegate.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport CoreData\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    public static var gitVC = [String: GitViewController]()\n    public static var gitProgress: GitProgress?\n\n    // MARK: Static Properties\n    static let applicationShortcutUserInfoIconKey = \"applicationShortcutUserInfoIconKey\"\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n        // Setup dynamic shortcuts\n        let newDocument = NSLocalizedString(\"New Note\", comment: \"\")\n        let shortcutNew = UIMutableApplicationShortcutItem(\n            type: ShortcutIdentifier.makeNew.type,\n            localizedTitle: newDocument,\n            localizedSubtitle: \"\",\n            icon: UIApplicationShortcutIcon(type: .compose),\n            userInfo: nil\n        )\n\n        let saveClipboard = NSLocalizedString(\"Save Clipboard\", comment: \"\")\n        let shortcutNewClipboard = UIMutableApplicationShortcutItem(\n            type: ShortcutIdentifier.clipboard.type,\n            localizedTitle: saveClipboard,\n            localizedSubtitle: \"\",\n            icon: UIApplicationShortcutIcon(type: .add),\n            userInfo: nil\n        )\n\n        let search = NSLocalizedString(\"Search or Create\", comment: \"\")\n        let shortcutSearch = UIMutableApplicationShortcutItem(\n            type: ShortcutIdentifier.search.type,\n            localizedTitle: search,\n            localizedSubtitle: \"\",\n            icon: UIApplicationShortcutIcon(type: .search),\n            userInfo: nil\n        )\n\n        application.shortcutItems = [shortcutNew, shortcutNewClipboard, shortcutSearch]\n\n        return true\n    }\n\n    // MARK: UISceneSession Lifecycle\n\n    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {\n        // Called when a new scene session is being created.\n        return UISceneConfiguration(name: \"Default Configuration\", sessionRole: connectingSceneSession.role)\n    }\n\n    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {\n        // Called when the user discards a scene session.\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        UserDefaultsManagement.crashedLastTime = false\n\n        let temp = NSTemporaryDirectory()\n\n        let encryption = URL(fileURLWithPath: temp).appendingPathComponent(\"Encryption\")\n        try? FileManager.default.removeItem(at: encryption)\n\n        let webkitPreview = URL(fileURLWithPath: temp).appendingPathComponent(\"wkPreview\")\n        try? FileManager.default.removeItem(at: webkitPreview)\n\n        let imagesPreview = URL(fileURLWithPath: temp).appendingPathComponent(\"ThumbnailsBig\")\n        try? FileManager.default.removeItem(at: imagesPreview)\n\n        Storage.shared().saveProjectsCache()\n\n        print(\"Termination end, crash status: \\(UserDefaultsManagement.crashedLastTime)\")\n    }\n\n    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {\n        if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent(\"Documents\").standardized,\n           !FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil) {\n\n            do {\n                try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil)\n            } catch {\n                print(\"Home directory creation: \\(error)\")\n            }\n        }\n\n        return true\n    }\n\n    // MARK: - Static Helper Methods\n\n    public static func getGitVC(for project: Project) -> GitViewController {\n        if let gitVC = AppDelegate.gitVC[project.settingsKey] {\n            return gitVC\n        }\n\n        let storyBoard: UIStoryboard = UIStoryboard(name: \"Main\", bundle:nil)\n        let gvc = storyBoard.instantiateViewController(withIdentifier: \"gitSettingsViewController\") as! GitViewController\n        gvc.setProject(project)\n\n        AppDelegate.gitVC[project.settingsKey] = gvc\n\n        return gvc\n    }\n\n    public static func getGitVCOptional(for project: Project) -> GitViewController? {\n        if let gitVC = AppDelegate.gitVC[project.settingsKey] {\n            return gitVC\n        }\n\n        return nil\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Colors/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Colors/fsColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.850\",\n          \"green\" : \"0.600\",\n          \"red\" : \"0.080\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.850\",\n          \"green\" : \"0.600\",\n          \"red\" : \"0.080\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Editor/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Editor/checkbox.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"checkbox.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_white.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"checkbox@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_white@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"checkbox@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_white@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Editor/checkbox_empty.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"checkbox_empty.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_empty_white 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"checkbox_empty@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_empty_white@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"checkbox_empty@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"checkbox_empty_white@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Icons/AppIconClassic-2025.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"classic.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Icons/AppIconModern.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"classic-iOS-Default-1024x1024@1x.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Icons/AppIconNy-2026.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"ny-2026-iOS-Default-1024x1024@1x.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Icons/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/LaunchScreenImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icon-1024-1024-tint.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"app-icon-dylanseegerDarkFull.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"icon-1024-1024-tint 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"app-icon-dylanseegerDarkFull 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"icon-1024-1024-tint 2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"app-icon-dylanseegerDarkFull 2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_archive.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Archive-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Archive-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"Archive-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_inbox.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"1172241_inbox_letter_mail_mailbox_icon-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_notes.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Notes-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Notes-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"Notes-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_project.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"folder-77.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"folder-76@2x-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"folder-76@2x-1 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_project_encrypted_locked.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"locked@74.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"locked@148.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"locked@222.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_project_encrypted_unlocked.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"unlocked@74.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"unlocked@148.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"unlocked@222.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_tag.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"tag-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"tag-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"tag-76@2x 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_todo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"t2-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"t2-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"t2-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_trash.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Trash-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Trash-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"Trash-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar/sidebar_untagged.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"1172268_tag_tags_icon-76.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"1172268_tag_tags_icon-76@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"1172268_tag_tags_icon-83.5@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar Actions/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Sidebar Actions/gitSettings.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"git-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"git-20 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"git-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"git-20@2x 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"git-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"git-20@3x 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/codeBlockAsset.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"codeblock.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"codeblock-1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"codeblock-2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/numbered_list.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"numbered_list.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/ordered_list.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"ordered_list.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/pictureAsset.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"picture@1x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"picture@1x-white.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"picture@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"picture@2x-white.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"picture@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"filename\" : \"picture@3x-white.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/quote.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"quote.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/redo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"redo.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"redo@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"redo@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarBold.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icons8-bold-52-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"icons8-bold-52-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"icons8-bold-52-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarHeader.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"type-h1-icon_1-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"type-h1-icon_1-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"type-h1-icon_1-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icons8-image-96-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"icons8-image-96-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"icons8-image-96-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarIndentLeft.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"right-indent-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"right-indent-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"right-indent-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarIndentRight.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"left-indent-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"left-indent-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"left-indent-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarItalic.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"italic-text-option-interface-symbol-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"italic-text-option-interface-symbol-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"italic-text-option-interface-symbol-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarTag.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"iconfinder_20-blue_fee-label-price-tag_4488787-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"iconfinder_20-blue_fee-label-price-tag_4488787-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"iconfinder_20-blue_fee-label-price-tag_4488787-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarTodo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icons8-todo-list-96-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"icons8-todo-list-96-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"icons8-todo-list-96-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/toolbarWiki.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icons8-documents-96-20.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"icons8-documents-96-20@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"icons8-documents-96-20@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Toolbar/undo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"undo.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"undo@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"undo@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/Image.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"image.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"image@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"image@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/bold.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"bold.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"bold@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"bold@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/codeblock.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"codeblock.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"codeblock 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"codeblock 2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/indent.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"indent.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"indent@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"indent@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/italic.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"italic.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"italic@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"italic@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/tb_link.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"tb_link.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"tb_link 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"tb_link 2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/todo.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"todo.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"todo@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"todo@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/Assets.xcassets/Touch Bar/unindent.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"unindent.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"unindent@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"unindent@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "FSNotes iOS/DatePickerViewController.swift",
    "content": "//\n//  DatePickerViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 01.02.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass DatePickerViewController: UIViewController {\n    @IBOutlet weak var datePicker: UIDatePicker!\n    @IBOutlet weak var navigationBar: UINavigationBar!\n    @IBOutlet weak var bottomSafeView: UIView!\n    @IBOutlet weak var navItem: UINavigationItem!\n\n    public var notes: [Note]?\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        navigationBar.barTintColor = UIColor.sidebar\n        navigationBar.tintColor = UIColor.mainTheme\n        navigationBar.backgroundColor = UIColor.sidebar\n        bottomSafeView.backgroundColor = UIColor.sidebar\n\n        if #available(iOS 14.0, *) {\n            datePicker.preferredDatePickerStyle = .inline\n        }\n\n        if let date = notes?.first?.creationDate {\n            datePicker.date = date\n        }\n\n        initButtons()\n    }\n\n    @IBAction func saveDate(_ sender: Any) {\n        guard let notes = self.notes else { return }\n\n        for note in notes {\n            _ = note.setCreationDate(date: datePicker.date)\n        }\n\n        DispatchQueue.main.async {\n            UIApplication.getVC().notesTable.reloadRows(notes: notes)\n        }\n\n        self.notes = nil\n        dismiss(animated: true)\n    }\n\n    @IBAction func closeController(_ sender: Any) {\n        dismiss(animated: true)\n    }\n\n    private func initButtons() {\n        let leftString = NSLocalizedString(\"Cancel\", comment: \"\")\n        navItem.leftBarButtonItem = UIBarButtonItem(title: leftString, style: .plain, target: self, action: #selector(closeController))\n\n        let saveBarButton = UIBarButtonItem(title: NSLocalizedString(\"Update\", comment: \"\"), style: .plain, target: self, action: #selector(saveDate))\n\n        navItem.rightBarButtonItem = saveBarButton\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/EditorViewController+QuickLook.swift",
    "content": "//\n//  EditorViewController+QuickLook.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Hlushchenko on 05.05.2024.\n//  Copyright © 2024 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport QuickLook\n\nextension EditorViewController: QLPreviewControllerDataSource {\n    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {\n        return 1\n    }\n\n    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> any QLPreviewItem {\n        guard let quickLookURL = quickLookURL else {\n            fatalError(\"File URL is nil\")\n        }\n        return quickLookURL as QLPreviewItem\n    }\n\n    func quickLook(url: URL) {\n        let previewController = QLPreviewController()\n        previewController.dataSource = self\n\n        quickLookURL = url\n\n        navigationController?.pushViewController(previewController, animated: true)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/EditorViewController+Search.swift",
    "content": "//\n//  EditorViewController+Search.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.01.2026.\n//  Copyright © 2026 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension EditorViewController {\n    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {\n        clearHighlights()\n        guard !searchText.isEmpty else {\n            updateCounterLabel()\n            return\n        }\n        findRanges(text: searchText)\n    }\n\n    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {\n        nextResult()\n    }\n\n    func scrollToCurrent() {\n        guard !searchRanges.isEmpty else { return }\n\n        let range = searchRanges[currentSearchIndex]\n\n        let layoutManager = editArea.layoutManager\n        let textContainer = editArea.textContainer\n\n        let targetGlyphRange = layoutManager.glyphRange(\n            forCharacterRange: range,\n            actualCharacterRange: nil\n        )\n\n        let extendedGlyphRange = NSRange(\n            location: 0,\n            length: targetGlyphRange.location + targetGlyphRange.length\n        )\n\n        layoutManager.ensureLayout(forGlyphRange: extendedGlyphRange)\n\n        _ = layoutManager.boundingRect(\n            forGlyphRange: targetGlyphRange,\n            in: textContainer\n        )\n\n        editArea.selectedRange = range\n        editArea.scrollRangeToVisible(range)\n\n        updateCounterLabel()\n    }\n\n    func nextResult() {\n        guard !searchRanges.isEmpty else { return }\n        currentSearchIndex = (currentSearchIndex + 1) % searchRanges.count\n        highlightAll()\n        scrollToCurrent()\n    }\n\n    func prevResult() {\n        guard !searchRanges.isEmpty else { return }\n        currentSearchIndex = (currentSearchIndex - 1 + searchRanges.count) % searchRanges.count\n        highlightAll()\n        scrollToCurrent()\n    }\n    \n    func highlightAll() {\n        guard !searchRanges.isEmpty else { return }\n        let textStorage = editArea.textStorage\n        textStorage.beginEditing()\n        \n        clearHighlights()\n        originalBackgrounds.removeAll()\n        \n        for (index, range) in searchRanges.enumerated() {\n            let color = index == currentSearchIndex\n                ? UIColor.systemOrange.withAlphaComponent(0.6)\n                : UIColor.systemYellow.withAlphaComponent(0.4)\n            \n            let currentBg = textStorage.attribute(.backgroundColor, at: range.location, effectiveRange: nil) as? UIColor\n            originalBackgrounds[range] = currentBg\n            \n            textStorage.addAttribute(.backgroundColor, value: color, range: range)\n        }\n        \n        textStorage.endEditing()\n    }\n\n    func clearHighlights() {\n        guard !originalBackgrounds.isEmpty else { return }\n        \n        let textStorage = editArea.textStorage\n        textStorage.beginEditing()\n        \n        for (range, originalColor) in originalBackgrounds {\n            if let color = originalColor {\n                textStorage.addAttribute(.backgroundColor, value: color, range: range)\n            } else {\n                textStorage.removeAttribute(.backgroundColor, range: range)\n            }\n        }\n        \n        textStorage.endEditing()\n        \n        originalBackgrounds.removeAll()\n    }\n\n    func findRanges(text: String) {\n        searchRanges.removeAll()\n        currentSearchIndex = 0\n\n        let nsText = editArea.text as NSString\n        var searchRange = NSRange(location: 0, length: nsText.length)\n\n        while true {\n            let found = nsText.range(\n                of: text,\n                options: .caseInsensitive,\n                range: searchRange\n            )\n            if found.location == NSNotFound { break }\n            searchRanges.append(found)\n\n            searchRange = NSRange(\n                location: found.location + found.length,\n                length: nsText.length - found.location - found.length\n            )\n        }\n\n        highlightAll()\n        \n        if !searchRanges.isEmpty {\n            scrollToCurrent()\n        }\n        \n        updateCounterLabel()\n    }\n    \n    func updateCounterLabel() {\n        guard let counterLabel = counterLabel else { return }\n        \n        if searchRanges.isEmpty {\n            counterLabel.text = \"\"\n        } else {\n            counterLabel.text = \"\\(currentSearchIndex + 1)/\\(searchRanges.count)\"\n        }\n    }\n    \n    func showSearch() {\n        guard let note = editArea.note else { return }\n        \n        if note.previewState {\n            togglePreview()\n        }\n        \n        if searchToolbar == nil {\n            setupSearchAccessory()\n        }\n        \n        keyboardAnchor?.becomeFirstResponder()\n        searchBar?.becomeFirstResponder()\n        \n        originalSelectedRange = editArea.selectedRange\n    }\n\n    func hideSearch() {\n        keyboardAnchor?.resignFirstResponder()\n        searchBar?.resignFirstResponder()\n\n        searchToolbar = nil\n        searchBar = nil\n        counterLabel = nil\n        \n        keyboardAnchor?.removeFromSuperview()\n        keyboardAnchor = nil\n        \n        clearHighlights()\n\n        if let range = originalSelectedRange {\n            editArea.selectedRange = range\n        }\n        \n        addToolBar(textField: editArea, toolbar: getMarkdownToolbar())\n    }\n\n    @objc func editorSearch() {\n        if searchBar != nil {\n            hideSearch()\n        } else {\n            showSearch()\n        }\n    }\n    \n    func setupSearchAccessory() {\n        keyboardAnchor = UITextField()\n        keyboardAnchor?.isHidden = true\n        view.addSubview(keyboardAnchor!)\n        \n        searchBar = UISearchBar()\n        \n        guard let searchBar = searchBar else { return }\n        searchBar.delegate = self\n        searchBar.placeholder = \"Find\"\n        searchBar.autocapitalizationType = .none\n        searchBar.autocorrectionType = .no\n        searchBar.searchBarStyle = .minimal\n        searchBar.showsCancelButton = false\n    \n        if let textField = searchBar.value(forKey: \"searchField\") as? UITextField {\n            textField.clearButtonMode = .never\n        }\n    \n        searchBar.translatesAutoresizingMaskIntoConstraints = false\n\n        counterLabel = UILabel()\n        guard let counterLabel = counterLabel else { return }\n        counterLabel.font = UIFont.monospacedSystemFont(ofSize: 13, weight: .regular)\n        counterLabel.textColor = .secondaryLabel\n        counterLabel.textAlignment = .center\n        counterLabel.translatesAutoresizingMaskIntoConstraints = false\n        counterLabel.setContentHuggingPriority(.required, for: .horizontal)\n        counterLabel.setContentCompressionResistancePriority(.required, for: .horizontal)\n        counterLabel.widthAnchor.constraint(equalToConstant: 45).isActive = true\n        \n        let prevButton = UIButton(type: .system)\n        prevButton.setImage(UIImage(systemName: \"chevron.up\"), for: .normal)\n        prevButton.addTarget(self, action: #selector(prevTap), for: .touchUpInside)\n        prevButton.widthAnchor.constraint(equalToConstant: 32).isActive = true\n        \n        let nextButton = UIButton(type: .system)\n        nextButton.setImage(UIImage(systemName: \"chevron.down\"), for: .normal)\n        nextButton.addTarget(self, action: #selector(nextTap), for: .touchUpInside)\n        nextButton.widthAnchor.constraint(equalToConstant: 32).isActive = true\n        \n        let closeButton = UIButton(type: .system)\n        closeButton.setImage(UIImage(systemName: \"xmark\"), for: .normal)\n        closeButton.addTarget(self, action: #selector(closeSearch), for: .touchUpInside)\n        closeButton.widthAnchor.constraint(equalToConstant: 32).isActive = true\n        \n        let prev = UIBarButtonItem(customView: prevButton)\n        let next = UIBarButtonItem(customView: nextButton)\n        let close = UIBarButtonItem(customView: closeButton)\n\n        let searchItem = UIBarButtonItem(customView: searchBar)\n        let counterItem = UIBarButtonItem(customView: counterLabel)\n\n        searchToolbar = UIToolbar()\n        guard let searchToolbar = searchToolbar else { return }\n        searchToolbar.items = [\n            searchItem,\n            counterItem,\n            prev,\n            next,\n            close\n        ]\n\n        searchToolbar.sizeToFit()\n        \n        keyboardAnchor?.inputAccessoryView = searchToolbar\n    }\n    \n    @objc func nextTap() {\n        nextResult()\n    }\n\n    @objc func prevTap() {\n        prevResult()\n    }\n    \n    @objc func closeSearch() {\n        clearHighlights()\n        \n        keyboardAnchor?.resignFirstResponder()\n        searchBar?.resignFirstResponder()\n\n        editArea.inputAccessoryView = nil\n        editArea.reloadInputViews()\n        \n        searchToolbar = nil\n        searchBar = nil\n        counterLabel = nil\n        \n        keyboardAnchor?.removeFromSuperview()\n        keyboardAnchor = nil\n        \n        self.addToolBar(textField: editArea, toolbar: self.getMarkdownToolbar())\n    }\n    \n    func openSearchWithText(_ searchText: String) {\n        showSearch()\n        \n        self.searchBar?.text = searchText\n        self.findRanges(text: searchText)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/EditorViewController.swift",
    "content": "//\n//  EditorViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/31/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport AudioToolbox\nimport MobileCoreServices\nimport Photos\nimport DropDown\nimport CoreSpotlight\nimport PhotosUI\n\nclass EditorViewController: UIViewController,\n    UITextViewDelegate,\n    UIDocumentPickerDelegate,\n    UIGestureRecognizerDelegate,\n    PHPickerViewControllerDelegate,\n    UIImagePickerControllerDelegate,\n    UINavigationControllerDelegate,\n    UISearchBarDelegate\n{\n    public var note: Note?\n    public var quickLookURL: URL?\n\n    private var isUndo = false\n    private let storageQueue = OperationQueue()\n\n    var inProgress = false\n    var change = 0\n\n    public var undoBarButton: UIBarButtonItem?\n    public var redoBarButton: UIBarButtonItem?\n\n    @IBOutlet weak var editArea: EditTextView!\n\n    var rowUpdaterTimer = Timer()\n\n    public var tagsTimer: Timer?\n    private let dropDown = DropDown()\n\n    private var isLandscape: Bool?\n    private var lastStyle: UIUserInterfaceStyle?\n    \n    // Search toolbar\n    var keyboardAnchor: UITextField?\n    var counterLabel: UILabel?\n    var searchBar: UISearchBar?\n    var searchToolbar: UIToolbar?\n    var searchRanges: [NSRange] = []\n    var currentSearchIndex: Int = 0\n    var originalSelectedRange: NSRange?\n    var originalBackgrounds: [NSRange: UIColor?] = [:]\n\n    override func viewDidLoad() {\n        storageQueue.maxConcurrentOperationCount = 1\n        storageQueue.qualityOfService = .userInitiated\n\n        editArea.textContainerInset = UIEdgeInsets(top: 13, left: 10, bottom: 0, right: 10)\n\n        let imageTap = SingleImageTouchDownGestureRecognizer(target: self, action: #selector(imageTapHandler(_:)))\n        editArea.addGestureRecognizer(imageTap)\n\n        let tap = SingleTouchDownGestureRecognizer(target: self, action: #selector(tapHandler(_:)))\n        editArea.addGestureRecognizer(tap)\n\n        editArea.initTextStorage()\n\n        let tapGR = UITapGestureRecognizer(target: self, action: #selector(editMode))\n        tapGR.delegate = self\n        tapGR.numberOfTapsRequired = 2\n        view.addGestureRecognizer(tapGR)\n\n        editArea.imagesLoaderQueue.maxConcurrentOperationCount = 1\n        editArea.imagesLoaderQueue.qualityOfService = .userInteractive\n\n        super.viewDidLoad()\n        \n        var items = [UIBarButtonItem]()\n        items.append(UIBarButtonItem(systemImageName: \"magnifyingglass\", target: self, selector: #selector(editorSearch)))\n        items.append(UIBarButtonItem.flexibleSpace())\n        items.append(UIBarButtonItem(systemImageName: \"plus\", target: self, selector: #selector(newNote)))\n\n        toolbarItems = items\n\n        self.addToolBar(textField: editArea, toolbar: self.getMarkdownToolbar())\n\n        NotificationCenter.default.addObserver(self, selector: #selector(themeObserver), name: UIApplication.didBecomeActiveNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(preferredContentSizeChanged), name: UIContentSizeCategory.didChangeNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(rotated), name: UIDevice.orientationDidChangeNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(refill), name: NSNotification.Name(rawValue: \"es.fsnot.external.file.changed\"), object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeFrame), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)\n\n        editArea.keyboardDismissMode = .interactive\n        \n        registerForKeyboardNotifications()\n        registerForAppStateNotifications()\n    }\n\n    @objc func rotated() {\n        guard isLandscape != nil else {\n            isLandscape = UIDevice.current.orientation.isLandscape\n            return\n        }\n\n        let isLand = UIDevice.current.orientation.isLandscape\n        if let landscape = self.isLandscape, landscape != isLand, !UIDevice.current.orientation.isFlat {\n            isLandscape = isLand\n        }\n    }\n\n    override func viewDidAppear(_ animated: Bool) {\n        editArea.isScrollEnabled = true\n\n        super.viewDidAppear(animated)\n\n        if editArea.textStorage.length == 0  && editArea.note?.previewState == false {\n            editArea.perform(#selector(becomeFirstResponder), with: nil, afterDelay: 0)\n        }\n\n        initLinksColor()\n        editArea.flashScrollIndicators()\n\n        initSwipes()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        updateTitle()\n        \n        super.viewWillAppear(animated)\n\n        configureNavMenu()\n        \n        navigationItem.largeTitleDisplayMode = .never\n\n        navigationController?.setToolbarHidden(false, animated: true)\n        navigationController?.toolbar.tintColor = UIColor.mainTheme\n        navigationController?.navigationBar.tintColor = UIColor.mainTheme\n    }\n\n    @objc func search() {\n        UIApplication.getVC().enableSearchFocus()\n\n        self.cancel()\n    }\n\n    @objc func newNote() {\n        UIApplication.getVC().createNote(content: \"\")\n\n        configureNavMenu()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        editArea.endEditing(true)\n\n        UIApplication.getNC()?.navigationItem.searchController = nil\n    }\n\n    override var disablesAutomaticKeyboardDismissal: Bool {\n        return false\n    }\n\n    override var textInputMode: UITextInputMode? {\n        if let keyboard = UserDefaultsManagement.defaultKeyboard {\n            for mode in UITextInputMode.activeInputModes {\n                if mode.primaryLanguage == keyboard  {\n                    return mode\n                }\n            }\n        }\n        \n        return super.textInputMode\n    }\n    \n    public func updateTitle() {\n        navigationItem.title = note?.project.label\n        \n        if #available(iOS 26.0, *) {\n            navigationItem.subtitle = note?.url.lastPathComponent\n        }\n    }\n\n    private func registerForKeyboardNotifications() {\n        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)\n    }\n\n    private func unregisterFromKeyboardNotifications() {\n        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)\n        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)\n    }\n\n    private func registerForAppStateNotifications() {\n        NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)\n    }\n\n    @objc private func appDidEnterBackground() {\n        unregisterFromKeyboardNotifications()\n    }\n\n    @objc private func appWillEnterForeground() {\n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {\n            self.registerForKeyboardNotifications()\n        }\n    }\n\n    public func configureNavMenu() {\n        guard let note = self.note else { return }\n        guard let menu = UIApplication.getVC().notesTable.makeBulkMenu(editor: true, note: note) else { return }\n\n        let buttonName =\n            editArea.note?.previewState == true\n                ? \"eye.slash\"\n                : \"eye\"\n\n        let previewBarItem = UIBarButtonItem(systemImageName: buttonName, target: self, selector: #selector(togglePreview))\n        previewBarItem.tag = 5\n\n        navigationItem.rightBarButtonItems = [\n            UIBarButtonItem(systemImageName: \"ellipsis.circle\", menu: menu),\n            previewBarItem\n        ]\n    }\n\n    public func fill(note: Note, selectedRange: NSRange? = nil, clearPreview: Bool = false, enableHandoff: Bool = true, completion: (() -> ())? = nil) {\n\n        if enableHandoff {\n            registerHandoff(for: note)\n        }\n\n        self.note = note\n        if !note.isLoaded {\n            note.load()\n        }\n        \n        editArea.note = note\n\n        if note.previewState {\n            loadPreviewView()\n            completion?()\n            return\n        }\n\n        getPreviewView()?.removeFromSuperview()\n        fillEditor(note: note, selectedRange: selectedRange)\n        completion?()\n    }\n\n    private func fillEditor(note: Note, selectedRange: NSRange? = nil) {\n        guard editArea != nil else { return }\n\n        editArea.isNoteLoading = true\n        editArea.initUndoRedoButons()\n\n        view.backgroundColor = UIColor.dropDownColor\n        editArea.backgroundColor = UIColor.dropDownColor\n\n        if let content = note.content.mutableCopy() as? NSMutableAttributedString {\n            editArea.attributedText = content\n        }\n        \n        if let scroll = editArea.inputAccessoryView as? UIScrollView {\n            scroll.contentOffset = .zero\n        }\n        \n        editArea.delegate = self\n\n        let storage = editArea.textStorage\n        storage.updateCheckboxList()\n        editArea.typingAttributes[.font] = UserDefaultsManagement.noteFont\n        \n        editArea.layoutManager.ensureLayout(for: editArea.textContainer)\n        editArea.layoutIfNeeded()\n        \n        self.loadSelectedRange()\n        \n        if let query = self.getSearchText(), query.count > 0 {\n            UIApplication.getVC().enableSearchFocus(string: query)\n            \n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {\n                self.openSearchWithText(query)\n            }\n        }\n    }\n\n    @objc public func clickOnButton() {\n        let vc = UIApplication.getVC()\n        guard let note = self.note else { return }\n\n        vc.notesTable.actionsSheet(notes: [note], showAll: true, presentController: self)\n    }\n    \n    @objc func refill() {\n        guard let editArea = editArea else { return }\n\n        initLinksColor()\n        \n        if let note = self.note {\n            let keyboardIsOpen = editArea.isFirstResponder\n            \n            if keyboardIsOpen {\n                editArea.endEditing(true)\n            }\n\n            fill(note: note)\n\n            if keyboardIsOpen {\n                _ = editArea.becomeFirstResponder()\n            }\n        }\n    }\n    \n    private var keyboardFrameChangeCount = 0\n    \n    @objc func keyboardWillChangeFrame(_ notification: Notification) {\n        keyboardFrameChangeCount += 1\n    }\n\n    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {\n        guard let note = self.note else { return true }\n\n        tagsHandler(affectedCharRange: range, text: text)\n        wikilinkHandler(textView: textView, text: text)\n        deleteUnusedImages(checkRange: range)\n\n        // New line\n        if text == \"\\n\" {\n            let formatter = TextFormatter(textView: self.editArea, note: note)\n            formatter.newLine()\n\n            return false\n        }\n\n        // Tab\n        if text == \"\\t\" {\n            let formatter = TextFormatter(textView: self.editArea, note: note)\n            formatter.tabKey()\n\n            return false\n        }\n\n        if let font = self.editArea.typingFont {\n            editArea.typingAttributes.removeAll()\n            editArea.typingAttributes[.font] = font\n        }\n\n        return true\n    }\n\n    private func tagsHandler(affectedCharRange: NSRange, text: String) {\n        guard UserDefaultsManagement.inlineTags else { return }\n\n        let textStorage = editArea.textStorage\n\n        // close dropdown\n        if [\"\", \" \", \"\\t\", \"\\n\"].contains(text) {\n            if !dropDown.isHidden {\n                dropDown.hide()\n            }\n            return\n        }\n\n        // one char\n        guard text.count == 1 else { return }\n\n        let nextCharLocation = affectedCharRange.location + 1\n        let nextChar: String\n\n        if editArea.selectedRange.length == 0, nextCharLocation <= textStorage.length {\n            let nextCharRange = NSRange(location: affectedCharRange.location, length: 1)\n            nextChar = textStorage.mutableString.substring(with: nextCharRange)\n        } else {\n            nextChar = \" \"\n        }\n\n        if affectedCharRange.location > 0 {\n            let hashRange = NSRange(location: affectedCharRange.location - 1, length: 1)\n            let prevChar = (textStorage.string as NSString).substring(with: hashRange)\n\n            if prevChar == \"#\" && nextChar.isWhitespace {\n                let filteredTags = self.getAllTags().filter { $0.lowercased().starts(with: text.lowercased()) }\n\n                if filteredTags.isEmpty {\n                    dropDown.hide()\n                } else {\n                    dropDown.dataSource = filteredTags\n                    complete(offset: hashRange.location, text: text)\n                }\n                return\n            }\n        }\n\n        let parRange = textStorage.mutableString.paragraphRange(for: NSRange(location: affectedCharRange.location, length: 0))\n        textStorage.mutableString.enumerateSubstrings(in: parRange, options: .byWords) { word, range, _, stop in\n            guard let word = word,\n                  affectedCharRange.location <= range.upperBound,\n                  affectedCharRange.location >= range.lowerBound,\n                  range.location > 0 else {\n                return\n            }\n\n            let hashRange = NSRange(location: range.location - 1, length: 1)\n            let prevChar = (textStorage.string as NSString).substring(with: hashRange)\n\n            if prevChar == \"#\" && nextChar.isWhitespace {\n                let searchText = word + text\n                let filteredTags = self.getAllTags().filter { $0.lowercased().starts(with: searchText.lowercased()) }\n\n                if filteredTags.isEmpty {\n                    self.dropDown.hide()\n                } else {\n                    self.dropDown.dataSource = filteredTags\n                    self.complete(offset: hashRange.location, range: range, text: text)\n                }\n\n                stop.pointee = true\n            }\n        }\n    }\n\n    private func getAllTags() -> [String] {\n        let vc = UIApplication.getVC()\n        var projects = [Project]()\n        if let project = Storage.shared().searchQuery.projects.first {\n            projects.append(project)\n        } else {\n            projects = Storage.shared().getProjects()\n        }\n        let allTags = vc.sidebarTableView.getAllTags(projects: projects)\n\n        return allTags\n    }\n\n    private func wikilinkHandler(textView: UITextView, text: String) {\n        guard text.count == 1, ![\"\\n\"].contains(text) else { return }\n\n        let textStorage = textView.textStorage\n        let location = textView.selectedRange.location\n\n        // Encoded offset for Emoji\n        guard let cursor = textView.cursorDistance else { return }\n\n        let parRange = textStorage.mutableString.paragraphRange(for: NSRange(location: location, length: 0))\n\n        let paragraph = textStorage.attributedSubstring(from: parRange).string\n        guard paragraph.contains(\"[[\") && paragraph.contains(\"]]\"),\n            let result = isBetweenBraces(location: cursor) else { return }\n\n        let word = result.0 + text\n\n        guard let titles = Storage.shared().getTitles(by: word) else {\n            dropDown.hide()\n            return\n        }\n\n        dropDown.dataSource = titles\n\n        let range = result.1\n\n        // Decode multibyte offset for Emoji like \"🇺🇦\"\n        let startIndex = textView.text.index(textView.text.startIndex, offsetBy: range.lowerBound + 2)\n        let startRange = NSRange(startIndex...startIndex, in: textView.text)\n        let replacementRange = NSRange(location: startRange.lowerBound, length: word.count)\n\n        complete(offset: replacementRange.location, replacementRange: replacementRange)\n    }\n\n    private func isBetweenBraces(location: Int) -> (String, NSRange)? {\n        let storage = editArea.textStorage\n        let string = Array(storage.string)\n        let length = storage.length\n\n        var firstLeftFound = false\n        var firstRigthFound = false\n\n        var rigthFound = false\n        var leftFound = false\n\n        var i = location - 1\n        var j = location\n\n        while i >= 0 {\n            let char = string[i]\n            if firstLeftFound {\n                leftFound = char == \"[\"\n                break\n            }\n\n            if char.isNewline {\n                break\n            }\n\n            if char == \"[\" {\n                firstLeftFound = true\n            }\n\n            i -= 1\n        }\n\n        while length > j {\n            let char = string[j]\n            if firstRigthFound {\n                rigthFound = char == \"]\"\n                break\n            }\n\n            if char.isNewline {\n                break\n            }\n\n            if char == \"]\" {\n                firstRigthFound = true\n            }\n\n            j += 1\n        }\n\n        var result = String()\n        if leftFound && rigthFound {\n            result =\n                String(string[i...j])\n\n            result = result\n                .replacingOccurrences(of: \"[[\", with: \"\")\n                .replacingOccurrences(of: \"]]\", with: \"\")\n\n            return (result, NSRange(i...j))\n        }\n\n        return nil\n    }\n\n    private func complete(offset: Int? = nil, range: NSRange? = nil, text: String? = nil, replacementRange: NSRange? = nil) {\n        var endPosition: UITextPosition = editArea.endOfDocument\n\n        if let offset = offset,\n            let position = editArea.position(from: editArea.beginningOfDocument, offset: offset) {\n            endPosition = position\n        }\n\n        let rect = editArea.caretRect(for: endPosition)\n\n        let customView = UIView(frame: CGRect(x: rect.origin.x, y: rect.origin.y + 30, width: 200, height: 0))\n        editArea.addSubview(customView)\n\n        dropDown.cellHeight = 35\n        dropDown.textFont = UIFont.boldSystemFont(ofSize: 15)\n        dropDown.backgroundColor = UIColor.dropDownColor\n        dropDown.textColor = traitCollection.userInterfaceStyle == .dark ? UIColor.white : UIColor.gray\n        dropDown.anchorView = customView\n        dropDown.selectionAction = { [unowned self] (index: Int, item: String) in\n            customView.removeFromSuperview()\n\n            // WikiLinks\n            if let replacementRange = replacementRange {\n                editArea.undoManager?.beginUndoGrouping()\n                self.editArea.selectedRange = replacementRange\n                self.editArea.insertText(item)\n                editArea.undoManager?.endUndoGrouping()\n                return\n            }\n\n            if let range = range, let text = text {\n                let string = self.editArea.textStorage.mutableString.substring(with: range) + text\n\n                let addText = item.replacingOccurrences(of: string, with: \"\")\n                self.editArea.insertText(addText + \" \")\n            } else if text != nil {\n                let addText = String(item.dropFirst())\n\n                self.editArea.insertText(addText + \" \")\n            } else {\n                self.editArea.insertText(item + \" \")\n            }\n        }\n\n        dropDown.show()\n    }\n\n    @objc public func scanTags() {\n        guard UserDefaultsManagement.inlineTags else { return }\n        guard let note = editArea.note else { return }\n\n        UIApplication.getVC().sidebarTableView.loadTags(notes: [note])\n\n        if let title = note.getAutoRenameTitle() {\n            UIApplication.getVC().notesTable.rename(note: note, to: title)\n            \n            UIApplication.getEVC().updateTitle()\n        }\n    }\n\n    private func deleteUnusedImages(checkRange: NSRange) {\n        editArea.textStorage.enumerateAttribute(.attachment, in: checkRange) { (value, range, _) in\n            guard let meta = editArea.textStorage.getMeta(at: range.location) else { return }\n\n            do {\n                if let data = try? Data(contentsOf: meta.url) {\n                    editArea.textStorage.addAttribute(.attachmentSave, value: data, range: range)\n\n                    try FileManager.default.removeItem(at: meta.url)\n                }\n            } catch {\n                print(error)\n            }\n        }\n    }\n\n    private func deleteBackwardPressed(text: String) -> Bool {\n        if !self.isUndo, let char = text.cString(using: String.Encoding.utf8), strcmp(char, \"\\\\b\") == -92 {\n            return true\n        }\n        \n        self.isUndo = false\n        \n        return false\n    }\n\n    func textViewDidChangeSelection(_ textView: UITextView) {\n        if textView.isFirstResponder {\n            // Handoff needs update in cursor position cahnged\n            userActivity?.needsSave = true\n            \n            saveSelectedRange()\n        }\n    }\n    \n    func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        saveSelectedRange()\n    }\n\n    func textViewDidChange(_ textView: UITextView) {\n        let vc = UIApplication.getVC()\n        \n        //vc.cloudDriveManager?.metadataQuery.disableUpdates()\n        \n        guard let note = self.note else { return }\n\n        // Prevent textStorage refresh in CloudDriveManager\n        note.modifiedLocalAt = Date()\n        self.storageQueue.cancelAllOperations()\n\n        let text = self.editArea.attributedText.mutableCopy() as? NSMutableAttributedString\n\n        let operation = BlockOperation()\n        operation.addExecutionBlock { [weak self] in\n            guard let self = self, let text = text else {return}\n\n            note.save(content: text)\n\n            if note.isEncrypted() && !note.isUnlocked() {\n                DispatchQueue.main.async {\n                    self.cancel()\n                }\n\n                return\n            }\n\n            note.invalidateCache()\n            note.loadPreviewInfo()\n\n            vc.updateSpotlightIndex(notes: [note])\n\n            DispatchQueue.main.async {\n                self.rowUpdaterTimer.invalidate()\n                self.rowUpdaterTimer = Timer.scheduledTimer(timeInterval: 1.2, target: self, selector: #selector(self.updateCurrentRow), userInfo: nil, repeats: false)\n\n                self.tagsTimer?.invalidate()\n                self.tagsTimer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: #selector(self.scanTags), userInfo: nil, repeats: false)\n            }\n\n            usleep(100000)\n        }\n        self.storageQueue.addOperation(operation)\n\n        editArea.typingAttributes.removeValue(forKey: .backgroundColor)\n        editArea.typingAttributes[.font] = UserDefaultsManagement.noteFont\n        editArea.initUndoRedoButons()\n        \n        //vc.cloudDriveManager?.metadataQuery.enableUpdates()\n    }\n\n    @objc private func updateCurrentRow() {\n        let vc = UIApplication.getVC()\n        guard let note = self.note else { return }\n\n        vc.notesTable.moveRowUp(note: note)\n        vc.notesTable.reloadRows(notes: [note])\n    }\n    \n    func getSearchText() -> String? {\n        if let search = UIApplication.getVC().navigationItem.searchController?.searchBar.text {\n            return search\n        }\n\n        return nil\n    }\n\n    @objc func keyboardWillShow(notification: NSNotification) {\n        keyboardFrameChangeCount = 0\n        \n        guard let userInfo = notification.userInfo else { return }\n        guard var keyboardFrame: CGRect = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }\n        keyboardFrame = view.convert(keyboardFrame, from: nil)\n        \n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.alignment = .left\n        paragraphStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        self.editArea.typingAttributes[.paragraphStyle] = paragraphStyle\n        self.editArea.typingAttributes.removeValue(forKey: .link)\n\n        let keyboardHeight = keyboardFrame.height\n        let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardHeight - 66, right: 0.0)\n        self.editArea.contentInset = contentInsets\n        self.editArea.scrollIndicatorInsets = contentInsets\n    }\n    \n    @objc func keyboardWillHide(notification: NSNotification) {\n        let contentInsets = UIEdgeInsets.zero\n        editArea.contentInset = contentInsets\n        editArea.scrollIndicatorInsets = contentInsets\n        \n        if isKeyboardClosedManually() {\n            \n            // NO selection more\n            saveSelectedRangeZero()\n        }\n        \n        if searchBar != nil {\n            hideSearch()\n        }\n    }\n    \n    func isKeyboardClosedManually() -> Bool {\n        return keyboardFrameChangeCount > 2\n    }\n\n    func addToolBar(textField: UITextView, toolbar: UIToolbar) {\n        let scroll = UIScrollView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))\n        scroll.showsHorizontalScrollIndicator = false\n        scroll.contentSize = CGSize(width: toolbar.frame.width, height: 50)\n        scroll.addSubview(toolbar)\n        toolbar.frame.origin = .zero\n        textField.inputAccessoryView = scroll\n    }\n\n    public func getMarkdownToolbar() -> UIToolbar {\n        if #available(iOS 26.0, *) {\n            return getModernToolbar()\n        } else {\n            return getLegacyToolbar()\n        }\n    }\n    \n    public func getModernToolbar() -> UIToolbar {\n        var items = [UIBarButtonItem]()\n\n        let todoButton = UIBarButtonItem(systemImageName: \"checkmark.square\", target: self, selector: #selector(EditorViewController.todoPressed))\n        items.append(todoButton)\n\n        if UserDefaultsManagement.inlineTags {\n            let tagButton = UIBarButtonItem(systemImageName: \"tag\", target: self, selector: #selector(EditorViewController.tagPressed))\n            items.append(tagButton)\n        }\n\n        let boldButton = UIBarButtonItem(systemImageName: \"bold\", target: self, selector: #selector(EditorViewController.boldPressed))\n        items.append(boldButton)\n\n        let italicButton = UIBarButtonItem(systemImageName: \"italic\", target: self, selector: #selector(EditorViewController.italicPressed))\n        italicButton.tag = 0x03\n        items.append(italicButton)\n\n        let headerButton = UIBarButtonItem(systemImageName: \"textformat\", target: self, selector: #selector(EditorViewController.headerPressed))\n        items.append(headerButton)\n\n        let wikiButton = UIBarButtonItem(systemImageName: \"link\", target: self, selector: #selector(EditorViewController.wikilink))\n        items.append(wikiButton)\n\n        let imageButton = UIBarButtonItem(systemImageName: \"paperclip\", target: self, selector: #selector(EditorViewController.insertFile))\n        items.append(imageButton)\n\n        let codeblockButton = UIBarButtonItem(systemImageName: \"swift\", target: self, selector: #selector(EditorViewController.codeBlockButton))\n        items.append(codeblockButton)\n\n        let quoteButton = UIBarButtonItem(systemImageName: \"quote.bubble\", target: self, selector: #selector(EditorViewController.quotePressed))\n        items.append(quoteButton)\n\n        let orderedListButton = UIBarButtonItem(systemImageName: \"list.bullet\", target: self, selector: #selector(EditorViewController.orderedListPressed))\n        items.append(orderedListButton)\n\n        let numberedListButton = UIBarButtonItem(systemImageName: \"list.number\", target: self, selector: #selector(EditorViewController.numberedListPressed))\n        items.append(numberedListButton)\n\n        let indentButton = UIBarButtonItem(systemImageName: \"increase.indent\", target: self, selector: #selector(EditorViewController.indentPressed))\n        items.append(indentButton)\n\n        let unindentButton = UIBarButtonItem(systemImageName: \"decrease.indent\", target: self, selector: #selector(EditorViewController.unIndentPressed))\n        items.append(unindentButton)\n\n        self.undoBarButton = UIBarButtonItem(systemImageName: \"arrow.uturn.backward\", target: self, selector: #selector(EditorViewController.undoPressed))\n        items.append(self.undoBarButton!)\n\n        self.redoBarButton = UIBarButtonItem(systemImageName: \"arrow.uturn.forward\", target: self, selector: #selector(EditorViewController.redoPressed))\n        items.append(self.redoBarButton!)\n\n        var totalWidth: CGFloat = 0\n        for item in items {\n            if item.tag == 0x03 {\n                item.width = 30\n                totalWidth += 30\n            } else {\n                item.width = 54\n                totalWidth += 54\n            }\n        }\n\n        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: totalWidth, height: 50))\n        toolBar.setItems(items, animated: false)\n        toolBar.isUserInteractionEnabled = true\n\n        let appearance = UIToolbarAppearance()\n        appearance.configureWithOpaqueBackground()\n        appearance.backgroundColor = .darkGray\n        appearance.shadowColor = .clear\n        toolBar.standardAppearance = appearance\n        toolBar.scrollEdgeAppearance = appearance\n\n        return toolBar\n    }\n    \n    private func getLegacyToolbar() -> UIToolbar {\n        var items = [UIBarButtonItem]()\n\n        let todoImage = UIImage(named: \"toolbarTodo\")?.resize(maxWidthHeight: 27)\n        let todoButton = UIBarButtonItem(image: todoImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.todoPressed))\n        items.append(todoButton)\n\n        if UserDefaultsManagement.inlineTags {\n            let tagImage = UIImage(named: \"toolbarTag\")?.resize(maxWidthHeight: 25)\n            let tagButton = UIBarButtonItem(image: tagImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.tagPressed))\n            items.append(tagButton)\n        }\n\n        let boldImage = UIImage(named: \"toolbarBold\")?.resize(maxWidthHeight: 21)\n        let boldButton = UIBarButtonItem(image: boldImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.boldPressed))\n        items.append(boldButton)\n\n        let italicImage = UIImage(named: \"toolbarItalic\")?.resize(maxWidthHeight: 18)\n        let italicButton = UIBarButtonItem(image: italicImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.italicPressed))\n        italicButton.tag = 0x03\n        items.append(italicButton)\n\n        let headerImage = UIImage(named: \"toolbarHeader\")?.resize(maxWidthHeight: 22)\n        let headerButton = UIBarButtonItem(image: headerImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.headerPressed))\n        items.append(headerButton)\n\n        let wikiImage = UIImage(named: \"toolbarWiki\")?.resize(maxWidthHeight: 25)\n        let wikiButton = UIBarButtonItem(image: wikiImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.wikilink))\n        items.append(wikiButton)\n\n        let toolbarImage = UIImage(named: \"toolbarImage\")?.resize(maxWidthHeight: 26)\n        let imageButton = UIBarButtonItem(image: toolbarImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.insertFile))\n        items.append(imageButton)\n\n        let codeBlockImage = UIImage(named: \"codeBlockAsset\")?.resize(maxWidthHeight: 24)\n        let codeblockButton = UIBarButtonItem(image: codeBlockImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.codeBlockButton))\n        items.append(codeblockButton)\n\n        let quoteImage = UIImage(named: \"quote\")?.resize(maxWidthHeight: 21)\n        let quoteButton = UIBarButtonItem(image: quoteImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.quotePressed))\n        items.append(quoteButton)\n\n        let orderedListImage = UIImage(named: \"ordered_list\")?.resize(maxWidthHeight: 25)\n        let orderedListButton = UIBarButtonItem(image: orderedListImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.orderedListPressed))\n        items.append(orderedListButton)\n\n        let numberedListImage = UIImage(named: \"numbered_list\")?.resize(maxWidthHeight: 25)\n        let numberedListButton = UIBarButtonItem(image: numberedListImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.numberedListPressed))\n        items.append(numberedListButton)\n\n        let indentRightImage = UIImage(named: \"toolbarIndentRight\")?.resize(maxWidthHeight: 25)\n        let indentButton = UIBarButtonItem(image: indentRightImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.indentPressed))\n        items.append(indentButton)\n\n        let indentLeftImage = UIImage(named: \"toolbarIndentLeft\")?.resize(maxWidthHeight: 25)\n        let unindentButton = UIBarButtonItem(image: indentLeftImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.unIndentPressed))\n        items.append(unindentButton)\n\n        let undoImage = UIImage(named: \"undo\")?.resize(maxWidthHeight: 25)\n        let undoButton = UIBarButtonItem(image: undoImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.undoPressed))\n        items.append(undoButton)\n\n        let redoImage = UIImage(named: \"redo\")?.resize(maxWidthHeight: 25)\n        let redoButton = UIBarButtonItem(image: redoImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(EditorViewController.redoPressed))\n        items.append(redoButton)\n\n        var width = CGFloat(0)\n        for item in items {\n            if item.tag == 0x03 {\n                item.width = 30\n                width += 30\n            } else {\n                item.width = 50\n                width += 50\n            }\n        }\n\n        let toolBar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: width, height: 50))\n        toolBar.backgroundColor = .darkGray\n        toolBar.isTranslucent = false\n        toolBar.tintColor = UIColor.mainTheme\n        toolBar.setItems(items, animated: false)\n        toolBar.isUserInteractionEnabled = true\n\n        return toolBar\n    }\n\n\n    @objc func boldPressed(){\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.bold()\n        }\n    }\n\n    @objc func tagPressed(){\n        editArea.insertText(\"#\")\n\n        let location = editArea.selectedRange.location\n\n        let vc = UIApplication.getVC()\n        \n        var projects = [Project]()\n        if let project = Storage.shared().searchQuery.projects.first {\n            projects.append(project)\n        } else {\n            projects = Storage.shared().getProjects()\n        }\n        \n        let tags = vc.sidebarTableView.getAllTags(projects: projects)\n        self.dropDown.dataSource = tags\n\n        self.complete(offset: location)\n    }\n    \n    @objc func italicPressed(){\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.italic()\n        }\n    }\n\n    @objc func strikePressed(){\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.strike()\n        }\n    }\n\n    @objc func underlinePressed(){\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.underline()\n        }\n    }\n\n    @objc func indentPressed(){\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.tab()\n        }\n    }\n    \n    @objc func unIndentPressed(){\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.unTab()\n        }\n    }\n    \n    @objc func headerPressed() {\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.header(\"#\")\n        }\n    }\n\n    @objc func wikilink() {\n        guard let note = note else { return }\n\n        let formatter = TextFormatter(textView: editArea, note: note)\n        formatter.wikiLink()\n\n        guard let titles = Storage.shared().getTitles() else { return }\n\n        self.dropDown.dataSource = titles\n        self.complete(offset: editArea.selectedRange.location, replacementRange: editArea.selectedRange)\n    }\n\n    @objc func codeBlockButton() {\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.codeBlock()\n        }\n    }\n\n    @objc func quotePressed() {\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.quote()\n\n            AudioServicesPlaySystemSound(1519)\n        }\n    }\n    \n    @objc func todoPressed() {\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.todo()\n            \n            AudioServicesPlaySystemSound(1519)\n        }\n    }\n\n    @objc func orderedListPressed() {\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.list()\n\n            AudioServicesPlaySystemSound(1519)\n        }\n    }\n\n    @objc func numberedListPressed() {\n        if let note = note {\n            let formatter = TextFormatter(textView: editArea, note: note)\n            formatter.orderedList()\n\n            AudioServicesPlaySystemSound(1519)\n        }\n    }\n\n    @objc func insertFile() {\n        let actionSheet = UIAlertController(title: NSLocalizedString(\"Images source:\", comment: \"\"), message: nil, preferredStyle: .actionSheet)\n\n        let photos = UIAlertAction(title: NSLocalizedString(\"Photos\", comment: \"\"), style: .default, handler: { _ in\n            var conf = PHPickerConfiguration(photoLibrary: .shared())\n            conf.selectionLimit = 10\n\n            let picker = PHPickerViewController(configuration: conf)\n            picker.delegate = self\n\n            self.present(picker, animated: true, completion: nil)\n        })\n        actionSheet.addAction(photos)\n\n        let iCloudDrive = UIAlertAction(title: NSLocalizedString(\"Documents\", comment: \"\"), style: .default, handler: { _ in\n\n            let documentPickerController = UIDocumentPickerViewController(forOpeningContentTypes: [.data], asCopy: true)\n            documentPickerController.delegate = self\n            documentPickerController.allowsMultipleSelection = true\n            documentPickerController.modalPresentationStyle = .formSheet\n\n            self.present(documentPickerController, animated: true, completion: nil)\n        })\n\n        actionSheet.addAction(iCloudDrive)\n\n        let cancel = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .destructive, handler: { _ in\n        })\n\n        actionSheet.addAction(cancel)\n\n        if let view = self.editArea.superview {\n            actionSheet.popoverPresentationController?.sourceView = view\n            actionSheet.popoverPresentationController?.sourceRect = CGRect(x: view.bounds.size.width / 2.0, y: view.bounds.size.height, width: 2.0, height: 1.0)\n        }\n\n        present(actionSheet, animated: true, completion: nil)\n    }\n\n    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {\n        for url in urls {\n            guard let data = try? Data(contentsOf: url),\n                  let mutable = NSMutableAttributedString.build(data: data, preferredName: url.lastPathComponent) else { continue }\n\n            DispatchQueue.main.async {\n                self.editArea.insertAttributedText(mutable)\n            }\n        }\n    }\n    \n    @objc func themeObserver() {\n        guard\n            UIApplication.shared.applicationState == .active,\n            let style = UIApplication.shared\n                .connectedScenes\n                .compactMap({ $0 as? UIWindowScene })\n                .first?\n                .traitCollection\n                .userInterfaceStyle\n        else { return }\n\n        guard style != lastStyle else { return }\n        lastStyle = style\n\n        NotesTextProcessor.hl = nil\n        UIApplication.getEVC().refill()\n    }\n\n    @objc func preferredContentSizeChanged() {\n        if let n = note {\n            self.fill(note: n)\n        }\n    }\n    \n    @objc func undoPressed() {\n        guard let ea = UIApplication.getEVC().editArea, let um = ea.undoManager else { return }\n        um.undo()\n        ea.initUndoRedoButons()\n    }\n    \n    @objc func redoPressed() {\n        guard let ea = UIApplication.getEVC().editArea, let um = ea.undoManager else { return }\n        um.redo()\n        ea.initUndoRedoButons()\n    }\n\n    func initLinksColor() {\n        var linkAttributes: [NSAttributedString.Key : Any] = [\n            .foregroundColor: UIColor.linksColor\n        ]\n\n        linkAttributes[.underlineColor] = UIColor.lightGray\n        linkAttributes[.underlineStyle] = 0\n        \n        if editArea != nil {\n            editArea.linkTextAttributes = linkAttributes\n        }\n    }\n\n    @objc private func tapHandler(_ sender: SingleTouchDownGestureRecognizer) {\n        let myTextView = sender.view as! EditTextView\n        guard let characterIndex = sender.touchCharIndex else { return}\n        let char = myTextView.textStorage.mutableString.substring(with: NSRange(location: characterIndex, length: 1))\n\n        // Toggle todo on click\n        if characterIndex + 1 < myTextView.textStorage.length, char != \"\\n\", self.isTodo(location: characterIndex, textView: myTextView), let note = self.note {\n\n            let textFormatter = TextFormatter(textView: self.editArea!, note: note)\n            textFormatter.toggleTodo(characterIndex)\n\n            self.editArea.selectedTextRange = sender.selectedRange\n            \n            Timer.scheduledTimer(withTimeInterval: 0.05, repeats: false) { _ in\n                self.editArea.isAllowedScrollRect = true\n            }\n\n            AudioServicesPlaySystemSound(1519)\n            return\n        }\n\n        // Image preview/selection on click\n        if self.editArea.isImage(at: characterIndex) {\n            guard let meta = myTextView.textStorage.getMeta(at: characterIndex) else { return }\n\n            if let data = try? Data(contentsOf: meta.url), let someImage = UIImage(data: data) {\n                let storyBoard: UIStoryboard = UIStoryboard(name: \"Main\", bundle:nil)\n                let imagePreviewViewController = storyBoard.instantiateViewController(withIdentifier: \"imagePreviewViewController\") as! ImagePreviewViewController\n\n                imagePreviewViewController.image = someImage\n                imagePreviewViewController.url = meta.url\n                imagePreviewViewController.note = note\n                \n                navigationController?.pushViewController(imagePreviewViewController, animated: true)\n            } else if (FileManager.default.fileExists(atPath: meta.url.path)) {\n                quickLook(url: meta.url)\n            }\n\n            return\n        }\n\n        // Links\n        if self.editArea.isLink(at: characterIndex) {\n            guard let path = self.editArea.textStorage.attribute(.link, at: characterIndex, effectiveRange: nil) as? String else { return }\n\n            if path.starts(with: \"fsnotes://find?id=\") {\n                openWikiLink(query: path)\n                return\n            }\n\n            if path.starts(with: \"fsnotes://open/?tag=\") {\n                if let url = URL(string: path) {\n                    UIApplication.shared.open(url, options: [:])\n                }\n                return\n            }\n\n            if self.editArea.isFirstResponder {\n                DispatchQueue.main.async {\n                    self.editArea.selectedRange = NSRange(location: characterIndex, length: 0)\n                }\n\n                return\n            }\n\n            if let url = URL(string: path) {\n                UIApplication.shared.open(url, options: [:], completionHandler: nil)\n            }\n        }\n    }\n\n    public func openWikiLink(query: String) {\n        guard let query = query\n            .replacingOccurrences(of: \"fsnotes://find?id=\", with: \"\")\n            .removingPercentEncoding else { return }\n\n        guard let note = note else { return }\n\n        if let note = Storage.instance?.getBy(title: query, exclude: note) {\n            fill(note: note)\n        } else if let note = Storage.instance?.getBy(fileName: query, exclude: note) {\n            fill(note: note)\n        } else {\n            let vc = UIApplication.getVC()\n\n            navigationController?.popViewController(animated: true)\n\n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {\n                vc.shouldReturnToControllerIndex = true\n                vc.loadSearchController(query: query)\n                vc.buildSearchQuery()\n                vc.reloadNotesTable()\n            }\n        }\n    }\n\n    @objc private func imageTapHandler(_ sender: SingleImageTouchDownGestureRecognizer) {\n        guard let view = sender.view as? UITextView else { return }\n\n        let layoutManager = view.layoutManager\n        let location = sender.location(in: view)\n\n        var characterIndex = layoutManager.characterIndex(for: location, in: view.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)\n\n        DispatchQueue.main.async {\n            view.becomeFirstResponder()\n\n            if sender.isRightBorderTap {\n                characterIndex += 1\n            }\n\n            view.selectedRange = NSRange(location: characterIndex, length: 0)\n        }\n    }\n\n    private func isTodo(location: Int, textView: UITextView) -> Bool {\n        let storage = textView.textStorage\n\n        if storage.attribute(.todo, at: location, effectiveRange: nil) != nil {\n            return true\n        }\n        \n        let range = (storage.string as NSString).paragraphRange(for: NSRange(location: location, length: 0))\n        let string = storage.attributedSubstring(from: range).string as NSString\n        \n        var length = string.range(of: \"- [ ]\").length\n        if length == 0 {\n            length = string.range(of: \"- [x]\").length\n        }\n        \n        if length > 0 {\n            let upper = range.location + length\n            if location >= range.location && location <= upper {\n                return true\n            }\n        }\n        \n        return false\n    }\n\n    public func getMoreButton() -> UIBarButtonItem {\n        let config = UIImage.SymbolConfiguration(pointSize: 23, weight: .light, scale: .default)\n        let image = UIImage(systemName: \"ellipsis.circle\", withConfiguration: config)\n        let menuBarItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(clickOnButton))\n        menuBarItem.tintColor = UIColor.mainTheme\n\n        return menuBarItem\n    }\n\n    @IBAction func editMode() {\n        if editArea.note?.previewState == true {\n            togglePreview()\n\n            _ = editArea.becomeFirstResponder()\n        }\n    }\n\n    public func getPreviewView() -> MPreviewView? {\n        for sub in self.view.subviews {\n            if sub.isKind(of: MPreviewView.self) {\n                if let view = sub as? MPreviewView {\n                    return view\n                }\n            }\n        }\n\n        return nil\n    }\n\n    @objc public func cancel() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    @objc public func togglePreview() {\n        guard let unwrappedNote = self.note, let note = Storage.shared().getBy(url: unwrappedNote.url) else { return }\n        \n        note.loadPreviewState()\n        \n        if note.previewState {\n            note.previewState = false\n            getPreviewView()?.removeFromSuperview()\n            fillEditor(note: note)\n\n        } else {\n            note.previewState = true\n            editArea.endEditing(true)\n            loadPreviewView()\n        }\n\n        let buttonName = note.previewState ? \"eye.slash\" : \"eye\"\n\n        if let buttonBar = navigationItem.rightBarButtonItems?.first(where: { $0.tag == 5 }),\n           let button = buttonBar.customView as? UIButton {\n\n            let config = UIImage.SymbolConfiguration(pointSize: 20, weight: .light, scale: .default)\n            let image = UIImage(systemName: buttonName, withConfiguration: config)?.imageWithColor(color1: UIColor.mainTheme)\n            button.setImage(image, for: .normal)\n        }\n\n        // Handoff needs update in cursor position changed\n        userActivity?.needsSave = true\n\n        note.project.saveNotesPreview()\n    }\n\n    public func loadPreviewView() {\n        guard let note = editArea.note else { return }\n\n        var previewView: MPreviewView?\n        previewView = getPreviewView()\n\n        if previewView == nil {\n            let newView = MPreviewView(frame: self.view.frame, note: note, closure: {})\n            newView.backgroundColor = UIColor.dropDownColor\n            view.addSubview(newView)\n\n            newView.translatesAutoresizingMaskIntoConstraints = false\n            view.leadingAnchor.constraint(equalTo: newView.leadingAnchor).isActive = true\n            view.trailingAnchor.constraint(equalTo: newView.trailingAnchor).isActive = true\n            view.topAnchor.constraint(equalTo: newView.topAnchor).isActive = true\n            view.bottomAnchor.constraint(equalTo: newView.bottomAnchor).isActive = true\n        }\n\n        guard let previewView = previewView else { return }\n\n        previewView.clean()\n        previewView.load(note: note, force: true)\n    }\n\n    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {\n\n        if URL.absoluteString.starts(with: \"fsnotes://find?id=\") {\n            if interaction == .invokeDefaultAction {\n                openWikiLink(query: URL.absoluteString)\n            }\n            return false\n        }\n\n        if URL.absoluteString.starts(with: \"fsnotes://open/?tag=\") {\n            if interaction == .invokeDefaultAction {\n                UIApplication.shared.open(URL, options: [:])\n            }\n//            if textView.isFirstResponder {\n//                UIApplication.shared.open(URL, options: [:])\n//            }\n\n            return false\n        }\n\n        if textView.isFirstResponder {\n            DispatchQueue.main.async {\n                textView.selectedRange = NSRange(location: characterRange.upperBound, length: 0)\n            }\n\n            if interaction == .presentActions {\n                let pathKey = NSAttributedString.Key(rawValue: \"co.fluder.fsnotes.image.path\")\n                if nil != textView.textStorage.attribute(pathKey, at: characterRange.location, effectiveRange: nil) {\n                    return false\n                }\n\n                return true\n            }\n\n            return false\n        }\n\n        // Skip images (fixes glitch bug)\n        let pathKey = NSAttributedString.Key(rawValue: \"co.fluder.fsnotes.image.path\")\n        let attr = textView.textStorage.attribute(pathKey, at: characterRange.location, effectiveRange: nil)\n\n        if attr != nil && !textView.isFirstResponder {\n            return false\n        }\n\n        return true\n    }\n\n    func textView(_ textView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {\n        return false\n    }\n\n    func textViewDidEndEditing(_ textView: UITextView) {\n        editArea.keyboardIsOpened = true\n        editArea.callCounter = 0\n    }\n\n    /*\n     Handoff methods\n     */\n    public func registerHandoff(for note: Note) {\n        let updateDict:  [String: String] = [\"note-file-name\": note.name]\n        let activity = NSUserActivity(activityType: \"es.fsnot.handoff-open-note\")\n        activity.isEligibleForHandoff = true\n        activity.addUserInfoEntries(from: updateDict)\n        activity.title = NSLocalizedString(\"Open Note\", comment: \"Document opened\")\n        self.userActivity = activity\n        self.userActivity?.becomeCurrent()\n    }\n\n    public func load(note: Note) {\n        let evc = UIApplication.getEVC()\n        evc.editArea.resignFirstResponder()\n        evc.fill(note: note, clearPreview: true, enableHandoff: false) {\n            UIApplication.getVC().openEditorViewController()\n        }\n    }\n\n    override func restoreUserActivityState(_ activity: NSUserActivity) {\n        if let id = activity.userInfo?[\"kCSSearchableItemActivityIdentifier\"] as? String {\n            let url = URL(fileURLWithPath: id)\n            \n            var note = Storage.shared().getBy(url: url)\n            if nil === note {\n                note = Storage.shared().addNote(url: url)\n            }\n            \n            if let note = note {\n                load(note: note)\n            }\n            \n            return\n        }\n\n        guard let name = activity.userInfo?[\"note-file-name\"] as? String,\n            let position = activity.userInfo?[\"position\"] as? String,\n            let note = Storage.shared().getBy(name: name)\n        else { return }\n\n        let evc = UIApplication.getEVC()\n        evc.editArea.resignFirstResponder()\n\n        evc.fill(note: note, clearPreview: true, enableHandoff: false) {\n            UIApplication.getVC().openEditorViewController()\n\n            if let pos = Int(position), pos > -1, evc.editArea.textStorage.length >= pos {\n                evc.editArea.becomeFirstResponder()\n                evc.editArea.selectedRange = NSRange(location: pos, length: 0)\n            }\n        }\n    }\n\n    override func updateUserActivityState(_ activity: NSUserActivity) {\n        guard let note = editArea.note else { return }\n\n        let position =\n            editArea.isFirstResponder ? editArea.selectedRange.location : -1\n        let state = note.previewState ? \"preview\" : \"editor\"\n        let data =\n            [\n                \"note-file-name\": note.name,\n                \"position\": String(position),\n                \"state\": state\n            ]\n\n        activity.addUserInfoEntries(from: data)\n    }\n\n    @available(iOS 14, *)\n    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {\n        picker.dismiss(animated: true, completion: nil)\n\n        for result in results {\n            result.itemProvider.loadObject(ofClass: UIImage.self, completionHandler: { (object, error) in\n                guard let photo = object as? UIImage, let imageData = photo.jpgData else { return }\n\n                let attachment = NSTextAttachment()\n                let mutable = NSMutableAttributedString(attachment: attachment)\n                mutable.addAttributes([\n                    .attachmentSave: imageData,\n                    .attachmentUrl: URL(fileURLWithPath: \"/tmp/\" + UUID().uuidString + \".jpg\"),\n                    .attachmentPath: String()\n                ], range: NSRange(location: 0, length: 1))\n\n                mutable.append(NSAttributedString(string: \"\\n\\n\"))\n\n                DispatchQueue.main.async {\n                    self.editArea.insertAttributedText(mutable)\n                }\n            })\n        }\n    }\n\n    // Swipe controller from UITextView center\n    // https://stackoverflow.com/questions/22244688/navigation-pop-view-when-swipe-right-like-instagram-iphone-app-how-i-achieve-thi/22244990#22244990\n    \n    public func initSwipes() {\n        guard let popGestureRecognizer = self.navigationController?.interactivePopGestureRecognizer else { return }\n        if let targets = popGestureRecognizer.value(forKey: \"targets\") as? NSMutableArray {\n            let gestureRecognizer = UIPanGestureRecognizer()\n            gestureRecognizer.setValue(targets, forKey: \"targets\")\n            self.view.gestureRecognizers?.removeAll()\n            self.view.addGestureRecognizer(gestureRecognizer)\n\n            let tapGR = UITapGestureRecognizer(target: self, action: #selector(editMode))\n            tapGR.delegate = self\n            tapGR.numberOfTapsRequired = 2\n            self.view.addGestureRecognizer(tapGR)\n        }\n    }\n    \n    func saveSelectedRangeZero() {\n        guard let note = editArea.note, !editArea.isNoteLoading else { return }\n        note.setSelectedRange(range: nil)\n        saveScrollPosition()\n    }\n\n    func saveScrollPosition() {\n        guard !editArea.isUpdating else { return }\n        guard let note = editArea.note, !editArea.isNoteLoading else { return }\n        \n        let layoutManager = editArea.layoutManager\n        let textStorage = editArea.textStorage\n        let visibleY = editArea.contentOffset.y\n        \n        guard textStorage.length > 0 else {\n            note.scrollPosition = 0\n            note.scrollOffset = 0\n            return\n        }\n        \n        let glyphRange = layoutManager.glyphRange(\n            forBoundingRect: CGRect(x: 0, y: visibleY, width: editArea.bounds.width, height: 1),\n            in: editArea.textContainer\n        )\n        \n        guard glyphRange.location != NSNotFound else {\n            note.scrollPosition = 0\n            note.scrollOffset = 0\n            return\n        }\n        \n        let numberOfGlyphs = layoutManager.numberOfGlyphs\n        guard glyphRange.location < numberOfGlyphs else {\n            note.scrollPosition = 0\n            note.scrollOffset = 0\n            return\n        }\n        \n        let charIndex = layoutManager.characterIndexForGlyph(at: glyphRange.location)\n        \n        guard charIndex < textStorage.length else {\n            note.scrollPosition = 0\n            note.scrollOffset = 0\n            return\n        }\n        \n        let glyphRect = layoutManager.boundingRect(\n            forGlyphRange: NSRange(location: glyphRange.location, length: 1),\n            in: editArea.textContainer\n        )\n        \n        note.scrollPosition = charIndex\n        note.scrollOffset = visibleY - glyphRect.minY\n    }\n\n    func saveSelectedRange() {\n        guard let note = editArea.note, !editArea.isNoteLoading else { return }\n        note.setSelectedRange(range: editArea.isFirstResponder ? editArea.selectedRange : nil)\n        saveScrollPosition()\n    }\n\n    func loadSelectedRange() {\n        guard let note = editArea.note else { return }\n        \n        if let range = note.getSelectedRange(), range.upperBound <= editArea.textStorage.length {\n            editArea.selectedRange = range\n            _ = editArea.becomeFirstResponder()\n        }\n        \n        DispatchQueue.main.async { [weak self] in\n            guard let self = self else { return }\n            \n            if let index = note.scrollPosition, index < self.editArea.textStorage.length {\n                let layoutManager = self.editArea.layoutManager\n                let glyphIndex = layoutManager.glyphIndexForCharacter(at: index)\n                let glyphRect = layoutManager.boundingRect(\n                    forGlyphRange: NSRange(location: glyphIndex, length: 1),\n                    in: self.editArea.textContainer\n                )\n                \n                let targetY = glyphRect.minY + (note.scrollOffset ?? 0)\n                let maxY = max(0, self.editArea.contentSize.height - self.editArea.bounds.height)\n                let finalY = min(max(0, targetY), maxY)\n                \n                self.editArea.contentOffset = CGPoint(x: 0, y: finalY)\n            } else {\n                self.editArea.contentOffset = .zero\n            }\n            \n            self.editArea.isNoteLoading = false\n        }\n    }\n        \n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UIApplication+.swift",
    "content": "//\n//  UIApplication.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/21/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension UIApplication {\n\n    // MARK: - Scene Delegate Access\n\n    static func getSceneDelegate() -> SceneDelegate? {\n        guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,\n              let sceneDelegate = windowScene.delegate as? SceneDelegate else {\n            return nil\n        }\n        return sceneDelegate\n    }\n\n    // MARK: - View Controllers Access\n\n    static func getVC() -> ViewController {\n        guard let sceneDelegate = getSceneDelegate() else {\n            fatalError(\"SceneDelegate not found\")\n        }\n        return sceneDelegate.listController\n    }\n\n    static func getEVC() -> EditorViewController {\n        guard let sceneDelegate = getSceneDelegate() else {\n            fatalError(\"SceneDelegate not found\")\n        }\n        return sceneDelegate.editorController\n    }\n\n    static func getNC() -> MainNavigationController? {\n        guard let sceneDelegate = getSceneDelegate() else {\n            return nil\n        }\n        return sceneDelegate.mainController\n    }\n\n    // MARK: - App Delegate Access\n\n    static func getDelegate() -> AppDelegate {\n        return UIApplication.shared.delegate as! AppDelegate\n    }\n\n    // MARK: - Window Access (Optional Helper)\n\n    static func getWindow() -> UIWindow? {\n        return getSceneDelegate()?.window\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UIBarButtonItem+.swift",
    "content": "//\n//  UIBarButton+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.11.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension UIBarButtonItem {\n    convenience init(systemImageName: String, target: Any, selector: Selector) {\n        let config = UIImage.SymbolConfiguration(pointSize: 20, weight: .light, scale: .default)\n        let image = UIImage(systemName: systemImageName, withConfiguration: config)?.imageWithColor(color1: UIColor.mainTheme)\n\n        let button = UIButton(type: .system)\n        button.setImage(image, for: .normal)\n        button.tintColor = .mainTheme\n        button.addTarget(target, action: selector, for: .touchUpInside)\n\n        self.init(customView: button)\n    }\n\n    convenience init(systemImageName: String, menu: UIMenu) {\n        let config = UIImage.SymbolConfiguration(pointSize: 20, weight: .light)\n        let image = UIImage(systemName: systemImageName, withConfiguration: config)?\n            .imageWithColor(color1: .mainTheme)\n\n        let button = UIButton(type: .system)\n        button.setImage(image, for: .normal)\n        button.tintColor = .mainTheme\n        button.menu = menu\n        button.showsMenuAsPrimaryAction = true\n        button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)\n\n        self.init(customView: button)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UIColor+.swift",
    "content": "//\n//  UIColor+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 12.05.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension UIColor {\n    public static let mainTheme = UIColor(red: 0.08, green: 0.60, blue: 0.85, alpha: 1.00)\n\n    public static var previewColor: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.85, green: 0.87, blue: 0.90, alpha: 1.00) :\n                UIColor(red: 0.50, green: 0.56, blue: 0.65, alpha: 1.00)\n        }\n    }\n\n    public static var sidebar: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.11, green: 0.11, blue: 0.11, alpha: 1.00) :\n                UIColor(red: 0.97, green: 0.97, blue: 0.97, alpha: 1.00)\n        }\n    }\n\n    public static var currentSidebarCell: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.41, green: 0.39, blue: 0.45, alpha: 1.00) :\n                UIColor(red: 0.81, green: 0.87, blue: 0.95, alpha: 1.00)\n        }\n    }\n\n    public static var codeBackground: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.27, green: 0.27, blue: 0.27, alpha: 1.00) :\n                UIColor(red: 0.94, green: 0.95, blue: 0.95, alpha: 1.00)\n        }\n    }\n\n    public static var whiteBlack: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 1.00) :\n                UIColor(red: 1.00, green: 1.00, blue: 1.00, alpha: 1.00)\n        }\n    }\n\n    // Black for normal, white for dark\n    public static var blackWhite: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 1.00, green: 1.00, blue: 1.00, alpha: 1.00) :\n                UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 1.00)\n        }\n    }\n\n    public static var toolbarTint: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.49, green: 0.92, blue: 0.63, alpha: 1.00) :\n                UIColor(red: 0.30, green: 0.55, blue: 0.90, alpha: 1.00)\n        }\n    }\n\n    public static var toolbarBorder: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.22, green: 0.22, blue: 0.22, alpha: 1.00) :\n                UIColor(red: 0.84, green: 0.84, blue: 0.87, alpha: 1.00)\n        }\n    }\n\n    public static var dropDownColor: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 1.00) :\n                UIColor(red: 0.98, green: 0.98, blue: 0.98, alpha: 1.00)\n        }\n    }\n\n    public static var wikiColor: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.00, green: 0.45, blue: 0.15, alpha: 1.00) :\n                UIColor(red: 0.29, green: 0.35, blue: 0.60, alpha: 1.00)\n        }\n    }\n\n    public static var highlightColor: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.20, green: 0.55, blue: 0.07, alpha: 1.00) :\n                UIColor(red: 1.00, green: 0.90, blue: 0.70, alpha: 1.00)\n        }\n    }\n\n    public static var linksColor: UIColor {\n        return UIColor { (traits) -> UIColor in\n            return traits.userInterfaceStyle == .dark ?\n                UIColor(red: 0.08, green: 0.60, blue: 0.85, alpha: 1.00) :\n                UIColor(red: 0.08, green: 0.60, blue: 0.85, alpha: 1.00)\n        }\n    }\n\n    public static func getBy(hex: String) -> UIColor {\n        var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()\n\n        if (cString.hasPrefix(\"#\")) {\n            cString.remove(at: cString.startIndex)\n        }\n\n        if ((cString.count) != 6) {\n            return UIColor.gray\n        }\n\n        var rgbValue:UInt64 = 0\n        Scanner(string: cString).scanHexInt64(&rgbValue)\n\n        return UIColor(\n            red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,\n            green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,\n            blue: CGFloat(rgbValue & 0x0000FF) / 255.0,\n            alpha: CGFloat(1.0)\n        )\n    }\n\n    var hexString: String {\n        var red: CGFloat = 0\n        var green: CGFloat = 0\n        var blue: CGFloat = 0\n        var alpha: CGFloat = 0\n\n        guard self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) else {\n            return \"#ffffff\"\n        }\n\n        let rgb: Int = (Int)(red * 255) << 16 | (Int)(green * 255) << 8 | (Int)(blue * 255) << 0\n\n        return String(format: \"#%06x\", rgb)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UIFont+.swift",
    "content": "//\n//  UIFont+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/6/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension UIFont {\n    var isItalic: Bool {\n        return fontDescriptor.symbolicTraits.contains(.traitItalic)\n    }\n    \n    func bold() -> UIFont {\n        if let descriptor = fontDescriptor.withSymbolicTraits(.traitBold) {\n            return UIFont(descriptor: descriptor, size: 0)\n        }\n        \n        return UserDefaultsManagement.noteFont\n    }\n\n    private func buildFont(symTraits: UIFontDescriptor.SymbolicTraits?) -> UIFont {\n        var font: UIFont\n\n        if let traits = symTraits, let descriptor = fontDescriptor.withSymbolicTraits(traits) {\n            font = UIFont(descriptor: descriptor, size: descriptor.pointSize)\n        } else {\n            font = UserDefaultsManagement.noteFont\n            font.withSize(fontDescriptor.pointSize)\n\n            return font\n        }\n\n        return font\n    }\n\n    public func getAttachmentHeight() -> Double {\n        return Double(pointSize) + 6\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UIImage+.swift",
    "content": "//\n//  UIImage+.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 6/5/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension UIImage {\n    func alpha(_ value:CGFloat) -> UIImage {\n        UIGraphicsBeginImageContextWithOptions(size, false, scale)\n        draw(at: CGPoint.zero, blendMode: .normal, alpha: value)\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return newImage!\n    }\n    \n    func resize(maxWidthHeight : Double)-> UIImage? {\n        let actualHeight = Double(size.height)\n        let actualWidth = Double(size.width)\n        var maxWidth = 0.0\n        var maxHeight = 0.0\n        \n        if actualWidth > actualHeight {\n            maxWidth = maxWidthHeight\n            let per = (100.0 * maxWidthHeight / actualWidth)\n            maxHeight = (actualHeight * per) / 100.0\n        }else{\n            maxHeight = maxWidthHeight\n            let per = (100.0 * maxWidthHeight / actualHeight)\n            maxWidth = (actualWidth * per) / 100.0\n        }\n        \n        let hasAlpha = true\n        let scale: CGFloat = 0.0\n        \n        UIGraphicsBeginImageContextWithOptions(CGSize(width: maxWidth, height: maxHeight), !hasAlpha, scale)\n        self.draw(in: CGRect(origin: .zero, size: CGSize(width: maxWidth, height: maxHeight)))\n        \n        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()\n        return scaledImage\n    }\n\n    func resize(height : Double)-> UIImage? {\n        let actualHeight = Double(size.height)\n        let actualWidth = Double(size.width)\n        var maxWidth = 0.0\n        var maxHeight = 0.0\n        var per: Double = 0\n\n        if actualWidth < actualHeight {\n            per = (70 / actualWidth)\n            maxWidth = (actualWidth * per)\n            maxHeight = (actualHeight * per)\n        } else{\n            per = (70 / actualHeight)\n            maxWidth = (actualWidth * per)\n            maxHeight = (actualHeight * per)\n        }\n\n        let newSize = CGSize(width: maxWidth, height: maxHeight)\n        let renderer = UIGraphicsImageRenderer(size: newSize)\n        let image = renderer.image { (context) in\n            self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))\n        }\n\n        return image\n    }\n\n    func croppedInRect(rect: CGRect) -> UIImage {\n        func rad(_ degree: Double) -> CGFloat {\n            return CGFloat(degree / 180.0 * .pi)\n        }\n\n        var rectTransform: CGAffineTransform\n        switch imageOrientation {\n        case .left:\n            rectTransform = CGAffineTransform(rotationAngle: rad(90)).translatedBy(x: 0, y: -self.size.height)\n        case .right:\n            rectTransform = CGAffineTransform(rotationAngle: rad(-90)).translatedBy(x: -self.size.width, y: 0)\n        case .down:\n            rectTransform = CGAffineTransform(rotationAngle: rad(-180)).translatedBy(x: -self.size.width, y: -self.size.height)\n        default:\n            rectTransform = .identity\n        }\n        rectTransform = rectTransform.scaledBy(x: self.scale, y: self.scale)\n\n        let imageRef = self.cgImage!.cropping(to: rect.applying(rectTransform))\n        let result = UIImage(cgImage: imageRef!, scale: self.scale, orientation: self.imageOrientation)\n        return result\n    }\n\n    public func getScale() -> Int {\n        let actualHeight = Double(size.height)\n        let actualWidth = Double(size.width)\n\n        if actualWidth < actualHeight {\n            return Int(70 / actualWidth)\n        } else{\n            return Int(70 / actualHeight)\n        }\n    }\n\n    public var jpgData: Data? {\n        return self.jpegData(compressionQuality: 1)\n    }\n\n    public static func emptyImage(with size: CGSize) -> UIImage? {\n        let renderer = UIGraphicsImageRenderer(size: size)\n        let img = renderer.image { ctx in\n            let border = UIColor.blackWhite\n            ctx.cgContext.setStrokeColor(border.cgColor)\n            ctx.cgContext.setLineWidth(1)\n\n            let rectangle = CGRect(x: 0, y: 0, width: size.width, height: size.height)\n            ctx.cgContext.addRect(rectangle)\n            ctx.cgContext.drawPath(using: .stroke)\n        }\n        return img\n    }\n\n    public func rounded(radius: CGFloat) -> UIImage {\n        let rect = CGRect(origin: .zero, size: size)\n        UIGraphicsBeginImageContextWithOptions(size, false, 0)\n        UIBezierPath(roundedRect: rect, cornerRadius: radius).addClip()\n        draw(in: rect)\n        return UIGraphicsGetImageFromCurrentImageContext()!\n    }\n\n    public func imageWithColor(color1: UIColor) -> UIImage {\n        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)\n        color1.setFill()\n\n        let context = UIGraphicsGetCurrentContext()\n        context?.translateBy(x: 0, y: self.size.height)\n        context?.scaleBy(x: 1.0, y: -1.0)\n        context?.setBlendMode(CGBlendMode.normal)\n\n        let rect = CGRect(origin: .zero, size: CGSize(width: self.size.width, height: self.size.height))\n        context?.clip(to: rect, mask: self.cgImage!)\n        context?.fill(rect)\n\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n\n        return newImage!\n    }\n\n    func resized(to newSize: CGSize) -> UIImage? {\n        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)\n        defer { UIGraphicsEndImageContext() }\n\n        draw(in: CGRect(origin: .zero, size: newSize))\n        return UIGraphicsGetImageFromCurrentImageContext()\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UITextView+.swift",
    "content": "//\n//  UITextView+.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 7/20/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nextension UITextView {\n    var cursorOffset: Int? {\n        guard let range = selectedTextRange else { return nil }\n        return offset(from: beginningOfDocument, to: range.start)\n    }\n\n    var cursorIndex: String.Index? {\n        guard\n            let location = cursorOffset,\n            case let length = text.utf16.count-location\n        else { return nil }\n        return Range(.init(location: location, length: length), in: text)?.lowerBound\n    }\n\n    var cursorDistance: Int? {\n        guard let cursorIndex = cursorIndex else { return nil }\n        return text.distance(from: text.startIndex, to: cursorIndex)\n    }\n    \n    public func getTextRange() -> UITextRange? {\n        if let start = position(from: self.beginningOfDocument, offset: self.selectedRange.location),\n        let end = position(from: start, offset: self.selectedRange.length),\n        let selectedRange = textRange(from: start, to: end) {\n            return selectedRange\n        }\n\n        return nil\n    }\n\n    public func insertAttributedText(_ attr: NSAttributedString) {\n        let range = self.selectedRange\n\n        undoManager?.beginUndoGrouping()\n\n        let old = textStorage.attributedSubstring(from: range)\n        let oldMutable = NSMutableAttributedString(attributedString: old)\n        oldMutable.saveData()\n\n        undoManager?.registerUndo(withTarget: self) { target in\n            target.replace(range: NSRange(location: range.location, length: attr.length), with: oldMutable)\n        }\n        undoManager?.setActionName(\"Insert\")\n\n        textStorage.beginEditing()\n        textStorage.replaceCharacters(in: range, with: attr)\n        textStorage.endEditing()\n        \n        selectedRange = NSRange(location: range.location + attr.length, length: 0)\n        undoManager?.endUndoGrouping()\n        \n        delegate?.textViewDidChange?(self)\n    }\n\n    private func replace(range: NSRange, with attr: NSAttributedString) {\n        let old = textStorage.attributedSubstring(from: range)\n        let oldMutable = NSMutableAttributedString(attributedString: old)\n        oldMutable.saveData()\n\n        undoManager?.registerUndo(withTarget: self) { target in\n            target.replace(range: NSRange(location: range.location, length: attr.length), with: oldMutable)\n        }\n\n        textStorage.beginEditing()\n        textStorage.replaceCharacters(in: range, with: attr)\n        textStorage.endEditing()\n        \n        selectedRange = NSRange(location: range.location + attr.length, length: 0)\n\n        delegate?.textViewDidChange?(self)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Extensions/UserDefaultsManagement+.swift",
    "content": "//\n//  UserDefaultsManagement+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/26/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nextension UserDefaultsManagement {\n    private struct Constants {\n        static let appIcon = \"appIcon2025\"\n        static let currentNote = \"currentNote\"\n        static let currentLocation = \"currentLocation\"\n        static let currentLength = \"currentLength\"\n        static let dynamicTypeFont = \"dynamicTypeFont\"\n        static let editorAutocorrection = \"editorAutocorrection\"\n        static let editorState = \"editorState\"\n        static let editorSuggestions = \"editorSuggestions\"\n        static let ImportURLsKey = \"ImportURLs\"\n    }\n\n    static var appIcon: Int {\n        get {\n            if let theme = shared?.integer(forKey: Constants.appIcon) {\n                return theme\n            }\n\n            return 1\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.appIcon)\n        }\n    }\n\n    static var dynamicTypeFont: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.dynamicTypeFont) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.dynamicTypeFont)\n        }\n    }\n\n    static var sidebarIsOpened: Bool {\n        get {\n            if let result = shared?.object(forKey: \"sidebarIsOpened\") as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: \"sidebarIsOpened\")\n        }\n    }\n\n    static var editorAutocorrection: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.editorAutocorrection) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.editorAutocorrection)\n        }\n    }\n\n    static var editorSpellChecking: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.editorSuggestions) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.editorSuggestions)\n        }\n    }\n\n    static var currentNote: URL? {\n        get {\n            if let url = shared?.url(forKey: Constants.currentNote) {\n                return url\n            }\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.currentNote)\n        }\n    }\n\n    static var currentRange: NSRange? {\n        get {\n            if let location = shared?.integer(forKey: Constants.currentLocation),\n               let length = shared?.integer(forKey: Constants.currentLength) {\n                return NSRange(location: location, length: length)\n            }\n            return nil\n        }\n        set {\n            if let range = newValue {\n                shared?.set(range.location, forKey: Constants.currentLocation)\n                shared?.set(range.length, forKey: Constants.currentLength)\n            } else {\n                shared?.set(nil, forKey: Constants.currentLocation)\n                shared?.set(nil, forKey: Constants.currentLength)\n            }\n        }\n    }\n\n    static var currentEditorState: Bool? {\n        get {\n            if let result = shared?.object(forKey: Constants.editorState) as? Bool {\n                return result\n            }\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.editorState)\n        }\n    }\n\n    static var noteFont: UIFont {\n        get {\n            if #available(iOS 11.0, *), UserDefaultsManagement.dynamicTypeFont {\n                var font = UIFont.systemFont(ofSize: CGFloat(DefaultFontSize))\n\n                if let fontName = UserDefaultsManagement.fontName,\n                    let currentFont = UIFont(name: fontName, size: CGFloat(DefaultFontSize)) {\n                    font = currentFont\n                }\n\n                let fontMetrics = UIFontMetrics(forTextStyle: .body)\n                return fontMetrics.scaledFont(for: font)\n            }\n\n            if let name = self.fontName, name.starts(with: \".\") {\n                return UIFont.systemFont(ofSize: CGFloat(self.fontSize))\n            }\n\n            if let fontName = self.fontName, let font = UIFont(name: fontName, size: CGFloat(self.fontSize)) {\n                return font\n            }\n\n            return UIFont.systemFont(ofSize: CGFloat(self.fontSize))\n        }\n        set {\n            self.fontName = newValue.fontName\n            self.fontSize = Int(newValue.pointSize)\n        }\n    }\n\n    static var codeFont: UIFont {\n        get {\n            if #available(iOS 11.0, *), UserDefaultsManagement.dynamicTypeFont {\n                var font = Font.systemFont(ofSize: CGFloat(self.codeFontSize))\n\n                if let currentFont = Font(name: self.codeFontName, size: CGFloat(self.codeFontSize)) {\n                    font = currentFont\n                }\n\n                let fontMetrics = UIFontMetrics(forTextStyle: .body)\n                return fontMetrics.scaledFont(for: font)\n            }\n\n            if let font = UIFont(name: self.codeFontName, size: CGFloat(self.codeFontSize)) {\n                return font\n            }\n\n            return UIFont.systemFont(ofSize: CGFloat(self.codeFontSize))\n        }\n        set {\n            self.codeFontName = newValue.familyName\n            self.codeFontSize = Int(newValue.pointSize)\n        }\n    }\n\n    @available(iOS 11.0, *)\n    static var importURLs: [URL] {\n        get {\n            guard let defaults = UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\") else { return [] }\n\n            if let result = defaults.object(forKey: Constants.ImportURLsKey) as? Data,\n                let urls = NSArray.unsecureUnarchived(from: result) as? [URL] {\n                return urls\n            }\n\n            return []\n        }\n        set {\n            guard let defaults = UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\") else { return }\n\n            if let data = try? NSKeyedArchiver.archivedData(withRootObject: newValue, requiringSecureCoding: true) {\n                defaults.set(data, forKey: Constants.ImportURLsKey)\n            }\n        }\n    }\n\n    static var fontColor: Color {\n        get {\n            return self.DefaultFontColor\n        }\n    }\n\n    static var bgColor: Color {\n        get {\n            return self.DefaultBgColor\n        }\n    }\n}\n\nextension NSCoding where Self: NSObject {\n    @available(iOS 11.0, *)\n    static func unsecureUnarchived(from data: Data) -> Self? {\n        do {\n            let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data)\n            unarchiver.requiresSecureCoding = true\n            let obj = unarchiver.decodeObject(of: self, forKey: NSKeyedArchiveRootObjectKey)\n            if let error = unarchiver.error {\n                print(\"Error:\\(error)\")\n            }\n            return obj\n        } catch {\n            print(\"Error:\\(error)\")\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/FSNotes iOS.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.developer.icloud-container-environment</key>\n\t<string>Production</string>\n\t<key>com.apple.developer.icloud-container-identifiers</key>\n\t<array>\n\t\t<string>iCloud.co.fluder.fsnotes</string>\n\t</array>\n\t<key>com.apple.developer.icloud-services</key>\n\t<array>\n\t\t<string>CloudDocuments</string>\n\t</array>\n\t<key>com.apple.developer.ubiquity-container-identifiers</key>\n\t<array>\n\t\t<string>iCloud.co.fluder.fsnotes</string>\n\t</array>\n\t<key>com.apple.developer.ubiquity-kvstore-identifier</key>\n\t<string>$(TeamIdentifierPrefix)co.fluder.fsnotes</string>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.es.fsnot.user.defaults</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes iOS/FSNotes_iOS.xcdatamodeld/.xccurrentversion",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n"
  },
  {
    "path": "FSNotes iOS/FSNotes_iOS.xcdatamodeld/FSNotes_iOS.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"1\" systemVersion=\"11A491\" minimumToolsVersion=\"Automatic\" sourceLanguage=\"Swift\" userDefinedModelVersionIdentifier=\"\">\n    <elements/>\n</model>"
  },
  {
    "path": "FSNotes iOS/Helpers/Buttons.swift",
    "content": "//\n//  Buttons.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/20/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass Buttons {\n    public static func getRateUs(target: Any, selector: Selector) -> UIBarButtonItem {\n        return UIBarButtonItem(systemImageName: \"heart\", target: target, selector: selector)\n    }\n\n    public static func getAdd(target: Any, selector: Selector) -> UIBarButtonItem {\n        return UIBarButtonItem(systemImageName: \"plus\", target: target, selector: selector)\n    }\n\n    public static func getDone(target: Any, selector: Selector) -> UIBarButtonItem {\n        return UIBarButtonItem(title: NSLocalizedString(\"Done\", comment: \"\"), style: .plain, target: target, action: selector)\n    }\n\n    public static func getShare(target: Any, selector: Selector) -> UIBarButtonItem {\n        return UIBarButtonItem(systemImageName: \"square.and.arrow.up\", target: target, selector: selector)\n    }\n\n    public static func getCrop(target: Any, selector: Selector) -> UIBarButtonItem {\n        return UIBarButtonItem(systemImageName: \"crop\", target: target, selector: selector)\n    }\n\n    public static func getTrash(target: Any, selector: Selector) -> UIBarButtonItem {\n        return UIBarButtonItem(systemImageName: \"trash\", target: target, selector: selector)\n    }\n\n    public static func getNewNote(target: Any, selector: Selector) -> UIBarButtonItem {\n        let config = UIImage.SymbolConfiguration(pointSize: 20, weight: .bold, scale: .default)\n        let image = UIImage(systemName: \"square.and.pencil\", withConfiguration: config)?\n            .imageWithColor(color1: UIColor.mainTheme)\n\n        let button = UIButton(type: .system)\n        button.setImage(image, for: .normal)\n        button.tintColor = .mainTheme\n        button.imageEdgeInsets = UIEdgeInsets(top: -2, left: 3, bottom: 2, right: -3)\n        button.addTarget(target, action: selector, for: .touchUpInside)\n\n        return UIBarButtonItem(customView: button)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/CloudDriveManager.swift",
    "content": "//\n//  CloudDriveManager.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 6/13/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass CloudDriveManager {\n\n    private var cloudDriveResults = [URL]()\n    \n    private var delegate: ViewController\n    private var storage: Storage\n\n    public let metadataQuery = NSMetadataQuery()\n    private var resultsDict = NSMutableDictionary()\n    private let workerQueue: OperationQueue = {\n        let workerQueue = OperationQueue()\n        workerQueue.name = \"co.fluder.fsnotes.manager.browserdatasource.workerQueue\"\n        workerQueue.maxConcurrentOperationCount = 1\n        workerQueue.qualityOfService = .background\n        return workerQueue\n    }()\n\n    private var shouldLoadTags: Bool = false\n\n    private var notesInsertionQueue = [Note]()\n    private var notesDeletionQueue = [Note]()\n    private var notesModificationQueue = [Note]()\n\n    private var projectsInsertionQueue = [Project]()\n    private var projectsDeletionQueue = [Project]()\n\n    init(delegate: ViewController, storage: Storage) {\n        metadataQuery.operationQueue = workerQueue\n        metadataQuery.searchScopes = [\n            NSMetadataQueryUbiquitousDocumentsScope\n        ]\n        metadataQuery.notificationBatchingInterval = 1\n        metadataQuery.predicate = NSPredicate(format: \"%K LIKE '*'\", NSMetadataItemFSNameKey)\n        metadataQuery.sortDescriptors = [NSSortDescriptor(key: NSMetadataItemFSContentChangeDateKey, ascending: false)]\n\n        self.delegate = delegate\n        self.storage = storage\n    }\n\n    @objc func queryDidFinishGathering(notification: NSNotification) {\n        let query = notification.object as? NSMetadataQuery\n\n        if let results = query?.results as? [NSMetadataItem] {\n            saveCloudDriveResultsCache(results: results)\n            startInitialLoading(results: results)\n        }\n\n        metadataQuery.enableUpdates()\n    }\n    \n    @objc func handleMetadataQueryUpdates(notification: NSNotification) {\n        guard let metadataQuery = notification.object as? NSMetadataQuery else { return }\n        metadataQuery.disableUpdates()\n\n        let changed = change(notification: notification)\n        let added = added(notification: notification)\n        let removed = remove(notification: notification)\n\n        doVisualChanges()\n\n        if added > 0 || removed > 0 || changed > 0,\n            let results = metadataQuery.results as? [NSMetadataItem] {\n            saveCloudDriveResultsCache(results: results)\n        }\n\n        metadataQuery.enableUpdates()\n    }\n\n    private func saveCloudDriveResultsCache(results: [NSMetadataItem]) {\n        // let point = Date()\n\n        for result in results {\n            if let url = result.value(forAttribute: NSMetadataItemURLKey) as? URL {\n                resultsDict[metadataQuery.index(ofResult: result)] = url.standardized\n            }\n        }\n\n        // print(\"N. iCloud Drive resources: \\\"\\(results.count)\\\", caching finished in \\(point.timeIntervalSinceNow * -1) seconds.\")\n    }\n\n    private func startInitialLoading(results: [NSMetadataItem]) {\n        for metadataItem in results {\n            let url = metadataItem.value(forAttribute: NSMetadataItemURLKey) as? URL\n            let status = metadataItem.value(forAttribute: NSMetadataUbiquitousItemDownloadingStatusKey) as? String\n\n            if status == NSMetadataUbiquitousItemDownloadingStatusNotDownloaded,\n                let url = url,\n                FileManager.default.isUbiquitousItem(at: url) {\n\n                do {\n                    try FileManager.default.startDownloadingUbiquitousItem(at: url)\n                } catch {\n                    print(\"Download error: \\(error)\")\n                }\n            }\n        }\n    }\n    \n    private func isProject(item: NSMetadataItem) -> Bool {\n        let itemUrl = item.value(forAttribute: NSMetadataItemURLKey) as? URL\n        let isDirectory = (item.value(forAttribute: NSMetadataItemContentTypeKey) as? String) == \"public.folder\"\n        let isPackage = (try? itemUrl?.resourceValues(forKeys: [.isDirectoryKey]))?.isPackage ?? false\n        \n        guard let url = itemUrl?.standardized else { return false }\n        \n        return isDirectory && !isPackage && url.pathExtension != \"textbundle\"\n    }\n\n    private func change(notification: NSNotification) -> Int {\n        guard let changedMetadataItems = notification.userInfo?[NSMetadataQueryUpdateChangedItemsKey] as? [NSMetadataItem] else { return 0 }\n\n        var completed = 0\n        for item in changedMetadataItems {\n            let status = item.value(forAttribute: NSMetadataUbiquitousItemDownloadingStatusKey) as? String\n\n            let index = metadataQuery.index(ofResult: item)\n            let itemUrl = item.value(forAttribute: NSMetadataItemURLKey) as? URL\n            let contentChangeDate = item.value(forAttribute: NSMetadataItemFSContentChangeDateKey) as? Date\n            let creationDate = item.value(forAttribute: NSMetadataItemFSCreationDateKey) as? Date\n            \n            \n            if status == NSMetadataUbiquitousItemDownloadingStatusCurrent {\n                completed += 1\n            }\n            \n            guard let url = itemUrl?.standardized, status == NSMetadataUbiquitousItemDownloadingStatusCurrent else {\n                continue\n            }\n\n            if isProject(item: item) {\n\n                // Renamed – remove old\n                if let project = getProjectFromCloudDriveResults(item: item) {\n                    \n                    // Remove old\n                    projectsDeletionQueue.append(project)\n                    \n                    // Insert new\n                    if let projects = storage.insert(url: url) {\n                        projectsInsertionQueue.append(contentsOf: projects)\n                    }\n                } else {\n                    \n                    // Move from outside iCloud Drive\n                    if storage.getProjectBy(url: url) == nil {\n                        if let projects = storage.insert(url: url) {\n                            projectsInsertionQueue.append(contentsOf: projects)\n                        }\n                    }\n                }\n                \n                continue\n            }\n\n\n            if url.lastPathComponent == \".encrypt\" {\n                self.loadEncryptionStatus(url: url)\n                continue\n            }\n\n            // Is file\n            guard storage.isValidNote(url: url) else { continue }\n\n            // Note already exist and update completed\n            if let note = storage.getBy(url: url, caseSensitive: true) {\n                if note.isTextBundle() && !note.isFullLoadedTextBundle() {\n                    continue\n                }\n\n                let modificationDate = note.getFileModifiedDate()\n                let isOpened = delegate.editorViewController?.editArea.note?.isEqualURL(url: url) == true\n\n                if let modificationDate = modificationDate,\n                   let contentChangeDate = contentChangeDate,\n\n                   isOpened,\n\n                   modificationDate.isGreaterThan(note.modifiedLocalAt),\n                   contentChangeDate.isGreaterThan(note.modifiedLocalAt)\n                {\n                    let prepareDate =\n                        modificationDate > contentChangeDate\n                            ? modificationDate\n                            : contentChangeDate\n\n                    if prepareDate > note.modifiedLocalAt {\n                        note.modifiedLocalAt = prepareDate\n                    }\n\n\n                    // Trying load content from encrypted note with current password\n                    if url.pathExtension == \"etp\", let password = note.password {\n                        _ = note.unLock(password: password)\n                    }\n\n                    note.forceLoad()\n                    delegate.refreshTextStorage(note: note)\n                }\n\n                // print(\"File changed: \\(url)\")\n\n                // Not updates in FS attributes, must be loaded from Cloud Drive Meta\n                if note.isTextBundle() {\n                    note.loadCreationDate()\n                } else {\n                    note.creationDate = creationDate\n                }\n\n                notesModificationQueue.append(note)\n                //resolveConflict(url: url)\n\n                continue\n            }\n\n            // Note previously exist on different path\n            if let note = getNoteFromCloudDriveResults(item: item) {\n\n                // moved to unavailable dir (i.e. trash) is equal removed\n\n                guard storage.getProjectByNote(url: url) != nil else {\n                    storage.removeNotes(notes: [note], fsRemove: false) {_ in\n                        self.notesDeletionQueue.append(note)\n                    }\n\n                    print(\"File moved outside: \\(url)\")\n                    continue\n                }\n\n                // moved to available dir\n                print(\"File moved to new url: \\(url)\")\n\n                notesDeletionQueue.append(note)\n\n                let srcUrl = note.url\n                note.url = url\n                note.parseURL()\n                note.moveHistory(src: srcUrl, dst: url)\n\n                resultsDict[index] = url\n                notesInsertionQueue.append(note)\n\n                continue\n            }\n\n            // Non exist yet, will add\n            if let note = storage.importNote(url: url) {\n                notesInsertionQueue.append(note)\n            }\n        }\n\n        return completed\n    }\n\n    private func getNoteFromCloudDriveResults(item: NSMetadataItem) -> Note? {\n        let itemUrl = item.value(forAttribute: NSMetadataItemURLKey) as? URL\n        guard let url = itemUrl?.standardized else { return nil }\n\n        let index = self.metadataQuery.index(ofResult: item)\n        guard let prev = resultsDict[index] as? URL else { return nil }\n\n        if prev != url {\n            if let note = storage.getBy(url: prev) {\n                return note\n            }\n        }\n\n        return nil\n    }\n\n    private func getProjectFromCloudDriveResults(item: NSMetadataItem) -> Project? {\n        let itemUrl = item.value(forAttribute: NSMetadataItemURLKey) as? URL\n        guard let url = itemUrl?.standardized else { return nil }\n\n        let index = self.metadataQuery.index(ofResult: item)\n        guard let prev = resultsDict[index] as? URL else { return nil }\n\n        if prev != url {\n            if let project = storage.getProjectBy(url: prev) {\n                return project\n            }\n        }\n\n        return nil\n    }\n    \n    private func added(notification: NSNotification) -> Int {\n        guard let addedMetadataItems =\n            notification.userInfo?[NSMetadataQueryUpdateAddedItemsKey] as? [NSMetadataItem]\n        else { return 0 }\n\n        for item in addedMetadataItems {\n            guard let url = (item.value(forAttribute: NSMetadataItemURLKey) as? URL)?.standardized else { continue }\n            \n            print(\"Added: \\(url)\")\n\n            let status = item.value(forAttribute: NSMetadataUbiquitousItemDownloadingStatusKey) as? String\n\n            if status != NSMetadataUbiquitousItemDownloadingStatusCurrent\n                && FileManager.default.isUbiquitousItem(at: url) {\n\n                do {\n                    try FileManager.default.startDownloadingUbiquitousItem(at: url)\n                } catch {\n                    print(\"Download error: \\(error)\")\n                }\n\n                continue\n            }\n            \n            if isProject(item: item) {\n                if let projects = storage.insert(url: url) {\n                    projectsInsertionQueue.append(contentsOf: projects)\n                }\n                \n                continue\n            }\n\n            // when file moved from outspace to FSNotes space\n            // i.e. revert from macOS trash to iCloud Drive\n\n            if storage.isValidNote(url: url) {\n                if let note = storage.importNote(url: url) {\n                    notesInsertionQueue.append(note)\n                }\n            }\n        }\n\n        return addedMetadataItems.count\n    }\n    \n    private func remove(notification: NSNotification) -> Int {\n        guard let removedMetadataItems =\n            notification.userInfo?[NSMetadataQueryUpdateRemovedItemsKey] as?\n                [NSMetadataItem]\n        else { return 0 }\n\n        for item in removedMetadataItems {\n            guard let url = (item.value(forAttribute: NSMetadataItemURLKey) as? URL)?.standardized else { continue }\n            \n            if isProject(item: item) {\n                if let project = storage.getProjectBy(url: url) {\n                    projectsDeletionQueue.append(contentsOf: [project])\n                }\n                \n                continue\n            }\n\n            if url.lastPathComponent == \".encrypt\" {\n                self.loadEncryptionStatus(url: url)\n                continue\n            }\n\n            if FileManager.default.fileExists(atPath: url.path) {\n                continue\n            }\n\n            if let note = storage.getBy(url: url) {\n                storage.removeNotes(notes: [note], fsRemove: false) {_ in\n                    self.notesDeletionQueue.append(note)\n                }\n            }\n\n            if let project = storage.getProjectBy(url: url) {\n                storage.remove(project: project)\n                self.projectsDeletionQueue.append(project)\n            }\n        }\n\n        return removedMetadataItems.count\n    }\n\n    private func loadEncryptionStatus(url: URL) {\n        if let project = self.storage.getProjectBy(url: url.deletingLastPathComponent()) {\n            let state = project.isEncrypted\n            project.isEncrypted = FileManager.default.fileExists(atPath: url.path)\n\n            if state && !project.isEncrypted {\n                project.password = nil\n            }\n\n            DispatchQueue.main.async {\n                if let indexPath = self.delegate.sidebarTableView.getIndexPathBy(project: project) {\n\n                    if let sidebarItem = self.delegate.sidebarTableView.getSidebarItem(project: project) {\n\n                        var type: SidebarItemType = .Project\n                        \n                        if project.isEncrypted {\n                            if project.isLocked() {\n                                type = .ProjectEncryptedLocked\n                            } else {\n                                type = .ProjectEncryptedUnlocked\n                            }\n                        }\n\n                        sidebarItem.setType(type: type)\n\n                        let cell = self.delegate.sidebarTableView.cellForRow(at: indexPath) as? SidebarTableCellView\n\n                        cell?.configure(sidebarItem: sidebarItem)\n                    }\n\n                    self.delegate.sidebarTableView.reload(indexPath: indexPath)\n\n                    // Selected at this moment\n\n                    if indexPath == self.delegate.sidebarTableView.indexPathForSelectedRow {\n                        if project.isEncrypted && project.isLocked() {\n                            self.delegate.enableLockedProject()\n                        } else {\n                            self.delegate.disableLockedProject()\n                        }\n\n                        self.delegate.reloadNotesTable()\n\n                        // Reconfigure new state in menu\n\n                        if let sidebarItem = self.delegate.sidebarTableView.getSidebarItem(project: project) {\n                            self.delegate.configureNavMenu(for: sidebarItem)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    public func resolveConflict(url: URL) {\n        if let conflicts = NSFileVersion.unresolvedConflictVersionsOfItem(at: url as URL) {\n            for conflict in conflicts {\n                guard let modificationDate = conflict.modificationDate else {\n                    continue\n                }\n\n                guard let localizedName = conflict.localizedName else {\n                    continue\n                }\n\n                let localizedUrl = URL(fileURLWithPath: localizedName)\n                let ext = url.pathExtension\n                let name = localizedUrl.deletingPathExtension().lastPathComponent\n\n                let dateFormatter = ISO8601DateFormatter()\n                dateFormatter.formatOptions = [\n                    .withYear,\n                    .withMonth,\n                    .withDay,\n                    .withTime\n                ]\n                let dateString: String = dateFormatter.string(from: modificationDate)\n                let conflictName = \"\\(name) (CONFLICT \\(dateString)).\\(ext)\"\n                \n                let to = url.deletingLastPathComponent().appendingPathComponent(conflictName)\n\n                if FileManager.default.fileExists(atPath: to.path) {\n                    conflict.isResolved = true\n                    continue\n                }\n\n                // Reload current encrypted note\n                if let currentNote = delegate.editorViewController?.editArea.note, currentNote.url == url {\n                    if let password = currentNote.password, ext == \"etp\" {\n                        _ = currentNote.unLock(password: password)\n                    }\n\n                    currentNote.forceLoad()\n                    delegate.refreshTextStorage(note: currentNote)\n                }\n\n                do {\n                    try FileManager.default.copyItem(at: conflict.url, to: to)\n                    var attributes = [FileAttributeKey : Any]()\n                    attributes[.posixPermissions] = 0o777\n\n                    try FileManager.default.setAttributes(attributes, ofItemAtPath: to.path)\n                } catch let error {\n                    print(\"Conflict resolving error: \", error)\n                }\n\n                conflict.isResolved = true\n            }\n        }\n    }\n\n    private func doVisualChanges() {\n        let insert = notesInsertionQueue\n        let delete = notesDeletionQueue\n        let change = notesModificationQueue\n\n        notesInsertionQueue.removeAll()\n        notesDeletionQueue.removeAll()\n        notesModificationQueue.removeAll()\n\n        let projectsDeletion = projectsDeletionQueue\n        let projectsInsertion = projectsInsertionQueue\n\n        projectsDeletionQueue.removeAll()\n        projectsInsertionQueue.removeAll()\n\n        for note in insert {\n            note.forceLoad(skipCreateDate: false, loadTags: false)\n        }\n\n        for note in change {\n            note.forceLoad(skipCreateDate: true, loadTags: false)\n        }\n\n        OperationQueue.main.addOperation {\n            self.delegate.notesTable.removeRows(notes: delete)\n            self.delegate.notesTable.insertRows(notes: insert)\n            self.delegate.notesTable.reloadRows(notes: change)\n            \n            self.delegate.sidebarTableView.removeRows(projects: projectsDeletion)\n            self.delegate.sidebarTableView.insertRows(projects: projectsInsertion)\n\n            self.delegate.updateNotesCounter()\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/FolderPopoverActions.swift",
    "content": "//\n//  FolderPopoverActions.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 27.01.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nenum FolderPopoverActions: Int {\n    case importNote\n    case multipleSelection\n    case settingsFolder\n    case settingsRepository\n    case createFolder\n    case removeFolder\n    case renameFolder\n    case removeTag\n    case renameTag\n    case openInFiles\n    case emptyBin\n    case encryptFolder\n    case decryptFolder\n    case lockFolder\n    case unLockFolder\n\n    static let description =\n        [\n            NSLocalizedString(\"Import Notes\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Select\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"View Settings\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Git Settings\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Create Folder\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Remove Folder\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Rename Folder\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Remove Tag\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Rename Tag\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Open in Files.app\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Empty Bin\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Encrypt\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Decrypt\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Lock\", comment: \"Main view popover table\"),\n            NSLocalizedString(\"Unlock\", comment: \"Main view popover table\"),\n        ]\n\n    public func getDescription() -> String {\n        return FolderPopoverActions.description[self.rawValue]\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/SandboxBookmark.swift",
    "content": "//\n//  SandboxBookmarks.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 7/28/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass SandboxBookmark {\n    static var instance: SandboxBookmark? = nil\n\n    private let bookmarksKey = \"SecurityBookmarksKey\"\n    private var defaults = UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\")\n    private var bookmarks = [URL: Data]()\n\n    public static func sharedInstance() -> SandboxBookmark {\n        guard let sandbox = self.instance else {\n            self.instance = SandboxBookmark()\n            return self.instance!\n        }\n        \n        return sandbox\n    }\n\n    public func load() {\n        if let bookmarks = defaults?.object(forKey: bookmarksKey) as? [Data] {\n            for bookmarkData in bookmarks {\n                do {\n                    var isStale = false\n                    let url = try URL(resolvingBookmarkData: bookmarkData, bookmarkDataIsStale: &isStale)\n\n                    if !isStale {\n                        if url.startAccessingSecurityScopedResource() {\n                            self.bookmarks[url.standardized] = bookmarkData\n                            print(\"URL loaded from security scope: \\(url)\")\n                        }\n                    } else {\n                        remove(url: url)\n                    }\n                }\n                catch let error {\n                    print(error)\n                }\n            }\n        }\n    }\n\n    public func save(data: Data) {\n        var bookmarks = [Data]()\n\n        if let bookmarksData = defaults?.object(forKey: bookmarksKey) as? [Data] {\n            bookmarks = bookmarksData\n        }\n\n        bookmarks.append(data)\n        save(data: bookmarks)\n    }\n\n    public func save(data: [Data]) {\n        defaults?.set(data, forKey: bookmarksKey)\n        defaults?.synchronize()\n    }\n\n    public func remove(url: URL) {\n        self.bookmarks.removeValue(forKey: url)\n\n        // old style bookmarks\n        let oldStylePath = \"/private\" + url.path\n        if let index = bookmarks.firstIndex(where: { $0.key.path == oldStylePath }) {\n            bookmarks.remove(at: index)\n        }\n\n        let values = bookmarks.map({ $0.value })\n        save(data: values)\n    }\n    \n    public func getRestoredUrls() -> [URL] {\n        return bookmarks.map({ $0.key })\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/ShortcutIdentifier.swift",
    "content": "//\n//  ShortcutIdentifier.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/15/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nenum ShortcutIdentifier: String {\n    case makeNew\n    case search\n    case clipboard\n\n    // MARK: - Initializers\n\n    init?(fullType: String) {\n        guard let last = fullType.components(separatedBy: \".\").last else { return nil }\n        self.init(rawValue: last)\n    }\n\n    // MARK: - Properties\n\n    var type: String {\n        return Bundle.main.bundleIdentifier! + \".\\(self.rawValue)\"\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/Sidebar.swift",
    "content": "//\n//  Sideabr.swift\n//  FSNotes iOS\n//\n//  Created by Олександр Глущенко on 02.11.2019.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\ntypealias Image = UIImage\n\nenum SidebarSection: Int {\n    case System   = 0x00\n    case Projects = 0x01\n    case Tags     = 0x02\n    case Settings = 0x03\n}\n\nclass Sidebar {\n    let storage = Storage.shared()\n    public var items = [[SidebarItem]]()\n    public var allItems = [[SidebarItem]]()\n\n    init() {\n        guard let defaultURL = Storage.shared().getDefault()?.url else { return }\n\n        var system = [SidebarItem]()\n\n        // Notes\n        let notesUrl = defaultURL.appendingPathComponent(\"Fake Virtual Notes Dir\")\n        let notesLabel = NSLocalizedString(\"Notes\", comment: \"Sidebar items\")\n        \n        if UserDefaultsManagement.sidebarVisibilityNotes {\n            let fakeNotesProject =\n                Project(\n                    storage: Storage.shared(),\n                    url: notesUrl,\n                    label: notesLabel,\n                    isVirtual: true\n                )\n            \n            Storage.shared().allNotesProject = fakeNotesProject\n            \n            system.append(\n                SidebarItem(\n                    name: NSLocalizedString(\"Notes\", comment: \"\"),\n                    project: fakeNotesProject,\n                    type: .All\n                )\n            )\n        }\n\n        // Inbox\n        if UserDefaultsManagement.sidebarVisibilityInbox,\n            let project = Storage.shared().getDefault() {\n            system.append(\n                SidebarItem(\n                    name: NSLocalizedString(\"Inbox\", comment: \"\"),\n                    project: project,\n                    type: .Inbox\n                )\n            )\n        }\n\n        // Todo\n        if UserDefaultsManagement.sidebarVisibilityTodo {\n            let todoUrl = defaultURL.appendingPathComponent(\"Fake Virtual Todo Dir\")\n            let todoLabel = NSLocalizedString(\"Todo\", comment: \"Sidebar items\")\n            let fakeTodoProject =\n                Project(\n                    storage: Storage.shared(),\n                    url: todoUrl,\n                    label: todoLabel,\n                    isVirtual: true\n                )\n\n            system.append(\n                SidebarItem(\n                    name: NSLocalizedString(\"Todo\", comment: \"\"),\n                    project: fakeTodoProject,\n                    type: .Todo\n                )\n            )\n\n            Storage.shared().todoProject = fakeTodoProject\n        }\n\n        // Untagged\n        if UserDefaultsManagement.sidebarVisibilityUntagged {\n            let todoUrl = defaultURL.appendingPathComponent(\"Fake Virtual Utagged Dir\")\n            let untaggedLabel = NSLocalizedString(\"Untagged\", comment: \"\")\n            let fakeUntaggedProject =\n                Project(\n                    storage: Storage.shared(),\n                    url: todoUrl,\n                    label: untaggedLabel,\n                    isVirtual: true\n                )\n\n            let untagged =\n                SidebarItem(\n                    name: untaggedLabel,\n                    project: fakeUntaggedProject,\n                    type: .Untagged\n                )\n\n            system.append(untagged)\n        }\n\n        // Trash\n        if UserDefaultsManagement.sidebarVisibilityTrash {\n            system.append(\n                SidebarItem(\n                    name: NSLocalizedString(\"Trash\", comment: \"\"),\n                    project: Storage.shared().getDefaultTrash(),\n                    type: .Trash\n                )\n            )\n        }\n\n        // System - section 0\n        items.append(system)\n\n        // Projects - section 1\n        let projects = storage\n            .getAvailableProjects()\n            .sorted(by: { $0.label < $1.label })\n            .map({\n                SidebarItem(\n                    name: $0.label,\n                    project: $0,\n                    type: .Project\n                )\n            })\n\n        items.append(projects)\n\n        // Tags - section 2\n        items.append([])\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/SingleImageTouchDownGestureRecognizer.swift",
    "content": "//\n//  SingleImageTouchDownGestureRecognizer.swift\n//  FSNotes iOS\n//\n//  Created by Олександр Глущенко on 8/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit.UIGestureRecognizerSubclass\n\nclass SingleImageTouchDownGestureRecognizer: UIGestureRecognizer {\n    public var isRightBorderTap = false\n\n    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {\n        if touches.count > 1 {\n            self.state = .failed\n        }\n\n        if self.state == .possible {\n            for touch in touches {\n                guard let view = self.view as? EditTextView else { continue }\n\n                let point = touch.location(in: view)\n                let glyphIndex = view.layoutManager.glyphIndex(for: point, in: view.textContainer)\n\n                let location = touch.location(in: view)\n                let maxX = Int(view.frame.width - 50)\n                let minX = Int(50)\n\n                let isImage = view.isImage(at: glyphIndex)\n                let glyphRect = view.layoutManager.boundingRect(forGlyphRange: NSRange(location: glyphIndex, length: 1), in: view.textContainer)\n\n                if Int(location.x) < minX || Int(location.x) > maxX, isImage, glyphIndex < view.textStorage.length, glyphRect.contains(point) {\n                    self.state = .possible\n\n                    isRightBorderTap = Int(location.x) > maxX\n                } else {\n                    self.state = .failed\n                }\n            }\n        }\n    }\n\n    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {\n        if self.state == .possible {\n            for touch in touches {\n                guard let view = self.view as? EditTextView else { continue }\n\n                let point = touch.location(in: view)\n                let glyphIndex = view.layoutManager.glyphIndex(for: point, in: view.textContainer)\n\n                let location = touch.location(in: view)\n                let maxX = Int(view.frame.width - 25)\n                let minX = Int(25)\n\n                let isImage = view.isImage(at: glyphIndex)\n                let glyphRect = view.layoutManager.boundingRect(forGlyphRange: NSRange(location: glyphIndex, length: 1), in: view.textContainer)\n\n                if Int(location.x) < minX || Int(location.x) > maxX, isImage, glyphIndex < view.textStorage.length, glyphRect.contains(point) {\n                    self.state = .recognized\n                } else {\n                    self.state = .failed\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Helpers/SingleTouchDownGestureRecognizer.swift",
    "content": "//\n//  SingleTouchDownGestureRecognizer.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 8/30/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit.UIGestureRecognizerSubclass\n\nclass SingleTouchDownGestureRecognizer: UIGestureRecognizer {\n    private var beginTimer: Timer?\n    private var beginTime: Date?\n    public var isLongPress: Bool = false\n    public var touchCharIndex: Int?\n    public var selectedRange: UITextRange?\n    \n    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {\n        guard let view = self.view as? EditTextView else { return }\n        self.selectedRange = view.selectedTextRange\n        view.isAllowedScrollRect = false\n\n        if touches.count > 1 {\n            self.state = .failed\n            view.isAllowedScrollRect = true\n            return\n        }\n\n        if self.state == .possible {\n            for touch in touches {\n                let point = touch.location(in: view)\n                let characterIndex = view.layoutManager.characterIndex(for: point, in: view.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)\n                self.touchCharIndex = characterIndex\n\n                if UIMenuController.shared.isMenuVisible {\n                    UIMenuController.shared.hideMenu(from: view)\n                }\n\n                let glyphIndex = view.layoutManager.glyphIndex(for: point, in: view.textContainer)\n\n                if isTodoInTouchArea(point: point, characterIndex: characterIndex, view: view) && (self.selectedRange?.isEmpty == true || !view.isFirstResponder) {\n                    self.state = .recognized\n                    return\n                }\n                \n                let maxX = Int(view.frame.width - 50)\n                let minX = Int(50)\n\n                let isImage = view.isImage(at: characterIndex)\n                let glyphRect = view.layoutManager.boundingRect(forGlyphRange: NSRange(location: glyphIndex, length: 1), in: view.textContainer)\n\n                if isImage, characterIndex < view.textStorage.length, glyphRect.contains(point) {\n                    if Int(point.x) > minX && Int(point.x) < maxX {\n                        view.lasTouchPoint = touch.location(in: view.superview)\n                        self.state = .possible\n                        view.isAllowedScrollRect = true\n                        return\n                    } else {\n                        self.state = .failed\n                        view.isAllowedScrollRect = true\n                        return\n                    }\n                }\n\n                if !isImage && glyphRect.contains(point) && view.isLink(at: characterIndex) {\n                    self.state = .possible\n                    view.isAllowedScrollRect = true\n                    return\n                }\n            }\n\n            self.state = .failed\n            view.isAllowedScrollRect = true\n        }\n    }\n\n    private func isTodoInTouchArea(point: CGPoint, characterIndex: Int, view: EditTextView) -> Bool {\n        if view.isTodo(at: characterIndex) {\n            return true\n        }\n        \n        func checkTodoInLine(lineRange: NSRange) -> Bool {\n            for i in lineRange.location..<min(lineRange.location + lineRange.length, view.textStorage.length) {\n                if view.isTodo(at: i) {\n                    let glyphRange = view.layoutManager.glyphRange(forCharacterRange: NSRange(location: i, length: 1), actualCharacterRange: nil)\n                    let todoRect = view.layoutManager.boundingRect(forGlyphRange: glyphRange, in: view.textContainer)\n                    \n                    let expandedRect = CGRect(\n                        x: todoRect.origin.x - 50,\n                        y: todoRect.origin.y - 15,\n                        width: todoRect.width + 65,\n                        height: todoRect.height + 35\n                    )\n                    \n                    if expandedRect.contains(point) {\n                        self.touchCharIndex = i\n                        return true\n                    }\n                    \n                    break\n                }\n            }\n            return false\n        }\n        \n        let currentLineRange = (view.text as NSString).lineRange(for: NSRange(location: characterIndex, length: 0))\n        \n        if checkTodoInLine(lineRange: currentLineRange) {\n            return true\n        }\n        \n        if currentLineRange.location > 0 {\n            let previousLineRange = (view.text as NSString).lineRange(for: NSRange(location: currentLineRange.location - 1, length: 0))\n            \n            if checkTodoInLine(lineRange: previousLineRange) {\n                return true\n            }\n        }\n        \n        return false\n    }\n\n    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {\n        guard let view = self.view as? EditTextView else { return }\n\n        if self.state == .possible {\n            for touch in touches {\n                let point = touch.location(in: view)\n                let characterIndex = view.layoutManager.characterIndex(for: point, in: view.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)\n                self.touchCharIndex = characterIndex\n\n                if view.isImage(at: characterIndex) {\n                    self.state = .recognized\n                    view.isAllowedScrollRect = true\n                    return\n                }\n\n                if isTodoInTouchArea(point: point, characterIndex: characterIndex, view: view) {\n                    self.state = .recognized\n                    return\n                }\n\n                let glyphRect = view.layoutManager.boundingRect(forGlyphRange: NSRange(location: characterIndex, length: 1), in: view.textContainer)\n                if glyphRect.contains(point) && view.isLink(at: characterIndex) {\n                    self.state = .recognized\n                    view.isAllowedScrollRect = true\n                    return\n                }\n            }\n\n            self.state = .failed\n            view.isAllowedScrollRect = true\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Icons/classic-2025.icon/icon.json",
    "content": "{\n  \"fill\" : {\n    \"automatic-gradient\" : \"extended-gray:1.00000,1.00000\"\n  },\n  \"groups\" : [\n    {\n      \"layers\" : [\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"srgb:0.00000,0.74277,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-15.svg\",\n          \"name\" : \"row1\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -153.79487500000016,\n              157.33406250000007\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"srgb:0.00000,0.27616,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-14.svg\",\n          \"name\" : \"row2\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -248.06381250000013,\n              32.89393749999999\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"srgb:0.00000,0.27616,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-13.svg\",\n          \"name\" : \"row3\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -196.13787500000012,\n              -69.6507187499999\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"srgb:0.00000,0.27616,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-12.svg\",\n          \"name\" : \"row4\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -149.16081250000013,\n              -181.203125\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"srgb:0.00000,0.74277,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-8.svg\",\n          \"name\" : \"row5\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -7.970875000000149,\n              54.2109375\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"srgb:0.00000,0.27451,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-11.svg\",\n          \"name\" : \"lightning\",\n          \"position\" : {\n            \"scale\" : 2,\n            \"translation-in-points\" : [\n              172.49609375,\n              -35.471000000000004\n            ]\n          }\n        }\n      ],\n      \"shadow\" : {\n        \"kind\" : \"neutral\",\n        \"opacity\" : 0.5\n      },\n      \"translucency\" : {\n        \"enabled\" : true,\n        \"value\" : 0.5\n      }\n    }\n  ],\n  \"supported-platforms\" : {\n    \"circles\" : [\n      \"watchOS\"\n    ],\n    \"squares\" : \"shared\"\n  }\n}"
  },
  {
    "path": "FSNotes iOS/Icons/modern.icon/icon.json",
    "content": "{\n  \"fill\" : \"automatic\",\n  \"groups\" : [\n    {\n      \"layers\" : [\n        {\n          \"fill-specializations\" : [\n            {\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.11674,0.11137,0.12082,1.00000\"\n              }\n            },\n            {\n              \"appearance\" : \"dark\",\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.85953,0.87116,0.86212,1.00000\"\n              }\n            }\n          ],\n          \"image-name\" : \"Untitled-5.svg\",\n          \"name\" : \"row1\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -76.92312500000003,\n              -199.8671875\n            ]\n          }\n        },\n        {\n          \"fill-specializations\" : [\n            {\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.11674,0.11137,0.12082,1.00000\"\n              }\n            },\n            {\n              \"appearance\" : \"dark\",\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.85953,0.87116,0.86212,1.00000\"\n              }\n            }\n          ],\n          \"image-name\" : \"Untitled-2 3.svg\",\n          \"name\" : \"row2\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -136.953125,\n              -51.15625\n            ]\n          }\n        },\n        {\n          \"fill-specializations\" : [\n            {\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.11674,0.11137,0.12082,1.00000\"\n              }\n            },\n            {\n              \"appearance\" : \"dark\",\n              \"value\" : {\n                \"automatic-gradient\" : \"srgb:0.85953,0.87116,0.86212,1.00000\"\n              }\n            }\n          ],\n          \"image-name\" : \"Untitled-3 2.svg\",\n          \"name\" : \"row3\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              -199.593125,\n              98.390625\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"solid\" : \"display-p3:0.02353,0.56863,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-3 2.svg\",\n          \"name\" : \"row4\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              200.44268750000003,\n              -51.15625\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"solid\" : \"display-p3:0.02353,0.56863,1.00000,1.00000\"\n          },\n          \"image-name\" : \"Untitled-2 3.svg\",\n          \"name\" : \"row5\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              137.8046875,\n              98.390625\n            ]\n          }\n        },\n        {\n          \"fill\" : {\n            \"solid\" : \"display-p3:0.02353,0.56863,1.00000,1.00000\"\n          },\n          \"glass\" : true,\n          \"image-name\" : \"Untitled-3 2.svg\",\n          \"name\" : \"row6\",\n          \"position\" : {\n            \"scale\" : 1,\n            \"translation-in-points\" : [\n              75.16468750000001,\n              247.140625\n            ]\n          }\n        }\n      ],\n      \"shadow\" : {\n        \"kind\" : \"neutral\",\n        \"opacity\" : 0.5\n      },\n      \"translucency\" : {\n        \"enabled\" : true,\n        \"value\" : 0.5\n      }\n    }\n  ],\n  \"supported-platforms\" : {\n    \"circles\" : [\n      \"watchOS\"\n    ],\n    \"squares\" : \"shared\"\n  }\n}"
  },
  {
    "path": "FSNotes iOS/Icons/ny-2026.icon/icon.json",
    "content": "{\n  \"fill\" : {\n    \"linear-gradient\" : [\n      \"extended-srgb:0.68627,0.32157,0.87059,1.00000\",\n      \"display-p3:0.00000,0.66275,0.87843,1.00000\"\n    ],\n    \"orientation\" : {\n      \"start\" : {\n        \"x\" : 0.5,\n        \"y\" : 0\n      },\n      \"stop\" : {\n        \"x\" : 0.5,\n        \"y\" : 0.7\n      }\n    }\n  },\n  \"groups\" : [\n    {\n      \"layers\" : [\n        {\n          \"fill\" : {\n            \"automatic-gradient\" : \"extended-gray:1.00000,1.00000\"\n          },\n          \"image-name\" : \"document-lightning-24-regular.svg\",\n          \"name\" : \"document-lightning-24-regular\",\n          \"opacity\" : 0.9,\n          \"position-specializations\" : [\n            {\n              \"idiom\" : \"square\",\n              \"value\" : {\n                \"scale\" : 1.4,\n                \"translation-in-points\" : [\n                  23.2528076171875,\n                  -6.20391845703125\n                ]\n              }\n            }\n          ]\n        }\n      ],\n      \"shadow\" : {\n        \"kind\" : \"neutral\",\n        \"opacity\" : 0.5\n      },\n      \"translucency\" : {\n        \"enabled\" : true,\n        \"value\" : 0.5\n      }\n    }\n  ],\n  \"supported-platforms\" : {\n    \"squares\" : \"shared\"\n  }\n}"
  },
  {
    "path": "FSNotes iOS/ImagePreviewViewController.swift",
    "content": "//\n//  ViewController.swift\n//  ImageScrollViewDemo\n//\n//  Created by Nguyen Cong Huy on 3/5/16.\n//  Copyright © 2016 Nguyen Cong Huy. All rights reserved.\n//\n\nimport UIKit\nimport AudioToolbox\nimport CropViewController\n\nclass ImagePreviewViewController: UIViewController, CropViewControllerDelegate {\n    @IBOutlet weak var imageScrollView: ImageScrollView!\n\n    public var image: UIImage?\n    public var url: URL?\n    public var note: Note?\n    public var imageUrls = [URL]()\n\n    private var currentIndex = 0\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        NotificationCenter.default.addObserver(self, selector: #selector(rotated), name: UIDevice.orientationDidChangeNotification, object: nil)\n\n        let shareButton = Buttons.getShare(target: self, selector: #selector(share))\n        let cropButton = Buttons.getCrop(target: self, selector: #selector(crop))\n        let dropButton = Buttons.getTrash(target: self, selector: #selector(trashBin))\n\n        let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)\n        space.width = 30\n        \n        let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)\n        \n        toolbarItems = [flexibleSpace, shareButton, space, cropButton, space, dropButton]\n        navigationController?.setToolbarHidden(false, animated: true)\n\n        DispatchQueue.main.async {\n            self.rotated()\n        }\n\n        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapGestureRecognizer(_:)))\n        tapGesture.numberOfTapsRequired = 1\n        imageScrollView.addGestureRecognizer(tapGesture)\n\n        var urls = [URL]()\n        if let result = note?.content.getImagesAndFiles() {\n            for item in result {\n                urls.append(item.url)\n            }\n        }\n\n        imageUrls = urls\n\n        if let url = url, let index = imageUrls.firstIndex(of: url) {\n            currentIndex = index\n        }\n    }\n\n    @objc public func tapGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {\n        let center = gestureRecognizer.location(in: gestureRecognizer.view)\n        var selectedUrl: URL?\n\n        if let zoomView = imageScrollView.zoomView, zoomView.frame.width > view.frame.width {\n            return\n        }\n\n        if center.x < 40 {\n            selectedUrl = prevImage()\n        }\n\n        if center.x > imageScrollView.frame.width - 40 {\n            selectedUrl = nextImage()\n        }\n\n        if let url = selectedUrl, let data = try? Data(contentsOf: url), let image = UIImage(data: data) {\n            imageScrollView.display(image: image)\n            self.image = image\n            self.url = selectedUrl\n        }\n    }\n\n    private func nextImage() -> URL {\n        currentIndex += 1\n\n        if currentIndex >= imageUrls.count {\n            currentIndex = 0\n        }\n\n        return imageUrls[currentIndex]\n    }\n\n    private func prevImage() -> URL {\n        currentIndex -= 1\n\n        if currentIndex < 0 {\n            currentIndex = imageUrls.count - 1\n        }\n\n        return imageUrls[currentIndex]\n    }\n    \n    @IBAction func share() {\n        guard let url = self.url else { return }\n\n        AudioServicesPlaySystemSound(1519)\n\n        let objectsToShare = [url] as [Any]\n        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)\n        activityVC.excludedActivityTypes = [UIActivity.ActivityType.addToReadingList]\n\n        if UIDevice.current.userInterfaceIdiom == .pad {\n            guard let popOver = activityVC.popoverPresentationController else { return }\n            popOver.permittedArrowDirections = .down\n            popOver.sourceView = view\n            popOver.sourceRect = CGRect(x: view.bounds.midX, y: view.bounds.midY, width: 0, height: 0)\n        }\n\n        present(activityVC, animated: true, completion: nil)\n    }\n\n    @IBAction func done() {\n        dismiss(animated: true, completion: nil)\n    }\n\n    @IBAction func crop() {\n        guard let image = image else { return }\n        let cropViewController = CropViewController(image: image)\n        cropViewController.delegate = self\n        cropViewController.hidesNavigationBar = false\n        cropViewController.modalPresentationStyle = .fullScreen\n        cropViewController.modalTransitionStyle = .crossDissolve\n        cropViewController.transitioningDelegate = nil\n        present(cropViewController, animated: true, completion: nil)\n    }\n\n    @IBAction func trashBin() {\n        let messageText = NSLocalizedString(\"Are you sure you want to delete this image?\", comment: \"\")\n\n        let alertController = UIAlertController(title: NSLocalizedString(\"Picture removing\", comment: \"\"), message: messageText, preferredStyle: .alert)\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            if let url = self.url, let _ = self.note, let textView = UIApplication.getEVC().editArea {\n                if let imageRange = textView.textStorage.getImageRange(url: url) {\n                    textView.selectedRange = imageRange\n\n                    if let should = textView.delegate?.textView?(textView, shouldChangeTextIn: imageRange, replacementText: \"\") {\n                        guard should else { return }\n                    }\n\n                    textView.insertAttributedText(NSAttributedString(string: \"\"))\n                }\n            }\n\n            self.navigationController?.popViewController(animated: true)\n        }\n\n        let cancelAction = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.present(alertController, animated: true, completion: nil)\n    }\n\n    @objc func rotated() {\n        imageScrollView.setup()\n        imageScrollView.imageContentMode = .aspectFit\n        imageScrollView.initialOffset = .center\n        imageScrollView.display(image: image!)\n    }\n\n    func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {\n        if let url = url {\n            try? image.jpegData(compressionQuality: 0.6)?.write(to: url)\n            let cacheImage = NoteAttachment.getCacheUrl(from: url, prefix: \"ThumbnailsBigInline\")\n\n            if let path = cacheImage?.path, FileManager.default.fileExists(atPath: path) {\n                try? FileManager.default.removeItem(at: cacheImage!)\n            }\n\n            UIApplication.getEVC().refill()\n        }\n\n        self.imageScrollView.display(image: image)\n\n        if let windowScene = UIApplication.shared.connectedScenes\n            .filter({ $0.activationState == .foregroundActive })\n            .compactMap({ $0 as? UIWindowScene })\n            .first,\n           let rootViewController = windowScene.windows.first(where: { $0.isKeyWindow })?.rootViewController {\n            \n            navigationController?.navigationBar.isTranslucent = true\n            rootViewController.dismiss(animated: true, completion: nil)\n        }\n    }\n    \n    func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {\n        navigationController?.navigationBar.isTranslucent = true\n        dismiss(animated: true, completion: nil)\n    }\n}\n\nextension UIBarButtonItem {\n    static func menuButton(_ target: Any?,\n                           action: Selector,\n                           imageName: String,\n                           size:CGSize = CGSize(width: 32, height: 32),\n                           tintColor:UIColor?) -> UIBarButtonItem\n    {\n        let button = UIButton(type: .system)\n        button.tintColor = tintColor\n        button.setImage(UIImage(named: imageName), for: .normal)\n        button.addTarget(target, action: action, for: .touchUpInside)\n\n        let menuBarItem = UIBarButtonItem(customView: button)\n        menuBarItem.customView?.translatesAutoresizingMaskIntoConstraints = false\n        menuBarItem.customView?.heightAnchor.constraint(equalToConstant: size.height).isActive = true\n        menuBarItem.customView?.widthAnchor.constraint(equalToConstant: size.width).isActive = true\n\n        return menuBarItem\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundleDocumentTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>textbundle</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeIconFiles</key>\n\t\t\t<array>\n\t\t\t\t<string>TextBundle.icns</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeMIMETypes</key>\n\t\t\t<array>\n\t\t\t\t<string>text/x-textbundle</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Alternate</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>org.textbundle.package</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeExtensions</key>\n\t\t\t<array>\n\t\t\t\t<string>md</string>\n\t\t\t\t<string>markdown</string>\n\t\t\t\t<string>mmd</string>\n\t\t\t\t<string>multimarkdown</string>\n\t\t\t\t<string>mdown</string>\n\t\t\t\t<string>mkdn</string>\n\t\t\t\t<string>mkd</string>\n\t\t\t\t<string>mdwn</string>\n\t\t\t\t<string>mdtxt</string>\n\t\t\t\t<string>mdtext</string>\n\t\t\t\t<string>mdml</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeMIMETypes</key>\n\t\t\t<array>\n\t\t\t\t<string>text/x-markdown</string>\n\t\t\t</array>\n\t\t\t<key>CFBundleTypeName</key>\n\t\t\t<string>Markdown document</string>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>LSHandlerRank</key>\n\t\t\t<string>Alternate</string>\n\t\t\t<key>LSItemContentTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleGetInfoString</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleURLTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>makeNote</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.mobile.FSNotes-iOS</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>fsnotes</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>makeNote</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.mobile.FSNotes-iOS</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>nv</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Viewer</string>\n\t\t\t<key>CFBundleURLIconFile</key>\n\t\t\t<string>makeNote</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>co.fluder.mobile.FSNotes-iOS</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>nvalt</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.productivity</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>LSSupportsOpeningDocumentsInPlace</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSCameraUsageDescription</key>\n\t<string>Needs for attach photo in notes</string>\n\t<key>NSFaceIDUsageDescription</key>\n\t<string>Note encryption and decryption with FaceID</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string></string>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string>Requested when photo attached</string>\n\t<key>NSPhotoLibraryAddUsageDescription</key>\n\t<string>Needs permission to write images in photos app</string>\n\t<key>NSPhotoLibraryUsageDescription</key>\n\t<string>Needs for attach images in notes</string>\n\t<key>NSPrivacyAccessedAPITypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategoryActiveKeyboards</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>54BD.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>DDA9.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategorySystemBootTime</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>35F9.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategoryUserDefaults</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>CA92.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>NSUbiquitousContainers</key>\n\t<dict>\n\t\t<key>iCloud.co.fluder.fsnotes</key>\n\t\t<dict>\n\t\t\t<key>NSUbiquitousContainerIsDocumentScopePublic</key>\n\t\t\t<true/>\n\t\t\t<key>NSUbiquitousContainerSupportedFolderLevels</key>\n\t\t\t<string>One</string>\n\t\t</dict>\n\t</dict>\n\t<key>NSUserActivityTypes</key>\n\t<array>\n\t\t<string>es.fsnot.handoff-open-note</string>\n\t</array>\n\t<key>UIAppFonts</key>\n\t<array>\n\t\t<string>SourceCodePro-Bold.ttf</string>\n\t\t<string>SourceCodePro-Black.ttf</string>\n\t\t<string>SourceCodePro-Regular.ttf</string>\n\t\t<string>SourceCodePro-It.ttf</string>\n\t\t<string>SourceCodePro-BoldIt.ttf</string>\n\t</array>\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\t<key>UISceneStoryboardFile</key>\n\t\t\t\t\t<string>Main</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</dict>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>fetch</string>\n\t\t<string>remote-notification</string>\n\t</array>\n\t<key>UIFileSharingEnabled</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>Launch Screen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportsDocumentBrowser</key>\n\t<true/>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<true/>\n\t<key>UTExportedTypeDeclarations</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>com.apple.package</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>TextBundle</string>\n\t\t\t<key>UTTypeIconFiles</key>\n\t\t\t<array>\n\t\t\t\t<string>TextBundle.icns</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>org.textbundle.package</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>textbundle</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>UTTypeConformsTo</key>\n\t\t\t<array>\n\t\t\t\t<string>public.data</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeDescription</key>\n\t\t\t<string>Markdown</string>\n\t\t\t<key>UTTypeIconFiles</key>\n\t\t\t<array>\n\t\t\t\t<string>Markdown.icns</string>\n\t\t\t</array>\n\t\t\t<key>UTTypeIdentifier</key>\n\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t<key>UTTypeTagSpecification</key>\n\t\t\t<dict>\n\t\t\t\t<key>public.filename-extension</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>md</string>\n\t\t\t\t\t<string>markdown</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes iOS/InfoPlist.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"CFBundleDisplayName\" : {\n      \"comment\" : \"Bundle display name\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"CFBundleGetInfoString\" : {\n      \"comment\" : \"Get Info string\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"\"\n          }\n        }\n      }\n    },\n    \"CFBundleName\" : {\n      \"comment\" : \"Bundle name\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"Markdown\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Markdown\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Markdown\"\n          }\n        }\n      }\n    },\n    \"NSCameraUsageDescription\" : {\n      \"comment\" : \"Privacy - Camera Usage Description\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Potřeba pro přidávání fotek do poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sie müssen ein Foto zu Notizen hinzufügen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Needs for attach photo in notes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Needs for attach photo in notes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट्स में फोटो संलग्न करने की आवश्यकता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"E' necessario per poter aggiungere foto nelle note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"撮影した写真をノートに追加できるようにするため\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Behoeften voor het bijvoegen van foto in notities\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Necessário para anexar fotos às notas\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Потреби вкладати фото в нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"需要在笔记中附加照片\"\n          }\n        }\n      }\n    },\n    \"NSFaceIDUsageDescription\" : {\n      \"comment\" : \"Privacy - Face ID Usage Description\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Šifrování a dešifrování poznámek pomocí Face ID\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ver- und Entschlüsselung mit FaceID\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Note encryption and decryption with FaceID\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note encryption and decryption with FaceID\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FaceID के साथ नोट्स एन्क्रिप्शन और डिक्रिप्शन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crittografia e decrittografia delle note con FaceID\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FaceIDによるノートの暗号化・復号化のため\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Let op codering en decodering met FaceID\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criptografar e descriptografar com FaceID\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шифрування та дешифрування за допомогою FaceID\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"注意使用 Face 进行加密和解密\"\n          }\n        }\n      }\n    },\n    \"NSHumanReadableCopyright\" : {\n      \"comment\" : \"Copyright (human-readable)\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"\"\n          }\n        }\n      }\n    },\n    \"NSLocationWhenInUseUsageDescription\" : {\n      \"comment\" : \"Privacy - Location When In Use Usage Description\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyžádáno při připojení fotky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wird beim Anhängen eines Fotos angefordert\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Requested when photo attached\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Requested when photo attached\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फोटो संलग्न होने पर अनुरोध\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"E' richiesto quando viene allegata una foto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像を挿入した際にリクエストされます\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gevraagd wanneer foto bijgevoegd\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Necessário quando existem fotos anexadas\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Потрібен дозвіл коли додається фотографія у нотатку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"附上照片时请求\"\n          }\n        }\n      }\n    },\n    \"NSPhotoLibraryAddUsageDescription\" : {\n      \"comment\" : \"Privacy - Photo Library Additions Usage Description\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Potřeba pro ukládání fotek do knihovny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erfordert eine Berechtigung zum Aufzeichnen von Bildern in der Foto-App\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Needs permission to write images in photos app\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Needs permission to write images in photos app\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोटो ऐप में चित्र लिखने के लिए अनुमति की आवश्यकता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"E' necessario il permesso in scrittura per salvare immagini nell'app Foto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"挿入した画像をライブラリに保存する際に必要です\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heeft toestemming nodig om afbeeldingen in de foto-app te schrijven\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Precisa de permissão para escrever imagens no aplicativo de fotos\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Потрібен дозвіл на запис зображень у додаток для фотографій\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"需要权限才能在照片应用中写入图像\"\n          }\n        }\n      }\n    },\n    \"NSPhotoLibraryUsageDescription\" : {\n      \"comment\" : \"Privacy - Photo Library Usage Description\",\n      \"extractionState\" : \"extracted_with_value\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Potřeba pro připojení obrázků do poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erfordert das Anhängen von Bildern an Notizen\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"new\",\n            \"value\" : \"Needs for attach images in notes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Needs for attach images in notes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट्स में चित्र संलग्न करने की आवश्यकता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"E' necessario per allegare immagini nelle note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像をノートに挿入する際に必要です\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Behoeften voor het toevoegen van afbeeldingen in notities\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Necessário para anexar imagens às notas\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Потрібен дозвіл коли додається зображення у нотатку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"需要在笔记中附加图像\"\n          }\n        }\n      }\n    },\n    \"TextBundle\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "FSNotes iOS/Launch Screen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"32700.99.1234\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina6_12\" orientation=\"portrait\" appearance=\"dark\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"22685\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"393\" height=\"852\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"LaunchScreenImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"foE-Yx-IVb\">\n                                <rect key=\"frame\" x=\"96.666666666666686\" y=\"362\" width=\"200\" height=\"128\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"200\" id=\"hBZ-XP-yVy\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"128\" id=\"laL-L4-YB5\"/>\n                                </constraints>\n                            </imageView>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"foE-Yx-IVb\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"791-8n-0WW\"/>\n                            <constraint firstItem=\"foE-Yx-IVb\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"oEu-82-xFP\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"52.671755725190835\" y=\"374.64788732394368\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchScreenImage\" width=\"341.33334350585938\" height=\"341.33334350585938\"/>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS/LaunchImage.launchimage/Contents.json",
    "content": "{\n    \"images\": [\n        {\n            \"extent\": \"full-screen\",\n            \"idiom\": \"iphone\",\n            \"subtype\": \"2436h\",\n            \"filename\": \"Default1125x2436.png\",\n            \"minimum-system-version\": \"11.0\",\n            \"orientation\": \"portrait\",\n            \"scale\": \"3x\"\n        },\n        {\n            \"extent\": \"full-screen\",\n            \"idiom\": \"iphone\",\n            \"subtype\": \"2436h\",\n            \"filename\": \"Default2436x1125.png\",\n            \"minimum-system-version\": \"11.0\",\n            \"orientation\": \"landscape\",\n            \"scale\": \"3x\"\n        },\n        {\n            \"orientation\": \"landscape\",\n            \"idiom\": \"tv\",\n            \"filename\": \"Default3840x2160.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"11.0\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"landscape\",\n            \"idiom\": \"tv\",\n            \"filename\": \"Default1920x1080.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"9.0\",\n            \"scale\": \"1x\"\n        },\n        {\n            \"extent\": \"full-screen\",\n            \"idiom\": \"iphone\",\n            \"subtype\": \"736h\",\n            \"filename\": \"Default1242x2208.png\",\n            \"minimum-system-version\": \"8.0\",\n            \"orientation\": \"portrait\",\n            \"scale\": \"3x\"\n        },\n        {\n            \"extent\": \"full-screen\",\n            \"idiom\": \"iphone\",\n            \"subtype\": \"736h\",\n            \"filename\": \"Default2208x1242.png\",\n            \"minimum-system-version\": \"8.0\",\n            \"orientation\": \"landscape\",\n            \"scale\": \"3x\"\n        },\n        {\n            \"extent\": \"full-screen\",\n            \"idiom\": \"iphone\",\n            \"subtype\": \"667h\",\n            \"filename\": \"Default750x1334.png\",\n            \"minimum-system-version\": \"8.0\",\n            \"orientation\": \"portrait\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"iphone\",\n            \"filename\": \"Default640x960.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"7.0\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"extent\": \"full-screen\",\n            \"idiom\": \"iphone\",\n            \"subtype\": \"retina4\",\n            \"filename\": \"Default640x1136.png\",\n            \"minimum-system-version\": \"7.0\",\n            \"orientation\": \"portrait\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default768x1024.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"7.0\",\n            \"scale\": \"1x\"\n        },\n        {\n            \"orientation\": \"landscape\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default1024x768.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"7.0\",\n            \"scale\": \"1x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default1536x2048.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"7.0\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"landscape\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default2048x1536.png\",\n            \"extent\": \"full-screen\",\n            \"minimum-system-version\": \"7.0\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"iphone\",\n            \"filename\": \"Default320x480.png\",\n            \"extent\": \"full-screen\",\n            \"scale\": \"1x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"iphone\",\n            \"filename\": \"Default640x960.png\",\n            \"extent\": \"full-screen\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"iphone\",\n            \"filename\": \"Default640x1136.png\",\n            \"extent\": \"full-screen\",\n            \"subtype\": \"retina4\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default768x1024.png\",\n            \"extent\": \"full-screen\",\n            \"scale\": \"1x\"\n        },\n        {\n            \"orientation\": \"landscape\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default1024x768.png\",\n            \"extent\": \"full-screen\",\n            \"scale\": \"1x\"\n        },\n        {\n            \"orientation\": \"portrait\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default1536x2048.png\",\n            \"extent\": \"full-screen\",\n            \"scale\": \"2x\"\n        },\n        {\n            \"orientation\": \"landscape\",\n            \"idiom\": \"ipad\",\n            \"filename\": \"Default2048x1536.png\",\n            \"extent\": \"full-screen\",\n            \"scale\": \"2x\"\n        }\n    ],\n    \"info\": {\n        \"version\": 1,\n        \"author\": \"fanstudio\"\n    }\n}"
  },
  {
    "path": "FSNotes iOS/Localizable.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"...\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"…\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"…\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"...\"\n          }\n        }\n      }\n    },\n    \"+\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"+\"\n          }\n        }\n      }\n    },\n    \"✅ - \" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ -\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ -\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"✅ - \"\n          }\n        }\n      }\n    },\n    \"Add External Folder\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přidat externí složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Externer Ordner\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dossier externe\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बाह्य फ़ोल्डर जोड़ें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cartella esterna\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"外部フォルダを追加\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Externe map\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pasta Externa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Добавить внешнюю папку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Harici Klasör Ekle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зовнішня папка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"添加外部文件夹\"\n          }\n        }\n      }\n    },\n    \"Advanced\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pokročilé\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Profi\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Avancé\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"उन्नत\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Esteso\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プロ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verlengd\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Estendido\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расширенные\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gelişmiş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розширені\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"高级\"\n          }\n        }\n      }\n    },\n    \"Are you sure you want to delete all versions of this note?\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Určitě chcete smazat všechny verze této poznámky?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Möchten Sie wirklich alle Versionen dieser Notiz löschen?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voulez-vous vraiment supprimer toutes les versions de cette note ?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वाकई इस नोट के सभी संस्करण हटाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sei sicuro di voler eliminare tutte le versioni di questa nota?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"このノートの全バージョンを削除しますか？\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weet u zeker dat u alle versies van deze notitie wilt verwijderen?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem certeza de que deseja excluir todas as versões desta nota?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы уверены, что хотите удалить все версии этой заметки?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bu notun tüm sürümlerini silmek istediğinizden emin misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ви впевнені, що хочете видалити всі версії цієї нотатки?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"是否确定要删除此笔记的所有历史版本?\"\n          }\n        }\n      }\n    },\n    \"Are you sure you want to delete the history of all notes?\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Určitě chcete smazat historii všech poznámek?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Möchten Sie den Verlauf aller Notizen wirklich löschen?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voulez-vous vraiment supprimer l'historique de toutes les notes ?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वाकई सभी नोट्स का इतिहास हटाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sei sicuro di voler eliminare la cronologia di tutte le note?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべてのノートの履歴を削除しますか？\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weet u zeker dat u de geschiedenis van alle notities wilt verwijderen?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem certeza de que deseja excluir o histórico de todas as notas?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы уверены, что хотите удалить историю всех заметок?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tüm notların geçmişini silmek istediğinizden emin misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ви впевнені, що хочете видалити історію всіх нотаток?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"是否确定要删除所有笔记的历史版本?\"\n          }\n        }\n      }\n    },\n    \"Are you sure you want to delete this image?\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Určitě chcete smazat tento obrázek?\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Möchten Sie dieses Bild wirklich löschen?\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Êtes-vous sûr de vouloir supprimer cette image ?\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्या आप वाकई में इस छवि को हटाना चाहते हैं?\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sei sicuro di voler eliminare questa immagine?\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"この画像を削除しますか？\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Weet je zeker dat je deze afbeelding wilt verwijderen?\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tem certeza de que deseja apagar esta imagem?\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вы уверены, что хотите удалить это изображение?\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bu resmi silmek istediğinizden emin misiniz?\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ви впевнені, що хочете видалити це зображення?\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"是否确定要删除此图像?\"\n          }\n        }\n      }\n    },\n    \"Ascending\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vzestupně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aufsteigend\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ascendant\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आरोही\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crescente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"昇順\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oplopend\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ascendente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Восходящее\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Artan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Висхідний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"升序\"\n          }\n        }\n      }\n    },\n    \"Auto Rename By Title\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Podle nadpisu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nach Titel umbenennen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer automatiquement par titre\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक द्वारा स्वतः नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina per titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトルをファイル名に自動反映\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naam wijzigen op titel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomeação automática por título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Авто переименование \"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığa Göre Otomatik Yeniden Adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоматичне перейменування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"按内容第一行自动重命名\"\n          }\n        }\n      }\n    },\n    \"Autocorrection\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatická oprava\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Autokorrektur\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Autocorrection\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्वतः सुधार\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Autocorrezione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自動訂正\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Autocorrectie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Auto correção\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автокоррекция\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otomatik Düzeltme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автокорекція\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"自动校正\"\n          }\n        }\n      }\n    },\n    \"Autoname By Title\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatické pojmenování podle názvu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische Benennung nach Titel\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dénomination automatique par titre\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक के अनुसार स्वचालित नामकरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Denominazione automatica per titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトルによる自動命名\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Automatische naamgeving op titel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nomeação automática por título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоименование по заголовку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlığa Göre Otomatik Adlandırma\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Автоіменування за заголовком\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"按标题自动命名\"\n          }\n        }\n      }\n    },\n    \"build\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"build\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"version\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"build\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"build\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ビルド\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"build\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"versão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"сборка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"білд\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"构建\"\n          }\n        }\n      }\n    },\n    \"Cancel\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zrušit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abbrechen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuler\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"रद्द करें\"\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        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Annuleer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cancelar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Отменить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İptal\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скасувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消\"\n          }\n        }\n      }\n    },\n    \"Change Creation Date\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Změnit datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum erstellt\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Modifier la Date de création\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तिथि बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum gecreeërd\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data Criada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Изменить дату создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturma Tarihini Değiştir\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更改创建日期\"\n          }\n        }\n      }\n    },\n    \"Check Spelling\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kontrolovat pravopis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechtschreibung prüfen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vérifier l’orthographique\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्पेलिंग जांचे\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Controllo ortografico\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"スペルチェック\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Spellingcheck\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificação Ortográfica\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Проверять орфографию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazımı Denetle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перевірка правопису\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"检查拼写\"\n          }\n        }\n      }\n    },\n    \"Code\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kód\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Codice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コード\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Код\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Код\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码字体\"\n          }\n        }\n      }\n    },\n    \"Code Block Live Highlighting\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Živé zvýraznění kódu \"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code hervorheben\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mise en surbrillance automatique des blocs de code\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड ब्लॉक लाइव हाइलाइटिंग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Evidenzia il blocco di codice attivo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードブロックの色付け\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Codeblok live markering\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Realçar bloco de código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Живая подсветка кода\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod Bloğu Canlı Vurgulama\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Живе підсвічування блоку коду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码块实时高亮\"\n          }\n        }\n      }\n    },\n    \"Code Theme\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Motiv kódu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code-Design\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Thème de codes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोड थीम\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema del codice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コードテーマ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Code thema\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema do código\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Код темы\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kod Teması\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема коду\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"代码主题\"\n          }\n        }\n      }\n    },\n    \"Compatible with Bear and Ulysses (textbundle), markdown, txt.\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kompatibilní s Bear a Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kompatibel mit Bear und Ulysses (Textbundle), markdown, txt.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Compatible avec Bear et Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bear और Ulysses (textbundle), markdown, txt के साथ संगत।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Compatibile con Bear and Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bear and Ulysses (textbundle), markdown, txtと互換性があります\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Compatibel met Bear en Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Compatível com Bear e Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Совместим с Bear и Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bear ve Ulysses (textbundle), markdown, txt ile uyumludur.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сумісний з Bear and Ulysses (textbundle), markdown, txt.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"兼容 Bear(熊掌记) and Ulysses (textbundle),markdown,txt.\"\n          }\n        }\n      }\n    },\n    \"Container\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kontejner\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कंटेनर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"コンテナ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Container\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Контейнер\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kapsayıcı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Контейнер\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"容器\"\n          }\n        }\n      }\n    },\n    \"Copy Plain Text\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopírovat prostý text\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Text kopieren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copier le texte brut\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सादा पाठ कॉपी करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copia testo semplice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プレインテキストとしてコピー\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieer platte tekst\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Copiar texto simples\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопировать обычный текст\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düz Metni Kopyala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Скопіювати звичайний текст\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拷贝纯文本\"\n          }\n        }\n      }\n    },\n    \"Create Folder\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner erstellen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer le dossier\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फोल्डर बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crea cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規フォルダ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map aanmaken\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать папку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити папку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建文件夹\"\n          }\n        }\n      }\n    },\n    \"Create folder:\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit složku:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner erstellen:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer le dossier :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फोल्डर बनाएं:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crea cartella:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規フォルダ:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map aanmaken:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar pasta:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать папку:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör oluştur:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити папку:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建文件夹:\"\n          }\n        }\n      }\n    },\n    \"Create Web Page\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vytvořit webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web-Seite erstellen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Créer une page Web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crea pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページの作成\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Create Web Page\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Criar página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Создать веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfası Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建网页\"\n          }\n        }\n      }\n    },\n    \"Creation Date\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum vytvoření\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erstelldatum\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de création\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निर्माण तिथि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di creazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"作成日\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aanmaakdatum\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de criação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата создания\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Oluşturma Tarihi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Датою створення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"创建日期\"\n          }\n        }\n      }\n    },\n    \"Decrypt\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dešifrovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entschlüsseln\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déchiffrer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डिक्रिप्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decriptare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrypt\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrypt\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Desencriptar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расшифровать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifresini Çöz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розшифрувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"解密\"\n          }\n        }\n      }\n    },\n    \"Default Keyboard\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Výchozí klávesnice\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Standard-Tastatur\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clavier par défaut\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डिफ़ॉल्ट कीबोर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tastiera predefinita\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"エディタで使用するデフォルトキーボード\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Standaard toetsenbord\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Teclado padrão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Клавиатура по умолчанию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Varsayılan Klavye\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Клавіатура за замовчуванням\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"默认键盘\"\n          }\n        }\n      }\n    },\n    \"Delete\" : {\n      \"comment\" : \"Table row action\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Löschen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijderen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eliminar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除\"\n          }\n        }\n      }\n    },\n    \"Delete Web Page\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Smazat webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web-Seite löschen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer la page Web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज हटाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Elimina pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ウェブページを削除する\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina verwijderen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Excluir página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfasını Sil\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"删除网页\"\n          }\n        }\n      }\n    },\n    \"Descending\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sestupně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Absteigend\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descendant\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अवरोही\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Decrescente\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"降順\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aflopend\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Descendente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нисходящее\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Azalan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Низхідний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"降序\"\n          }\n        }\n      }\n    },\n    \"Documents\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dokumenty\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dokumente\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documents\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दस्तावेज़\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documenti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ドキュメント\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documenten\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Documentos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Документы\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Belgeler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Документи\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件\"\n          }\n        }\n      }\n    },\n    \"Done\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hotovo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erledigt\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fait\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"हो गया\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fatto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Done\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gedaan\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Feito\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Готово\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamamlandı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Готово\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"完成\"\n          }\n        }\n      }\n    },\n    \"Duplicate\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplikovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplikat\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dupliquer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"डुप्लिकेट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"複製\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicaat\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Duplicada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дублировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çoğalt\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Створити копію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"生成副本\"\n          }\n        }\n      }\n    },\n    \"Dynamic Type\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dynamické písmo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dynamische Schriftart\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Type dynamique\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गतिशील प्रकार\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipizzazione dinamica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ダイナミックタイプ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dynamisch Type\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipo dinâmico\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Динамический шрифт\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dinamik Tür\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Динамічний шрифт\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"动态类型\"\n          }\n        }\n      }\n    },\n    \"Editor\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editorin\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Éditeur\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संपादक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editrice\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"エディタ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Editor\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактор\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Düzenleyici\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Редактор\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"编辑\"\n          }\n        }\n      }\n    },\n    \"Empty Bin\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vyprázdnit koš\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Leerer Behälter\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vider la Corbeille\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कूडा खाली करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cestino vuoto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ゴミ箱を空にする\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lege bak\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caixa vazia\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистить корзину\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çöp Kutusunu Boşalt\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистити кошик\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清空回收站\"\n          }\n        }\n      }\n    },\n    \"Encrypt\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zašifrovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschlüsseln Sie\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chiffrer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"एन्क्रिप्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Crittografare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"エンクリプト\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versleutel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Encriptar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зашифровать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifrele\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зашифрувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"加密\"\n          }\n        }\n      }\n    },\n    \"Enter folder name\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte název složky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordnername eingeben\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrez le nom du dossier\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर का नाम दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci il nome della cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダ名を入力\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ga naar onze mape\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Digite o nome da pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите имя папки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör adını girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть назву папки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"输入文件夹名称\"\n          }\n        }\n      }\n    },\n    \"Enter Master Password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte hlavní heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort eingeben\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrez le mot de passe principal\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मास्टर पासवर्ड दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci la Master Password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マスターパスワードを入力\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer het hoofdwachtwoord in\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduzir Palavra-passe Mestra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите мастер-пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana Parolayı Girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"输入主密码\"\n          }\n        }\n      }\n    },\n    \"Enter new tag name\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte název nové značky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag eingeben\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrez un nouveau nom d’étiquette\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया टैग नाम दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Interisci il nuovo nome del tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規タグ名を入力\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer een nieuwe tagnaam in\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Insira o novo nome da tag\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите новое имя тега\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni etiket adını girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть назву тега\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"输入新标签名称\"\n          }\n        }\n      }\n    },\n    \"Enter note name\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zadejte název poznámky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizname eingeben\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entrez le nom de la note\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट का नाम दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inserisci il nome della nota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノート名を入力\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer notitie naam in\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Introduzir nome da nota\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введите название заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Not adını girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть назву нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"输入备注名称\"\n          }\n        }\n      }\n    },\n    \"Extension\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přípona\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dateiformat\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Extension\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"एक्सटेंशन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Estensione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"拡張子\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uitbreiding\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Extensão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расширение\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uzantı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розширення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件后缀格式\"\n          }\n        }\n      }\n    },\n    \"Family\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rodina\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schriftfamilie\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Famille\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"परिवार\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Famiglia di font\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファミリー\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lettertype familie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Família de fontes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Семья\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aile\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сімейство шрифтів\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字体集\"\n          }\n        }\n      }\n    },\n    \"File with this name already exist\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soubor s tímto názvem už existuje\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eine Datei mit diesem Namen existiert bereits\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Un fichier avec ce nom existe déjà\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इस नाम वाली फ़ाइल पहले से मौजूद है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Il file con questo nome già esiste\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"同名のファイルがすでに存在しています\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bestand met deze naam bestaat al\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Já existe um ficheiro com este nome\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файл с таким именем уже существует\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bu isimde dosya zaten mevcut\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файл з цим іменем вже існує\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"具有此名称的文件已存在\"\n          }\n        }\n      }\n    },\n    \"Files\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soubory\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datei Format\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fichiers\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ाइल\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato del file\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファイル形式\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bestandsformaat\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato de arquivo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файлы\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dosyalar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Файли\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件\"\n          }\n        }\n      }\n    },\n    \"Files Naming\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Názvy souborů\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dateinamen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nommage des fichiers\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ाइलों का नामकरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Denominazione dei file\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファイル命名\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naamgeving van bestanden\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nomenclatura de arquivos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Именование файлов\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dosya Adlandırma\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Іменування файлів\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件命名\"\n          }\n        }\n      }\n    },\n    \"Folder name:\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Název složky:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordnername:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nom de dossier :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर का नाम:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nome cartella:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダ名:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naam van de map:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nome da pasta:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Название папки:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasör adı:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Назва папки:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件夹名称:\"\n          }\n        }\n      }\n    },\n    \"Folder with this name already exist\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Složka s tímto názvem už existuje\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ein Ordner mit diesem Namen existiert bereits\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Un dossier avec ce nom existe déjà\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इस नाम वाला फ़ोल्डर पहले से मौजूद है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La cartella con questo nome già esiste\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"同名のフォルダがすでに存在しています\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Map met deze naam bestaat al\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Já existe uma pasta com este nome\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Папка с таким именем уже существует\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bu isimde klasör zaten mevcut\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Папка з цим іменем вже існує\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"具有此名称的文件夹已存在\"\n          }\n        }\n      }\n    },\n    \"Folders\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Složky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dossiers\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cartelle\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"プロジェクト\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mappen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pastas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Папки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Папки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文件夹\"\n          }\n        }\n      }\n    },\n    \"Font\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Písmo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schrift\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Police\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ॉन्ट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carattere\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォント\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lettertype\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Letra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazı Tipi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Шрифт\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字体\"\n          }\n        }\n      }\n    },\n    \"Font Family\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rodina písma\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schriftart\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Famille de police\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ॉन्ट परिवार\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipo carattere\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォントファミリー\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lettertypefamilie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Família do tipo de letra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Семейство шрифтов\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazı Tipi Ailesi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сімейство шрифтів\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字体集\"\n          }\n        }\n      }\n    },\n    \"Font Size\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Velikost písma\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Schriftgröße\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taille de police\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ॉन्ट आकार\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dimensione carattere\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォントサイズ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lettertypegrootte\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tamanho da letra\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Размер шрифта\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yazı Tipi Boyutu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розмір шрифту\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"字体大小\"\n          }\n        }\n      }\n    },\n    \"Format: Untitled Note\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: Poznámka bez názvu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: Untitled Note\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format : Note sans titre\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: शीर्षक रहित नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: Untitled Note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: 無題のノート\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formaat: Untitled Note\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: Untitled Note\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: Без названия\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: Başlıksız Not\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: Untitled Note\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式:无标题笔记\"\n          }\n        }\n      }\n    },\n    \"Format: yyyy-MM-dd hh.mm.ss a\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format : yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formaat: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: yyyy-AA-gg hh.dd.ss a\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyy-MM-dd hh.mm.ss a\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式: yyyy-MM-dd hh.mm.ss a\"\n          }\n        }\n      }\n    },\n    \"Format: yyyyMMddHHmmss\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formát: yyyyMMddHHmmss\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format: yyyyMMddHHmmss\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Format : yyyyMMddHHmmss\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रारूप: yyyyMMddHHmmss\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyyMMddHHmmss\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォーマット: yyyyMMddHHmmss\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formaat: yyyyMMddHHmmss\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Formato: yyyyMMddHHmmss\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyyMMddHHmmss\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biçim: yyyyAAggSSddss\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Формат: yyyyMMddHHmmss\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"格式: yyyyMMddHHmmss\"\n          }\n        }\n      }\n    },\n    \"FSNotes\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotları\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"FSNotes\"\n          }\n        }\n      }\n    },\n    \"General\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Obecné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Allgemein\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Général\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सामान्य\"\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        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Algemeen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Главные\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Genel\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Загальні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"常规\"\n          }\n        }\n      }\n    },\n    \"Git\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git\"\n          }\n        }\n      }\n    },\n    \"Git Add/commit/push\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git přidat/commit/push\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट जोड़ें/कमिट/पुश\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Ekle/Gönder/Gönder\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Add/commit/push\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 添加/提交/推送\"\n          }\n        }\n      }\n    },\n    \"Git Settings\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavení Gitu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git settings\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paramètres git\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गिट प्राथमिकताएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git settings\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git settings\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git settings\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git settings\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки Git\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git Ayarları\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування Git\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Git 设置\"\n          }\n        }\n      }\n    },\n    \"History\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Historie\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschichte\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Histoire\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतिहास\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Storia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"履歴\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschiedenis\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"História\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"История\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geçmiş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Історія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记历史版本\"\n          }\n        }\n      }\n    },\n    \"iCloud Drive\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud ड्राइव\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Sürücüsü\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud Drive\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"iCloud 云同步\"\n          }\n        }\n      }\n    },\n    \"Icon\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ikona\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icon\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icône\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"आइकन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icon\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"アイコン\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Icoon\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ícone\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Иконка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Simge\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Іконка програми\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"图标\"\n          }\n        }\n      }\n    },\n    \"Images source:\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zdroj obrázků:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bildquelle:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Source des images :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चित्र स्रोत:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fonti delle immagini:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像ソース:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afbeeldingen bron:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fonte das imagens:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Источник изображений:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görüntü kaynağı:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Джерело зображень:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"图片来源:\"\n          }\n        }\n      }\n    },\n    \"Import Notes\" : {\n      \"comment\" : \"Main view popover table\\nSettings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importovat poznámky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importieren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importer des notes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट्स आयात करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importa note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートのインポート\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importeren notities\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Importar notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Импортировать заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notları İçe Aktar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Імпортувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"导入笔记\"\n          }\n        }\n      }\n    },\n    \"Inbox\" : {\n      \"comment\" : \"Inbox in sidebar\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Příchozí\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Eingang\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Boîte de réception\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इनबॉक्स\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Entrata\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未整理\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Postvak In\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caixa de entrada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Входящие\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gelen Kutusu\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вхідні\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"收集箱\"\n          }\n        }\n      }\n    },\n    \"Insert\" : {\n\n    },\n    \"Invalid Password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neplatné heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ungültiges Passwort\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe incorrect\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अवैध पासवर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password non valida\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"無効なパスワードです\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ongeldig wachtwoord\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe inválida\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неверный пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geçersiz Parola\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Недійсний пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码无效\"\n          }\n        }\n      }\n    },\n    \"Library\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Knihovna\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seitenleiste\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Barre latérale\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लाइब्रेरी\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Barra laterale\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバー\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zijbalk\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Библиотека\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kütüphane\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Бічна панель\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"文库\"\n          }\n        }\n      }\n    },\n    \"Line Spacing\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řádkování\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zeilenabstand\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Interligne\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पंक्ति रिक्ति\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Interlinea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行間隔\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Regelafstand\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Espaçamento entre linhas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Расстояние между строками\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Satır Aralığı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Міжрядковий інтервал\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"行距\"\n          }\n        }\n      }\n    },\n    \"Live Images Preview\" : {\n      \"comment\" : \"Settings\",\n      \"extractionState\" : \"stale\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Živý náhled obrázků\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bilder аnzeigen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aperçu des images\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लाइव छवियाँ पूर्वावलोकन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Antemprima delle immagini\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ライブ画像プレビュー\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon afbeeldingen in de editor\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pré-visualização de imagens\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Предпросмотр изображений\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Canlı Görüntüler Önizlemesi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Живий перегляд зображень\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"实况图像预览\"\n          }\n        }\n      }\n    },\n    \"Loading...\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Načítání...\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Laden...\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chargement...\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लोड हो रहा है...\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Caricamento...\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"読み込み中...\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aan het laden...\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Carregando...\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Загрузка...\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yükleniyor...\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завантаження...\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"正在加载...\"\n          }\n        }\n      }\n    },\n    \"Lock\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zamknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sperren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verrouiller\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लॉक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Blocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロック\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vergrendel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trancar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilit\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заблокувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"上锁\"\n          }\n        }\n      }\n    },\n    \"Master\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hlavní\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Maître\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मास्टर\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マスター\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мастер\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Головний\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"管理员\"\n          }\n        }\n      }\n    },\n    \"Master password:\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hlavní heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master Passwort:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe maître :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"मास्टर पासवर्ड:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Password principale:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"マスターパスワード:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Master wachtwoord:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senha mestra:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мастер-пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ana parola:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Головний пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主密码:\"\n          }\n        }\n      }\n    },\n    \"MathJax\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"MathJax 数学公式\"\n          }\n        }\n      }\n    },\n    \"Modification Date\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Datum změny\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Änderungsdatum\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Date de modification\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सुधार की तारीख\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data di modifica\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"変更日\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wijzigingsdatum\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Data de modificação\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дата модификации\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Değişiklik Tarihi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Датою модифікації\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"修改日期\"\n          }\n        }\n      }\n    },\n    \"More\" : {\n      \"comment\" : \"Table row action\",\n      \"extractionState\" : \"stale\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Více\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mehr\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Plus\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अधिक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Altro\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"他\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nog steeds\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Todavía\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ещё\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Daha Fazla\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ще\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更多\"\n          }\n        }\n      }\n    },\n    \"Move\" : {\n      \"comment\" : \"Move view\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přesunout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bewegen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déplacer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"स्थानांतरण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sposta\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移動\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verplaats\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mover\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переместить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Taşı\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перемістити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移动\"\n          }\n        }\n      }\n    },\n    \"New Note\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nová poznámka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neues Dokument\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouvelle Note\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuovo documento\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規ドキュメント\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuw document\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Novo Documento\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Новая заметка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeni Not\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нова нотатка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新建笔记\"\n          }\n        }\n      }\n    },\n    \"None\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Žádné\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Standard\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aucun\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कोई भी नहीं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Predefinita\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"なし\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Standaard\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por padrão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нет\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hiçbiri\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"За замовчуванням\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"无\"\n          }\n        }\n      }\n    },\n    \"Notes\" : {\n      \"comment\" : \"Notes in sidebar\\nSidebar items\\nSidebar label\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Poznámky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"すべて\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notities\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заметки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Нотатки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"所有笔记\"\n          }\n        }\n      }\n    },\n    \"Notes List\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seznam poznámek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizenliste\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Liste de notes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट्स सूची\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista note\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートリスト\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notitielijst\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lista de notas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Список заметок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notlar Listesi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Лист нотаток\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记列表\"\n          }\n        }\n      }\n    },\n    \"Open in Files.app\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřit v aplikaci Soubory\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"In Files.app öffnen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir dans Files.app\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Files.app में खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri in Files.app\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ファイルで開く\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Openen in Files.app\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abra em Files.app\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть в Files.app\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Files.app'te aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрийте в Files.app\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在文件应用打开所在位置\"\n          }\n        }\n      }\n    },\n    \"Open Note\" : {\n      \"comment\" : \"Document opened\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Otevřít poznámku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geöffnete Notiz\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ouvrir la note\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट खोलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Apri nota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートを開く\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Open notitie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Abrir nota\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открыть заметку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notu aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкрита нотатка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"打卡笔记\"\n          }\n        }\n      }\n    },\n    \"Passphrase\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přístupová fráze\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासफ्रेज\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passphrase\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пассфраза\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Парольна фраза\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码锁\"\n          }\n        }\n      }\n    },\n    \"Password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड\"\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        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码\"\n          }\n        }\n      }\n    },\n    \"Password has been successfully changed\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heslo úspěšně změněno\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Das Passwort wurde erfolgreich geändert\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Le mot de passe a été modifié avec succès\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड सफलतापूर्वक बदल दिया गया है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"La password è stata modificata con successo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードの変更に成功しました\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord is succesvol gewijzigd\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"A palavra-passe foi alterada com êxito\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль был успешно изменен\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola başarıyla değiştirildi\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль успішно змінено\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码已被成功修改\"\n          }\n        }\n      }\n    },\n    \"Password:\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Heslo:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड:\"\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        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Parola:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пароль:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码:\"\n          }\n        }\n      }\n    },\n    \"Photos\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fotky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fotos\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Photos\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Photos\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Foto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"画像\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Foto's\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fotos\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фото\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fotoğraflar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Фотографії\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"照片\"\n          }\n        }\n      }\n    },\n    \"Picture removing\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebírání fotek\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bild entfernen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suppression de l'image\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चित्र हटाया जा रहा है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimozione dell'immagine\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除する画像\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Foto verwijderen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remoção de imagem\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удаление изображения\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Resim kaldırılıyor\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалення зображення\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"图片删除\"\n          }\n        }\n      }\n    },\n    \"Pin\" : {\n      \"comment\" : \"Table row action\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Připnout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixieren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Épingler\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fissa\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"メモをピンで固定\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Fixar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закрепить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Закріпити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"笔记置顶\"\n          }\n        }\n      }\n    },\n    \"Please enter valid password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prosím zadejte platné heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bitte geben Sie ein gültiges Passwort ein\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Merci de saisir un mot de passe correct\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया वैध पासवर्ड दर्ज करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Per favore inserisci una password valida\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"有効なパスワードを入力してください\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voer a.u.b. geldig wachtwoord in\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Por favor insira uma palavra-passe válida\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, введите правильный пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen geçerli parolayı girin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Введіть дійсний пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请输入有效密码\"\n          }\n        }\n      }\n    },\n    \"Please try again\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zkuste to znovu\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bitte versuchen Sie es erneut\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veuillez réessayer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कृपया पुन: प्रयास करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Si prega di riprovare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"再度お試しください\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Probeer het opnieuw\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tente novamente\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Пожалуйста, попробуйте еще раз\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lütfen tekrar deneyin\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Будь ласка, спробуйте ще разn\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"请再试一试\"\n          }\n        }\n      }\n    },\n    \"Private Key\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soukromý klíč\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clé privée\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"निजी चाबी\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Private key\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приватный ключ\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Özel Anahtar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Приватний ключ\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"私密密钥\"\n          }\n        }\n      }\n    },\n    \"Project removing ❌\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebírání projektu ❌\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Projekt entfernen ❌\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suppression de projet ❌\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्रोजेक्ट हटाया जा रहा है ❌\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimozione progetto ❌\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除するプロジェクト ❌\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Project verwijderen ❌\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover projeto❌\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Устранение проекта ❌\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Proje kaldırılıyor ❌\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалення проекту ❌\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"项目删除 ❌\"\n          }\n        }\n      }\n    },\n    \"Public Key (optional)\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Veřejný klíč (nepovinné)\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Public key (optional)\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Clé public (facultatif)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सार्वजनिक कुंजी (वैकल्पिक)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Public key (opzionale)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Public key (任意)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Public key (optionele)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Public key (facultativo)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открытый ключ (необязательно)\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Genel Anahtar (isteğe bağlı)\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкритий ключ (необов'язково)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"公共密钥 (可选)\"\n          }\n        }\n      }\n    },\n    \"Pull (every 30 sec)\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (každých 30 sekund)\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (alle 30 Sekunden)\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (toutes les 30 secondes)\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खींचें (प्रत्येक 30 सेकंड)\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (ogni 30 secondi)\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (30秒ごと)\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (elke 30 sec)\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (a cada 30 segundos)\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (каждые 30 секунд)\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çek (her 30 saniyede bir)\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тягнути (кожні 30 сек)\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pull (每隔 30 秒)\"\n          }\n        }\n      }\n    },\n    \"Remove Encryption\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat šifrování\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verschlüsselung entfernen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le chiffrage\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"एन्क्रिप्शन हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi la crittografia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ロックを削除\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder versleuteling\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover criptografia\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить шифрование\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifrelemeyi kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зняти шифрування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除加密\"\n          }\n        }\n      }\n    },\n    \"Remove Folder\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner enfernen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supprimer le dossier\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダの削除\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verwijder map\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить папку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити папку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除文件夹\"\n          }\n        }\n      }\n    },\n    \"Remove Tag\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odebrat značku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag entfernen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enlever l’étiquette\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग हटाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rimuovi tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"削除されたタグ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag verwijderen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remover tag\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Удалить тег\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketi kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видалити тег\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"移除标签\"\n          }\n        }\n      }\n    },\n    \"Rename\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Umbenennen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"名称変更\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoemen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yeniden adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名\"\n          }\n        }\n      }\n    },\n    \"Rename Folder\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat složku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner umbenennen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer le dossier\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर का नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina cartella\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダの名称変更\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naam map wijzigen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear pasta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать папку\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü yeniden adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати папку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名文件夹\"\n          }\n        }\n      }\n    },\n    \"Rename folder:\" : {\n      \"comment\" : \"Popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat složku:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordner löschen:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer le dossier :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"फ़ोल्डर का नाम बदलें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina cartella:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"フォルダの名称変更:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Naam map wijzigen:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear pasta:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать папку:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü yeniden adlandır:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать папку:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名文件夹:\"\n          }\n        }\n      }\n    },\n    \"Rename note:\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat poznámku:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notiz umbenennen:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer la note\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नोट का नाम बदलें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina nota:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ノートの名称変更:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem notitie:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear nota:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать заметку:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notu yeniden adlandır:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати нотатку:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名笔记:\"\n          }\n        }\n      }\n    },\n    \"Rename Tag\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat značku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag umbenennen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer l’étiquette\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग का नाम बदलें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグの名称変更\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem tag\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear tag\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать тег\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketi yeniden adlandır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перейменувати тег\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名标签\"\n          }\n        }\n      }\n    },\n    \"Rename tag:\" : {\n      \"comment\" : \"Popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Přejmenovat značku:\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag umbenennen:\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renommer l’étiquette :\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग का नाम बदलें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rinomina tag:\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグの名称変更:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hernoem tag:\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Renomear tag:\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать тег:\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketi yeniden adlandır:\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Переименовать тег:\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重命名标签:\"\n          }\n        }\n      }\n    },\n    \"Save\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uložit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Speichern Sie\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enregistrer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सहेजें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Risparmiare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"セーブ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Save\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Guardar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сохранить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kaydet\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зберегти\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"保存\"\n          }\n        }\n      }\n    },\n    \"Save Clipboard\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uložit schránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kopieren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Enregistrer le presse-papiers\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्लिपबोर्ड सहेजें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salva gli appunti\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"クリップボードの内容を保存\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bewaar klembord\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salvar área de transferência\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сохранить буфер обмена\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Panoya kaydet\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зберегти буфер обміну\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"保存剪贴板\"\n          }\n        }\n      }\n    },\n    \"Save Revision\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uložit úpravy\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Revision speichern\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sauvegarder la révision\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संशोधन सहेजें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Salva revisione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"バージョンを保存\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bewaar revisie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Guardar revisão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сохранить версию\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Revizyonu kaydet\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зберегти ревізію\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"保存修订版\"\n          }\n        }\n      }\n    },\n    \"Saved versions\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Uložené verze\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gespeicherte Versionen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versions enregistrées\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सहेजे गए संस्करण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versioni salvate\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"保存されたバージョン\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opgeslagen versies\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versões salvas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сохраненные версии\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kaydedilen sürümler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Збережені версії\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"保存的历史版本\"\n          }\n        }\n      }\n    },\n    \"Search or create\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat / vytvořit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen oder erstellen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher ou créer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजें या बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerca o crea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索または新規作成\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoek en creëer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Pesquisar e criar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти или создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara veya oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти або створити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索或创建\"\n          }\n        }\n      }\n    },\n    \"Search or Create\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Hledat / vytvořit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suchen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Rechercher ou Créer\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"खोजें या बनाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cerca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"検索\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zoeken\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Procurar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Найти или создать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ara veya Oluştur\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Знайти або створити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"搜索或创作\"\n          }\n        }\n      }\n    },\n    \"Security\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zabezpečení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sicherheit\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Securité\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सुरक्षा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sicurezza\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"セキュリティ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Beveiliging\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Segurança\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Безопасность\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Güvenlik\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Безпека\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"安全性\"\n          }\n        }\n      }\n    },\n    \"Select\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vybrat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Select\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sélectionner\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"चुने\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selezionare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"選択\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecteer\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Selecionar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Выбрать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Seç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вибрати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"选择\"\n          }\n        }\n      }\n    },\n    \"Settings\" : {\n      \"comment\" : \"Sidebar settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paramètres\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Impostazioni\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Instellingen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definições\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ayarlar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"设置\"\n          }\n        }\n      }\n    },\n    \"Share\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sdílet\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Teilen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Partager\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शेयर करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Condividi\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"共有\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Delen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Partilhar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поделиться\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paylaş\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поділитися\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"分享\"\n          }\n        }\n      }\n    },\n    \"Show Folder in Library\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit složku v Knihovně\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Projekt in Seitenleiste anzeigen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher le dossier dans la barre latérale\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"लाइब्रेरी में फ़ोल्डर दिखाएँ\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualizza cartella nella sidebar\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サイドバーにフォルダを表示\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon map in zijbalk\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar pasta na barra lateral\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показать папку в библиотеке\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Klasörü Kitaplıkta göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показати папку на бічній панелі\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"在文库中显示文件夹\"\n          }\n        }\n      }\n    },\n    \"Show Notes in \\\"Notes\\\" and \\\"Todo\\\"\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit poznámky v „Poznámkách“ a „Úkolech“\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notizen in \\\"Notizen\\\" und \\\"Todo\\\" anzeigen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Afficher les notes dans \\\"Notes\\\" et \\\"Tâches\\\"\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"नोट्स\\\" और \\\"टुडू\\\" में नोट्स दिखाएं\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualizza le note negli elenchi \\\"Note\\\" e \\\"Da Fare\\\"\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"\\\"すべて\\\" と \\\"タスク\\\" にノートを表示\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Toon notities in \\\"Notes\\\" en \\\"Todo\\\" lijsten\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mostrar notas nas listas \\\"Notas\\\" e \\\"Tarefas\\\"\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Показывать в \\\"Заметках\\\" и \\\"Тодо\\\"\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Notları \\\"Notlar\\\" ve \\\"Yapılacaklar\\\"da göster\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Включити у \\\"Нотатки/завдання\\\"\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"显示笔记在 \\\"笔记\\\" 和 \\\"待办\\\"\"\n          }\n        }\n      }\n    },\n    \"Sort By\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Řadit podle\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sortieren nach\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Trier par\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इसके अनुसार क्रमबद्ध करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordina per\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示順序\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sorteer op\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ordenar por\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортировать по\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sırala\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сортувати за\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"排序方式\"\n          }\n        }\n      }\n    },\n    \"Sort Direction\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Směr\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Richtung\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direction de tri\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"क्रमबद्ध दिशा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direzione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"方向\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Richting\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Direcção\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Направление\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sıralama Yönü\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Напрямок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"方向\"\n          }\n        }\n      }\n    },\n    \"Storage\" : {\n      \"comment\" : \"Settings\",\n      \"extractionState\" : \"manual\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Úložiště\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Speicherort\"\n          }\n        },\n        \"en\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Storage\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Stockage\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संग्रहण\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Biblioteca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ストレージ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Opslag\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Armazenamento\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Хранилище\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Depolama\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сховище\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"存储\"\n          }\n        }\n      }\n    },\n    \"Support\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Podpora\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Support\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aide\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सहायता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Supporto\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"サポート\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ondersteuning\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suporte\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Поддержка\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Destek\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Підтримка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"支持\"\n          }\n        }\n      }\n    },\n    \"Tags\" : {\n      \"comment\" : \"Sidebar label\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Značky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Étiquettes\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टैग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tags\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiquetas\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Теги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Мітки\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标签\"\n          }\n        }\n      }\n    },\n    \"Thanks\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Díky\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dank an\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Remerciement \"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"धन्यवाद\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Grazie a\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"次に感謝:\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Dankzij\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Graças a\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Спасибо\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Teşekkürler\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Дякую\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"感谢\"\n          }\n        }\n      }\n    },\n    \"Theme\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Motiv\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Thema\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Thème\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"थीम\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"テーマ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Thema\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tema\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Тема\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"主题\"\n          }\n        }\n      }\n    },\n    \"Tip: To use old notes, you must decrypt them separately with the old key and encrypt them again.\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tip: pro použití starých poznámek je musíte nejprve zvlášť dešifrovat pomocí starého klíče a pak znovu zašifrovat.\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tipp: Um alte Notizen zu verwenden, müssen Sie sie separat mit dem alten Schlüssel entschlüsseln und erneut verschlüsseln.\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Conseil : pour utiliser d'anciennes notes, vous devez les déchiffrer séparément avec l'ancienne clé et les chiffrer à nouveau.\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"सलाह: पुराने नोट्स का उपयोग करने के लिए, आपको उन्हें पुरानी कुंजी से अलग से डिक्रिप्ट करना होगा और पुनः एन्क्रिप्ट करना होगा।\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Suggerimento: per utilizzare le vecchie note, è necessario decifrarle separatamente con la vecchia chiave e crittografarle nuovamente.\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"補足：古いノートを使うには、古いキーで別途復号化し、再度暗号化する必要があります。\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tip: Om oude notities te gebruiken, moet je ze apart ontsleutelen met de oude sleutel en opnieuw versleutelen.\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sugestão: Para utilizar notas antigas, tem de as desencriptar separadamente com a chave antiga e encriptá-las novamente.\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Совет: Чтобы использовать старые заметки, необходимо отдельно расшифровать их с помощью старого ключа и снова зашифровать.\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İpucu: Eski notları kullanabilmek için, eski anahtarla ayrı ayrı şifresini çözüp tekrar şifrelemeniz gerekmektedir.\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Порада: Щоб використовувати старі нотатки, ви повинні розшифрувати їх окремо за допомогою старого ключа і зашифрувати знову.\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"小贴士:要使用旧的笔记，您必须用旧的密钥单独解密，并再次加密。\"\n          }\n        }\n      }\n    },\n    \"Title\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titel\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titre\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タイトル\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Titel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Başlık\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Заголовком\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"标题\"\n          }\n        }\n      }\n    },\n    \"Todo\" : {\n      \"comment\" : \"Sidebar items\\nTodo in sidebar\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Úkoly\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Todo\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tasks\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"टुडू\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Da Fare\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タスク\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Te Doen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Tarefa\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Задачи\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yapılacaklar\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Завдання\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"待办事项\"\n          }\n        }\n      }\n    },\n    \"Trash\" : {\n      \"comment\" : \"Sidebar label\\nTrash in sidebar\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Koš\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Papierkorb\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Corbeille\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"कूडा\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Cestino\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ゴミ箱\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Prullenmand\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Lixo\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Корзина\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Çöp\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сміття\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"回收站\"\n          }\n        }\n      }\n    },\n    \"Unlock\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odemknout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Entsperren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Déverrouiller\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अनलॉक\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sblocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"アンロック\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ontgrendel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Destrancar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Разблокировать\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Kilidi aç\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Розблокувати\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"开锁\"\n          }\n        }\n      }\n    },\n    \"Unpin\" : {\n      \"comment\" : \"Table row action\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Odepnout\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Loslösen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Désépingler\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अनपिन\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sblocca\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ピン固定の解除\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"VerwijderPin\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Soltar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Открепить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sabitlemeyi kaldır\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Відкріпити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"取消置顶\"\n          }\n        }\n      }\n    },\n    \"Untagged\" : {\n      \"comment\" : \"Sidebar settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Neoznačené\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ungetaggt\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Non étiqueté\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"बिना टैग\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Senza tag\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"タグなし\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Niet getagd\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sem etiqueta\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без метки\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Etiketsiz\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Без тегів\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"未标记\"\n          }\n        }\n      }\n    },\n    \"Update\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aktualizovat\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Update\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mise à jour\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"अद्यतन करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiornamento\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"アップデート\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Update\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Actualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Обновить\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Güncelleme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Оновити\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更新\"\n          }\n        }\n      }\n    },\n    \"Update Web Page\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aktualizovat webovou stránku\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geteilte aktualisieren\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mettre à jour la page Web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब पेज अपडेट करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aggiorna la pagina web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web ページの更新\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webpagina bijwerken\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Atualizar página da Web\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Обновить веб-страницу\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Sayfasını Güncelle\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Оновити веб-сторінку\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"更新网页\"\n          }\n        }\n      }\n    },\n    \"Use First Line as Title\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Použít první řádek jako nadpis\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erste Zeile als Titel\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utiliser la première ligne comme titre\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"शीर्षक के रूप में प्रथम पंक्ति का उपयोग करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usa la prima riga come titolo\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"最初の行をタイトルとして使用する\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruik eerste regel als titel\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar a primeira linha como título\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Первая строка как заголовок\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"İlk Satırı Başlık Olarak Kullan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Перший рядок як заголовок\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用第一行作为标题\"\n          }\n        }\n      }\n    },\n    \"Use Inline Tags\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Používat značky mezi textem\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Inlinetags verwenden\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utiliser les étiquettes en ligne\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इनलाइन टैग का उपयोग करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usa tag in linea\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"インラインタグを使用する\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruik inline tags\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar etiquetas em linha\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Используйте встроенные теги\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Satır İçi Etiketleri Kullan\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Використовувати вбудовані теги\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用内联标签\"\n          }\n        }\n      }\n    },\n    \"Use TextBundle info.json to store c/mtime\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Použití TextBundle info.json pro uložení c/mtime\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"TextBundle info.json zum Speichern von c/mtime verwenden\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilisez TextBundle info.json pour stocker c/mtime\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"c/mtime संग्रहीत करने के लिए TextBundle info.json का उपयोग करें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Usare TextBundle info.json per memorizzare c/mtime\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"c/mtimeを格納するためにTextBundle info.jsonを使用する。\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Gebruik TextBundle info.json om c/mtime op te slaan\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Utilizar TextBundle info.json para armazenar c/mtime\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Использовать TextBundle info.json для хранения c/mtime\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"C/mtime'ı depolamak için TextBundle info.json'ı kullanın\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Використовувати TextBundle info.json для зберігання c/mtime\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"使用 TextBundle info.json 存储 c/mtime\"\n          }\n        }\n      }\n    },\n    \"Verify Password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ověřit heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Passwort überprüfen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Vérifier le mot de passe\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"पासवर्ड को सत्यापित करें:\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verifica della password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードの確認\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wachtwoord verifiëren\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verificar a palavra-passe\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Проверить пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Şifreyi Doğrula\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Підтвердіть пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"验证密码\"\n          }\n        }\n      }\n    },\n    \"Version\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verze\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Version\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Version\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"संस्करण\"\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        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versão\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Версия\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Versiyon\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Версія\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"版本\"\n          }\n        }\n      }\n    },\n    \"View\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zobrazit\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sicht\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Voir\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"देखें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualizzazione\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"表示\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visie\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visualizar\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вид\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünüm\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Вид\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"视图\"\n          }\n        }\n      }\n    },\n    \"View Settings\" : {\n      \"comment\" : \"Main view popover table\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nastavení zobrazení\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Einstellungen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Paramètres d'affichage\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"प्राथमिकताएं देखें\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Impostazioni vista\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"設定を開く\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Bekijk instellingen\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Definições de visualização\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Настройки вида\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünüm Ayarları\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Налаштування\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"查看设置\"\n          }\n        }\n      }\n    },\n    \"Visibility\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Viditelnost\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sichtbarkeit\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilité\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"दृश्यता\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilità\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可視性\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Zichtbaarheid\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Visibilidade\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видимость\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Görünürlük\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Видимість\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"可见性\"\n          }\n        }\n      }\n    },\n    \"Web sharing error\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Chyba sdílení na web\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sharing error\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Erreur de partage web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेब साझाकरण त्रुटि\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sharing error\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sharing error\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sharing error\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sharing error\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Ошибка публикации веб-страниц\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web paylaşım hatası\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web sharing error\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"网站分享错误\"\n          }\n        }\n      }\n    },\n    \"Website\" : {\n      \"comment\" : \"Settings\",\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Webová stránka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Startseite\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Site web\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"वेबसाइट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Homepage sito web\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ホームページ\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Startpagina\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Página inicial\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сайт\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Web Site\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Домашня сторінка\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"官方网站\"\n          }\n        }\n      }\n    },\n    \"Wrong password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nesprávné heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Falsches Passwort\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe erroné\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गलत पासवर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wrong password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"パスワードが違う\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verkeerd wachtwoord\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe errada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неверный пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yanlış şifre\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неправильний пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"密码错误\"\n          }\n        }\n      }\n    },\n    \"Wrong repeated password\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nesprávné opakované heslo\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Falsches wiederholtes Passwort\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Mot de passe répété erroné\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"गलत दोहराया गया पासवर्ड\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Wrong repeated password\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"繰り返しのパスワードが違う\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verkeerd herhaald wachtwoord\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Palavra-passe repetida errada\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неправильный пароль\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Yanlış tekrarlanan şifre\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Неправильний повторний пароль\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"重复密码错误\"\n          }\n        }\n      }\n    },\n    \"Сlearing history\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Čištění historie\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Verlauf löschen\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Effacement de l'historique\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इतिहास साफ़ किया जा रहा है\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Sto imparando la storia\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"履歴の削除\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geschiedenis leren\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Aprendendo a história\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очистить историю\"\n          }\n        },\n        \"tr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Geçmişi temizleme\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Очищення історії\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"清空此笔记的历史版本\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "FSNotes iOS/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"24506\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina6_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"24504\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController storyboardIdentifier=\"listViewController\" id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"932\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"154\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sUC-hL-bgg\" customClass=\"NotesTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"430\" height=\"746\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"noteCell\" rowHeight=\"154\" id=\"uv7-Im-hed\" customClass=\"NoteCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"430\" height=\"154\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"uv7-Im-hed\" id=\"De0-QG-drV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"154\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"pin_white.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ng0-bb-ENq\">\n                                                    <rect key=\"frame\" x=\"7\" y=\"17\" width=\"18\" height=\"18\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"18\" id=\"KlO-n1-B2e\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"18\" id=\"k71-lI-ai0\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn1-Y0-0eh\">\n                                                    <rect key=\"frame\" x=\"30\" y=\"15\" width=\"31.666666666666671\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"15\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Preview\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LAf-Rz-QFy\">\n                                                    <rect key=\"frame\" x=\"30\" y=\"40\" width=\"375\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rsi-Av-qh2\">\n                                                    <rect key=\"frame\" x=\"30\" y=\"70\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"0iB-an-r6e\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"3EZ-N8-htb\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t6a-FH-UHM\">\n                                                    <rect key=\"frame\" x=\"108\" y=\"70\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"dd7-Po-Gye\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"eUw-LF-zQI\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L4T-lK-1pA\">\n                                                    <rect key=\"frame\" x=\"186\" y=\"70\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"Qry-XG-kOl\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"mUL-BK-kWo\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label autoresizesSubviews=\"NO\" opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Date\" textAlignment=\"right\" lineBreakMode=\"clip\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AbV-ot-mEE\">\n                                                    <rect key=\"frame\" x=\"376.33333333333331\" y=\"15\" width=\"28.666666666666686\" height=\"15.666666666666664\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" white=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"0OO-Nd-PCc\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Cn1-Y0-0eh\" secondAttribute=\"trailing\" priority=\"900\" constant=\"5\" id=\"7Uy-aY-372\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"leading\" secondItem=\"t6a-FH-UHM\" secondAttribute=\"trailing\" constant=\"8\" id=\"K3H-Qz-btY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" constant=\"25\" id=\"LJ9-2z-vAD\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"30\" id=\"MB0-DS-pMG\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"thirdImageTop\" id=\"XPp-HF-VEk\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" constant=\"2\" id=\"YY9-pB-9Qe\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"secondImageTop\" id=\"Yvb-AC-CP7\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"top\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"bottom\" constant=\"5\" id=\"d2V-lD-g3R\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"trailing\" constant=\"5\" id=\"gZc-Rz-2ZC\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"iho-nX-yyl\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"30\" id=\"lRD-NL-mfR\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"30\" id=\"o4d-kg-oaQ\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"firstImageTop\" id=\"uw7-pW-b3V\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" id=\"xmk-Sr-aAM\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"leading\" secondItem=\"rsi-Av-qh2\" secondAttribute=\"trailing\" constant=\"8\" id=\"zr3-db-Dgc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <inset key=\"separatorInset\" minX=\"30\" minY=\"0.0\" maxX=\"0.0\" maxY=\"0.0\"/>\n                                        <connections>\n                                            <outlet property=\"date\" destination=\"AbV-ot-mEE\" id=\"bLC-CN-Urn\"/>\n                                            <outlet property=\"imagePreview\" destination=\"rsi-Av-qh2\" id=\"7ax-Ce-vfL\"/>\n                                            <outlet property=\"imagePreviewSecond\" destination=\"t6a-FH-UHM\" id=\"My4-em-TVZ\"/>\n                                            <outlet property=\"imagePreviewThird\" destination=\"L4T-lK-1pA\" id=\"dxa-93-KoO\"/>\n                                            <outlet property=\"pin\" destination=\"Ng0-bb-ENq\" id=\"vgv-uX-Hak\"/>\n                                            <outlet property=\"preview\" destination=\"LAf-Rz-QFy\" id=\"OTM-Tt-F3b\"/>\n                                            <outlet property=\"title\" destination=\"Cn1-Y0-0eh\" id=\"giJ-Tv-pg9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsMultipleSelection=\"YES\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" contentViewInsetsToSafeArea=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Mge-lh-GR9\" customClass=\"SidebarTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"186\" height=\"814\"/>\n                                <color key=\"backgroundColor\" red=\"0.83741801979999997\" green=\"0.83743780850000005\" blue=\"0.83742713930000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" priority=\"250\" constant=\"186\" id=\"pYS-iQ-iXP\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"sidebarCell\" rowHeight=\"53\" id=\"O2q-T0-6CW\" customClass=\"SidebarTableCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"186\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"O2q-T0-6CW\" id=\"tDd-4m-f4y\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"186\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BML-lv-XMi\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"16\" width=\"21\" height=\"21\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"21\" id=\"8Mj-2V-WOH\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"21\" id=\"wTd-8W-0ei\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZDf-m9-quL\">\n                                                    <rect key=\"frame\" x=\"47\" y=\"16\" width=\"118\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailingMargin\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"trailing\" constant=\"5\" id=\"0lP-PT-79q\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"2jK-Iv-hSY\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"leading\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"leading\" constant=\"15\" id=\"3wN-gR-43e\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"leading\" secondItem=\"BML-lv-XMi\" secondAttribute=\"trailing\" constant=\"11\" id=\"WoX-Z4-8rD\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"df2-um-WMI\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"top\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"top\" id=\"eS6-4w-fRe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"icon\" destination=\"BML-lv-XMi\" id=\"OEo-b9-tQT\"/>\n                                            <outlet property=\"label\" destination=\"ZDf-m9-quL\" id=\"NZJ-lZ-DhC\"/>\n                                            <outlet property=\"labelConstraint\" destination=\"WoX-Z4-8rD\" id=\"3y4-5j-nzf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"IQe-XD-PyC\" userLabel=\"leftPreSafeView\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"0.0\" height=\"814\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemOrangeColor\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vdo-f5-klY\" userLabel=\"rightPreSafeView\">\n                                <rect key=\"frame\" x=\"430\" y=\"118\" width=\"0.0\" height=\"814\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemTealColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" id=\"stD-N5-7Jq\"/>\n                                </constraints>\n                            </view>\n                            <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" image=\"lock.fill\" catalog=\"system\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NZ1-ez-Ynx\">\n                                <rect key=\"frame\" x=\"183\" y=\"460\" width=\"64\" height=\"62\"/>\n                                <color key=\"tintColor\" name=\"fsColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"64\" id=\"JvC-sr-vAR\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"64\" id=\"wu2-fA-rg1\"/>\n                                </constraints>\n                            </imageView>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"hRO-uY-yS2\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"IQe-XD-PyC\" secondAttribute=\"bottom\" id=\"1Dl-Z9-VfR\"/>\n                            <constraint firstItem=\"sUC-hL-bgg\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"A5w-f3-Rgo\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"Mge-lh-GR9\" secondAttribute=\"bottom\" id=\"GIi-Ek-8ST\"/>\n                            <constraint firstItem=\"sUC-hL-bgg\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"JPP-fj-2Qz\"/>\n                            <constraint firstItem=\"IQe-XD-PyC\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"KGz-xF-ebl\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"vdo-f5-klY\" secondAttribute=\"trailing\" id=\"KfK-kU-4g2\"/>\n                            <constraint firstItem=\"NZ1-ez-Ynx\" firstAttribute=\"centerX\" secondItem=\"sUC-hL-bgg\" secondAttribute=\"centerX\" id=\"V0g-Nk-aes\"/>\n                            <constraint firstItem=\"Mge-lh-GR9\" firstAttribute=\"leading\" secondItem=\"IQe-XD-PyC\" secondAttribute=\"trailing\" id=\"VoW-NF-0ro\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"vdo-f5-klY\" secondAttribute=\"bottom\" id=\"WO7-Mx-Epc\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"IQe-XD-PyC\" secondAttribute=\"trailing\" id=\"e90-Je-x7F\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"bottom\" secondItem=\"sUC-hL-bgg\" secondAttribute=\"bottom\" id=\"gA3-do-ZSA\"/>\n                            <constraint firstItem=\"vdo-f5-klY\" firstAttribute=\"top\" secondItem=\"Mge-lh-GR9\" secondAttribute=\"top\" id=\"j5s-Ct-lWS\"/>\n                            <constraint firstItem=\"vdo-f5-klY\" firstAttribute=\"leading\" secondItem=\"sUC-hL-bgg\" secondAttribute=\"trailing\" id=\"kKi-Xc-Gjo\"/>\n                            <constraint firstItem=\"Mge-lh-GR9\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"qOe-Ck-iuT\"/>\n                            <constraint firstItem=\"IQe-XD-PyC\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"rAg-B0-rIW\"/>\n                            <constraint firstItem=\"NZ1-ez-Ynx\" firstAttribute=\"centerY\" secondItem=\"sUC-hL-bgg\" secondAttribute=\"centerY\" id=\"umn-PV-FUi\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"leftPreSafeArea\" destination=\"IQe-XD-PyC\" id=\"phr-P3-VB3\"/>\n                        <outlet property=\"lockedProject\" destination=\"NZ1-ez-Ynx\" id=\"zeN-F2-Wgk\"/>\n                        <outlet property=\"notesTable\" destination=\"sUC-hL-bgg\" id=\"Iqp-8V-0Ly\"/>\n                        <outlet property=\"notesTableBottomContraint\" destination=\"gA3-do-ZSA\" id=\"hNr-WS-Zei\"/>\n                        <outlet property=\"notesTableLeadingConstraint\" destination=\"JPP-fj-2Qz\" id=\"Ars-QP-VeS\"/>\n                        <outlet property=\"rightPreSafeArea\" destination=\"vdo-f5-klY\" id=\"Vfb-wH-bF3\"/>\n                        <outlet property=\"sidebarTableBottomConstraint\" destination=\"GIi-Ek-8ST\" id=\"phq-61-77o\"/>\n                        <outlet property=\"sidebarTableLeadingConstraint\" destination=\"VoW-NF-0ro\" id=\"cE3-qw-NQv\"/>\n                        <outlet property=\"sidebarTableView\" destination=\"Mge-lh-GR9\" id=\"PMJ-cU-cu8\"/>\n                        <outlet property=\"sidebarTableWidth\" destination=\"pYS-iQ-iXP\" id=\"AEX-Oj-tT7\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"135.98130841121494\" y=\"130.23758099352054\"/>\n        </scene>\n        <!--Editor View Controller-->\n        <scene sceneID=\"slE-pv-o03\">\n            <objects>\n                <viewController storyboardIdentifier=\"editorViewController\" id=\"ric-rS-hWq\" customClass=\"EditorViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ddk-kN-IZ8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"932\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" keyboardDismissMode=\"interactive\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ecm-ZU-dhM\" customClass=\"EditTextView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"430\" height=\"746\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" autocorrectionType=\"no\" smartQuotesType=\"no\"/>\n                            </textView>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"QrF-sP-UlZ\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"top\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"top\" id=\"N5x-s4-zby\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"trailing\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"trailing\" id=\"RB6-wy-4rq\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"bottom\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"bottom\" id=\"TH4-jD-Xnb\"/>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"leading\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"leading\" id=\"V6w-av-pPX\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"editArea\" destination=\"ecm-ZU-dhM\" id=\"kTy-5J-L7P\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ihg-8y-LLI\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"928.79999999999995\" y=\"133.5832083958021\"/>\n        </scene>\n        <!--Image Preview View Controller-->\n        <scene sceneID=\"OOK-4o-43g\">\n            <objects>\n                <viewController storyboardIdentifier=\"imagePreviewViewController\" id=\"gXA-UP-nPE\" customClass=\"ImagePreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Hcy-mV-Ewd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"932\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1T-1l-93q\" customClass=\"ImageScrollView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"430\" height=\"746\"/>\n                            </scrollView>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"DVk-Fs-Jhg\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"T1T-1l-93q\" firstAttribute=\"top\" secondItem=\"DVk-Fs-Jhg\" secondAttribute=\"top\" id=\"2R7-Zp-G2s\"/>\n                            <constraint firstItem=\"DVk-Fs-Jhg\" firstAttribute=\"bottom\" secondItem=\"T1T-1l-93q\" secondAttribute=\"bottom\" id=\"EIp-y6-IXd\"/>\n                            <constraint firstItem=\"T1T-1l-93q\" firstAttribute=\"leading\" secondItem=\"DVk-Fs-Jhg\" secondAttribute=\"leading\" id=\"imz-vN-vBS\"/>\n                            <constraint firstItem=\"T1T-1l-93q\" firstAttribute=\"trailing\" secondItem=\"DVk-Fs-Jhg\" secondAttribute=\"trailing\" id=\"saK-XU-jjf\"/>\n                        </constraints>\n                    </view>\n                    <toolbarItems/>\n                    <connections>\n                        <outlet property=\"imageScrollView\" destination=\"T1T-1l-93q\" id=\"sHb-Vp-jwF\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mXN-5G-zCr\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1767.7570093457944\" y=\"131.53347732181427\"/>\n        </scene>\n        <!--Date Picker View Controller-->\n        <scene sceneID=\"jHG-aO-26B\">\n            <objects>\n                <viewController storyboardIdentifier=\"datePickerViewController\" id=\"87i-Hr-AGk\" customClass=\"DatePickerViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" id=\"fXr-M2-3VJ\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"932\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <datePicker contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" datePickerMode=\"dateAndTime\" minuteInterval=\"1\" style=\"wheels\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"B67-S8-Rt3\">\n                                <rect key=\"frame\" x=\"55\" y=\"314\" width=\"320\" height=\"216\"/>\n                            </datePicker>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uob-7M-pKX\" userLabel=\"bottomNavigationBar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"810\" width=\"430\" height=\"54\"/>\n                                <items>\n                                    <navigationItem id=\"yAb-Kj-DPE\" userLabel=\"Nav item\"/>\n                                </items>\n                            </navigationBar>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WxN-Ou-qlq\" userLabel=\"bottomSafeView\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"864\" width=\"430\" height=\"68\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                            </view>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"iVW-EM-nqi\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"uob-7M-pKX\" firstAttribute=\"leading\" secondItem=\"fXr-M2-3VJ\" secondAttribute=\"leading\" id=\"40t-no-m7I\"/>\n                            <constraint firstItem=\"uob-7M-pKX\" firstAttribute=\"trailing\" secondItem=\"fXr-M2-3VJ\" secondAttribute=\"trailing\" id=\"GCm-g1-LJX\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"WxN-Ou-qlq\" secondAttribute=\"bottom\" id=\"GEh-on-qyn\"/>\n                            <constraint firstItem=\"WxN-Ou-qlq\" firstAttribute=\"leading\" secondItem=\"fXr-M2-3VJ\" secondAttribute=\"leading\" id=\"S03-r6-xid\"/>\n                            <constraint firstItem=\"B67-S8-Rt3\" firstAttribute=\"centerX\" secondItem=\"fXr-M2-3VJ\" secondAttribute=\"centerX\" id=\"S8B-sF-59h\"/>\n                            <constraint firstItem=\"WxN-Ou-qlq\" firstAttribute=\"top\" secondItem=\"iVW-EM-nqi\" secondAttribute=\"bottom\" id=\"hF7-79-Mx2\"/>\n                            <constraint firstItem=\"B67-S8-Rt3\" firstAttribute=\"centerY\" secondItem=\"fXr-M2-3VJ\" secondAttribute=\"centerY\" constant=\"-44\" id=\"iFU-TI-9tH\"/>\n                            <constraint firstItem=\"WxN-Ou-qlq\" firstAttribute=\"trailing\" secondItem=\"fXr-M2-3VJ\" secondAttribute=\"trailing\" id=\"pYW-5M-5rW\"/>\n                            <constraint firstItem=\"WxN-Ou-qlq\" firstAttribute=\"top\" secondItem=\"uob-7M-pKX\" secondAttribute=\"bottom\" id=\"y7H-Jf-tHg\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"bottomSafeView\" destination=\"WxN-Ou-qlq\" id=\"EeJ-8P-hAA\"/>\n                        <outlet property=\"datePicker\" destination=\"B67-S8-Rt3\" id=\"NSu-4a-7mZ\"/>\n                        <outlet property=\"navItem\" destination=\"yAb-Kj-DPE\" id=\"wgf-X6-3Lx\"/>\n                        <outlet property=\"navigationBar\" destination=\"uob-7M-pKX\" id=\"JXt-ZZ-Qea\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Hlq-lK-G9X\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2550\" y=\"131.53347732181427\"/>\n        </scene>\n        <!--Revisions View Controller-->\n        <scene sceneID=\"YOZ-ux-Jhh\">\n            <objects>\n                <viewController storyboardIdentifier=\"revisionsViewController\" id=\"RLs-pU-4VS\" customClass=\"RevisionsViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"83N-TZ-3cS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"932\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Z5J-hy-i2L\" userLabel=\"bottomSafeView\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"864\" width=\"430\" height=\"68\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                            </view>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1Jj-x2-SeW\" userLabel=\"bottomNavigationBar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"810\" width=\"430\" height=\"54\"/>\n                                <items>\n                                    <navigationItem id=\"ZCa-T5-BwJ\"/>\n                                </items>\n                            </navigationBar>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"-1\" estimatedSectionHeaderHeight=\"-1\" sectionFooterHeight=\"-1\" estimatedSectionFooterHeight=\"-1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L3S-P5-2Qs\" userLabel=\"revisionList\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"430\" height=\"692\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                            </tableView>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"1oV-Zs-iUv\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"L3S-P5-2Qs\" firstAttribute=\"trailing\" secondItem=\"1oV-Zs-iUv\" secondAttribute=\"trailing\" id=\"Hnp-vG-gtB\"/>\n                            <constraint firstItem=\"Z5J-hy-i2L\" firstAttribute=\"top\" secondItem=\"1oV-Zs-iUv\" secondAttribute=\"bottom\" id=\"LSE-2O-sPz\"/>\n                            <constraint firstItem=\"Z5J-hy-i2L\" firstAttribute=\"top\" secondItem=\"1Jj-x2-SeW\" secondAttribute=\"bottom\" id=\"N9h-3s-ePn\"/>\n                            <constraint firstItem=\"L3S-P5-2Qs\" firstAttribute=\"leading\" secondItem=\"1oV-Zs-iUv\" secondAttribute=\"leading\" id=\"OYy-sg-B62\"/>\n                            <constraint firstItem=\"Z5J-hy-i2L\" firstAttribute=\"trailing\" secondItem=\"83N-TZ-3cS\" secondAttribute=\"trailing\" id=\"VwZ-al-u3Y\"/>\n                            <constraint firstItem=\"Z5J-hy-i2L\" firstAttribute=\"leading\" secondItem=\"83N-TZ-3cS\" secondAttribute=\"leading\" id=\"Zx1-sP-aey\"/>\n                            <constraint firstItem=\"L3S-P5-2Qs\" firstAttribute=\"top\" secondItem=\"1oV-Zs-iUv\" secondAttribute=\"top\" id=\"cQJ-rU-iga\"/>\n                            <constraint firstItem=\"1Jj-x2-SeW\" firstAttribute=\"top\" secondItem=\"L3S-P5-2Qs\" secondAttribute=\"bottom\" id=\"e37-96-iei\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"Z5J-hy-i2L\" secondAttribute=\"bottom\" id=\"pCr-cz-upn\"/>\n                            <constraint firstItem=\"1Jj-x2-SeW\" firstAttribute=\"leading\" secondItem=\"83N-TZ-3cS\" secondAttribute=\"leading\" id=\"ub4-jI-nsU\"/>\n                            <constraint firstItem=\"1Jj-x2-SeW\" firstAttribute=\"trailing\" secondItem=\"83N-TZ-3cS\" secondAttribute=\"trailing\" id=\"uzF-LM-q13\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"bottomSafeView\" destination=\"Z5J-hy-i2L\" id=\"a3o-Sh-DJs\"/>\n                        <outlet property=\"navItem\" destination=\"ZCa-T5-BwJ\" id=\"sA6-2o-2OU\"/>\n                        <outlet property=\"navigationBar\" destination=\"1Jj-x2-SeW\" id=\"ppe-tT-Cg0\"/>\n                        <outlet property=\"revisionsTable\" destination=\"L3S-P5-2Qs\" id=\"tBS-Bn-YUF\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"SIA-sI-2vZ\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3347.663551401869\" y=\"132.82937365010801\"/>\n        </scene>\n        <!--Git View Controller-->\n        <scene sceneID=\"NcJ-YW-Hg9\">\n            <objects>\n                <viewController storyboardIdentifier=\"gitSettingsViewController\" id=\"xra-g7-LQm\" customClass=\"GitViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"eyI-Ns-wcU\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"932\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"-1\" estimatedSectionHeaderHeight=\"-1\" sectionFooterHeight=\"-1\" estimatedSectionFooterHeight=\"-1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Nj5-cV-CWW\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"118\" width=\"430\" height=\"746\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"gitTableViewCell\" id=\"oHp-PD-cNW\" customClass=\"GitTableViewCell\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333332061767578\" width=\"430\" height=\"51\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"oHp-PD-cNW\" id=\"L8C-L6-AT1\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"51\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" role=\"cancel\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2L9-ws-4au\">\n                                                    <rect key=\"frame\" x=\"244.99999999999997\" y=\"8.3333333333333321\" width=\"87.666666666666657\" height=\"34.333333333333343\"/>\n                                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                                    <inset key=\"imageEdgeInsets\" minX=\"0.0\" minY=\"0.0\" maxX=\"2.2250738585072014e-308\" maxY=\"0.0\"/>\n                                                    <state key=\"normal\" title=\"Remove\">\n                                                        <color key=\"titleColor\" systemColor=\"systemRedColor\"/>\n                                                    </state>\n                                                    <buttonConfiguration key=\"configuration\" style=\"gray\" title=\"Remove\">\n                                                        <fontDescription key=\"titleFontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                                        <color key=\"baseForegroundColor\" systemColor=\"systemRedColor\"/>\n                                                    </buttonConfiguration>\n                                                </button>\n                                                <activityIndicatorView opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" style=\"medium\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ssq-3E-vWD\">\n                                                    <rect key=\"frame\" x=\"205\" y=\"15.666666666666664\" width=\"20\" height=\"20\"/>\n                                                </activityIndicatorView>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zz2-R4-zDV\">\n                                                    <rect key=\"frame\" x=\"97.333333333333314\" y=\"8.3333333333333321\" width=\"87.666666666666686\" height=\"34.333333333333343\"/>\n                                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                                    <inset key=\"imageEdgeInsets\" minX=\"0.0\" minY=\"0.0\" maxX=\"2.2250738585072014e-308\" maxY=\"0.0\"/>\n                                                    <state key=\"normal\" title=\"Init\"/>\n                                                    <buttonConfiguration key=\"configuration\" style=\"filled\" title=\"Init\">\n                                                        <fontDescription key=\"titleFontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                                    </buttonConfiguration>\n                                                </button>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"Ssq-3E-vWD\" firstAttribute=\"leading\" secondItem=\"zz2-R4-zDV\" secondAttribute=\"trailing\" constant=\"20\" id=\"2rY-h3-c4f\"/>\n                                                <constraint firstItem=\"2L9-ws-4au\" firstAttribute=\"centerY\" secondItem=\"zz2-R4-zDV\" secondAttribute=\"centerY\" id=\"3KN-eT-nH9\"/>\n                                                <constraint firstItem=\"Ssq-3E-vWD\" firstAttribute=\"centerX\" secondItem=\"L8C-L6-AT1\" secondAttribute=\"centerX\" id=\"5ij-TU-4I4\"/>\n                                                <constraint firstItem=\"Ssq-3E-vWD\" firstAttribute=\"centerY\" secondItem=\"L8C-L6-AT1\" secondAttribute=\"centerY\" id=\"DhW-tf-ogF\"/>\n                                                <constraint firstItem=\"zz2-R4-zDV\" firstAttribute=\"centerY\" secondItem=\"L8C-L6-AT1\" secondAttribute=\"centerY\" id=\"SAh-w7-0gI\"/>\n                                                <constraint firstItem=\"2L9-ws-4au\" firstAttribute=\"width\" secondItem=\"zz2-R4-zDV\" secondAttribute=\"width\" id=\"Saa-7b-7ac\"/>\n                                                <constraint firstItem=\"2L9-ws-4au\" firstAttribute=\"leading\" secondItem=\"Ssq-3E-vWD\" secondAttribute=\"trailing\" constant=\"20\" id=\"hHm-YV-mVC\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"activity\" destination=\"Ssq-3E-vWD\" id=\"n9Y-id-UOC\"/>\n                                            <outlet property=\"cloneButton\" destination=\"zz2-R4-zDV\" id=\"DnY-AP-Ogr\"/>\n                                            <outlet property=\"removeButton\" destination=\"2L9-ws-4au\" id=\"DAa-BV-ckA\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"gitA\" textLabel=\"zbT-aV-jkK\" style=\"IBUITableViewCellStyleDefault\" id=\"mEX-ec-VWj\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"106.33333206176758\" width=\"430\" height=\"51\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"mEX-ec-VWj\" id=\"8f8-7c-SCK\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"51\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"zbT-aV-jkK\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"390\" height=\"51\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"0.0\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"gitB\" textLabel=\"wDM-Ne-CeL\" style=\"IBUITableViewCellStyleDefault\" id=\"A20-E4-Ykl\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"157.33333206176758\" width=\"430\" height=\"51\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"A20-E4-Ykl\" id=\"AOu-pP-Nqv\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"430\" height=\"51\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"wDM-Ne-CeL\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"390\" height=\"51\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"0.0\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"qy2-R9-1Xs\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"Nj5-cV-CWW\" firstAttribute=\"bottom\" secondItem=\"qy2-R9-1Xs\" secondAttribute=\"bottom\" id=\"F2g-cS-En7\"/>\n                            <constraint firstItem=\"Nj5-cV-CWW\" firstAttribute=\"trailing\" secondItem=\"qy2-R9-1Xs\" secondAttribute=\"trailing\" id=\"Ks7-hk-82h\"/>\n                            <constraint firstItem=\"Nj5-cV-CWW\" firstAttribute=\"top\" secondItem=\"qy2-R9-1Xs\" secondAttribute=\"top\" id=\"Ukg-EW-CHo\"/>\n                            <constraint firstItem=\"Nj5-cV-CWW\" firstAttribute=\"leading\" secondItem=\"qy2-R9-1Xs\" secondAttribute=\"leading\" id=\"VFY-bn-Q7N\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"tableView\" destination=\"Nj5-cV-CWW\" id=\"BEr-rb-NEe\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"WUf-bM-PDg\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"4133.0232558139533\" y=\"132.61802575107296\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"lock.fill\" catalog=\"system\" width=\"111\" height=\"128\"/>\n        <image name=\"pin_white.png\" width=\"128\" height=\"128\"/>\n        <namedColor name=\"fsColor\">\n            <color red=\"0.079999998211860657\" green=\"0.60000002384185791\" blue=\"0.85000002384185791\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n        <systemColor name=\"systemOrangeColor\">\n            <color red=\"1\" green=\"0.55294117647058827\" blue=\"0.15686274509803921\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"systemRedColor\">\n            <color red=\"1\" green=\"0.2196078431372549\" blue=\"0.23529411764705882\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"systemTealColor\">\n            <color red=\"0.0\" green=\"0.76470588235294112\" blue=\"0.81568627450980391\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS/MainNavigationController.swift",
    "content": "//\n//  MainNavigationController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 23.01.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass MainNavigationController: UINavigationController {\n    override func popViewController(animated: Bool) -> UIViewController? {\n        UserDefaultsManagement.currentNote = nil\n\n        topViewController?.view.endEditing(true)\n\n        return super.popViewController(animated: animated)\n    }\n\n//    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {\n//        super.traitCollectionDidChange(previousTraitCollection)\n//\n//        guard traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) else { return }\n//\n//        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n//            let evc = UIApplication.getEVC()\n//            \n//            evc.editArea.textStorage.updateCheckboxList()\n//\n//            if let previewView = evc.getPreviewView() {\n//                let funcName = self.traitCollection.userInterfaceStyle == .dark ?  \"switchToDarkMode\" : \"switchToLightMode\"\n//                let switchScript = \"if (typeof(\\(funcName)) == 'function') { \\(funcName)(); }\"\n//\n//                previewView.evaluateJavaScript(switchScript)\n//            }\n//        }\n//    }\n}\n"
  },
  {
    "path": "FSNotes iOS/MoveViewController.swift",
    "content": "//\n//  MoveViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/8/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass MoveViewController: UITableViewController {\n    private var projects: [Project]?\n\n    private var selectedNotes: [Note]\n    private var notesTableView: NotesTableView\n\n    init(notes: [Note], notesTableView: NotesTableView) {\n        self.selectedNotes = notes\n        self.notesTableView = notesTableView\n\n        super.init(style: .plain)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        self.navigationItem.rightBarButtonItem = Buttons.getAdd(target: self, selector: #selector(createFolder))\n\n        self.projects = Storage.shared().getProjects()\n        self.title = NSLocalizedString(\"Move\", comment: \"Move view\")\n\n        super.viewDidLoad()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        guard let vc = notesTableView.viewDelegate else { return }\n\n        if let projects = self.projects {\n            let project = projects[indexPath.row]\n\n            for note in selectedNotes {\n                let dstURL = project.url.appendingPathComponent(note.name)\n\n                if note.project != project {\n                    note.moveImages(to: project)\n\n                    vc.sidebarTableView.removeTags(in: [note])\n                    \n                    guard note.move(to: dstURL) else {\n                        let alert = UIAlertController(title: \"Oops 👮‍♂️\", message: NSLocalizedString(\"File with this name already exist\", comment: \"\"), preferredStyle: UIAlertController.Style.alert)\n                        alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n                        self.present(alert, animated: true, completion: nil)\n                        \n                        note.moveImages(to: note.project)\n                        return\n                    }\n\n                    note.moveHistory(src: note.url, dst: dstURL)\n\n                    note.url = dstURL\n                    note.parseURL()\n                    note.project = project\n\n                    self.notesTableView.removeRows(notes: [note])\n                    vc.notesTable.insertRows(notes: [note])\n                }\n            }\n            \n            UIApplication.getVC().updateNotesCounter()\n        }\n        \n        UIApplication.getEVC().updateTitle()\n\n        self.dismiss(animated: true, completion: nil)\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n\n        if let projects = self.projects {\n            let project = projects[indexPath.row]\n            if project.isTrash {\n                cell.textLabel?.text = NSLocalizedString(\"Trash\", comment: \"\")\n            } else {\n                cell.textLabel?.text = project.getNestedLabel()\n            }\n        }\n\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        if let projects = self.projects {\n            return projects.count\n        }\n\n        return 0\n    }\n\n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if selectedNotes.count == 1 {\n            let note = selectedNotes.first!\n            if let projects = self.projects {\n                if projects[indexPath.row] == note.project {\n                    cell.accessoryType = .checkmark\n                }\n            }\n        }\n    }\n\n    @objc func createFolder() {\n        let alertController = UIAlertController(title: NSLocalizedString(\"Folder name:\", comment: \"\"), message: nil, preferredStyle: .alert)\n\n        alertController.addTextField { (textField) in\n            textField.placeholder = \"\"\n        }\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            guard let name = alertController.textFields?[0].text, name.count > 0 else {\n                return\n            }\n\n            guard let allProjects = self.projects, allProjects.first(where: { $0.label == name } ) == nil else {\n                let alert = UIAlertController(title: \"Oops 👮‍♂️\", message: NSLocalizedString(\"Folder with this name already exist\", comment: \"\"), preferredStyle: UIAlertController.Style.alert)\n                alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n\n                self.present(alert, animated: true, completion: nil)\n                return\n            }\n\n            guard let newDir = UserDefaultsManagement.storageUrl?.appendingPathComponent(name) else { return }\n\n            do {\n                try FileManager.default.createDirectory(at: newDir, withIntermediateDirectories: false, attributes: nil)\n            } catch {\n                print(error)\n                return\n            }\n\n            if let projects = Storage.shared().insert(url: newDir) {\n                OperationQueue.main.addOperation {\n                    UIApplication.getVC().sidebarTableView.insertRows(projects: projects)\n                    \n                    self.projects?.append(contentsOf: projects)\n                    self.tableView.reloadData()\n                    \n                    self.notesTableView.viewDelegate?.sidebarTableView.reloadSidebar()\n                }\n            }\n        }\n\n        let cancelAction = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.present(alertController, animated: true, completion: nil)\n\n    }\n\n    @objc func cancel() {\n        self.dismiss(animated: true, completion: nil)\n    }\n\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/AppIconViewController.swift",
    "content": "//\n//  AppIconViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Hlushchenko on 07.04.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass AppIconViewController: UITableViewController {\n    enum AppIconRows: Int, CaseIterable {\n        case modern\n        case classic\n        case ny2026\n\n        public func getName() -> String {\n            switch self {\n            case .modern:\n                return \"Modern\"\n            case .classic:\n                return \"Classic\"\n            case .ny2026:\n                return \"Neo\"\n            }\n        }\n\n        var description : String {\n            switch self {\n            case .modern: return \"modern\"\n            case .classic: return \"classic-2025\"\n            case .ny2026: return \"ny-2026\"\n            }\n        }\n\n        static let count: Int = {\n            var max: Int = 0\n            while let _ = AppIconRows(rawValue: max) { max += 1 }\n            return max\n        }()\n    }\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Icon\", comment: \"Settings\")\n        super.viewDidLoad()\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        for row in AppIconRows.allCases {\n            if let cell = tableView.cellForRow(at: IndexPath(row: row.rawValue, section: 0)) {\n                cell.accessoryType = .none\n            }\n        }\n\n        if let cell = tableView.cellForRow(at: indexPath) {\n            cell.accessoryType = .checkmark\n\n            if let icon = AppIconRows(rawValue: indexPath.row)?.description {\n                let name = icon == \"modern\" ? nil : icon\n\n                UIApplication.shared.setAlternateIconName(name) { error in\n                    if let error = error {\n                        print(\"Error setting alternate icon \\(String(describing: name)): \\(error.localizedDescription)\")\n                    } else {\n                        UserDefaultsManagement.appIcon = indexPath.row\n                    }\n                }\n            }\n        }\n\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        return 120\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        let marginguide = cell.contentView.layoutMarginsGuide\n\n        cell.imageView?.translatesAutoresizingMaskIntoConstraints = false\n        cell.imageView?.topAnchor.constraint(equalTo: marginguide.topAnchor).isActive = true\n        cell.imageView?.leadingAnchor.constraint(equalTo: marginguide.leadingAnchor).isActive = true\n        cell.imageView?.heightAnchor.constraint(equalToConstant: 100).isActive = true\n        cell.imageView?.widthAnchor.constraint(equalToConstant: 100).isActive = true\n\n        cell.imageView?.layer.borderColor = UIColor.gray.cgColor\n        cell.imageView?.layer.borderWidth = 2\n        cell.imageView?.layer.backgroundColor = UIColor.white.cgColor\n\n        cell.imageView?.contentMode = .scaleAspectFill\n        cell.imageView?.layer.cornerRadius = 20\n\n        if let icon = AppIconRows(rawValue: indexPath.row) {\n            let iconName = \"AppIcon\" + icon.description.capitalizingFirstLetter()\n\n            if let image = UIImage(named: iconName) {\n                cell.imageView?.image = image\n            }\n\n            cell.textLabel?.text = icon.getName()\n        }\n\n        return cell\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return 1\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return AppIconRows.count\n    }\n\n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if indexPath.row == UserDefaultsManagement.appIcon {\n            cell.accessoryType = .checkmark\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/CodeFontViewController.swift",
    "content": "//\n//  CodeFontViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 3/16/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass CodeFontViewController: UITableViewController {\n    private var fontFamilyNames = [\n        \"Source Code Pro\",\n        \"Menlo\",\n        \"Courier\",\n    ]\n\n    override func viewDidLoad() {\n        title = NSLocalizedString(\"Font Family\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if fontFamilyNames[indexPath.row] == UserDefaultsManagement.codeFont.familyName {\n            cell.accessoryType = .checkmark\n        }\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if let cell = tableView.cellForRow(at: indexPath), let label = cell.textLabel, let fontFamily = label.text {\n            let fontSize = UserDefaultsManagement.fontSize\n\n            if indexPath.row == 0 {\n                UserDefaultsManagement.codeFontName = \"Source Code Pro\"\n            } else if let customFont = UIFont(name: fontFamily, size: CGFloat(fontSize)) {\n                UserDefaultsManagement.codeFont = customFont\n            }\n\n            MPreviewView.template = nil\n\n            UIApplication.getVC().notesTable.reloadData()\n\n            self.navigationController?.popViewController(animated: true)\n        }\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        cell.textLabel?.text = fontFamilyNames[indexPath.row]\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return fontFamilyNames.count\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/CodeThemeViewController.swift",
    "content": "//\n//  CodeThemeViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 3/16/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass CodeThemeViewController: UITableViewController {\n    private var themeNames = [\n        \"github\",\n        \"solarized\",\n        \"atom-one\"\n    ]\n\n    override func viewDidLoad() {\n        title = NSLocalizedString(\"Code Theme\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if themeNames[indexPath.row] == UserDefaultsManagement.codeTheme.getName() {\n            cell.accessoryType = .checkmark\n        }\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if let cell = tableView.cellForRow(at: indexPath), let label = cell.textLabel, let theme = label.text {\n            if let theme = EditorTheme(themeName: theme) {\n                UserDefaultsManagement.codeTheme = theme\n            }\n\n            NotesTextProcessor.hl = nil\n            MPreviewView.template = nil\n\n            UIApplication.getVC().notesTable.reloadData()\n\n            self.navigationController?.popViewController(animated: true)\n        }\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        cell.textLabel?.text = themeNames[indexPath.row]\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return themeNames.count\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/DefaultExtensionControllerView.swift",
    "content": "//\n//  DefaultExtensionControllerView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 2/28/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass DefaultExtensionViewController: UITableViewController {\n    private var sections = [\n        NSLocalizedString(\"Container\", comment: \"Settings\"),\n        NSLocalizedString(\"Extension\", comment: \"Settings\"),\n        NSLocalizedString(\"Files Naming\", comment: \"Settings\"),\n    ]\n\n    private var rowsInSection = [1, 3, 5]\n\n    private var extensions = [\"markdown\", \"md\", \"txt\"]\n\n    private var naming = [\n        NSLocalizedString(\"Autoname By Title\", comment: \"Settings\"),\n        NSLocalizedString(\"Auto Rename By Title\", comment: \"Settings\"),\n        NSLocalizedString(\"Format: Untitled Note\", comment: \"Settings\"),\n        NSLocalizedString(\"Format: yyyyMMddHHmmss\", comment: \"Settings\"),\n        NSLocalizedString(\"Format: yyyy-MM-dd hh.mm.ss a\", comment: \"Settings\"),\n    ]\n    \n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Files\", comment: \"Settings\")\n    }\n    \n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return sections.count\n    }\n    \n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rowsInSection[section]\n    }\n\n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return sections[section]\n    }\n\n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n    \n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if let cell = tableView.cellForRow(at: indexPath), let label = cell.textLabel, let ext = label.text {\n            if indexPath.section == 1 {\n                \n                UserDefaultsManagement.noteExtension = ext\n                UserDefaultsManagement.fileFormat = NoteType.withExt(rawValue: ext)\n\n                for index in 0...rowsInSection[indexPath.section] {\n                    let indexPath = IndexPath(row: index, section: 1)\n                    if let cell = tableView.cellForRow(at: indexPath) {\n                        cell.accessoryType = .none\n                        tableView.deselectRow(at: indexPath, animated: false)\n                    }\n                }\n\n                cell.accessoryType = .checkmark\n            } else if indexPath.section == 2 {\n                for index in 0...rowsInSection[indexPath.section] {\n                    let indexPath = IndexPath(row: index, section: 2)\n                    if let cell = tableView.cellForRow(at: indexPath) {\n                        cell.accessoryType = .none\n                        tableView.deselectRow(at: indexPath, animated: false)\n                    }\n                }\n\n                if let id = SettingsFilesNaming(rawValue: cell.tag) {\n                    UserDefaultsManagement.naming = id\n                    cell.accessoryType = .checkmark\n                }\n            }\n        }\n    }\n    \n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        guard let text = cell.textLabel?.text else { return }\n\n        if indexPath.section == 1 {\n            if UserDefaultsManagement.noteExtension == text {\n                cell.accessoryType = .checkmark\n            } else {\n                cell.accessoryType = .none\n            }\n        } else if indexPath.section == 2 {\n            if UserDefaultsManagement.naming == SettingsFilesNaming(rawValue: cell.tag) {\n                cell.accessoryType = .checkmark\n            } else {\n                cell.accessoryType = .none\n            }\n        }\n    }\n    \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n\n        let cell = UITableViewCell()\n        if indexPath.section == 0 {\n            let uiSwitch = UISwitch()\n            uiSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)\n            uiSwitch.isOn = UserDefaultsManagement.fileContainer == .textBundle || UserDefaultsManagement.fileContainer == .textBundleV2\n\n            cell.textLabel?.text = \"Textbundle\"\n            cell.accessoryView = uiSwitch\n        } else if indexPath.section == 1 {\n            cell.textLabel?.text = extensions[indexPath.row]\n        } else if indexPath.section == 2 {\n            if indexPath.row == 0 {\n                cell.textLabel?.text = naming[0]\n                cell.tag = 5\n            } else {\n                cell.textLabel?.text = naming[indexPath.row]\n                cell.tag = indexPath.row\n            }\n        }\n\n        return cell\n    }\n\n    @objc public func switchValueDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell else { return }\n        guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n        \n        UserDefaultsManagement.fileContainer = uiSwitch.isOn ? .textBundleV2 : .none\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/ExternalViewController.swift",
    "content": "//\n//  ExternalViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 20.02.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass ExternalViewController: UIDocumentPickerViewController, UIDocumentPickerDelegate {\n    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {\n        guard urls.count == 1, let url = urls.first, url.hasDirectoryPath else { return }\n        guard url.startAccessingSecurityScopedResource() else {\n            return\n        }\n\n        do {\n            let bookmarkData = try url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)\n\n            SandboxBookmark.sharedInstance().save(data: bookmarkData)\n\n            let storage = Storage.shared()\n            if storage.projectExist(url: url) {\n                return\n            }\n            \n            if let projects = Storage.shared().insert(url: url, bookmark: true) {\n                OperationQueue.main.addOperation {\n                    UIApplication.getVC().sidebarTableView.insertRows(projects: projects)\n                    _ = UIApplication.getNC()?.popViewController(animated: true)\n                    \n                    if !UserDefaultsManagement.sidebarIsOpened {\n                        UIApplication.getVC().openSidebar()\n                    }\n                    \n                    if let project = projects.first {\n                        UIApplication.getVC().sidebarTableView.select(project: project)\n                    }\n                }\n            }\n        } catch {\n            print(error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/FontViewController.swift",
    "content": "//\n//  FontViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 3/16/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass FontViewController: UITableViewController {\n    private var fontFamilyNames = [\n        \"System\",\n        \"Avenir Next\",\n        \"Georgia\",\n        \"Helvetica Neue\",\n        \"Menlo\",\n        \"Courier\",\n        \"Palatino\"\n    ]\n    \n    override func viewDidLoad() {\n        title = NSLocalizedString(\"Font Family\", comment: \"Settings\")\n        \n        super.viewDidLoad()\n    }\n    \n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n    \n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if UserDefaultsManagement.fontName == nil && indexPath.row == 0 {\n            cell.accessoryType = .checkmark\n        }\n\n        if fontFamilyNames[indexPath.row] == UserDefaultsManagement.noteFont.familyName {\n            cell.accessoryType = .checkmark\n        }\n    }\n    \n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if let cell = tableView.cellForRow(at: indexPath), let label = cell.textLabel, let fontFamily = label.text {\n            let fontSize = UserDefaultsManagement.fontSize\n\n            if indexPath.row == 0 {\n                UserDefaultsManagement.fontName = nil\n            } else if let customFont = UIFont(name: fontFamily, size: CGFloat(fontSize)) {\n                UserDefaultsManagement.noteFont = customFont\n            }\n\n            MPreviewView.template = nil\n\n            UIApplication.getVC().notesTable.reloadData()\n            \n            self.navigationController?.popViewController(animated: true)\n        }\n    }\n    \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        cell.textLabel?.text = fontFamilyNames[indexPath.row]\n        return cell\n    }\n    \n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return fontFamilyNames.count\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/GitTableViewCell.swift",
    "content": "//\n//  GitTableCellView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Hlushchenko on 01.03.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass GitTableViewCell: UITableViewCell {\n    public var project: Project?\n    \n    @IBOutlet weak var removeButton: UIButton!\n    @IBOutlet weak var cloneButton: UIButton!\n    @IBOutlet weak var activity: UIActivityIndicatorView!\n    \n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/GitViewController.swift",
    "content": "//\n//  GitViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Hlushchenko on 05.02.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\nimport CoreServices\n\nclass GitViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {\n    @IBOutlet weak var tableView: UITableView!\n    \n    enum GitSection: Int, CaseIterable {\n        case automation\n        case credentials\n        case origin\n        case logs\n\n        var title: String {\n            switch self {\n            case .automation: return \"Automation\"\n            case .credentials: return \"Credentials\"\n            case .origin: return \"Origin\"\n            case .logs: return \"Status\"\n            }\n        }\n    }\n\n    private var hasActiveGit: Bool = false\n    private var progress: GitProgress?\n    private var project: Project?\n\n    public var activity: UIActivityIndicatorView?\n    public var leftButton: UIButton?\n    public var rightButton: UIButton?\n    public var logTextField: UITextField?\n\n    public func setProject(_ project: Project) {\n        self.project = project\n    }\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Git\", comment: \"Settings\")\n        \n        navigationItem.largeTitleDisplayMode = .always\n        \n        tableView.delegate = self\n        tableView.dataSource = self\n\n        super.viewDidLoad()\n        \n        setupKeyboardObservers()\n        \n        tableView.keyboardDismissMode = .interactive\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        UIApplication.shared.isIdleTimerDisabled = true\n\n        DispatchQueue.main.async {\n            self.updateButtons(isActive: self.hasActiveGit)\n\n            if let status = self.project?.gitStatus {\n                self.logTextField?.text = status\n            }\n        }\n    }\n    \n    override func viewWillDisappear(_ animated: Bool) {\n        UIApplication.shared.isIdleTimerDisabled = false\n    }\n            \n    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return GitSection(rawValue: section)?.title\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if indexPath.section == GitSection.credentials.rawValue && indexPath.row == 0 {\n            changePrivateKey(tableView: tableView, indexPath: indexPath)\n        }\n\n        if indexPath.section == GitSection.credentials.rawValue && indexPath.row == 1 {\n            changePublicKey(tableView: tableView, indexPath: indexPath)\n        }\n\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        guard let project = project else { return UITableViewCell() }\n\n        if indexPath.section == GitSection.automation.rawValue {\n            let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)\n\n            if indexPath.row == 0 {\n                cell.textLabel?.text = NSLocalizedString(\"Pull (every 30 sec)\", comment: \"\")\n\n                let uiSwitch = UISwitch()\n                uiSwitch.addTarget(self, action: #selector(autoPullDidChange(_:)), for: .valueChanged)\n                uiSwitch.isOn = project.settings.gitAutoPull\n                cell.accessoryView = uiSwitch\n            }\n\n            return cell\n        }\n        \n        // Passphrase and origin textfields\n        if indexPath.section == GitSection.credentials.rawValue && indexPath.row == 2 || (\n            indexPath.section == GitSection.origin.rawValue && indexPath.row == 0 ||\n            indexPath.section == GitSection.logs.rawValue && indexPath.row == 0\n        ) {\n            let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)\n        \n            let textField = UITextField()\n            textField.textColor = UIColor.blackWhite\n            \n            // Passphrase\n            if indexPath.section == GitSection.credentials.rawValue && indexPath.row == 2 {\n                cell.textLabel?.text = NSLocalizedString(\"Passphrase\", comment: \"\")\n                textField.isSecureTextEntry = true\n                textField.addTarget(self, action: #selector(passphraseDidChange), for: .editingChanged)\n                textField.placeholder = \"(optional)\"\n                textField.text = project.settings.gitPrivateKeyPassphrase\n            }\n            \n            // Origin\n            if indexPath.section == GitSection.origin.rawValue && indexPath.row == 0 {\n                textField.addTarget(self, action: #selector(originDidChange), for: .editingChanged)\n                textField.placeholder = \"git@github.com:username/example.git\"\n                textField.text = project.settings.gitOrigin ?? \"\"\n            }\n            \n            // Logs\n            if indexPath.section == GitSection.logs.rawValue && indexPath.row == 0 {\n                textField.placeholder = \"no data\"\n                textField.isEnabled = false\n\n                logTextField = textField\n                progress = GitProgress(statusTextField: textField, project: project)\n                \n                // Global instance\n                AppDelegate.gitProgress = progress\n            }\n            \n            textField.translatesAutoresizingMaskIntoConstraints = false\n            textField.textAlignment = .right\n            \n            cell.contentView.addSubview(textField)\n            cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .leading, relatedBy: .equal, toItem: cell.textLabel, attribute: .trailing, multiplier: 1, constant: 8))\n            cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .top, relatedBy: .equal, toItem: cell.contentView, attribute: .top, multiplier: 1, constant: 8))\n            cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .bottom, relatedBy: .equal, toItem: cell.contentView, attribute: .bottom, multiplier: 1, constant: -8))\n            cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .trailing, relatedBy: .equal, toItem: cell.contentView, attribute: .trailing, multiplier: 1, constant: -8))\n            \n            return cell\n        }\n        \n        // Clone button\n        if indexPath.section == GitSection.origin.rawValue && indexPath.row == 1 {\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"gitTableViewCell\", for: indexPath) as! GitTableViewCell\n            cell.selectionStyle = .none\n            cell.cloneButton.addTarget(self, action: #selector(repoPressed), for: .touchUpInside)\n            cell.removeButton.addTarget(self, action: #selector(removePressed), for: .touchUpInside)\n            \n            leftButton = cell.cloneButton\n            rightButton = cell.removeButton\n            activity = cell.activity\n            \n            activity?.isHidden = true\n            activity?.startAnimating()\n            \n            return cell\n        }\n                \n        let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)\n        \n        // Private key\n        if indexPath.section == GitSection.credentials.rawValue && indexPath.row == 0 {\n            cell.textLabel?.text = NSLocalizedString(\"Private Key\", comment: \"\")\n            cell.detailTextLabel?.text = NSLocalizedString(\"...\", comment: \"\")\n\n            if project.settings.gitPrivateKey != nil {\n                cell.detailTextLabel?.text = NSLocalizedString(\"✅ - \", comment: \"\")\n                \n                let accessoryButton = UIButton(type: .system)\n                accessoryButton.addTarget(self, action: #selector(deletePrivateKey(sender:)), for: .touchUpInside)\n                accessoryButton.setImage(UIImage(systemName: \"trash\"), for: .normal)\n\n                accessoryButton.frame = CGRect(x: 0, y: 0, width: 35, height: 35)\n                cell.accessoryView = accessoryButton\n            }\n        }\n\n        // Public key\n        if indexPath.section == GitSection.credentials.rawValue && indexPath.row == 1 {\n            cell.textLabel?.text = NSLocalizedString(\"Public Key (optional)\", comment: \"\")\n            cell.detailTextLabel?.text = NSLocalizedString(\"...\", comment: \"\")\n\n            if project.settings.gitPublicKey != nil {\n                cell.detailTextLabel?.text = NSLocalizedString(\"✅ - \", comment: \"\")\n\n                let accessoryButton = UIButton(type: .system)\n                accessoryButton.addTarget(self, action: #selector(deletePublicKey(sender:)), for: .touchUpInside)\n                accessoryButton.setImage(UIImage(systemName: \"trash\"), for: .normal)\n\n                accessoryButton.frame = CGRect(x: 0, y: 0, width: 35, height: 35)\n                cell.accessoryView = accessoryButton\n            }\n        }\n        \n        return cell\n    }\n\n    func numberOfSections(in tableView: UITableView) -> Int {\n        return GitSection.allCases.count\n    }\n\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        if section == 0 {\n            return 1\n        }\n\n        if section == 1 {\n            return 3\n        }\n\n        if section == 2 {\n            return 2\n        }\n\n        return 1\n    }\n\n    private lazy var documentPickerPrivateKey: UIDocumentPickerViewController = {\n        let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.data], asCopy: true)\n        documentPicker.delegate = self\n        documentPicker.allowsMultipleSelection = false\n        documentPicker.modalPresentationStyle = .formSheet\n        return documentPicker\n    }()\n\n    private lazy var documentPickerPublicKey: UIDocumentPickerViewController = {\n        let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.data], asCopy: true)\n        documentPicker.delegate = self\n        documentPicker.allowsMultipleSelection = false\n        documentPicker.modalPresentationStyle = .formSheet\n        return documentPicker\n    }()\n\n    private func changePrivateKey(tableView: UITableView, indexPath: IndexPath) {\n        present(documentPickerPrivateKey, animated: true, completion: nil)\n    }\n\n    private func changePublicKey(tableView: UITableView, indexPath: IndexPath) {\n        present(documentPickerPublicKey, animated: true, completion: nil)\n    }\n    \n    @objc func deletePrivateKey(sender: UIButton) {\n        guard let project = project else { return }\n        \n        project.settings.gitPrivateKey = nil\n        project.saveSettings()\n\n        if let privateUrl = project.getSSHKeyUrl(),\n            FileManager.default.fileExists(atPath: privateUrl.path) {\n                try? FileManager.default.removeItem(at: privateUrl)\n        }\n\n        guard let cell = sender.superview as? UITableViewCell,\n            let tableView = cell.superview as? UITableView,\n            let indexPath = tableView.indexPath(for: cell) else { return }\n        \n        tableView.reloadRows(at: [indexPath], with: .none)\n    }\n\n    @objc func deletePublicKey(sender: UIButton) {\n        guard let project = project else { return }\n\n        project.settings.gitPublicKey = nil\n        project.saveSettings()\n\n        if let pubUrl = project.getSSHKeyUrl()?.appendingPathExtension(\"pub\"),\n            FileManager.default.fileExists(atPath: pubUrl.path) {\n                try? FileManager.default.removeItem(at: pubUrl)\n        }\n\n        guard let cell = sender.superview as? UITableViewCell,\n            let tableView = cell.superview as? UITableView,\n            let indexPath = tableView.indexPath(for: cell) else { return }\n\n        tableView.reloadRows(at: [indexPath], with: .none)\n    }\n    \n    @objc func passphraseDidChange(sender: UITextField) {\n        guard let text = sender.text else { return }\n        guard let project = project else { return }\n        \n        project.settings.gitPrivateKeyPassphrase = text\n        project.saveSettings()\n    }\n    \n    @objc func originDidChange(sender: UITextField) {\n        guard let project = project, let origin = sender.text else { return }\n    \n        project.settings.setOrigin(origin)\n        project.saveSettings()\n\n        updateButtons()\n    }\n    \n    @objc func removePressed(sender: UIButton) {\n        guard let project = project else { return }\n\n        project.removeSSHKey()\n        project.removeRepository()\n        rightButton?.isEnabled = false\n\n        progress?.log(message: \"git repository removed\")\n        updateButtons()\n    }\n    \n    @objc func repoPressed(sender: UIButton) {\n        guard let project = project else { return }\n\n        let action = project.getRepositoryState()\n        updateButtons(isActive: true)\n        \n        UIApplication.shared.isIdleTimerDisabled = true\n        UIApplication.getVC().gitQueue.addOperation({\n            defer {\n                DispatchQueue.main.async {\n                    UIApplication.shared.isIdleTimerDisabled = false\n                    UIApplication.getVC().scheduledGitPull()\n\n                    self.updateButtons(isActive: false)\n                }\n            }\n\n            if let message = project.gitDo(action, progress: self.progress) {\n                DispatchQueue.main.async {\n                    self.errorAlert(title: \"git error\", message: message)\n\n                    // Refresh local files\n                    if action == .pullPush && !UserDefaultsManagement.iCloudDrive {\n                        UIApplication.getVC().checkNew()\n                    }\n                }\n            }\n        })\n    }\n\n    public func errorAlert(title: String, message: String) {\n        DispatchQueue.main.async {\n            let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)\n            \n            let okAction = UIAlertAction(title: \"OK\", style: .cancel) { (_) in }\n            alertController.addAction(okAction)\n            \n            self.present(alertController, animated: true, completion: nil)\n        }\n    }\n\n    public func updateButtons(isActive: Bool? = nil) {\n        guard let project = project else { return }\n\n        if let isActive = isActive {\n            hasActiveGit = isActive\n            leftButton?.isEnabled = !isActive\n            activity?.isHidden = !isActive\n        }\n\n        rightButton?.isEnabled = project.hasRepository()\n\n        let state = project.getRepositoryState()\n        leftButton?.setTitle(state.title, for: .normal)\n    }\n\n    @objc public func autoPullDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell else { return }\n        guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n        guard let project = project else { return }\n        \n        project.settings.gitAutoPull = uiSwitch.isOn\n        project.saveSettings()\n    }\n\n    public func setProgress(message: String) {\n        progress?.log(message: message)\n    }\n    \n    private func setupKeyboardObservers() {\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(keyboardWillShow),\n            name: UIResponder.keyboardWillShowNotification,\n            object: nil\n        )\n        \n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(keyboardWillHide),\n            name: UIResponder.keyboardWillHideNotification,\n            object: nil\n        )\n    }\n\n    @objc private func keyboardWillShow(_ notification: Notification) {\n        guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }\n        \n        let keyboardHeight = keyboardFrame.height\n        let bottomSafeArea = view.safeAreaInsets.bottom\n        \n        UIView.animate(withDuration: 0.3) {\n            self.tableView.contentInset.bottom = keyboardHeight - bottomSafeArea\n            self.tableView.verticalScrollIndicatorInsets.bottom = keyboardHeight - bottomSafeArea\n        }\n    }\n\n    @objc private func keyboardWillHide(_ notification: Notification) {\n        UIView.animate(withDuration: 0.3) {\n            self.tableView.contentInset.bottom = 0\n            self.tableView.verticalScrollIndicatorInsets.bottom = 0\n        }\n    }\n\n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n}\n\nextension GitViewController: UIDocumentPickerDelegate, UINavigationControllerDelegate {\n    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {\n        guard let url = urls.first else { return }\n        guard let data = try? Data(contentsOf: url) else { return }\n        guard let project = project else { return }\n\n        if controller == documentPickerPrivateKey {\n            project.settings.gitPrivateKey = data\n        }\n\n        if controller == documentPickerPublicKey {\n            project.settings.gitPublicKey = data\n        }\n\n        project.saveSettings()\n        \n        tableView.reloadData()\n    }\n\n     func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {\n        controller.dismiss(animated: true, completion: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/LanguageViewController.swift",
    "content": "//\n//  LanguageViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 3/12/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass LanguageViewController: UITableViewController {\n    private var languages: [String]? = []\n    \n    override func viewDidLoad() {\n        for im in UITextInputMode.activeInputModes {\n            if let lang = im.primaryLanguage {\n                self.languages?.append(lang)\n            }\n        }\n        \n        self.title = NSLocalizedString(\"Default Keyboard\", comment: \"Settings\")\n        super.viewDidLoad()\n    }\n    \n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n    \n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        UserDefaultsManagement.defaultKeyboard = languages?[ indexPath.row]\n        self.navigationController?.popViewController(animated: true)\n    }\n    \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        cell.textLabel?.text = languages?[indexPath.row]\n        return cell\n    }\n    \n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        if let l = languages {\n            return l.count\n        }\n        \n        return 0\n    }\n    \n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        guard let language = UserDefaultsManagement.defaultKeyboard else { return }\n        \n        if languages?[indexPath.row] == language {\n            cell.accessoryType = .checkmark\n        }\n    }\n\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/ProViewController.swift",
    "content": "//\n//  ProViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 19.02.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass ProViewController: UITableViewController {\n    private var sections = [\n        NSLocalizedString(\"+\", comment: \"Settings\"),\n        NSLocalizedString(\"View\", comment: \"Settings\"),\n    ]\n\n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return sections[section]\n    }\n\n    private var rows = [\n        [\n            NSLocalizedString(\"Default Keyboard\", comment: \"\"),\n            NSLocalizedString(\"Use Inline Tags\", comment: \"\"),\n            NSLocalizedString(\"Use TextBundle info.json to store c/mtime\", comment: \"\")\n        ], [\n            NSLocalizedString(\"Sort By\", comment: \"\"),\n            NSLocalizedString(\"Library\", comment: \"\")\n        ]\n    ]\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Advanced\", comment: \"Settings\")\n        super.viewDidLoad()\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if indexPath.section == 1 {\n            if indexPath.row == 0 {\n                self.navigationController?.pushViewController(SortByViewController(), animated: true)\n            } else {\n                self.navigationController?.pushViewController(SidebarViewController(), animated: true)\n            }\n        }\n\n        if indexPath.section == 0, indexPath.row == 0 {\n            self.navigationController?.pushViewController(LanguageViewController(), animated: true)\n        }\n\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let uiSwitch = UISwitch()\n        uiSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)\n\n        let cell = UITableViewCell()\n        cell.textLabel?.text = rows[indexPath.section][indexPath.row]\n\n        if indexPath.section == 0 {\n            switch indexPath.row {\n            case 1:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.inlineTags\n                break\n            case 2:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.useTextBundleMetaToStoreDates\n                break\n            default:\n                break\n            }\n        }\n\n        if indexPath.section == 1 {\n            cell.accessoryType = .disclosureIndicator\n        }\n        \n        return cell\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return rows.count\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rows[section].count\n    }\n\n    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        if indexPath.row == 0 {\n            cell.accessoryType = .disclosureIndicator\n        }\n    }\n\n    @objc public func switchValueDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell,\n            let tableView = cell.superview as? UITableView,\n            let indexPath = tableView.indexPath(for: cell) else { return }\n\n\n        switch indexPath.row {\n        case 1:\n            guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n            UserDefaultsManagement.inlineTags = uiSwitch.isOn\n\n            let vc = UIApplication.getVC()\n            if UserDefaultsManagement.inlineTags {\n                vc.sidebarTableView.loadAllTags()\n            } else {\n                vc.sidebarTableView.unloadAllTags()\n            }\n\n            vc.resizeSidebar(withAnimation: true)\n        case 2:\n            guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n            UserDefaultsManagement.useTextBundleMetaToStoreDates = uiSwitch.isOn\n        default:\n            return\n        }\n    }\n\n    private func autoVersioningPrompt() {\n        let title = NSLocalizedString(\"Сlearing history\", comment: \"\")\n        let message = NSLocalizedString(\"Are you sure you want to delete the history of all notes?\", comment: \"\")\n        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)\n\n        alert.addAction(UIAlertAction(title: \"OK\", style: .default) { (_) in\n            let revisions = Storage.shared().getRevisionsHistoryDocumentsSupport()\n            do {\n                try FileManager.default.removeItem(at: revisions)\n            } catch {\n                print(\"History clear: \\(error)\")\n            }\n\n            self.dismiss(animated: true)\n        })\n\n        let cancel = NSLocalizedString(\"Cancel\", comment: \"\")\n        alert.addAction(UIAlertAction(title: cancel, style: .cancel, handler: { (action: UIAlertAction!) in\n        }))\n\n        self.present(alert, animated: true, completion: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/ProjectSettingsViewController.swift",
    "content": "//\n//  ProjectSettingsViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/20/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass ProjectSettingsViewController: UITableViewController {\n    private var dismiss: Bool = false\n    private var project: Project\n    private var sections = [\n        NSLocalizedString(\"Sort By\", comment: \"\"),\n        NSLocalizedString(\"Sort Direction\", comment: \"\"),\n        NSLocalizedString(\"Visibility\", comment: \"\"),\n        NSLocalizedString(\"Notes List\", comment: \"\")\n    ]\n    private var rowsInSections = [4, 2, 2, 1]\n\n    init(project: Project, dismiss: Bool = false) {\n        self.project = project\n        self.dismiss = dismiss\n        \n        super.init(style: .grouped)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        if dismiss {\n            self.navigationItem.rightBarButtonItem = Buttons.getDone(target: self, selector: #selector(close))\n        }\n\n        self.title = project.getFullLabel()\n\n        super.viewDidLoad()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        let vc = UIApplication.getVC()\n\n        if let cell = tableView.cellForRow(at: indexPath) {\n            if indexPath.section == 0x00 {\n                for row in 0...rowsInSections[indexPath.section] {\n                    let cell = tableView.cellForRow(at: IndexPath(row: row, section: indexPath.section))\n                    cell?.accessoryType = .none\n                }\n\n                if let sort = SortBy(rawValue: cell.reuseIdentifier!) {\n                    self.project.settings.sortBy = sort\n                    vc.buildSearchQuery()\n                    vc.reloadNotesTable()\n                }\n\n                if cell.accessoryType == .none {\n                    cell.accessoryType = .checkmark\n                } else {\n                    cell.accessoryType = .none\n                }\n            }\n\n            if indexPath.section == 0x01 {\n                for row in 0...rowsInSections[indexPath.section] {\n                    let cell = tableView.cellForRow(at: IndexPath(row: row, section: indexPath.section))\n                    cell?.accessoryType = .none\n                }\n\n                if let sort = SortDirection(rawValue: cell.reuseIdentifier!) {\n                    self.project.settings.sortDirection = sort\n                    vc.buildSearchQuery()\n                    vc.reloadNotesTable()\n                }\n\n                if cell.accessoryType == .none {\n                    cell.accessoryType = .checkmark\n                } else {\n                    cell.accessoryType = .none\n                }\n            }\n        }\n\n        project.saveSettings()\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rowsInSections[section]\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return 4\n    }\n\n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return sections[section]\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let uiSwitch = UISwitch()\n        uiSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)\n        \n        var cell = UITableViewCell()\n\n        if indexPath.section == 0x00 {\n            switch indexPath.row {\n            case 0:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"none\")\n                cell.textLabel?.text = NSLocalizedString(\"None\", comment: \"\")\n                if project.settings.sortBy.rawValue == \"none\" {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            case 1:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"modificationDate\")\n                cell.textLabel?.text = NSLocalizedString(\"Modification Date\", comment: \"\")\n                if project.settings.sortBy.rawValue == \"modificationDate\" {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            case 2:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"creationDate\")\n                cell.textLabel?.text = NSLocalizedString(\"Creation Date\", comment: \"\")\n\n                if project.settings.sortBy.rawValue == \"creationDate\" {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            case 3:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"title\")\n                cell.textLabel?.text = NSLocalizedString(\"Title\", comment: \"\")\n\n                if project.settings.sortBy.rawValue == \"title\" {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            default:\n                break\n            }\n        }\n\n        if indexPath.section == 0x01 {\n            switch indexPath.row {\n            case 0:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"asc\")\n                cell.textLabel?.text = NSLocalizedString(\"Ascending\", comment: \"\")\n                if project.settings.sortDirection.rawValue == \"asc\" {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            case 1:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"desc\")\n                cell.textLabel?.text = NSLocalizedString(\"Descending\", comment: \"\")\n                if project.settings.sortDirection.rawValue == \"desc\" {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            default:\n                break\n            }\n        }\n\n        if indexPath.section == 0x02 {\n            switch indexPath.row {\n            case 0:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = project.settings.showInCommon\n                uiSwitch.isEnabled =\n                    !project.isDefault\n                    && !project.isTrash\n                    && !project.isVirtual\n\n                cell.textLabel?.text = NSLocalizedString(\"Show Notes in \\\"Notes\\\" and \\\"Todo\\\"\", comment: \"\")\n            case 1:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = project.settings.showInSidebar\n                uiSwitch.isEnabled =\n                    !project.isDefault\n                    && !project.isTrash\n                    && !project.isVirtual\n\n                cell.textLabel?.text = NSLocalizedString(\"Show Folder in Library\", comment: \"\")\n            default:\n                return cell\n            }\n        }\n\n        if indexPath.section == 0x03 {\n            cell.accessoryView = uiSwitch\n            uiSwitch.isOn = project.settings.isFirstLineAsTitle()\n            uiSwitch.isEnabled = !project.isVirtual\n\n            cell.textLabel?.text = NSLocalizedString(\"Use First Line as Title\", comment: \"\")\n        }\n\n        return cell\n    }\n\n    @objc public func switchValueDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell,\n            let tableView = cell.superview as? UITableView,\n            let indexPath = tableView.indexPath(for: cell) else { return }\n\n        let vc = UIApplication.getVC()\n\n        if indexPath.section == 0x02 {\n            if indexPath.row == 0x00 {\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n                self.project.settings.showInCommon = uiSwitch.isOn\n\n                vc.reloadNotesTable()\n            } else {\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n\n                self.project.settings.showInSidebar = uiSwitch.isOn\n\n                OperationQueue.main.addOperation {\n                    if !uiSwitch.isOn {\n                        let at = IndexPath(row: 0, section: 0)\n                        vc.sidebarTableView.tableView(vc.sidebarTableView, didSelectRowAt: at)\n                        vc.sidebarTableView.removeRows(projects: [self.project])\n                    } else {\n                        vc.sidebarTableView.insertRows(projects: [self.project])\n                    }\n                }\n            }\n        } else if indexPath.section == 0x03 {\n            guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n            project.settings.firstLineAsTitle = uiSwitch.isOn\n\n            let notes = Storage.shared().getNotesBy(project: project)\n            for note in notes {\n                note.invalidateCache()\n            }\n\n            vc.reloadNotesTable()\n        }\n\n        project.saveSettings()\n    }\n\n    @objc func cancel() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    @objc func close() {\n        dismiss(animated: true, completion: nil)\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/ProjectsViewController.swift",
    "content": "//\n//  ProjectsViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/20/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport CoreServices\nimport UniformTypeIdentifiers\n\nclass ProjectsViewController: UITableViewController, UIDocumentPickerDelegate {\n    private var projects: [Project]\n\n    init() {\n        let storage = Storage.shared()\n        self.projects = storage.getProjects()\n\n        super.init(style: .plain)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        let addProject = Buttons.getAdd(target: self, selector: #selector(newAlert))\n\n        var buttons = [UIBarButtonItem]()\n        buttons.append(addProject)\n\n//        if #available(iOS 13.0, *) {\n//            let external = Buttons.getAttach(target: self, selector: #selector(attachExternal))\n//\n//            buttons.append(external)\n//        }\n\n        self.navigationItem.rightBarButtonItems = buttons\n\n        self.projects = Storage.shared().getProjects()\n        self.title = NSLocalizedString(\"Folders\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        let project = self.projects[indexPath.row]\n        let controller = ProjectSettingsViewController(project: project)\n\n        self.navigationController?.pushViewController(controller, animated: true)\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n\n        if self.projects.count > 0 {\n            let project = projects[indexPath.row]\n            if project.isTrash {\n                cell.textLabel?.text = NSLocalizedString(\"Trash\", comment: \"\")\n            } else {\n                cell.textLabel?.text = project.getNestedLabel()\n            }\n        }\n\n        cell.accessoryType = .disclosureIndicator\n\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return self.projects.count\n    }\n\n    override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {\n        return .none\n    }\n\n    override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {\n        let project = self.projects[indexPath.row]\n\n        if project.isDefault {\n            return nil\n        }\n\n        if project.isTrash {\n            return nil\n        }\n\n        let deleteAction = UIContextualAction(style: .destructive, title: NSLocalizedString(\"Delete\", comment: \"\")) { (action, view, completionHandler) in\n            self.delete(project: project)\n            completionHandler(true)\n        }\n\n        deleteAction.backgroundColor = UIColor(red:0.93, green:0.31, blue:0.43, alpha:1.0)\n\n        let configuration = UISwipeActionsConfiguration(actions: [deleteAction])\n        configuration.performsFirstActionWithFullSwipe = true // This mimics the full swipe behavior if needed\n        return configuration\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    @objc func newAlert() {\n        let alertController = UIAlertController(title: NSLocalizedString(\"Folder name:\", comment: \"\"), message: nil, preferredStyle: .alert)\n\n        alertController.addTextField { (textField) in\n            textField.placeholder = \"\"\n        }\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            guard let name = alertController.textFields?[0].text, name.count > 0 else {\n                return\n            }\n\n            guard self.projects.first(where: { $0.label == name } ) == nil else {\n                let alert = UIAlertController(title: \"Oops 👮‍♂️\", message: NSLocalizedString(\"Folder with this name already exist\", comment: \"\"), preferredStyle: UIAlertController.Style.alert)\n                alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n\n                self.present(alert, animated: true, completion: nil)\n                return\n            }\n\n            guard let newDir = UserDefaultsManagement.storageUrl?.appendingPathComponent(name, isDirectory: true) else { return }\n\n            do {\n                try FileManager.default.createDirectory(at: newDir, withIntermediateDirectories: false, attributes: nil)\n            } catch {\n                print(error)\n                return\n            }\n\n            if let projects = Storage.shared().insert(url: newDir) {\n                self.tableView.reloadData()\n                \n                OperationQueue.main.addOperation {\n                    UIApplication.getVC().sidebarTableView.insertRows(projects: projects)\n                }\n            }\n        }\n\n        let cancelAction = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.present(alertController, animated: true, completion: nil)\n\n    }\n\n    @objc func attachExternal() {\n        let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.folder])\n\n        documentPicker.delegate = self\n        present(documentPicker, animated: true, completion: nil)\n    }\n\n    private func delete(project: Project) {\n        if project.isBookmark {\n            self.removeProject(project: project)\n\n            SandboxBookmark.sharedInstance().remove(url: project.url)\n            return\n        }\n\n        let message = \"Are you sure you want to remove project \\\"\\(project.getFullLabel())\\\" and all files inside?\"\n\n        let alertController = UIAlertController(title: NSLocalizedString(\"Project removing ❌\", comment: \"\"), message: message, preferredStyle: .alert)\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            project.remove()\n            self.removeProject(project: project)\n        }\n\n        let cancelAction = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.present(alertController, animated: true, completion: nil)\n    }\n\n    private func removeProject(project: Project) {\n        if let i = self.projects.firstIndex(of: project) {\n            self.projects.remove(at: i)\n        }\n\n        self.tableView.reloadData()\n        Storage.shared().removeBy(project: project)\n\n        let vc = UIApplication.getVC()\n        vc.reloadNotesTable() {\n            OperationQueue.main.addOperation {\n                vc.sidebarTableView.removeRows(projects: [project])\n            }\n        }\n    }\n\n    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {\n\n        guard urls.count == 1, let url = urls.first, url.hasDirectoryPath else { return }\n\n        guard url.startAccessingSecurityScopedResource() else {\n            return\n        }\n\n        do {\n            let bookmarkData = try url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)\n\n            SandboxBookmark.sharedInstance().save(data: bookmarkData)\n\n            if let projects = Storage.shared().insert(url: url) {\n                OperationQueue.main.addOperation {\n                    UIApplication.getVC().sidebarTableView.insertRows(projects: projects)\n                    \n                    self.projects.append(contentsOf: projects)\n                    self.tableView.reloadData()\n                }\n            }\n        } catch {\n            print(error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/SecurityViewController.swift",
    "content": "//\n//  SecurityViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Hlushchenko on 08.04.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SecurityViewController: UITableViewController {\n\n    lazy var saveButton: UIButton = {\n        let button : UIButton = UIButton(type: UIButton.ButtonType.custom) as UIButton\n        button.backgroundColor = UIColor.systemBlue\n        button.layer.cornerRadius = 10\n        button.addTarget(self, action: #selector(saveButtonClicked), for: .touchUpInside)\n        button.setTitle(NSLocalizedString(\"Save\", comment: \"\"), for: UIControl.State.normal)\n        button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 25, bottom: 10, right: 25)\n       return button\n    }()\n\n    var passwordTextField: UITextField?\n    var verifyPasswordTextField: UITextField?\n\n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return NSLocalizedString(\"Master\", comment: \"Settings\")\n    }\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Security\", comment: \"Settings\")\n        super.viewDidLoad()\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return 1\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return 3\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)\n        let textField = UITextField()\n\n        var password = String()\n\n        do {\n            let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n            password = try item.readPassword()\n        } catch {\n            print(error)\n        }\n\n        textField.text = password\n\n        if indexPath.row == 0 {\n            cell.textLabel?.text = NSLocalizedString(\"Password\", comment: \"\")\n            textField.placeholder = \"Required\"\n            passwordTextField = textField\n        }\n\n        if indexPath.row == 1 {\n            cell.textLabel?.text = NSLocalizedString(\"Verify Password\", comment: \"\")\n            textField.placeholder = \"Required\"\n            verifyPasswordTextField = textField\n        }\n\n        if indexPath.row == 2 {\n            let cell: UITableViewCell = UITableViewCell()\n\n            cell.selectionStyle = .none\n            cell.contentView.addSubview(saveButton)\n\n            saveButton.translatesAutoresizingMaskIntoConstraints = false\n            saveButton.centerXAnchor.constraint(equalTo: cell.centerXAnchor).isActive = true\n            saveButton.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true\n\n            return cell\n        }\n\n        textField.isSecureTextEntry = true\n\n        textField.translatesAutoresizingMaskIntoConstraints = false\n        textField.textAlignment = .right\n\n        cell.contentView.addSubview(textField)\n        cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .leading, relatedBy: .equal, toItem: cell.textLabel, attribute: .trailing, multiplier: 1, constant: 8))\n        cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .top, relatedBy: .equal, toItem: cell.contentView, attribute: .top, multiplier: 1, constant: 8))\n        cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .bottom, relatedBy: .equal, toItem: cell.contentView, attribute: .bottom, multiplier: 1, constant: -8))\n        cell.addConstraint(NSLayoutConstraint(item: textField, attribute: .trailing, relatedBy: .equal, toItem: cell.contentView, attribute: .trailing, multiplier: 1, constant: -8))\n\n        return cell\n    }\n\n    @objc func saveButtonClicked(sender: UIButton) {\n        guard let passwordTextField = passwordTextField,\n              let verifyPasswordTextField = verifyPasswordTextField,\n              let text = passwordTextField.text else { return }\n\n        let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n\n        if text.count > 0, text == verifyPasswordTextField.text {\n            do {\n                try item.savePassword(text)\n            } catch {\n                print(\"Master password saving error: \\(error)\")\n            }\n\n            let title = NSLocalizedString(\"Password has been successfully changed\", comment: \"\")\n            let message = NSLocalizedString(\"Tip: To use old notes, you must decrypt them separately with the old key and encrypt them again.\", comment: \"\")\n\n            let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)\n            alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n            present(alert, animated: true, completion: nil)\n\n            return\n        }\n\n        let title = NSLocalizedString(\"Please try again\", comment: \"\")\n        let message = NSLocalizedString(\"Wrong repeated password\", comment: \"\")\n        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)\n        alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n        present(alert, animated: true, completion: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/SettingsEditorViewController.swift",
    "content": "//\n//  SettingsEditorViewController.swift\n//  FSNotes iOS\n//\n//  Created by Олександр Глущенко on 07.08.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SettingsEditorViewController: UITableViewController {\n    private var noteTableUpdater = Timer()\n\n    private var sections = [\n        NSLocalizedString(\"Settings\", comment: \"\"),\n        NSLocalizedString(\"View\", comment: \"\"),\n        NSLocalizedString(\"Line Spacing\", comment: \"Settings\"),\n        NSLocalizedString(\"Font\", comment: \"\"),\n        NSLocalizedString(\"Code\", comment: \"\")\n    ]\n\n    private var rowsInSection = [2, 2, 1, 3, 2]\n\n    private var counter = UILabel(frame: CGRect(x: 0, y: 0, width: 20, height: 20))\n    \n    private var rows = [\n        [\n            NSLocalizedString(\"Autocorrection\", comment: \"Settings\"),\n            NSLocalizedString(\"Check Spelling\", comment: \"Settings\"),\n        ],\n        [\n            NSLocalizedString(\"Code Block Live Highlighting\", comment: \"Settings\"),\n            NSLocalizedString(\"MathJax\", comment: \"Settings\"),\n        ],\n        [\"\"],\n        [\n            NSLocalizedString(\"Family\", comment: \"Settings\"),\n            NSLocalizedString(\"Dynamic Type\", comment: \"Settings\"),\n            NSLocalizedString(\"Font Size\", comment: \"Settings\")\n        ],\n        [\n            NSLocalizedString(\"Font\", comment: \"Settings\"),\n            NSLocalizedString(\"Theme\", comment: \"Settings\"),\n        ]\n    ]\n\n    override func viewDidLoad() {\n        title = NSLocalizedString(\"Editor\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    @objc func cancel() {\n        self.navigationController?.popViewController(animated: true)\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return sections.count\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rowsInSection[section]\n    }\n\n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return sections[section]\n    }\n\n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if indexPath.section == 3 && indexPath.row == 0 {\n            let controller = FontViewController()\n            self.navigationController?.pushViewController(controller, animated: true)\n        }\n\n        if indexPath.section == 4 && indexPath.row == 0 {\n            let controller = CodeFontViewController()\n            self.navigationController?.pushViewController(controller, animated: true)\n        }\n\n        if indexPath.section == 4 && indexPath.row == 1 {\n            let controller = CodeThemeViewController()\n            self.navigationController?.pushViewController(controller, animated: true)\n        }\n\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let uiSwitch = UISwitch()\n        uiSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)\n        \n        let cell = UITableViewCell()\n        cell.textLabel?.text = rows[indexPath.section][indexPath.row]\n\n        if indexPath.section == 0 {\n            switch indexPath.row {\n            case 0:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.editorAutocorrection\n            case 1:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.editorSpellChecking\n            default:\n                return cell\n            }\n        }\n\n        if indexPath.section == 1 {\n            switch indexPath.row {\n            case 0:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.codeBlockHighlight\n            case 1:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.mathJaxPreview\n            default:\n                return cell\n            }\n        }\n\n        if indexPath.section == 2 {\n            let brightness = UserDefaultsManagement.editorLineSpacing\n            let slider = UISlider(frame: CGRect(x: 10, y: 3, width: tableView.frame.width - 20, height: 40))\n            slider.minimumValue = 0\n            slider.maximumValue = 25\n            slider.addTarget(self, action: #selector(didChangeLineSpacingSlider), for: .touchUpInside)\n            slider.setValue(brightness, animated: true)\n            cell.addSubview(slider)\n        }\n\n        if indexPath.section == 3 {\n            switch indexPath.row {\n            case 0:\n                cell.accessoryType = .disclosureIndicator\n            case 1:\n                cell.accessoryView = uiSwitch\n                uiSwitch.isOn = UserDefaultsManagement.dynamicTypeFont\n            case 2:\n                if UserDefaultsManagement.dynamicTypeFont {\n                    cell.isHidden = true\n                    return cell\n                }\n\n                let stepper = UIStepper(frame: CGRect(x: 20, y: 20, width: 100, height: 20))\n                stepper.stepValue = 1\n                stepper.minimumValue = 10\n                stepper.maximumValue = 40\n                stepper.value = Double(UserDefaultsManagement.fontSize)\n                stepper.translatesAutoresizingMaskIntoConstraints = false\n                stepper.addTarget(self, action: #selector(fontSizeChanged), for: .valueChanged)\n\n                let label = UILabel()\n                label.text = \"\"\n                label.translatesAutoresizingMaskIntoConstraints = false\n\n                counter.text = String(Double(UserDefaultsManagement.fontSize))\n                counter.textColor = UIColor.blackWhite\n                counter.translatesAutoresizingMaskIntoConstraints = false\n\n                cell.contentView.addSubview(label)\n                cell.contentView.addSubview(counter)\n                cell.contentView.addSubview(stepper)\n                cell.selectionStyle = .none\n                cell.accessoryType = .none\n\n                let views = [\"name\" : label, \"counter\": counter, \"stepper\" : stepper] as [String : Any]\n\n                cell.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: \"H:|-10-[name]-[counter(40)]-15-[stepper(100)]-20-|\", options:  NSLayoutConstraint.FormatOptions.alignAllCenterY, metrics: nil, views: views))\n\n                cell.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: \"V:|-10-[name(stepper)]-10-|\", options: [], metrics: nil, views: views))\n            default:\n                return cell\n            }\n        }\n\n        if indexPath.section == 4 {\n            switch indexPath.row {\n            case 0:\n                cell.accessoryType = .disclosureIndicator\n                break\n            case 1:\n                cell.accessoryType = .disclosureIndicator\n                break\n            default:\n                break\n            }\n        }\n\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        if (indexPath.section == 3 && indexPath.row == 2 && UserDefaultsManagement.dynamicTypeFont) {\n            return 0\n        }\n\n        return super.tableView(tableView, heightForRowAt: indexPath)\n    }\n\n    @objc public func switchValueDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell,\n            let tableView = cell.superview as? UITableView,\n            let indexPath = tableView.indexPath(for: cell) else { return }\n\n        if indexPath.section == 0 {\n            switch indexPath.row {\n            case 0:\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n                UserDefaultsManagement.editorAutocorrection = uiSwitch.isOn\n\n                UIApplication.getEVC().editArea.autocorrectionType = UserDefaultsManagement.editorAutocorrection ? .yes : .no\n            case 1:\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n                UserDefaultsManagement.editorSpellChecking = uiSwitch.isOn\n\n                UIApplication.getEVC().editArea.spellCheckingType = UserDefaultsManagement.editorSpellChecking ? .yes : .no\n            default:\n                return\n            }\n        }\n\n        if indexPath.section == 1 {\n            switch indexPath.row {\n            case 0:\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n                UserDefaultsManagement.codeBlockHighlight = uiSwitch.isOn\n            case 1:\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n                UserDefaultsManagement.mathJaxPreview = uiSwitch.isOn\n            default:\n                return\n            }\n        }\n\n        if indexPath.section == 2 {\n            return\n        }\n\n        if indexPath.section == 3 {\n            switch indexPath.row {\n            case 0:\n                return\n            case 1:\n                guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n                UserDefaultsManagement.dynamicTypeFont = uiSwitch.isOn\n                if uiSwitch.isOn {\n                    UserDefaultsManagement.fontSize = 17\n                }\n\n                if let dynamicCell = tableView.cellForRow(at: IndexPath(row: 2, section: 3)) {\n                    dynamicCell.isHidden = uiSwitch.isOn\n                }\n\n                tableView.reloadRows(at: [IndexPath(row: 2, section: 3)], with: .automatic)\n\n                noteTableUpdater.invalidate()\n                noteTableUpdater = Timer.scheduledTimer(timeInterval: 1.2, target: self, selector: #selector(self.reloadNotesTable), userInfo: nil, repeats: false)\n                return\n            case 2:\n                return\n            default:\n                return\n            }\n        }\n    }\n\n    @IBAction func fontSizeChanged(stepper: UIStepper) {\n        UserDefaultsManagement.fontSize = Int(stepper.value)\n\n        counter.text = String(stepper.value)\n\n        noteTableUpdater.invalidate()\n        noteTableUpdater = Timer.scheduledTimer(timeInterval: 1.2, target: self, selector: #selector(self.reloadNotesTable), userInfo: nil, repeats: false)\n    }\n\n    @IBAction func reloadNotesTable() {\n        UIApplication.getVC().notesTable.reloadData()\n    }\n\n    @objc func didChangeLineSpacingSlider(sender: UISlider) {\n        MPreviewView.template = nil\n        UserDefaultsManagement.editorLineSpacing = sender.value\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/SettingsTableViewCell.swift",
    "content": "//\n//  SettingsTableViewCell.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.09.2024.\n//  Copyright © 2024 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SettingsTableViewCell: UITableViewCell {\n\n    private let iconView: UIImageView = {\n        let imageView = UIImageView()\n        let symbolConfig = UIImage.SymbolConfiguration(pointSize: 18, weight: .medium)\n        imageView.image = UIImage(systemName: \"star.fill\", withConfiguration: symbolConfig)\n        imageView.tintColor = .white\n        imageView.translatesAutoresizingMaskIntoConstraints = false\n        return imageView\n    }()\n    \n    private let gradientView: UIView = {\n        let view = UIView()\n        view.translatesAutoresizingMaskIntoConstraints = false\n        return view\n    }()\n    \n    private var iconName: String?\n    private var gradient: [String]?\n\n    init(iconName: String, gradient: [String], style: UITableViewCell.CellStyle = .subtitle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n        \n        self.iconName = iconName\n        self.gradient = gradient\n        \n        let symbolConfig = UIImage.SymbolConfiguration(pointSize: 18, weight: .medium)\n        iconView.image = UIImage(systemName: iconName, withConfiguration: symbolConfig)\n        iconView.tintColor = .white\n\n        setupViews()\n        applyGradient()\n    }\n    \n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    private func setupViews() {\n        contentView.addSubview(gradientView)\n        gradientView.addSubview(iconView)\n        \n        NSLayoutConstraint.activate([\n            gradientView.widthAnchor.constraint(equalToConstant: 35),\n            gradientView.heightAnchor.constraint(equalToConstant: 35),\n            gradientView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16),\n            gradientView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),\n            \n            iconView.centerXAnchor.constraint(equalTo: gradientView.centerXAnchor),\n            iconView.centerYAnchor.constraint(equalTo: gradientView.centerYAnchor),\n\n            textLabel!.leadingAnchor.constraint(equalTo: gradientView.trailingAnchor, constant: 16),\n            textLabel!.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16),\n        ])\n        \n        if let detailTextLabel = detailTextLabel {\n            NSLayoutConstraint.activate([\n                textLabel!.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10),\n                textLabel!.bottomAnchor.constraint(equalTo: detailTextLabel.topAnchor, constant: -4),\n                \n                detailTextLabel.leadingAnchor.constraint(equalTo: textLabel!.leadingAnchor),\n                detailTextLabel.trailingAnchor.constraint(equalTo: textLabel!.trailingAnchor),\n                \n                detailTextLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10)\n            ])\n        } else {\n            NSLayoutConstraint.activate([\n                textLabel!.centerYAnchor.constraint(equalTo: contentView.centerYAnchor)\n            ])\n        }\n        \n        gradientView.layer.cornerRadius = 8\n        gradientView.clipsToBounds = true\n        \n        textLabel?.translatesAutoresizingMaskIntoConstraints = false\n        detailTextLabel?.translatesAutoresizingMaskIntoConstraints = false\n    }\n\n    private func applyGradient() {\n        let gradientLayer = CAGradientLayer()\n        let colors = [\n            UIColor.getBy(hex: self.gradient!.first!).cgColor,\n            UIColor.getBy(hex: self.gradient!.last!).cgColor\n        ]\n        gradientLayer.colors = colors\n        gradientLayer.startPoint = CGPoint(x: 0, y: 0)\n        gradientLayer.endPoint = CGPoint(x: 1, y: 1)\n        gradientLayer.frame = CGRect(x: 0, y: 0, width: 35, height: 35)\n        gradientView.layer.insertSublayer(gradientLayer, at: 0)\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/SettingsViewController.swift",
    "content": "//\n//  SettingsViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 2/25/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport StoreKit\nimport CoreServices\nimport AudioToolbox\n\nclass SettingsViewController: UITableViewController, UIDocumentPickerDelegate {\n\n    var sections = [\n        NSLocalizedString(\"General\", comment: \"Settings\"),\n        NSLocalizedString(\"Library\", comment: \"Settings\"),\n        NSLocalizedString(\"FSNotes\", comment: \"Settings\")\n    ]\n\n    var rows = [\n        [\n            NSLocalizedString(\"Files\", comment: \"Settings\"),\n            NSLocalizedString(\"Editor\", comment: \"Settings\"),\n            NSLocalizedString(\"Security\", comment: \"Settings\"),\n            NSLocalizedString(\"Git\", comment: \"Settings\"),\n            NSLocalizedString(\"Icon\", comment: \"Settings\"),\n            NSLocalizedString(\"Advanced\", comment: \"Settings\"),\n        ], [\n            NSLocalizedString(\"iCloud Drive\", comment: \"Settings\"),\n            NSLocalizedString(\"Add External Folder\", comment: \"Settings\"),\n            NSLocalizedString(\"Folders\", comment: \"Settings\"),\n            NSLocalizedString(\"Import Notes\", comment: \"Settings\")\n        ], [\n            NSLocalizedString(\"Support\", comment: \"Settings\"),\n            NSLocalizedString(\"Website\", comment: \"Settings\"),\n            \"X\",\n            NSLocalizedString(\"Thanks\", comment: \"Settings\")\n        ]\n    ]\n\n    var icons = [\n        [\n            \"doc.badge.gearshape.fill\",\n            \"paragraphsign\",\n            \"lock.fill\",\n            \"arrow.triangle.pull\",\n            \"square.grid.3x3.middleleft.filled\",\n            \"atom\"\n        ], [\n            \"cloud.fill\",\n            \"externaldrive.fill.badge.plus\",\n            \"folder.fill.badge.gearshape\",\n            \"square.and.arrow.down.fill\"\n        ], [\n            \"graduationcap.fill\",\n            \"house.fill\",\n            \"x.circle.fill\",\n            \"heart.fill\"\n        ]\n    ]\n    \n    private var gradients = [\n        [\n            [\"#0a84ff\", \"#30d158\"],\n            [\"#ff453a\", \"#ff9f0a\"],\n            [\"#bf5af2\", \"#40c8e0\"],\n            [\"#8e8e93\", \"#48484a\"],\n            [\"#5e5ce6\", \"#8e8e93\"],\n            [\"#dc1c13\", \"#f07470\"]\n        ],\n        [\n            [\"#009bf9\", \"#004D7C\"],\n            [\"#614385\", \"#516395\"],\n            [\"#EA8D8D\", \"#A890FE\"],\n            [\"#0D7A25\", \"#40AD58\"]\n        ],\n        [\n            [\"#dfbd69\", \"#926f34\"],\n            [\"#09203F\", \"#537895\"],\n            [\"#868F96\", \"#596164\"],\n            [\"#ff9966\", \"#ff5e62\"]\n        ]\n    ]\n\n    var rowsInSection = [6, 4, 4]\n\n    override func viewWillAppear(_ animated: Bool) {\n        navigationController?.navigationBar.prefersLargeTitles = true\n    }\n    \n    override func viewDidLoad() {\n        title = NSLocalizedString(\"Settings\", comment: \"Sidebar settings\")\n        navigationItem.rightBarButtonItem = Buttons.getRateUs(target: self, selector: #selector(rateUs))\n\n        super.viewDidLoad()\n\n        let version = UILabel(frame: CGRect(x: 8, y: 30, width: tableView.frame.width, height: 60))\n        version.font = version.font.withSize(17).bold()\n\n        if let versionString = Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String,\n            let build = Bundle.main.infoDictionary?[\"CFBundleVersion\"] as? String {\n            version.text =\n                NSLocalizedString(\"Version\", comment: \"Settings\")\n                + \" \\(versionString) \"\n                + NSLocalizedString(\"build\", comment: \"Settings\")\n                + \" \\(build)\"\n        }\n\n        version.textColor = UIColor.lightGray\n        version.textAlignment = .center\n\n        tableView.tableFooterView = version\n        \n        navigationController?.navigationBar.prefersLargeTitles = true\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return 3\n    }\n    \n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rowsInSection[section]\n    }\n    \n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return sections[section]\n    }\n    \n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let iconName = icons[indexPath.section][indexPath.row]\n        let gradient = gradients[indexPath.section][indexPath.row]\n        \n        var cell = SettingsTableViewCell(iconName: iconName, gradient: gradient, style: .default, reuseIdentifier: iconName)\n        \n        if indexPath.section == 0x01 && indexPath.row == 0x03 {\n            cell = SettingsTableViewCell(iconName: iconName, gradient: gradient, style: .subtitle, reuseIdentifier: iconName)\n        }\n\n        cell.textLabel?.text = rows[indexPath.section][indexPath.row]\n\n        if indexPath.section == 0x00 {\n            cell.accessoryType = .disclosureIndicator\n            return cell\n        }\n\n        if indexPath.section == 0x01 {\n            switch indexPath.row {\n            case 0:\n                let uiSwitch = UISwitch()\n                uiSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)\n                uiSwitch.isOn = UserDefaultsManagement.iCloudDrive\n\n                cell.textLabel?.text = \"iCloud Drive\"\n                cell.accessoryView = uiSwitch\n            case 1:\n                cell.accessoryType = .none\n            case 2:\n                cell.accessoryType = .disclosureIndicator\n            case 3:\n                cell.detailTextLabel?.textColor = UIColor.blackWhite\n                cell.detailTextLabel?.numberOfLines = 0\n                cell.detailTextLabel?.lineBreakMode = .byWordWrapping\n                cell.detailTextLabel?.text = NSLocalizedString(\"Compatible with Bear and Ulysses (textbundle), markdown, txt.\", comment: \"\")\n            default:\n                return cell\n            }\n        }\n\n        if indexPath.section == 0x02 && indexPath.row == 0x03 {\n            cell.accessoryType = .disclosureIndicator\n            return cell\n        }\n\n        return cell\n    }\n\n    private func image( _ image:UIImage, withSize newSize:CGSize) -> UIImage {\n        UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.main.scale)\n        image.draw(in: CGRect(x: 0,y: 0,width: newSize.width,height: newSize.height))\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return newImage!.withRenderingMode(.automatic)\n    }\n    \n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        defer {\n            tableView.deselectRow(at: indexPath, animated: false)\n        }\n\n        var lvc: UIViewController?\n        \n        if indexPath.section == 0x00 {\n            switch indexPath.row {\n            case 0:\n                lvc = DefaultExtensionViewController()\n            case 1:\n                lvc = SettingsEditorViewController()\n            case 2:\n                lvc = SecurityViewController()\n            case 3:\n                guard let project = Storage.shared().getDefault() else { return }\n                lvc = AppDelegate.getGitVC(for: project)\n            case 4:\n                lvc = AppIconViewController()\n            case 5:\n                lvc = ProViewController()\n            default:\n                return\n            }\n        }\n\n        if indexPath.section == 0x01 {\n            switch indexPath.row {\n            case 0:\n                break\n            case 1:\n                if #available(iOS 13.0, *) {\n                    let viewController = ExternalViewController(forOpeningContentTypes: [.folder], asCopy: false)\n                    viewController.delegate = viewController\n                    present(viewController, animated: true, completion: nil)\n                }\n                break\n            case 2:\n                lvc = ProjectsViewController()\n                break\n            case 3:\n                var picker: UIDocumentPickerViewController\n\n                if #available(iOS 14.0, *) {\n                    picker = UIDocumentPickerViewController(forOpeningContentTypes: [.item])\n                } else {\n                    picker = UIDocumentPickerViewController(documentTypes: [\"public.item\"], in: .import)\n                }\n\n                picker.allowsMultipleSelection = true\n                picker.delegate = self\n                self.present(picker, animated: true, completion: nil)\n                break\n            default: break\n\n            }\n        }\n\n        if indexPath.section == 0x02 {\n            var url: URL?\n\n            switch indexPath.row {\n            case 0x00:\n                url = URL(string: \"https://github.com/glushchenko/fsnotes/issues\")\n                break\n            case 0x01:\n                url = URL(string: \"https://fsnot.es\")\n                break\n            case 0x02:\n                url = URL(string: \"https://twitter.com/fsnotesapp\")\n                break\n            case 0x03:\n                lvc = ThanksViewController()\n                break\n            default: break\n            }\n\n            if let url = url {\n                UIApplication.shared.open(url, options: [:], completionHandler: nil)\n            }\n        }\n        \n        if let controller = lvc {\n            self.navigationController?.pushViewController(controller, animated: true)\n        }\n    }\n\n    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {\n        guard let storageUrl = UserDefaultsManagement.storageUrl else { return }\n\n        for url in urls {\n            try? FileManager.default.copyItem(at: url, to: storageUrl.appendingPathComponent(url.lastPathComponent))\n        }\n    }\n\n    @objc func rateUs() {\n        if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {\n            DispatchQueue.main.async {\n                AudioServicesPlaySystemSound(1519)\n                SKStoreReviewController.requestReview(in: scene)\n            }\n        }\n    }\n\n    @objc func done() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    @objc public func switchValueDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell else { return }\n        guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n\n        UserDefaultsManagement.iCloudDrive = uiSwitch.isOn\n\n        UIApplication.getVC().reloadDatabase()\n\n        if !uiSwitch.isOn {\n            UIApplication.getVC().stopCloudDriveSyncEngine()\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/SidebarViewController.swift",
    "content": "//\n//  SidebarViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 08.03.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SidebarViewController: UITableViewController {\n    private var rows = [\n        NSLocalizedString(\"Notes\", comment: \"\"),\n        NSLocalizedString(\"Inbox\", comment: \"\"),\n        NSLocalizedString(\"Todo\", comment: \"\"),\n        NSLocalizedString(\"Untagged\", comment: \"\"),\n        NSLocalizedString(\"Trash\", comment: \"\"),\n    ]\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Library\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rows.count\n    }\n\n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        cell.textLabel?.text = rows[indexPath.row]\n\n        let uiSwitch = UISwitch()\n        uiSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)\n\n        switch indexPath.row {\n        case 0:\n            uiSwitch.isOn = UserDefaultsManagement.sidebarVisibilityNotes\n            break\n        case 1:\n            uiSwitch.isOn = UserDefaultsManagement.sidebarVisibilityInbox\n            break\n        case 2:\n            uiSwitch.isOn = UserDefaultsManagement.sidebarVisibilityTodo\n            break\n        case 3:\n            uiSwitch.isOn = UserDefaultsManagement.sidebarVisibilityUntagged\n            break\n        case 4:\n            uiSwitch.isOn = UserDefaultsManagement.sidebarVisibilityTrash\n            break\n        default:\n            break\n        }\n\n        cell.accessoryView = uiSwitch\n\n        return cell\n    }\n\n    @objc func cancel() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    @objc public func switchValueDidChange(_ sender: UISwitch) {\n        guard let cell = sender.superview as? UITableViewCell,\n            let tableView = cell.superview as? UITableView,\n            let indexPath = tableView.indexPath(for: cell) else { return }\n\n        guard let uiSwitch = cell.accessoryView as? UISwitch else { return }\n\n        switch indexPath.row {\n        case 0:\n            UserDefaultsManagement.sidebarVisibilityNotes = uiSwitch.isOn\n        case 1:\n            UserDefaultsManagement.sidebarVisibilityInbox = uiSwitch.isOn\n        case 2:\n            UserDefaultsManagement.sidebarVisibilityTodo = uiSwitch.isOn\n        case 3:\n            UserDefaultsManagement.sidebarVisibilityUntagged = uiSwitch.isOn\n        case 4:\n            UserDefaultsManagement.sidebarVisibilityTrash = uiSwitch.isOn\n        default:\n            return\n        }\n\n        UIApplication.getVC().sidebarTableView.reloadSidebar()\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/Preferences/SortByViewController.swift",
    "content": "//\n//  SortByViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 06.03.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SortByViewController: UITableViewController {\n    private var rows = [\n        NSLocalizedString(\"Modification Date\", comment: \"\"),\n        NSLocalizedString(\"Creation Date\", comment: \"\"),\n        NSLocalizedString(\"Title\", comment: \"\")\n    ]\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Sort By\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        let vc = UIApplication.getVC()\n\n        if let cell = tableView.cellForRow(at: indexPath) {\n            if indexPath.section == 0x00 {\n                for row in 0...rows.count {\n                    let cell = tableView.cellForRow(at: IndexPath(row: row, section: 0))\n                    cell?.accessoryType = .none\n                }\n\n                if let sort = SortBy(rawValue: cell.reuseIdentifier!) {\n                    UserDefaultsManagement.sort = sort\n                    vc.reloadNotesTable()\n                }\n\n                if cell.accessoryType == .none {\n                    cell.accessoryType = .checkmark\n                } else {\n                    cell.accessoryType = .none\n                }\n            }\n        }\n\n        cancel()\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rows.count\n    }\n\n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        var cell = UITableViewCell()\n\n        if indexPath.section == 0x00 {\n            switch indexPath.row {\n            case 0:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"modificationDate\")\n                cell.textLabel?.text = NSLocalizedString(\"Modification Date\", comment: \"\")\n                if UserDefaultsManagement.sort == .modificationDate {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            case 1:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"creationDate\")\n                cell.textLabel?.text = NSLocalizedString(\"Creation Date\", comment: \"\")\n\n                if UserDefaultsManagement.sort == .creationDate {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            case 2:\n                cell = UITableViewCell(style: .default, reuseIdentifier: \"title\")\n                cell.textLabel?.text = NSLocalizedString(\"Title\", comment: \"\")\n\n                if UserDefaultsManagement.sort == .title {\n                    cell.accessoryType = .checkmark\n                }\n                break\n            default:\n                break\n            }\n        }\n\n        return cell\n    }\n\n    @objc func cancel() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    @objc func close() {\n        dismiss(animated: true, completion: nil)\n    }\n}\n\n"
  },
  {
    "path": "FSNotes iOS/Preferences/ThanksViewController.swift",
    "content": "//\n//  ThanksViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 06.03.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass ThanksViewController: UITableViewController {\n    private var rows = [\n        \"Radio-T\",\n        \"Matt Septhon\",\n        \"Dylan Seeger (Icon design)\"\n    ]\n\n    private var urls = [\n        \"https://radio-t.com\",\n        \"https://www.gingerbeardman.com\",\n        \"https://lovably.com\"\n    ]\n\n    override func viewDidLoad() {\n        self.title = NSLocalizedString(\"Thanks\", comment: \"Settings\")\n\n        super.viewDidLoad()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if let url = URL(string: urls[indexPath.row]) {\n            UIApplication.shared.open(url, options: [:], completionHandler: nil)\n        }\n\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return rows.count\n    }\n\n    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 50\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n        cell.textLabel?.text = rows[indexPath.row]\n        return cell\n    }\n\n    @objc func cancel() {\n        navigationController?.popViewController(animated: true)\n    }\n}\n\n\n"
  },
  {
    "path": "FSNotes iOS/RevisionsViewController.swift",
    "content": "//\n//  RevisionsViewController.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 14.02.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass RevisionsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {\n\n    @IBOutlet weak var navItem: UINavigationItem!\n    @IBOutlet weak var navigationBar: UINavigationBar!\n    @IBOutlet weak var bottomSafeView: UIView!\n    @IBOutlet weak var revisionsTable: UITableView!\n\n    public var note: Note?\n    private var revisions = [Revision]()\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        navigationBar.barTintColor = UIColor.sidebar\n        navigationBar.tintColor = UIColor.mainTheme\n        navigationBar.backgroundColor = UIColor.sidebar\n        bottomSafeView.backgroundColor = UIColor.sidebar\n\n        if let urls = note?.listRevisions() {\n            revisions = urls\n        }\n\n        revisionsTable.delegate = self\n        revisionsTable.dataSource = self\n\n        initButtons()\n    }\n\n    private func initButtons() {\n        var buttons = [UIBarButtonItem]()\n\n        let leftString = NSLocalizedString(\"Cancel\", comment: \"\")\n        navItem.leftBarButtonItem = UIBarButtonItem(title: leftString, style: .plain, target: self, action: #selector(closeController))\n\n        if let project = note?.project, !project.hasRepository() {\n            let dropImage = UIImage(systemName: \"trash\")\n            let dropBarButton = UIBarButtonItem(image: dropImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(dropRevisions))\n\n            buttons.append(dropBarButton)\n        }\n\n        let saveImage = UIImage(systemName: \"plus.circle\")\n        let saveBarButton = UIBarButtonItem(image: saveImage, landscapeImagePhone: nil, style: .done, target: self, action: #selector(saveRevision))\n        buttons.append(saveBarButton)\n\n        navItem.rightBarButtonItems = buttons\n    }\n\n    @IBAction func dropRevisions() {\n        let title = NSLocalizedString(\"Сlearing history\", comment: \"\")\n        let message = NSLocalizedString(\"Are you sure you want to delete all versions of this note?\", comment: \"\")\n        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)\n\n        alert.addAction(UIAlertAction(title: \"OK\", style: .default) { (_) in\n            self.note?.dropRevisions()\n            self.dismiss(animated: true)\n        })\n\n        let cancel = NSLocalizedString(\"Cancel\", comment: \"\")\n            alert.addAction(UIAlertAction(title: cancel, style: .cancel, handler: { (action: UIAlertAction!) in\n        }))\n\n        self.present(alert, animated: true, completion: nil)\n    }\n\n    @IBAction func saveRevision() {\n        guard let note = note else { return }\n        \n        UIApplication.getVC().notesTable.saveRevisionAction(note: note)\n\n        dismiss(animated: true)\n    }\n\n    @IBAction func closeController() {\n        dismiss(animated: true)\n    }\n\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return revisions.count\n    }\n\n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = UITableViewCell()\n\n        let date = Date(timeIntervalSince1970: revisions[indexPath.row].timestamp)\n        let dateFormatter = DateFormatter()\n        dateFormatter.timeStyle = DateFormatter.Style.medium //Set time style\n        dateFormatter.dateStyle = DateFormatter.Style.medium //Set date style\n        dateFormatter.timeZone = .current\n        let localDate = dateFormatter.string(from: date)\n\n        cell.textLabel?.text = localDate\n\n        return cell\n    }\n\n    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        return 70\n    }\n\n    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return NSLocalizedString(\"Saved versions\", comment: \"\")\n    }\n\n    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 100\n    }\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        let revision = revisions[indexPath.row]\n        note?.restore(revision: revision)\n\n        UIApplication.getEVC().refill()\n\n        dismiss(animated: true)\n    }\n\n    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {\n        guard let headerView = view as? UITableViewHeaderFooterView else { return }\n\n        headerView.textLabel?.font = .preferredFont(forTextStyle: .title1, compatibleWith: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/SceneDelegate.swift",
    "content": "//\n//  SceneDelegate.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.11.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SceneDelegate: UIResponder, UIWindowSceneDelegate {\n\n    var window: UIWindow?\n    var launchedShortcutItem: UIApplicationShortcutItem?\n\n    var listController = UIStoryboard(name: \"Main\", bundle: nil).instantiateViewController(withIdentifier: \"listViewController\") as! ViewController\n    var editorController = UIStoryboard(name: \"Main\", bundle: nil).instantiateViewController(withIdentifier: \"editorViewController\") as! EditorViewController\n    var mainController: MainNavigationController?\n\n    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n        guard let windowScene = (scene as? UIWindowScene) else { return }\n\n        // Handle shortcut from cold launch\n        if let shortcutItem = connectionOptions.shortcutItem {\n            launchedShortcutItem = shortcutItem\n        }\n\n        window = UIWindow(windowScene: windowScene)\n\n        let nav = MainNavigationController(rootViewController: listController)\n        nav.setNavigationBarHidden(false, animated: false)\n        mainController = nav\n\n        window?.rootViewController = nav\n        window?.makeKeyAndVisible()\n\n        editorController.loadViewIfNeeded()\n\n        DispatchQueue.main.async { [weak self] in\n            guard let self = self else { return }\n\n            if let shortcutItem = self.launchedShortcutItem {\n                self.handle(shortcutItem: shortcutItem)\n            }\n\n            if let urlContext = connectionOptions.urlContexts.first {\n                self.handle(url: urlContext.url)\n            }\n\n            if let userActivity = connectionOptions.userActivities.first ?? session.stateRestorationActivity {\n                self.configure(window: self.window, with: userActivity)\n            }\n        }\n    }\n\n    func sceneDidDisconnect(_ scene: UIScene) {\n        // Called as the scene is being released by the system.\n    }\n\n    func sceneDidBecomeActive(_ scene: UIScene) {\n        // Called when the scene has moved from an inactive state to an active state.\n    }\n\n    func sceneWillResignActive(_ scene: UIScene) {\n        // Called when the scene will move from an active state to an inactive state.\n    }\n\n    func sceneWillEnterForeground(_ scene: UIScene) {\n        // Called as the scene transitions from the background to the foreground.\n    }\n\n    func sceneDidEnterBackground(_ scene: UIScene) {\n        // Called as the scene transitions from the foreground to the background.\n        saveEditorState()\n    }\n\n    // MARK: - Shortcut Actions\n\n    func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {\n        handle(shortcutItem: shortcutItem)\n        completionHandler(true)\n    }\n\n    private func handle(shortcutItem: UIApplicationShortcutItem) {\n        if ShortcutIdentifier(fullType: shortcutItem.type) == .search {\n            UIApplication.getVC().enableSearchFocus()\n        }\n\n        UIApplication.getVC().handleShortCutItem(shortcutItem)\n    }\n\n    // MARK: - URL Handling\n\n    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {\n        guard let url = URLContexts.first?.url else { return }\n        handle(url: url)\n    }\n\n    private func handle(url: URL) {\n        let vc = UIApplication.getVC()\n        let storage = Storage.shared()\n        var note = storage.getBy(url: url)\n\n        if url.host == \"open\" {\n            if let tag = url[\"tag\"]?.removingPercentEncoding {\n                vc.sidebarTableView.select(tag: tag)\n                mainController?.popToRootViewController(animated: true)\n                return\n            }\n        }\n\n        if url.host == \"find\" {\n            if let id = url[\"id\"]?.removingPercentEncoding {\n                note = storage.getBy(title: id)\n                if !vc.isLoadedDB, note == nil {\n                    vc.restoreFindID = id\n                    return\n                }\n            }\n        }\n\n        if let note = note {\n            UIApplication.getEVC().fill(note: note)\n            UIApplication.getVC().openEditorViewController()\n\n            print(\"File imported: \\(note.url)\")\n        } else {\n            guard url.startAccessingSecurityScopedResource(), let inbox = storage.getDefault() else {\n                return\n            }\n\n            let dst = NameHelper.getUniqueFileName(name: \"\", project: inbox, ext: url.pathExtension)\n\n            do {\n                try FileManager.default.copyItem(at: url, to: dst)\n\n                if let note = storage.importNote(url: dst) {\n                    vc.notesTable.insertRows(notes: [note])\n                    vc.updateNotesCounter()\n                }\n            } catch {\n                print(\"Note opening error: \\(error)\")\n            }\n        }\n    }\n\n    // MARK: - State Restoration\n\n    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {\n        configure(window: window, with: userActivity)\n    }\n\n    func configure(window: UIWindow?, with activity: NSUserActivity) {\n        UIApplication.getEVC().restoreUserActivityState(activity)\n    }\n\n    func stateRestorationActivity(for scene: UIScene) -> NSUserActivity? {\n        return scene.userActivity\n    }\n\n    // MARK: - Helper Methods\n\n    private func saveEditorState() {\n        let evc = UIApplication.getEVC()\n        guard evc.navigationController?.topViewController === evc else { return }\n\n        if let url = evc.note?.url {\n            UserDefaultsManagement.currentEditorState = evc.editArea.isFirstResponder\n\n            if evc.note?.previewState == true {\n                UserDefaultsManagement.currentRange = nil\n            } else {\n                UserDefaultsManagement.currentRange = evc.editArea.selectedRange\n            }\n\n            UserDefaultsManagement.currentNote = url\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/View/EditTextView.swift",
    "content": "//\n//  EditTextView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport MobileCoreServices\nimport UniformTypeIdentifiers\n\nclass EditTextView: UITextView, UITextViewDelegate {\n\n    public var textStorageProcessor: TextStorageProcessor?\n    \n    public var isNoteLoading = false\n    public var isAllowedScrollRect: Bool?\n    public var typingFont: UIFont?\n    public var note: Note?\n    public var lasTouchPoint: CGPoint?\n    public var imagesLoaderQueue = OperationQueue.init()\n    public var keyboardIsOpened = true\n    public var callCounter = 0\n    public var isUpdating = false\n    \n    required init?(coder: NSCoder) {\n        if #available(iOS 13.2, *) {\n            super.init(coder: coder)\n        }\n        else {\n            super.init(frame: .zero, textContainer: nil)\n            self.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n            self.contentMode = .scaleToFill\n\n            self.isScrollEnabled = false   // causes expanding height\n\n            // Auto Layout\n            self.translatesAutoresizingMaskIntoConstraints = false\n            self.font = UIFont(name: \"HelveticaNeue\", size: 18)\n        }\n\n        autocorrectionType = UserDefaultsManagement.editorAutocorrection ? .yes : .no\n        spellCheckingType = UserDefaultsManagement.editorSpellChecking ? .yes : .no\n    }\n\n    override func becomeFirstResponder() -> Bool {\n        textStorage.removeHighlight()\n        \n        return super.becomeFirstResponder()\n    }\n    \n    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {\n        super.touchesEnded(touches, with: event)\n        \n        if !isFirstResponder && window != nil {\n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in\n                guard let self = self else { return }\n                \n                if !self.isFirstResponder && self.window != nil {\n                    _ = self.becomeFirstResponder()\n                }\n            }\n        }\n    }\n\n    public func initTextStorage() {\n        let processor = TextStorageProcessor()\n        processor.editor = self\n        \n        textStorageProcessor = processor\n        textStorage.delegate = processor\n    }\n\n    override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] {\n        let selectionRects = super.selectionRects(for: range)\n\n        let fontHeight = UserDefaultsManagement.noteFont.lineHeight\n        let lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        let endCharacterIndex = offset(from: beginningOfDocument, to: range.end)\n        let endParRange = textStorage.mutableString.paragraphRange(for: NSRange(location: endCharacterIndex, length: 0))\n\n        var lastWideRect: UITextSelectionRect?\n        if selectionRects.count > 2 {\n            lastWideRect = selectionRects[selectionRects.count - 3]\n        }\n\n        var result = [UITextSelectionRect]()\n        for selectionRect in selectionRects {\n            if selectionRect.rect.width == 0 {\n                let customRect = CGRect(x: selectionRect.rect.origin.x, y: selectionRect.rect.origin.y - lineSpacing / 2, width: 0, height: fontHeight + lineSpacing)\n                let sel = EditorSelectionRect(originalRect: selectionRect, rect: customRect)\n                result.append(sel)\n            } else {\n                var heightOffset = CGFloat(0)\n\n                if endParRange.upperBound == textStorage.length && lastWideRect == selectionRect {\n                    heightOffset += lineSpacing\n                }\n\n                let customRect = CGRect(x: selectionRect.rect.origin.x, y: selectionRect.rect.origin.y - lineSpacing / 2, width: selectionRect.rect.width, height: selectionRect.rect.height + heightOffset)\n\n                let selectionRect = EditorSelectionRect(originalRect: selectionRect, rect: customRect)\n                result.append(selectionRect)\n            }\n        }\n\n        return result\n    }\n\n    override func caretRect(for position: UITextPosition) -> CGRect {\n        let characterIndex = offset(from: beginningOfDocument, to: position)\n\n        guard layoutManager.isValidGlyphIndex(characterIndex) else {\n            return super.caretRect(for: position)\n        }\n\n        let glyphIndex = layoutManager.glyphIndexForCharacter(at: characterIndex)\n        let usedLineFragment = layoutManager.lineFragmentUsedRect(forGlyphAt: glyphIndex, effectiveRange: nil)\n\n        guard !usedLineFragment.isEmpty else {\n            return super.caretRect(for: position)\n        }\n\n        var caretRect = super.caretRect(for: position)\n        caretRect.origin.y = usedLineFragment.origin.y + textContainerInset.top\n        caretRect.size.height = usedLineFragment.size.height - CGFloat(UserDefaultsManagement.editorLineSpacing) / 2\n\n        return caretRect\n    }\n\n    override func scrollRectToVisible(_ rect: CGRect, animated: Bool) {\n        guard isAllowedScrollRect == true else { return }\n\n        callCounter += 1\n\n        if keyboardIsOpened {\n            DispatchQueue.main.async {\n                UIView.animate(withDuration: 0.8, delay: 0, options: .beginFromCurrentState, animations: {\n                    super.scrollRectToVisible(rect, animated: false)\n                })\n            }\n\n            if callCounter > 2 {\n                keyboardIsOpened = false\n                callCounter = 0\n            }\n        } else {\n            super.scrollRectToVisible(rect, animated: animated)\n        }\n    }\n\n    override func cut(_ sender: Any?) {\n        let range = selectedRange\n        guard range.length > 0 else { return }\n\n        let selectedString = textStorage.attributedSubstring(from: range)\n        let attributedString = NSMutableAttributedString(attributedString: selectedString)\n            .unloadTasks()\n        attributedString.saveData()\n\n        super.cut(sender)\n        \n        do {\n            let data = try NSKeyedArchiver.archivedData(\n                withRootObject: attributedString,\n                requiringSecureCoding: false\n            )\n\n            UIPasteboard.general.setItems([\n                [\n                    UIPasteboard.attributed: data,\n                    UTType.plainText.identifier: attributedString.string\n                ]\n            ])\n        } catch {\n            print(\"Serialization error: \\(error)\")\n        }\n    }\n\n    override func paste(_ sender: Any?) {\n        isUpdating = true\n        \n        defer {\n            DispatchQueue.main.async {\n                self.isUpdating = false\n            }\n        }\n        \n        let pb = UIPasteboard.general\n        var toInsert: NSAttributedString?\n\n        if let imageData = pb.data(forPasteboardType: UTType.png.identifier) ??\n                           pb.data(forPasteboardType: UTType.jpeg.identifier) ??\n                           pb.data(forPasteboardType: UTType.image.identifier) {\n\n            toInsert = NSMutableAttributedString.build(data: imageData)\n        }\n\n        else if let data = pb.data(forPasteboardType: UIPasteboard.attributed) {\n            do {\n                if let attributed = try NSKeyedUnarchiver.unarchivedObject(\n                    ofClass: NSAttributedString.self,\n                    from: data\n                ) {\n                    let mutable = NSMutableAttributedString(attributedString: attributed)\n                    mutable.loadTasks()\n                    toInsert = mutable\n                }\n            } catch {\n                print(\"Paste error: \\(error)\")\n            }\n        }\n\n        else if let plain = pb.string {\n            let mutable = NSMutableAttributedString(string: plain)\n            mutable.loadTasks()\n            mutable.loadFont()\n            toInsert = mutable\n        }\n\n        guard let attrToInsert = toInsert else {\n            super.paste(sender)\n            return\n        }\n\n        let range = self.selectedRange\n        if let should = delegate?.textView?(self, shouldChangeTextIn: range, replacementText: attrToInsert.string), !should {\n            return\n        }\n\n        self.insertAttributedText(attrToInsert)\n    }\n\n    override func copy(_ sender: Any?) {\n        guard selectedRange.length > 0 else { return }\n\n        let selectedString = textStorage.attributedSubstring(from: self.selectedRange)\n        \n        let attributedString = NSMutableAttributedString(attributedString: selectedString).unloadTasks()\n        attributedString.saveData()\n\n        do {\n            let data = try NSKeyedArchiver.archivedData(\n                withRootObject: attributedString,\n                requiringSecureCoding: false\n            )\n\n            UIPasteboard.general.setItems([\n                [\n                    UIPasteboard.attributed: data,\n                    UTType.plainText.identifier: attributedString.string\n                ]\n            ])\n\n            return\n        } catch {\n            print(\"Serialization error: \\(error)\")\n        }\n\n        super.copy(sender)\n    }\n\n    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {\n        if action == #selector(UIResponderStandardEditActions.paste(_:)) {\n            return true\n        }\n\n        return super.canPerformAction(action, withSender: sender)\n    }\n    \n    public func initUndoRedoButons() {\n        UIApplication.getEVC().undoBarButton?.isEnabled = undoManager?.canUndo == true\n        UIApplication.getEVC().redoBarButton?.isEnabled = undoManager?.canRedo == true\n    }\n    \n    public func isTodo(at location: Int) -> Bool {\n        let storage = self.textStorage\n        \n        if storage.length > location, storage.attribute(.todo, at: location, effectiveRange: nil) != nil {\n            return true\n        }\n        \n        let range = (storage.string as NSString).paragraphRange(for: NSRange(location: location, length: 0))\n        let string = storage.attributedSubstring(from: range).string as NSString\n        \n        var length = string.range(of: \"- [ ]\").length\n        if length == 0 {\n            length = string.range(of: \"- [x]\").length\n        }\n        \n        if length > 0 {\n            let upper = range.location + length\n            if location >= range.location && location <= upper {\n                return true\n            }\n        }\n        \n        return false\n    }\n\n    public func isImage(at location: Int) -> Bool {\n        return textStorage.getMeta(at: location) != nil\n    }\n\n    public func isLink(at location: Int) -> Bool {\n        let storage = self.textStorage\n\n        if storage.length > location, storage.attribute(.link, at: location, effectiveRange: nil) != nil {\n            return true\n        }\n\n        return false\n    }\n\n    public func isWikiLink(at location: Int) -> Bool {\n        let storage = self.textStorage\n\n        if storage.length > location, let path = storage.attribute(.link, at: location, effectiveRange: nil) as? String, path.starts(with: \"fsnotes://find?id=\") {\n            return true\n        }\n\n        return false\n    }\n    \n    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {\n        super.traitCollectionDidChange(previousTraitCollection)\n\n        UIApplication.getEVC().themeObserver()\n    }\n}\n\nstruct Undo {\n    var range: NSRange\n    var string: NSAttributedString\n}\n"
  },
  {
    "path": "FSNotes iOS/View/EditorSelectionRect.swift",
    "content": "//\n//  EditorSelectionRect.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 11.02.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass EditorSelectionRect: UITextSelectionRect {\n    private let original: UITextSelectionRect\n    private var customRect: CGRect? = nil\n\n    override var rect: CGRect {\n        if let customRect = customRect {\n            return customRect\n        }\n\n        return original.rect\n    }\n\n    override var writingDirection: NSWritingDirection {\n        return original.writingDirection\n    }\n\n    override var containsStart: Bool {\n        return original.containsStart\n    }\n\n    override var containsEnd: Bool {\n        return original.containsEnd\n    }\n\n    override var isVertical: Bool {\n        return original.isVertical\n    }\n\n    init(originalRect original: UITextSelectionRect, rect: CGRect) {\n        self.original = original\n        self.customRect = rect\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/View/ImageScrollView.swift",
    "content": "//\n//  ImageScrollView.swift\n//  Beauty\n//\n//  Created by Nguyen Cong Huy on 1/19/16.\n//  Copyright © 2016 Nguyen Cong Huy. All rights reserved.\n//\n\nimport UIKit\n\n@objc public protocol ImageScrollViewDelegate: UIScrollViewDelegate {\n    func imageScrollViewDidChangeOrientation(imageScrollView: ImageScrollView)\n}\n\nopen class ImageScrollView: UIScrollView {\n    \n    @objc public enum ScaleMode: Int {\n        case aspectFill\n        case aspectFit\n        case widthFill\n        case heightFill\n    }\n    \n    @objc public enum Offset: Int {\n        case begining\n        case center\n    }\n    \n    static let kZoomInFactorFromMinWhenDoubleTap: CGFloat = 2\n    \n    @objc open var imageContentMode: ScaleMode = .widthFill\n    @objc open var initialOffset: Offset = .begining\n    \n    @objc public private(set) var zoomView: UIImageView? = nil\n    \n    @objc open weak var imageScrollViewDelegate: ImageScrollViewDelegate?\n\n    var imageSize: CGSize = CGSize.zero\n    private var pointToCenterAfterResize: CGPoint = CGPoint.zero\n    private var scaleToRestoreAfterResize: CGFloat = 1.0\n    open var maxScaleFromMinScale: CGFloat = 3.0\n    \n    override open var frame: CGRect {\n        willSet {\n            if frame.equalTo(newValue) == false && newValue.equalTo(CGRect.zero) == false && imageSize.equalTo(CGSize.zero) == false {\n                prepareToResize()\n            }\n        }\n        \n        didSet {\n            if frame.equalTo(oldValue) == false && frame.equalTo(CGRect.zero) == false && imageSize.equalTo(CGSize.zero) == false {\n                recoverFromResizing()\n            }\n        }\n    }\n    \n    override public init(frame: CGRect) {\n        super.init(frame: frame)\n        \n        initialize()\n    }\n    \n    required public init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        \n        initialize()\n    }\n    \n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n    \n    private func initialize() {\n        showsVerticalScrollIndicator = false\n        showsHorizontalScrollIndicator = false\n        bouncesZoom = true\n        decelerationRate = UIScrollView.DecelerationRate.fast\n        delegate = self\n        \n        NotificationCenter.default.addObserver(self, selector: #selector(ImageScrollView.changeOrientationNotification), name: UIDevice.orientationDidChangeNotification, object: nil)\n    }\n    \n    @objc public func adjustFrameToCenter() {\n        \n        guard let unwrappedZoomView = zoomView else {\n            return\n        }\n        \n        var frameToCenter = unwrappedZoomView.frame\n        \n        // center horizontally\n        if frameToCenter.size.width < bounds.width {\n            frameToCenter.origin.x = (bounds.width - frameToCenter.size.width) / 2\n        }\n        else {\n            frameToCenter.origin.x = 0\n        }\n        \n        // center vertically\n        if frameToCenter.size.height < bounds.height {\n            frameToCenter.origin.y = (bounds.height - frameToCenter.size.height) / 2\n        }\n        else {\n            frameToCenter.origin.y = 0\n        }\n        \n        unwrappedZoomView.frame = frameToCenter\n    }\n    \n    private func prepareToResize() {\n        let boundsCenter = CGPoint(x: bounds.midX, y: bounds.midY)\n        pointToCenterAfterResize = convert(boundsCenter, to: zoomView)\n        \n        scaleToRestoreAfterResize = zoomScale\n        \n        // If we're at the minimum zoom scale, preserve that by returning 0, which will be converted to the minimum\n        // allowable scale when the scale is restored.\n        if scaleToRestoreAfterResize <= minimumZoomScale + CGFloat(Float.ulpOfOne) {\n            scaleToRestoreAfterResize = 0\n        }\n    }\n    \n    private func recoverFromResizing() {\n        setMaxMinZoomScalesForCurrentBounds()\n        \n        // restore zoom scale, first making sure it is within the allowable range.\n        let maxZoomScale = max(minimumZoomScale, scaleToRestoreAfterResize)\n        zoomScale = min(maximumZoomScale, maxZoomScale)\n        \n        // restore center point, first making sure it is within the allowable range.\n        \n        // convert our desired center point back to our own coordinate space\n        let boundsCenter = convert(pointToCenterAfterResize, to: zoomView)\n        \n        // calculate the content offset that would yield that center point\n        var offset = CGPoint(x: boundsCenter.x - bounds.size.width/2.0, y: boundsCenter.y - bounds.size.height/2.0)\n        \n        // restore offset, adjusted to be within the allowable range\n        let maxOffset = maximumContentOffset()\n        let minOffset = minimumContentOffset()\n        \n        var realMaxOffset = min(maxOffset.x, offset.x)\n        offset.x = max(minOffset.x, realMaxOffset)\n        \n        realMaxOffset = min(maxOffset.y, offset.y)\n        offset.y = max(minOffset.y, realMaxOffset)\n        \n        contentOffset = offset\n    }\n    \n    private func maximumContentOffset() -> CGPoint {\n        return CGPoint(x: contentSize.width - bounds.width,y:contentSize.height - bounds.height)\n    }\n    \n    private func minimumContentOffset() -> CGPoint {\n        return CGPoint.zero\n    }\n    \n    // MARK: - Set up\n    \n    open func setup() {\n        var topSupperView = superview\n        \n        while topSupperView?.superview != nil {\n            topSupperView = topSupperView?.superview\n        }\n        \n        // Make sure views have already layout with precise frame\n        topSupperView?.layoutIfNeeded()\n        \n        DispatchQueue.main.async {\n            self.refresh()\n        }\n    }\n\n    // MARK: - Display image\n    \n    @objc open func display(image: UIImage) {\n\n        if let zoomView = zoomView {\n            zoomView.removeFromSuperview()\n        }\n        \n        zoomView = UIImageView(image: image)\n        zoomView!.isUserInteractionEnabled = true\n        addSubview(zoomView!)\n        \n        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ImageScrollView.doubleTapGestureRecognizer(_:)))\n        tapGesture.numberOfTapsRequired = 2\n        zoomView!.addGestureRecognizer(tapGesture)\n        \n        configureImageForSize(image.size)\n    }\n    \n    private func configureImageForSize(_ size: CGSize) {\n        imageSize = size\n        contentSize = imageSize\n        setMaxMinZoomScalesForCurrentBounds()\n        zoomScale = minimumZoomScale\n        \n        switch initialOffset {\n        case .begining:\n            contentOffset =  CGPoint.zero\n        case .center:\n            let xOffset = contentSize.width < bounds.width ? 0 : (contentSize.width - bounds.width)/2\n            let yOffset = contentSize.height < bounds.height ? 0 : (contentSize.height - bounds.height)/2\n\n            switch imageContentMode {\n            case .aspectFit:\n                contentOffset =  CGPoint.zero\n            case .aspectFill:\n                contentOffset = CGPoint(x: xOffset, y: yOffset)\n            case .heightFill:\n                contentOffset = CGPoint(x: xOffset, y: 0)\n            case .widthFill:\n                contentOffset = CGPoint(x: 0, y: yOffset)\n            }\n        }\n    }\n    \n    private func setMaxMinZoomScalesForCurrentBounds() {\n        // calculate min/max zoomscale\n        let xScale = bounds.width / imageSize.width    // the scale needed to perfectly fit the image width-wise\n        let yScale = bounds.height / imageSize.height   // the scale needed to perfectly fit the image height-wise\n    \n        var minScale: CGFloat = 1\n        \n        switch imageContentMode {\n        case .aspectFill:\n            minScale = max(xScale, yScale)\n        case .aspectFit:\n            minScale = min(xScale, yScale)\n        case .widthFill:\n            minScale = xScale\n        case .heightFill:\n            minScale = yScale\n        }\n        \n        \n        let maxScale = maxScaleFromMinScale*minScale\n        \n        // don't let minScale exceed maxScale. (If the image is smaller than the screen, we don't want to force it to be zoomed.)\n        if minScale > maxScale {\n            minScale = maxScale\n        }\n        \n        maximumZoomScale = maxScale\n        minimumZoomScale = minScale * 0.999 // the multiply factor to prevent user cannot scroll page while they use this control in UIPageViewController\n    }\n    \n    // MARK: - Gesture\n    \n    @objc func doubleTapGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {\n        // zoom out if it bigger than the scale factor after double-tap scaling. Else, zoom in\n        if zoomScale >= minimumZoomScale * ImageScrollView.kZoomInFactorFromMinWhenDoubleTap - 0.01 {\n            setZoomScale(minimumZoomScale, animated: true)\n        } else {\n            let center = gestureRecognizer.location(in: gestureRecognizer.view)\n            let zoomRect = zoomRectForScale(ImageScrollView.kZoomInFactorFromMinWhenDoubleTap * minimumZoomScale, center: center)\n            zoom(to: zoomRect, animated: true)\n        }\n    }\n    \n    private func zoomRectForScale(_ scale: CGFloat, center: CGPoint) -> CGRect {\n        var zoomRect = CGRect.zero\n        \n        // the zoom rect is in the content view's coordinates.\n        // at a zoom scale of 1.0, it would be the size of the imageScrollView's bounds.\n        // as the zoom scale decreases, so more content is visible, the size of the rect grows.\n        zoomRect.size.height = frame.size.height / scale\n        zoomRect.size.width  = frame.size.width  / scale\n        \n        // choose an origin so as to get the right center.\n        zoomRect.origin.x    = center.x - (zoomRect.size.width  / 2.0)\n        zoomRect.origin.y    = center.y - (zoomRect.size.height / 2.0)\n        \n        return zoomRect\n    }\n    \n    open func refresh() {\n        if let image = zoomView?.image {\n            display(image: image)\n        }\n    }\n    \n    // MARK: - Actions\n    \n    @objc func changeOrientationNotification() {\n        // A weird bug that frames are not update right after orientation changed. Need delay a little bit with async.\n        DispatchQueue.main.async {\n            self.configureImageForSize(self.imageSize)\n            self.imageScrollViewDelegate?.imageScrollViewDidChangeOrientation(imageScrollView: self)\n        }\n    }\n}\n\nextension ImageScrollView: UIScrollViewDelegate {\n    \n    public func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        imageScrollViewDelegate?.scrollViewDidScroll?(scrollView)\n    }\n\n    public func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {\n        imageScrollViewDelegate?.scrollViewWillBeginDragging?(scrollView)\n    }\n\n    public func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {\n        imageScrollViewDelegate?.scrollViewWillEndDragging?(scrollView, withVelocity: velocity, targetContentOffset: targetContentOffset)\n    }\n    \n    public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {\n        imageScrollViewDelegate?.scrollViewDidEndDragging?(scrollView, willDecelerate: decelerate)\n    }\n    \n    public func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {\n        imageScrollViewDelegate?.scrollViewWillBeginDecelerating?(scrollView)\n    }\n    \n    public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {\n        imageScrollViewDelegate?.scrollViewDidEndDecelerating?(scrollView)\n    }\n    \n    public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {\n        imageScrollViewDelegate?.scrollViewDidEndScrollingAnimation?(scrollView)\n    }\n    \n    public func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {\n        imageScrollViewDelegate?.scrollViewWillBeginZooming?(scrollView, with: view)\n    }\n    \n    public func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {\n        imageScrollViewDelegate?.scrollViewDidEndZooming?(scrollView, with: view, atScale: scale)\n    }\n    \n    public func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {\n        return false\n    }\n    \n    @available(iOS 11.0, *)\n    public func scrollViewDidChangeAdjustedContentInset(_ scrollView: UIScrollView) {\n        imageScrollViewDelegate?.scrollViewDidChangeAdjustedContentInset?(scrollView)\n    }\n\n    public func viewForZooming(in scrollView: UIScrollView) -> UIView? {\n        return zoomView\n    }\n    \n    public func scrollViewDidZoom(_ scrollView: UIScrollView) {\n        adjustFrameToCenter()\n        imageScrollViewDelegate?.scrollViewDidZoom?(scrollView)\n    }\n    \n}\n"
  },
  {
    "path": "FSNotes iOS/View/NoteCellView.swift",
    "content": "//\n//  NoteCellView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport SwipeCellKit\n\nclass NoteCellView: SwipeTableViewCell {\n    @IBOutlet weak var title: UILabel!\n    @IBOutlet weak var date: UILabel!\n    @IBOutlet weak var preview: UILabel!\n    @IBOutlet weak var pin: UIImageView!\n\n    @IBOutlet weak var imagePreview: UIImageView!\n    @IBOutlet weak var imagePreviewSecond: UIImageView!\n    @IBOutlet weak var imagePreviewThird: UIImageView!\n\n    public var note: Note?\n    public var contentLength: Int = 0\n    public var timestamp: Int64?\n\n    public var imageKeys = [String]()\n\n    public var tableView: NotesTableView? {\n        get {\n            return self.superview as? NotesTableView\n        }\n    }\n\n    override func prepareForReuse() {\n        super.prepareForReuse()\n\n        imagePreview.image = nil\n        imagePreviewSecond.image = nil\n        imagePreviewThird.image = nil\n\n        imagePreview.isHidden = true\n        imagePreviewSecond.isHidden = true\n        imagePreviewThird.isHidden = true\n        \n        contentLength = 0\n        timestamp = nil\n\n        note = nil\n    }\n\n    public func reLoad() {\n        if let note = self.note {\n            configure(note: note)\n        }\n    }\n\n    func configure(note: Note) {\n        self.note = note\n\n        date.attributedText = NSAttributedString(string: getDate())\n        preview.textColor = UIColor.previewColor\n\n        if note.isPublished() {\n            pin.image = UIImage(systemName: \"globe\")\n            pin.isHidden = false\n        } else if note.isEncrypted() {\n            let name = note.isUnlocked() ? \"lock.open\" : \"lock\"\n            pin.contentMode = .scaleAspectFit\n            pin.image = UIImage(systemName: name)\n            pin.isHidden = false\n        } else {\n            pin.image = UIImage(systemName: \"pin\")\n            pin.isHidden = !note.isPinned\n        }\n\n        pin.tintColor = UIColor.mainTheme\n\n        let font = UIFont.systemFont(ofSize: CGFloat(UserDefaultsManagement.DefaultFontSize), weight: .semibold)\n        let fontMetrics = UIFontMetrics(forTextStyle: .title1)\n        let scaledFont = fontMetrics.scaledFont(for: font)\n        title.font = scaledFont\n\n        let dateFont = UIFont.systemFont(ofSize: CGFloat(UserDefaultsManagement.DefaultFontSize - 2), weight: .regular)\n        let dateFontMetrics = UIFontMetrics(forTextStyle: .title3)\n        let dateScaledFont = dateFontMetrics.scaledFont(for: dateFont)\n        date.font = dateScaledFont\n\n        let previewFont = UIFont.systemFont(ofSize: CGFloat(UserDefaultsManagement.DefaultFontSize - 2), weight: .regular)\n        let previewFontMetrics = UIFontMetrics(forTextStyle: .title3)\n        let previewScaledFont = previewFontMetrics.scaledFont(for: previewFont)\n        preview.font = previewScaledFont\n    }\n\n    public func getDate() -> String {\n        if let sort = note?.project.settings.sortBy,\n            sort == .creationDate,\n            let date = note?.getCreationDateForLabel()\n        {\n            return date\n        }\n\n        if let date = note?.getDateForLabel() {\n            return date\n        }\n\n        return String()\n    }\n\n    public func reloadDate() {\n        date.text = getDate()\n    }\n\n    public func updateView() {\n        loadImagesPreview()\n\n        if let note = self.note {\n            attachHeaders(note: note)\n        }\n\n        reloadDate()\n    }\n\n    public func styleImageView(imageView: ImageView) {\n        imageView.isHidden = false\n        imageView.layer.borderWidth = 1\n        imageView.layer.borderColor = Color.darkGray.cgColor\n        imageView.layer.cornerRadius = 4\n        imageView.clipsToBounds = true\n    }\n\n    public func attachHeaders(note: Note) {\n        if let title = note.getTitle() {\n            self.title.text = title\n            self.preview.text = note.preview\n        } else {\n            self.title.text = String()\n            self.preview.text = String()\n        }\n    }\n\n    public func getPreviewImage(imageUrl: URL, note: Note) -> Image? {\n        let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"MainNotesList\")\n\n        if !FileManager.default.fileExists(atPath: tempURL.path) {\n            try? FileManager.default.createDirectory(at: tempURL, withIntermediateDirectories: false, attributes: nil)\n        }\n\n        if let cacheName = imageUrl.absoluteString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)?.md5 {\n\n            let file = tempURL.appendingPathComponent(cacheName)\n            if FileManager.default.fileExists(atPath: file.path) {\n                if let data = try? Data(contentsOf: file), let image = UIImage(data: data) {\n                    return image\n                }\n            }\n\n            do {\n                let data = try Data(contentsOf: imageUrl)\n                if let image = UIImage(data: data) {\n                    let size = CGRect(x: 0, y: 0, width: 70, height: 70)\n                    if let resized = image.resize(height: 70)?.croppedInRect(rect: size) {\n                        let jpegImageData = resized.jpegData(compressionQuality: 1)\n                        try? jpegImageData?.write(to: file, options: .atomic)\n                        return resized\n                    }\n                }\n            } catch {\n                print(error.localizedDescription)\n            }\n        }\n\n        return nil\n    }\n\n    public func fixTopConstraint(position: Int?, note: Note) {\n        for constraint in self.contentView.constraints {\n            if [\"firstImageTop\", \"secondImageTop\", \"thirdImageTop\"].contains(constraint.identifier) {\n                let ident = constraint.identifier\n                self.contentView.removeConstraint(constraint)\n\n                let isPreviewExist = note.preview.trim().count > 0\n                var imageLink: UIImageView?\n\n                switch constraint.identifier {\n                case \"firstImageTop\":\n                    imageLink = self.imagePreview\n                case \"secondImageTop\":\n                    imageLink = self.imagePreviewSecond\n                case \"thirdImageTop\":\n                    imageLink = self.imagePreviewThird\n                default:\n                    imageLink = self.imagePreview\n                }\n\n                guard let firstItem = imageLink else { continue }\n\n                let secondItem = isPreviewExist ? self.preview : self.title\n                let constr = NSLayoutConstraint(item: firstItem, attribute: .top, relatedBy: .equal, toItem: secondItem, attribute: .bottom, multiplier: 1, constant: 12)\n\n                constr.identifier = ident\n                self.contentView.addConstraint(constr)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/View/NotesTableView.swift",
    "content": "//\n//  NotesTableView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport MobileCoreServices\nimport AudioToolbox\nimport SwipeCellKit\nimport SSZipArchive\n\nclass NotesTableView: UITableView,\n    UITableViewDelegate,\n    UITableViewDataSource,\n    UITableViewDragDelegate {\n    \n    var notes = [Note]()\n    var viewDelegate: ViewController? = nil\n    public var selectedIndexPaths: [IndexPath]?\n\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return notes.count\n    }\n    \n    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        return calcHeight(indexPath: indexPath)\n    }\n\n    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {\n        return calcHeight(indexPath: indexPath)\n    }\n\n    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {\n        return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { suggestedActions in\n            let note = self.notes[indexPath.row]\n            let menu = self.makeBulkMenu(editor: false, note: note)\n            return menu\n        }\n    }\n\n    func tableView(_ tableView: UITableView, shouldBeginMultipleSelectionInteractionAt indexPath: IndexPath) -> Bool {\n        return true\n    }\n\n    private func calcHeight(indexPath: IndexPath) -> CGFloat {\n        if notes.indices.contains(indexPath.row) {\n            let note = notes[indexPath.row]\n\n            if let urls = note.imageUrl, urls.count > 0 {\n                if note.preview.count == 0 {\n                    if note.getTitle() != nil {\n\n                        // Title + image\n                        return 132\n                    }\n\n                    // Images only\n                    return 120\n                }\n\n                // Title + Prevew + Images\n                return 160\n            }\n        }\n\n        return 75\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: \"noteCell\", for: indexPath) as! NoteCellView\n\n        cell.imageKeys = []\n\n        guard self.notes.indices.contains(indexPath.row) else { return cell }\n\n        let note = self.notes[indexPath.row]\n\n        if !note.isLoaded && !note.isLoadedFromCache {\n            note.uiLoad()\n        }\n        \n        cell.configure(note: note)\n        cell.selectionStyle = .gray\n        cell.loadImagesPreview(position: indexPath.row)\n        cell.attachHeaders(note: note)\n\n        return cell\n    }\n\n    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {\n        self.selectedIndexPaths = self.indexPathsForSelectedRows\n    }\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if isEditing {\n            self.selectedIndexPaths = self.indexPathsForSelectedRows\n        }\n\n        guard !self.isEditing, notes.indices.contains(indexPath.row) else { return }\n\n        var note = notes[indexPath.row]\n        note.loadPreviewState()\n        \n        let evc = UIApplication.getEVC()\n        if let editArea = evc.editArea, let u = editArea.undoManager {\n            u.removeAllActions()\n        }\n\n        if note.container == .encryptedTextPack {\n            viewDelegate?.unLock(notes: [note], completion: { notes in\n                DispatchQueue.main.async {\n                    guard note.container != .encryptedTextPack else {\n                        self.askPasswordAndUnlock(note: note, indexPath: indexPath)\n                        return\n                    }\n\n                    self.reloadRows(notes: [note])\n                    self.fill(note: note, indexPath: indexPath)\n                }\n            })\n            \n            return\n        }\n\n        fill(note: note, indexPath: indexPath)\n\n        if UserDefaultsManagement.autoVersioning && !note.hasGitRepository() {\n            DispatchQueue.global().async {\n                do {\n                    try note.saveRevision()\n                } catch {/*_*/}\n            }\n        }\n    }\n\n    private func askPasswordAndUnlock(note: Note, indexPath: IndexPath) {\n        self.viewDelegate?.unlockPasswordPrompt(completion: { password in\n            self.viewDelegate?.unLock(notes: [note], completion: { success in\n                if let success = success, success.count > 0 {\n                    self.reloadRows(notes: [note])\n                    self.fill(note: note, indexPath: indexPath)\n                }\n            }, password: password)\n        })\n    }\n\n    private func askPasswordAndUnEncrypt(note: Note) {\n        self.viewDelegate?.unlockPasswordPrompt(completion: { password in\n            if note.container == .encryptedTextPack {\n                let success = note.unEncrypt(password: password)\n                note.password = nil\n\n                if success {\n                    DispatchQueue.main.async {\n                        UIApplication.getEVC().refill()\n                        self.reloadRows(notes: [note], resetKeys: true)\n                    }\n                }\n            }\n        })\n    }\n\n    private func fill(note: Note, indexPath: IndexPath) {\n        UIApplication.getVC().openEditorViewController()\n        UIApplication.getEVC().fill(note: note, clearPreview: true) {\n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {\n                self.deselectRow(at: indexPath, animated: true)\n            }\n        }\n    }\n    \n    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        return true\n    }\n\n    func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {\n        guard let vc = viewDelegate,\n              !UserDefaultsManagement.sidebarIsOpened\n        else { return nil }\n\n        let note = self.notes[indexPath.row]\n\n        // Delete\n        let deleteAction = UIContextualAction(style: .destructive, title: NSLocalizedString(\"Delete\", comment: \"Table row action\")) { [weak self] _, _, completion in\n            guard let self = self else { return }\n            self.viewDelegate?.sidebarTableView.removeTags(in: [note])\n            let isTrashed = note.isTrash()\n            note.remove()\n            self.removeRows(notes: [note])\n            if note.isEmpty() || isTrashed {\n                vc.storage.removeBy(note: note)\n            }\n            completion(true)\n        }\n        deleteAction.image = UIImage(systemName: \"trash\")\n\n        // Pin / Unpin\n        let pinTitle = note.isPinned\n            ? NSLocalizedString(\"Unpin\", comment: \"Table row action\")\n            : NSLocalizedString(\"Pin\", comment: \"Table row action\")\n        let pinAction = UIContextualAction(style: .normal, title: pinTitle) { [weak self] _, _, completion in\n            guard let self = self,\n                  let cell = self.cellForRow(at: indexPath) as? NoteCellView else {\n                completion(false)\n                return\n            }\n            note.togglePin()\n            cell.configure(note: note)\n\n            let resorted = vc.storage.sortNotes(noteList: self.notes)\n            guard let newIndex = resorted.firstIndex(of: note) else {\n                completion(false)\n                return\n            }\n            let newIndexPath = IndexPath(row: newIndex, section: 0)\n            self.moveRow(at: indexPath, to: newIndexPath)\n            self.notes = resorted\n            self.reloadRows(at: [newIndexPath], with: .automatic)\n            self.reloadRows(at: [indexPath], with: .automatic)\n            completion(true)\n        }\n        pinAction.image = note.isPinned ? UIImage(systemName: \"pin.slash\") : UIImage(systemName: \"pin\")\n        pinAction.backgroundColor = UIColor(red: 0.24, green: 0.59, blue: 0.94, alpha: 1.0)\n\n        let config = UISwipeActionsConfiguration(actions: [deleteAction, pinAction])\n        config.performsFirstActionWithFullSwipe = true\n        return config\n    }\n\n    public func turnOffEditing() {\n        if self.isEditing {\n            self.allowsMultipleSelectionDuringEditing = false\n            self.setEditing(false, animated: true)\n\n            deselectAllRows()\n        }\n    }\n\n    public func getSelectedNotes() -> [Note] {\n        var notes = [Note]()\n\n        if let selectedRows = selectedIndexPaths {\n            for indexPath in selectedRows {\n                if self.notes.indices.contains(indexPath.row) {\n                    let note = self.notes[indexPath.row]\n                    notes.append(note)\n                }\n            }\n\n            selectedIndexPaths = nil\n        }\n\n        return notes\n    }\n\n    public func deselectAllRows() {\n        if let selected = indexPathsForSelectedRows {\n            for indexP in selected {\n                deselectRow(at: indexP, animated: false)\n            }\n        }\n    }\n\n    public func makeBulkMenu(editor: Bool = false, note: Note) -> UIMenu? {\n        let handler: (_ action: UIAction) -> () = { action in\n            switch action.identifier.rawValue {\n            case \"cancel\":\n                break\n            case \"delete\":\n                self.removeAction(notes: [note])\n\n                if editor {\n                    UIApplication.getEVC().cancel()\n                }\n            case \"calendar\":\n                self.dateAction(notes: [note])\n            case \"duplicate\":\n                self.duplicateAction(notes: [note])\n            case \"move\":\n                self.moveAction(notes: [note])\n            case \"commit\":\n                self.saveRevisionAction(note: note)\n            case \"history\":\n                self.historyAction(note: note)\n            case \"rename\":\n                self.renameAction(note: note)\n            case \"pinUnpin\":\n                if note.isPinned {\n                    note.removePin()\n                    self.removePins(notes: [note])\n                } else {\n                    note.addPin()\n                    self.addPins(notes: [note])\n                }\n            case \"lockUnlock\":\n                self.viewDelegate?.toggleNotesLock(notes: [note])\n\n                if editor {\n                    if !note.isUnlocked() {\n                        UIApplication.getEVC().cancel()\n                    }\n                }\n            case \"removeEncryption\":\n                self.removeEncryption(note: note)\n            case \"copy\":\n                self.copyAction(note: note)\n            case \"share\":\n                self.shareAction(note: note)\n            case \"shareWeb\":\n                self.shareWebAction(note: note)\n            case \"deleteWeb\":\n                self.deleteWebAction(note: note)\n            default:\n                break\n            }\n\n            if [\"pinUnpin\", \"removeEncryption\"].contains(action.identifier.rawValue) {\n                DispatchQueue.main.async {\n                    UIApplication.getEVC().configureNavMenu()\n                }\n            }\n\n            self.turnOffEditing()\n        }\n\n        var actions = [UIAction]()\n\n        let deleteTitle = NSLocalizedString(\"Delete\", comment: \"\")\n        actions.append(UIAction(title: deleteTitle, image: UIImage(systemName: \"trash\"), identifier: UIAction.Identifier(\"delete\"), attributes: .destructive, handler: handler))\n\n        let calendarTitle = NSLocalizedString(\"Change Creation Date\", comment: \"\")\n        let calendarImage = UIImage(systemName: \"calendar\")\n        actions.append(UIAction(title: calendarTitle, image: calendarImage, identifier: UIAction.Identifier(\"calendar\"), handler: handler))\n\n        let duplicateTitle = NSLocalizedString(\"Duplicate\", comment: \"\")\n        let duplicateImage = UIImage(systemName: \"doc.on.doc\")\n        actions.append(UIAction(title: duplicateTitle, image: duplicateImage, identifier: UIAction.Identifier(\"duplicate\"), handler: handler))\n\n        let moveTitle = NSLocalizedString(\"Move\", comment: \"\")\n        let moveImage = UIImage(systemName: \"folder\")\n        actions.append(UIAction(title: moveTitle, image: moveImage, identifier: UIAction.Identifier(\"move\"), handler: handler))\n\n\n        if note.hasGitRepository() && !note.isEncrypted() {\n            let commitTitle = NSLocalizedString(\"Save Revision\", comment: \"\")\n            let commitImage = UIImage(systemName: \"plus.circle\")\n            actions.append(UIAction(title: commitTitle, image: commitImage, identifier: UIAction.Identifier(\"commit\"), handler: handler))\n        }\n\n        if UserDefaultsManagement.autoVersioning && !note.isEncrypted() {\n            let historyTitle = NSLocalizedString(\"History\", comment: \"\")\n            let historyImage = UIImage(systemName: \"clock.arrow.circlepath\")\n            actions.append(UIAction(title: historyTitle, image: historyImage, identifier: UIAction.Identifier(\"history\"), handler: handler))\n        }\n\n        let renameTitle = NSLocalizedString(\"Rename\", comment: \"\")\n        let renameImage = UIImage(systemName: \"pencil.circle\")\n        actions.append(UIAction(title: renameTitle, image: renameImage, identifier: UIAction.Identifier(\"rename\"), handler: handler))\n\n        let pinUnpinTitle = note.isPinned ? NSLocalizedString(\"Unpin\", comment: \"\") : NSLocalizedString(\"Pin\", comment: \"\")\n        let pinUnpinImage = UIImage(systemName: note.isPinned ? \"pin.slash\" : \"pin\")\n        actions.append(UIAction(title: pinUnpinTitle, image: pinUnpinImage, identifier: UIAction.Identifier(\"pinUnpin\"), handler: handler))\n\n        let lockUnlockTitle =\n            (note.isUnlocked() && note.isEncrypted()) || !note.isEncrypted()\n                ? NSLocalizedString(\"Lock\", comment: \"\")\n                : NSLocalizedString(\"Unlock\", comment: \"\")\n        let lockUnlockImageName = (note.isUnlocked() && note.isEncrypted()) || !note.isEncrypted()\n            ? \"lock\"\n            : \"lock.open\"\n        let lockUnlockImage = UIImage(systemName: lockUnlockImageName)\n        actions.append(UIAction(title: lockUnlockTitle, image: lockUnlockImage, identifier: UIAction.Identifier(\"lockUnlock\"), handler: handler))\n\n        if note.isEncrypted() && !note.project.isEncrypted {\n            let removeEncryptionTitle = NSLocalizedString(\"Remove Encryption\", comment: \"\")\n            let removeEncryptionImage = UIImage(systemName: \"lock.slash\")\n            actions.append(UIAction(title: removeEncryptionTitle, image: removeEncryptionImage, identifier: UIAction.Identifier(\"removeEncryption\"), handler: handler))\n        }\n\n        var clipboardName = \"doc.on.clipboard\"\n        if #available(iOS 16.0, *) {\n            clipboardName = \"clipboard\"\n        }\n\n        let copyTitle = NSLocalizedString(\"Copy Plain Text\", comment: \"\")\n        let copyImage = UIImage(systemName: clipboardName)\n        actions.append(UIAction(title: copyTitle, image: copyImage, identifier: UIAction.Identifier(\"copy\"), handler: handler))\n\n        let shareTitle = NSLocalizedString(\"Share\", comment: \"\")\n        let shareImage = UIImage(systemName: \"square.and.arrow.up\")\n        actions.append(UIAction(title: shareTitle, image: shareImage, identifier: UIAction.Identifier(\"share\"), handler: handler))\n\n        var shareWebTitle = NSLocalizedString(\"Create Web Page\", comment: \"\")\n        if note.apiId != nil {\n            shareWebTitle = NSLocalizedString(\"Update Web Page\", comment: \"\")\n        }\n\n        let shareWebImage = UIImage(systemName: \"newspaper\")\n        actions.append(UIAction(title: shareWebTitle, image: shareWebImage, identifier: UIAction.Identifier(\"shareWeb\"), handler: handler))\n\n        if note.apiId != nil {\n            let deleteWebTitle = NSLocalizedString(\"Delete Web Page\", comment: \"\")\n            let deleteWebImage = UIImage(systemName: \"newspaper.fill\")\n            actions.append(UIAction(title: deleteWebTitle, image: deleteWebImage, identifier: UIAction.Identifier(\"deleteWeb\"), handler: handler))\n        }\n\n        return UIMenu(title: note.getShortTitle(),  children: actions)\n    }\n\n    func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {\n        setContentOffset(CGPoint(x: 0, y: -44), animated: true)\n        return false\n    }\n\n    func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        viewDelegate?.navigationItem.hidesSearchBarWhenScrolling = false\n        viewDelegate?.navigationItem.largeTitleDisplayMode = .automatic\n    }\n\n    public func actionsSheet(notes: [Note], showAll: Bool = false, presentController: UIViewController, back: Bool = false) {\n        let note = notes.first!\n        let actionSheet = UIAlertController(title: note.project.getFullLabel() + \" ➔ \" + note.url.lastPathComponent, message: nil, preferredStyle: .actionSheet)\n\n        let remove = UIAlertAction(title: NSLocalizedString(\"Delete\", comment: \"\"), style: .destructive, handler: { _ in\n            self.turnOffEditing()\n            self.removeAction(notes: notes)\n\n            if presentController.isKind(of: EditorViewController.self) || back {\n                UIApplication.getEVC().cancel()\n            }\n        })\n        remove.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n        if let image = UIImage(systemName: \"trash\")?.resize(maxWidthHeight: 23) {\n            remove.setValue(image, forKey: \"image\")\n        }\n        actionSheet.addAction(remove)\n\n        if showAll && note.hasGitRepository() && !note.isEncrypted() {\n            let history = UIAlertAction(title: NSLocalizedString(\"Save Revision\", comment: \"\"), style: .default, handler: { _ in\n                self.saveRevisionAction(note: notes.first!)\n            })\n            history.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"plus.circle\")?.resize(maxWidthHeight: 23) {\n                history.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(history)\n        }\n        \n        if showAll && UserDefaultsManagement.autoVersioning && !note.isEncrypted() {\n            let history = UIAlertAction(title: NSLocalizedString(\"History\", comment: \"\"), style: .default, handler: { _ in\n                self.historyAction(note: notes.first!)\n            })\n            history.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"clock.arrow.circlepath\")?.resize(maxWidthHeight: 23) {\n                history.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(history)\n        }\n\n        let creationDate = UIAlertAction(title: NSLocalizedString(\"Change Creation Date\", comment: \"\"), style: .default, handler: { _ in\n            self.dateAction(notes: notes)\n        })\n        creationDate.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n        if let image = UIImage(systemName: \"calendar\")?.resize(maxWidthHeight: 23) {\n            creationDate.setValue(image, forKey: \"image\")\n        }\n        actionSheet.addAction(creationDate)\n\n        let duplicate = UIAlertAction(title: NSLocalizedString(\"Duplicate\", comment: \"\"), style: .default, handler: { _ in\n            self.duplicateAction(notes: notes)\n        })\n        duplicate.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n        if let image = UIImage(systemName: \"doc.on.doc\")?.resize(maxWidthHeight: 23) {\n            duplicate.setValue(image, forKey: \"image\")\n        }\n        actionSheet.addAction(duplicate)\n\n        if showAll {\n            let rename = UIAlertAction(title: NSLocalizedString(\"Rename\", comment: \"\"), style: .default, handler: { _ in\n                self.renameAction(note: note)\n            })\n            rename.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n\n            if let image = UIImage(systemName: \"pencil.circle\")?.resize(maxWidthHeight: 23) {\n                rename.setValue(image, forKey: \"image\")\n            }\n\n            actionSheet.addAction(rename)\n\n            let title = note.isPinned ? NSLocalizedString(\"Unpin\", comment: \"\") : NSLocalizedString(\"Pin\", comment: \"\")\n            let pin = UIAlertAction(title: title, style: .default, handler: { _ in\n                if note.isPinned {\n                    note.removePin()\n                    self.removePins(notes: [note])\n                } else {\n                    note.addPin()\n                    self.addPins(notes: [note])\n                }\n            })\n\n            pin.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n\n            if let image = UIImage(systemName: note.isPinned ? \"pin.slash\" : \"pin\")?.resize(maxWidthHeight: 23) {\n                pin.setValue(image, forKey: \"image\")\n            }\n\n            actionSheet.addAction(pin)\n        }\n\n        let move = UIAlertAction(title: NSLocalizedString(\"Move\", comment: \"\"), style: .default, handler: { _ in\n            self.turnOffEditing()\n            self.moveAction(notes: notes)\n        })\n        move.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n\n        if let image = UIImage(systemName: \"move.3d\")?.resize(maxWidthHeight: 23) {\n            move.setValue(image, forKey: \"image\")\n        }\n\n        actionSheet.addAction(move)\n\n        if showAll {\n            let alertTitle =\n                (note.isUnlocked() && note.isEncrypted()) || !note.isEncrypted()\n                    ? NSLocalizedString(\"Lock\", comment: \"\")\n                    : NSLocalizedString(\"Unlock\", comment: \"\")\n\n            let imageName = (note.isUnlocked() && note.isEncrypted()) || !note.isEncrypted()\n                ? \"lock\"\n                : \"lock.open\"\n\n            let encryption = UIAlertAction(title: alertTitle, style: .default, handler: { _ in\n                self.viewDelegate?.toggleNotesLock(notes: [note])\n\n                if !note.isUnlocked(), presentController.isKind(of: EditorViewController.self) || back {\n                    UIApplication.getEVC().cancel()\n                }\n            })\n            encryption.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: imageName)?.resize(maxWidthHeight: 23) {\n                encryption.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(encryption)\n\n            if note.isEncrypted() {\n                let removeEncryption = UIAlertAction(title: NSLocalizedString(\"Remove Encryption\", comment: \"\"), style: .default, handler: { _ in\n                    self.removeEncryption(note: note)\n                })\n\n                removeEncryption.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n                if let image = UIImage(systemName: \"lock.slash\")?.resize(maxWidthHeight: 23) {\n                    removeEncryption.setValue(image, forKey: \"image\")\n                }\n\n                actionSheet.addAction(removeEncryption)\n            }\n\n            var clipboardName = \"doc.on.clipboard\"\n            if #available(iOS 16.0, *) {\n                clipboardName = \"clipboard\"\n            }\n\n            let copy = UIAlertAction(title: NSLocalizedString(\"Copy Plain Text\", comment: \"\"), style: .default, handler: { _ in\n                self.copyAction(note: note)\n            })\n            copy.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: clipboardName)?.resize(maxWidthHeight: 23) {\n                copy.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(copy)\n\n            let share = UIAlertAction(title: NSLocalizedString(\"Share\", comment: \"\"), style: .default, handler: { _ in\n                self.shareAction(note: note)\n            })\n            share.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n\n            if let image = UIImage(systemName: \"square.and.arrow.up\")?.resize(maxWidthHeight: 23) {\n                share.setValue(image, forKey: \"image\")\n            }\n\n            actionSheet.addAction(share)\n        }\n\n        let dismiss = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .cancel, handler: { _ in\n            if self.isEditing {\n                self.setEditing(false, animated: true)\n            }\n        })\n        actionSheet.addAction(dismiss)\n\n        if let view = UIApplication.getEVC().view {\n            actionSheet.popoverPresentationController?.sourceView = view\n            actionSheet.popoverPresentationController?.sourceRect = CGRect(x: view.bounds.size.width / 2.0, y: view.bounds.size.height, width: 2.0, height: 1.0)\n        }\n\n        presentController.present(actionSheet, animated: true, completion: nil)\n    }\n    \n    public func removeRows(notes: [Note]) {\n        guard notes.count > 0, let vc = viewDelegate, vc.isNoteInsertionAllowed() else { return }\n\n        vc.removeSpotlightIndex(notes: notes)\n\n        var indexPaths = [IndexPath]()\n        var tags = [String]()\n        for note in notes {\n            if let i = self.notes.firstIndex(where: { $0 === note }) {\n                indexPaths.append(IndexPath(row: i, section: 0))\n                tags.append(contentsOf: note.tags)\n            }\n        }\n        \n        beginUpdates()\n        self.notes.removeAll(where: { notes.contains($0) })\n        deleteRows(at: indexPaths, with: .automatic)\n        endUpdates()\n        \n        vc.updateNotesCounter()\n        vc.sidebarTableView.delete(tags: tags)\n    }\n\n    public func insertRows(notes: [Note]) {\n        guard notes.count > 0, let vc = viewDelegate, vc.isNoteInsertionAllowed() else { return }\n\n        vc.storage.loadPins(notes: notes)\n\n        var toInsert = [Note]()\n        for note in notes {\n            guard vc.storage.searchQuery.isFit(note: note),\n                  !self.notes.contains(where: { $0 === note })\n            else { continue }\n            toInsert.append(note)\n        }\n\n        guard toInsert.count > 0 else { return }\n\n        vc.updateSpotlightIndex(notes: toInsert)\n\n        let nonSorted = self.notes + toInsert\n        let sorted = vc.storage.sortNotes(noteList: nonSorted)\n\n        var indexPaths = [IndexPath]()\n        for note in toInsert {\n            guard let index = sorted.firstIndex(where: { $0 === note }) else { continue }\n            indexPaths.append(IndexPath(row: index, section: 0))\n        }\n\n        self.notes = sorted\n\n        beginUpdates()\n        insertRows(at: indexPaths, with: .fade)\n        endUpdates()\n    }\n\n    public func reloadRows(notes: [Note], resetKeys: Bool = false) {\n        beginUpdates()\n        for note in notes {\n            if let row = self.notes.firstIndex(where: { $0 === note }) {\n                let indexPath = IndexPath(row: row, section: 0)\n\n                if let cell = cellForRow(at: indexPath) as? NoteCellView {\n                    if resetKeys {\n                        cell.imageKeys = []\n                    }\n\n                    cell.configure(note: note)\n                    cell.updateView()\n                }\n            }\n        }\n        endUpdates()\n\n        viewDelegate?.updateSpotlightIndex(notes: notes)\n    }\n    \n    public func reloadRowForce(note: Note) {\n        note.invalidateCache()\n        note.loadPreviewInfo()\n        \n        if let index = notes.firstIndex(of: note) {\n            reloadRows(at: [IndexPath(row: index, section: 0)], with: .automatic)\n        }\n    }\n\n    private func renameAction(note: Note) {\n        let alertController = UIAlertController(title: NSLocalizedString(\"Rename note:\", comment: \"\"), message: nil, preferredStyle: .alert)\n\n        alertController.addTextField(configurationHandler: {\n            [] (textField: UITextField) in\n            textField.placeholder = NSLocalizedString(\"Enter note name\", comment: \"\")\n            textField.attributedText = NSAttributedString(string: note.getFileName())\n        })\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            guard let name = alertController.textFields?[0].text, name.count > 0 else {\n                return\n            }\n\n            self.rename(note: note, to: name)\n        }\n\n        let title = NSLocalizedString(\"Cancel\", comment: \"\")\n        let cancelAction = UIAlertAction(title: title, style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        UIApplication.getNC()?.present(alertController, animated: true) {\n            alertController.textFields![0].selectAll(nil)\n        }\n    }\n\n    public func rename(note: Note, to name: String) {\n\n        guard name.count > 0, name.trim().count > 0 else { return }\n\n        var name = name\n        var i = 1\n\n        \n        while note.project.fileExistCaseInsensitive(fileName: name, ext: note.url.pathExtension) {\n\n            // disables renaming loop\n            if note.fileName.startsWith(string: name) {\n                return\n            }\n            \n            let items = name.split(separator: \" \")\n\n            if let last = items.last, let position = Int(last) {\n                let full = items.dropLast()\n\n                name = full.joined(separator: \" \") + \" \" + String(position + 1)\n\n                i = position + 1\n            } else {\n                name = name + \" \" + String(i)\n\n                i += 1\n            }\n        }\n\n        let isPinned = note.isPinned\n        let dst = note.getNewURL(name: name)\n        let src = note.url\n\n        note.removePin()\n\n        if note.isEncrypted() {\n            _ = note.lock()\n        }\n\n        if note.move(to: dst) {\n            note.url = dst\n            note.parseURL()\n            \n            note.moveHistory(src: src, dst: dst)\n        }\n\n        if isPinned {\n            note.addPin()\n        }\n\n        DispatchQueue.main.async {\n            self.reloadRows(notes: [note])\n        }\n    }\n\n    public func removeAction(notes: [Note]) {\n        guard let vc = viewDelegate else { return }\n\n        vc.sidebarTableView.removeTags(in: notes)\n        for note in notes {\n            note.remove()\n        }\n        removeRows(notes: notes)\n\n        allowsMultipleSelectionDuringEditing = false\n        setEditing(false, animated: true)\n    }\n\n    public func moveAction(notes: [Note]) {\n        let moveController = MoveViewController(notes: notes, notesTableView: self)\n        let controller = UINavigationController(rootViewController: moveController)\n\n        let nvc = UIApplication.getNC()\n        nvc?.present(controller, animated: true, completion: nil)\n    }\n\n    public func dateAction(notes: [Note]) {\n        let storyBoard: UIStoryboard = UIStoryboard(name: \"Main\", bundle:nil)\n        let datePickerViewController = storyBoard.instantiateViewController(withIdentifier: \"datePickerViewController\") as! DatePickerViewController\n        datePickerViewController.notes = notes\n\n        let nvc = UIApplication.getNC()\n        nvc?.present(datePickerViewController, animated: true )\n    }\n\n    public func showLoader() {\n        let alert = UIAlertController(title: nil, message: \" \", preferredStyle: .alert)\n\n        let loadingIndicator = UIActivityIndicatorView(style: .large)\n        loadingIndicator.translatesAutoresizingMaskIntoConstraints = false\n        loadingIndicator.startAnimating()\n\n        let label = UILabel()\n        label.text = NSLocalizedString(\"Loading...\", comment: \"\")\n        label.font = UIFont.preferredFont(forTextStyle: .title2)\n        label.adjustsFontForContentSizeCategory = true\n        label.numberOfLines = 1\n        label.translatesAutoresizingMaskIntoConstraints = false\n\n        let stack = UIStackView(arrangedSubviews: [loadingIndicator, label])\n        stack.axis = .horizontal\n        stack.spacing = 14\n        stack.alignment = .center\n        stack.translatesAutoresizingMaskIntoConstraints = false\n\n        alert.view.addSubview(stack)\n\n        NSLayoutConstraint.activate([\n            stack.centerXAnchor.constraint(equalTo: alert.view.centerXAnchor),\n            stack.centerYAnchor.constraint(equalTo: alert.view.centerYAnchor, constant: 6),\n\n            stack.leadingAnchor.constraint(greaterThanOrEqualTo: alert.view.leadingAnchor, constant: 20),\n            stack.trailingAnchor.constraint(lessThanOrEqualTo: alert.view.trailingAnchor, constant: -20),\n        ])\n\n        UIApplication.getNC()?.present(alert, animated: true)\n    }\n\n    public func hideLoader() {\n        DispatchQueue.main.async {\n            UIApplication.getNC()?.dismiss(animated: false, completion: nil)\n        }\n    }\n\n    public func saveRevisionAction(note: Note? = nil, project: Project? = nil) {\n        var current: Project?\n\n        if let unwrappedProject = project {\n            current = unwrappedProject\n        } else if let note = note {\n            current = note.getGitProject()\n        }\n\n        guard let project = current else { return }\n        guard let nvc = UIApplication.getNC() else { return }\n\n        let viewController = UIApplication.getVC()\n\n        // Show loader\n        let title = NSLocalizedString(\"Loading...\", comment: \"\")\n        let alert = UIAlertController(title: nil, message: title, preferredStyle: .alert)\n\n        let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50))\n        loadingIndicator.hidesWhenStopped = true\n        loadingIndicator.style = UIActivityIndicatorView.Style.medium\n        loadingIndicator.startAnimating();\n\n        alert.view.addSubview(loadingIndicator)\n        nvc.present(alert, animated: true)\n\n        DispatchQueue.global(qos: .userInitiated).async {\n            do {\n                try project.saveRevision()\n\n                // Hide loader\n                DispatchQueue.main.async {\n                    nvc.dismiss(animated: false, completion: nil)\n                }\n            } catch GitError.noAddedFiles {\n                DispatchQueue.main.async {\n                    // Hide loader\n                    nvc.dismiss(animated: false, completion: nil)\n\n                    let alert = UIAlertController(title: \"No changes\", message: \"Nothing new to commit\", preferredStyle: UIAlertController.Style.alert)\n                    alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n\n                    nvc.present(alert, animated: true, completion: nil)\n                }\n            } catch {\n                DispatchQueue.main.async {\n                    // Hide loader\n                    nvc.dismiss(animated: false, completion: nil)\n\n                    project.gitStatus = error.localizedDescription\n\n                    let alert = UIAlertController(title: \"Git error\", message: error.localizedDescription, preferredStyle: UIAlertController.Style.alert)\n                    alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n\n                    nvc.present(alert, animated: true, completion: nil)\n                }\n\n                return\n            }\n\n            if project.isGitOriginExist() {\n                viewController.gitQueue.addOperation({\n                    try? project.pull()\n                    try? project.push()\n                })\n            }\n        }\n    }\n\n    private func historyAction(note: Note) {\n        let storyBoard: UIStoryboard = UIStoryboard(name: \"Main\", bundle:nil)\n        let datePickerViewController = storyBoard.instantiateViewController(withIdentifier: \"revisionsViewController\") as! RevisionsViewController\n        datePickerViewController.note = note\n\n        UIApplication.getNC()?.present(datePickerViewController, animated: true)\n    }\n\n    private func copyAction(note: Note) {\n        let item = [kUTTypeUTF8PlainText as String : note.content.string as Any]\n\n        UIPasteboard.general.items = [item]\n    }\n\n    public func shareAction(note: Note, isHTML: Bool = false) {\n        AudioServicesPlaySystemSound(1519)\n\n        var tempURL = note.url\n        if note.isTextBundle() {\n            tempURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"\\(note.getName()).zip\")\n            SSZipArchive.createZipFile(atPath: tempURL.path, withContentsOfDirectory: note.url.path, keepParentDirectory: true)\n        }\n\n        let objectsToShare = [tempURL] as [Any]\n        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)\n        activityVC.excludedActivityTypes = [ UIActivity.ActivityType.addToReadingList ]\n\n        guard let presentController = UIApplication.getNC() else { return }\n        presentController.present(activityVC, animated: true, completion: nil)\n\n        guard let popOver = activityVC.popoverPresentationController else { return }\n        popOver.permittedArrowDirections = .up\n\n        let notesTable = UIApplication.getVC().notesTable\n        let editorView = UIApplication.getEVC().editArea\n\n        if let topViewController = presentController.topViewController {\n            if topViewController.isKind(of: EditorViewController.self) {\n                popOver.sourceView = editorView\n                popOver.sourceRect = CGRect(x: editorView!.bounds.midX, y: 80, width: 0, height: 0)\n\n            } else if topViewController.isKind(of: ViewController.self),\n                let i = notesTable?.notes.firstIndex(where: {$0 === note}),\n                let rowView = notesTable?.cellForRow(at: IndexPath(row: i, section: 0)) {\n\n                popOver.sourceView = rowView\n                popOver.sourceRect = CGRect(x: notesTable!.bounds.midX, y: rowView.frame.height, width: 10, height: 10)\n            }\n        }\n    }\n\n    public func duplicateAction(notes: [Note]) {\n        var dupes = [Note]()\n        for note in notes {\n            let src = note.url\n            let dst = NameHelper.generateCopy(file: note.url)\n\n            if note.isTextBundle() || note.isEncrypted() {\n                try? FileManager.default.copyItem(at: src, to: dst)\n\n                let noteDupe = Note(url: dst, with: note.project)\n                noteDupe.load()\n\n                viewDelegate?.storage.add(noteDupe)\n                dupes.append(noteDupe)\n                continue\n            }\n\n            let name = dst.deletingPathExtension().lastPathComponent\n            let noteDupe = Note(name: name, project: note.project, type: note.type, cont: note.container)\n            noteDupe.content = NSMutableAttributedString(string: note.content.string)\n\n            // Clone images\n            if note.type == .Markdown && note.container == .none {\n                let images = note.content.getImagesAndFiles()\n                for image in images {\n                    noteDupe.move(from: image.url, imagePath: image.path, to: note.project, copy: true)\n                }\n            }\n\n            if noteDupe.save() {\n                Storage.shared().add(noteDupe)\n            }\n\n            dupes.append(noteDupe)\n        }\n\n        insertRows(notes: dupes)\n\n        if let scrollTo = dupes.first {\n            viewDelegate?.notesTable.scrollTo(note: scrollTo)\n        }\n    }\n\n    private func decryptUnlocked(notes: [Note]) -> [Note] {\n        var notes = notes\n        var toReload = [Note]()\n\n        for note in notes {\n            if note.isUnlocked() {\n                if note.unEncryptUnlocked() {\n                    notes.removeAll { $0 === note }\n                    toReload.append(note)\n                    note.invalidateCache()\n                }\n            }\n        }\n\n        DispatchQueue.main.async {\n            self.reloadRows(notes: toReload, resetKeys: true)\n        }\n\n        return notes\n    }\n\n    public func removeEncryption(note: Note) {\n        let vc = UIApplication.getVC()\n\n        let notes = decryptUnlocked(notes: [note])\n        guard let note = notes.first else { return }\n\n        vc.getMasterPassword() { password in\n            if note.container == .encryptedTextPack {\n                let success = note.unEncrypt(password: password)\n                note.password = nil\n\n                if success {\n                    DispatchQueue.main.async {\n                        UIApplication.getEVC().refill()\n                    }\n                } else {\n                    self.askPasswordAndUnEncrypt(note: note)\n                    return\n                }\n            }\n\n            DispatchQueue.main.async {\n                self.reloadRows(notes: notes, resetKeys: true)\n            }\n        }\n    }\n\n    public func shareWebAction(note: Note) {\n        UIApplication.getVC().createAPI(note: note, completion: { url in\n            DispatchQueue.main.async {\n                self.reloadRowForce(note: note)\n\n                if let url = url {\n                    UIApplication.shared.open(url)\n                }\n\n                UIApplication.getEVC().configureNavMenu()\n            }\n        })\n    }\n\n    public func deleteWebAction(note: Note) {\n        UIApplication.getVC().deleteAPI(note: note, completion: {\n            DispatchQueue.main.async {\n                self.reloadRowForce(note: note)\n\n                UIApplication.getEVC().configureNavMenu()\n            }\n        })\n    }\n\n    public func moveRowUp(note: Note) {\n        guard let vc = viewDelegate,\n              vc.isNoteInsertionAllowed(),\n              vc.storage.searchQuery.isFit(note: note)\n        else { return }\n\n        guard let currentIndex = notes.firstIndex(where: { $0 === note }) else { return }\n\n        let sorted = vc.storage.sortNotes(noteList: notes)\n        guard let targetIndex = sorted.firstIndex(where: { $0 === note }) else { return }\n\n        guard currentIndex != targetIndex else { return }\n        self.notes = sorted\n        \n        let from = IndexPath(row: currentIndex, section: 0)\n        let to = IndexPath(row: targetIndex, section: 0)\n\n        beginUpdates()\n        moveRow(at: from, to: to)\n        endUpdates()\n    }\n\n    @objc public func toggleSelectAll() {\n        guard self.isEditing else { return }\n\n        if let selected = self.indexPathsForSelectedRows, (selected.count - 1) == self.notes.count {\n            for indexPath in selected {\n                self.deselectRow(at: indexPath, animated: false)\n            }\n\n            self.selectedIndexPaths = nil\n        } else {\n            for i in 0...notes.count {\n                self.selectRow(at: IndexPath(item: i, section: 0), animated: false, scrollPosition: .none)\n            }\n\n            self.selectedIndexPaths = indexPathsForSelectedRows\n        }\n    }\n\n    private func invalidPasswordAlert() {\n        let invalid = NSLocalizedString(\"Invalid Password\", comment: \"\")\n        let message = NSLocalizedString(\"Please enter valid password\", comment: \"\")\n        let alert = UIAlertController(title: invalid, message: message, preferredStyle: UIAlertController.Style.alert)\n        alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n\n        UIApplication.getVC().present(alert, animated: true, completion: nil)\n    }\n\n    func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {\n\n        guard let cell = tableView.cellForRow(at: indexPath) as? NoteCellView,\n            let url = cell.note?.url\n        else { return [] }\n\n        let itemProvider = NSItemProvider(item: url as NSSecureCoding, typeIdentifier: kUTTypeURL as String)\n\n        return [UIDragItem(itemProvider: itemProvider)]\n    }\n\n    public func addPins(notes pinned: [Note]) {\n        guard let vc = viewDelegate else { return }\n\n        let oldNotes = self.notes\n        let newNotes = vc.storage.sortNotes(noteList: oldNotes)\n\n        self.notes = newNotes\n        var rowsToReload: [IndexPath] = []\n\n        beginUpdates()\n        for note in pinned {\n            guard\n                let from = oldNotes.firstIndex(of: note),\n                let to = newNotes.firstIndex(of: note),\n                from != to\n            else { continue }\n\n            moveRow(\n                at: IndexPath(row: from, section: 0),\n                to: IndexPath(row: to, section: 0)\n            )\n            \n            rowsToReload.append(IndexPath(row: to, section: 0))\n        }\n        endUpdates()\n        \n        if !rowsToReload.isEmpty {\n            reloadRows(at: rowsToReload, with: .none)\n        }\n    }\n\n    public func removePins(notes unpinned: [Note]) {\n        guard let vc = viewDelegate else { return }\n\n        let oldNotes = self.notes\n        let newNotes = vc.storage.sortNotes(noteList: oldNotes)\n\n        self.notes = newNotes\n        var rowsToReload: [IndexPath] = []\n\n        beginUpdates()\n\n        for note in unpinned {\n            guard\n                let from = oldNotes.firstIndex(of: note),\n                let to = newNotes.firstIndex(of: note),\n                from != to\n            else { continue }\n\n            moveRow(\n                at: IndexPath(row: from, section: 0),\n                to: IndexPath(row: to, section: 0)\n            )\n            \n            rowsToReload.append(IndexPath(row: to, section: 0))\n        }\n\n        endUpdates()\n        \n        if !rowsToReload.isEmpty {\n            reloadRows(at: rowsToReload, with: .none)\n        }\n    }\n\n    public func scrollTo(note: Note) {\n        if let index = notes.firstIndex(of: note) {\n            let indexPath = IndexPath(row: index, section: 0)\n            scrollToRow(at: indexPath, at: .top, animated: true)\n        }\n    }\n    \n    public func doVisualChanges(results: ([Note], [Note], [Note])) {\n        guard results.0.count > 0 || results.1.count > 0 || results.2.count > 0 else {\n            return\n        }\n        \n        DispatchQueue.main.async {\n            self.removeRows(notes: results.0)\n            self.insertRows(notes: results.1)\n            self.reloadRows(notes: results.2)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/View/SidebarTableCellView.swift",
    "content": "//\n//  SidebarTableCellView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 5/5/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\n\nclass SidebarTableCellView: UITableViewCell {    \n    @IBOutlet weak var icon: UIImageView!\n    @IBOutlet weak var label: UILabel!\n    @IBOutlet weak var labelConstraint: NSLayoutConstraint!\n\n    public var sidebarItem: SidebarItem?\n\n    func configure(sidebarItem: SidebarItem) {\n        self.sidebarItem = sidebarItem\n        \n        self.icon.constraints[1].constant = 21\n        self.labelConstraint.constant = 11\n        icon.image = sidebarItem.icon\n\n        var font = UIFont.systemFont(ofSize: 15)\n\n        if sidebarItem.type == .Project || \n            sidebarItem.type == .ProjectEncryptedLocked ||\n            sidebarItem.type == .ProjectEncryptedUnlocked ||\n            sidebarItem.type == .Tag {\n            font = UIFont.systemFont(ofSize: 14)\n        }\n\n        let fontMetrics = UIFontMetrics(forTextStyle: .title3)\n        font = fontMetrics.scaledFont(for: font)\n\n        label.font = font\n        label.text = sidebarItem.name\n    }\n\n    override func layoutSubviews() {\n        super.layoutSubviews()\n        self.selectedBackgroundView?.backgroundColor = UIColor.currentSidebarCell\n        self.selectedBackgroundView?.frame = CGRect(x: 0, y: 0, width: 5, height: 40)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/View/SidebarTableView.swift",
    "content": "//\n//  SidebarTableView.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 5/5/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nimport UIKit\nimport AudioToolbox\n\nclass SidebarTableView: UITableView,\n    UITableViewDelegate,\n    UITableViewDataSource,\n    UITableViewDropDelegate {\n\n    public var sidebar = Sidebar()\n    private var busyTrashReloading = false\n    public var viewController: ViewController?\n\n    func numberOfSections(in tableView: UITableView) -> Int {\n        return sidebar.items.count\n    }\n    \n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return sidebar.items[section].count\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        \n        let cell = tableView.dequeueReusableCell(withIdentifier: \"sidebarCell\", for: indexPath) as! SidebarTableCellView\n\n        guard sidebar.items.indices.contains(indexPath.section), sidebar.items[indexPath.section].indices.contains(indexPath.row) else { return cell }\n\n        let sidebarItem = sidebar.items[indexPath.section][indexPath.row]\n        cell.configure(sidebarItem: sidebarItem)\n        cell.contentView.setNeedsLayout()\n        cell.contentView.layoutIfNeeded()\n\n        return cell\n    }\n\n    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {\n        if section == 0 {\n            return UIView()\n        }\n\n        return nil\n    }\n    \n    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        if section == 0 {\n            return 5\n        }\n\n        if section == 1 && UIApplication.getVC().storage.getNonSystemProjects().count == 0 {\n            return 0\n        }\n\n        return 25\n    }\n\n    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {\n        return 0\n    }\n\n    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        return 37\n    }\n\n    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {\n        selectRow(at: indexPath, animated: false, scrollPosition: .none)\n\n        self.tableView(tableView, didSelectRowAt: indexPath)\n    }\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        guard let vc = self.viewController else { return }\n        let selectedSection = SidebarSection(rawValue: indexPath.section)\n\n        guard sidebar.items.indices.contains(indexPath.section) && sidebar.items[indexPath.section].indices.contains(indexPath.row) else { return }\n\n        let sidebarItem = sidebar.items[indexPath.section][indexPath.row]\n\n        guard vc.storage.searchQuery.projects.first != sidebarItem.project\n            || sidebarItem.type == .Tag else { return }\n\n        if let project = vc.storage.searchQuery.projects.first, getIndexPathBy(project: project) == indexPath, vc.notesTable.isEditing {\n            vc.notesTable.toggleSelectAll()\n            return\n        }\n\n        if let project = sidebarItem.project, project.isLocked() {\n            vc.enableLockedProject()\n        } else {\n            vc.disableLockedProject()\n        }\n\n        guard sidebar.items.indices.contains(indexPath.section) && sidebar.items[indexPath.section].indices.contains(indexPath.row) else {\n            return\n        }\n\n        vc.notesTable.turnOffEditing()\n\n        var name = sidebarItem.name\n        if sidebarItem.type == .Tag {\n            name = \"#\\(name)\"\n        }\n\n        if selectedSection == .Tags {\n            deselectAllTags()\n        } else {\n            deselectAllProjects()\n            deselectAllTags()\n        }\n\n        selectRow(at: indexPath, animated: false, scrollPosition: .none)\n        vc.configureNavMenu(for: sidebarItem)\n        vc.navigationItem.searchController?.searchBar.text = \"\"\n\n        // Save last state\n        \n        if sidebarItem.isSystem() {\n            UserDefaultsManagement.lastSidebarItem = indexPath.row\n            UserDefaultsManagement.lastProjectURL = nil\n        } else if let project = sidebarItem.project, !project.isVirtual {\n            UserDefaultsManagement.lastSidebarItem = nil\n            UserDefaultsManagement.lastProjectURL = project.url\n        }\n\n        vc.buildSearchQuery()\n        vc.reloadNotesTable() {\n            DispatchQueue.main.async {\n                vc.notesTable.hideLoader()\n                vc.setNavTitle(folder: name)\n                vc.isLoadedSidebar = true\n\n                guard vc.notesTable.notes.count > 0 else {\n                    self.unloadAllTags()\n                    return\n                }\n\n                let path = IndexPath(row: 0, section: 0)\n                vc.notesTable.scrollToRow(at: path, at: .top, animated: true)\n\n                if selectedSection != .Tags {\n                    self.loadAllTags()\n                    vc.resizeSidebar(withAnimation: true)\n                }\n            }\n        }\n    }\n\n    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {\n        return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { suggestedActions in\n            let sidebarItem = self.sidebar.items[indexPath.section][indexPath.row]\n            let menu = self.viewController!.makeSidebarSettingsMenu(for: sidebarItem)\n            return menu\n        }\n    }\n\n    public func selectCurrentProject() {\n        guard let vc = self.viewController else { return }\n\n        var indexPath: IndexPath = IndexPath(row: 0, section: 0)\n        if let type = vc.storage.searchQuery.type,\n            let ip = getIndexPathBy(type: type) {\n            indexPath = ip\n        } else if let project = vc.storage.searchQuery.projects.first,\n            let ip = getIndexPathBy(project: project) {\n            indexPath = ip\n        }\n\n        let sidebarItem = sidebar.items[indexPath.section][indexPath.row]\n        let name = sidebarItem.name\n\n        selectRow(at: indexPath, animated: false, scrollPosition: .none)\n\n        vc.configureNavMenu(for: sidebarItem)\n        vc.buildSearchQuery()\n        vc.reloadNotesTable() {\n            DispatchQueue.main.async {\n                vc.setNavTitle(folder: name)\n            }\n        }\n    }\n\n    private func deselectAllTags() {\n        if let selectedIndexPaths = indexPathsForSelectedRows {\n            for indexPathItem in selectedIndexPaths {\n                if indexPathItem.section == SidebarSection.Tags.rawValue {\n                    deselectRow(at: indexPathItem, animated: false)\n                }\n            }\n        }\n    }\n\n    private func deselectAllProjects() {\n        if let selectedIndexPaths = indexPathsForSelectedRows {\n            for indexPathItem in selectedIndexPaths {\n                if indexPathItem.section == SidebarSection.Projects.rawValue\n                    || indexPathItem.section == SidebarSection.System.rawValue {\n                    deselectRow(at: indexPathItem, animated: false)\n                }\n            }\n        }\n\n    }\n    \n    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        cell.backgroundColor = UIColor.clear\n    }\n\n    public func deselectAll() {\n        if let paths = indexPathsForSelectedRows {\n            for path in paths {\n                deselectRow(at: path, animated: false)\n            }\n        }\n    }\n\n    public func getSidebarItem(project: Project? = nil) -> SidebarItem? {\n\n        if let project = project, sidebar.items.count > 1 {\n            return sidebar.items[1].first(where: { $0.project == project })\n        }\n\n        guard let indexPath = indexPathForSelectedRow else { return nil }\n\n        let item = sidebar.items[indexPath.section][indexPath.row]\n\n        return item\n    }\n\n    func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) {\n\n        guard let vc = viewController else { return }\n        guard let indexPath = coordinator.destinationIndexPath, let cell = tableView.cellForRow(at: indexPath) as? SidebarTableCellView else { return }\n\n        guard let sidebarItem = cell.sidebarItem else { return }\n\n        _ = coordinator.session.loadObjects(ofClass: URL.self) { item in\n            let pathList = item as [URL]\n\n            for url in pathList {\n                guard let note = Storage.shared().getBy(url: url) else { continue }\n\n                switch sidebarItem.type {\n                case .Project, .Inbox:\n                    guard let project = sidebarItem.project else { break }\n                    self.move(note: note, in: project)\n                case .Trash:\n                    note.remove()\n                    vc.notesTable.removeRows(notes: [note])\n                default:\n                    break\n                }\n            }\n\n            vc.notesTable.isEditing = false\n            vc.navigationController?.setToolbarHidden(true, animated: true)\n        }\n    }\n\n    func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal {\n\n        guard let indexPath = destinationIndexPath,\n            let cell = tableView.cellForRow(at: indexPath) as? SidebarTableCellView,\n            let sidebarItem = cell.sidebarItem\n        else { return UITableViewDropProposal(operation: .cancel) }\n\n        if sidebarItem.project != nil || sidebarItem.type == .Trash {\n            return UITableViewDropProposal(operation: .copy)\n        }\n\n        return UITableViewDropProposal(operation: .cancel)\n    }\n\n    private func move(note: Note, in project: Project) {\n        guard let vc = viewController else { return }\n\n        let dstURL = project.url.appendingPathComponent(note.name)\n\n        if note.project != project {\n            note.moveImages(to: project)\n\n            if note.isEncrypted() {\n                _ = note.lock()\n            }\n\n            guard note.move(to: dstURL) else {\n                let alert = UIAlertController(title: \"Oops 👮‍♂️\", message: \"File with this name already exist\", preferredStyle: UIAlertController.Style.alert)\n                alert.addAction(UIAlertAction(title: \"OK\", style: UIAlertAction.Style.default, handler: nil))\n                vc.present(alert, animated: true, completion: nil)\n\n                note.moveImages(to: note.project)\n                return\n            }\n\n            note.moveHistory(src: note.url, dst: dstURL)\n\n            note.url = dstURL\n            note.parseURL()\n            note.project = project\n\n            // resets tags in sidebar\n            removeTags(in: [note])\n\n            // reload tags (in remove tags operation non fitted)\n            _ = note.scanContentTags()\n\n            vc.notesTable.removeRows(notes: [note])\n            vc.notesTable.insertRows(notes: [note])\n        }\n    }\n\n    public func getSidebarProjects() -> [Project]? {\n        guard let indexPaths = UIApplication.getVC().sidebarTableView?.indexPathsForSelectedRows else { return nil }\n\n        var projects = [Project]()\n        for indexPath in indexPaths {\n            let item = sidebar.items[indexPath.section][indexPath.row]\n            if let project = item.project {\n                projects.append(project)\n            }\n        }\n\n        if projects.count > 0 {\n            return projects\n        }\n\n        if let root = Storage.shared().getDefault() {\n            return [root]\n        }\n\n        return nil\n    }\n\n    public func getAllTags(projects: [Project]? = nil) -> [String] {\n        var tags = [String]()\n\n        if let projects = projects {\n            for project in projects {\n                let projectTags = project.getAllTags()\n                for tag in projectTags {\n                    if !tags.contains(tag) {\n                        tags.append(tag)\n                    }\n                }\n            }\n        }\n\n        return tags.sorted()\n    }\n\n    private func getAllTags(notes: [Note]? = nil) -> [String] {\n        var tags = [String]()\n\n        if let notes = notes {\n            for note in notes {\n               for tag in note.tags {\n                   if !tags.contains(tag) {\n                       tags.append(tag)\n                   }\n               }\n            }\n        }\n\n        return tags.sorted()\n    }\n\n    public func loadAllTags() {\n        guard UserDefaultsManagement.inlineTags, let vc = viewController else { return }\n\n        unloadAllTags()\n\n        let notes = vc.notesTable.notes\n        let tags = getAllTags(notes: notes)\n\n        guard tags.count > 0, self.sidebar.items.indices.contains(2) else { return }\n\n        var indexPaths = [IndexPath]()\n        for tag in tags {\n            let position = self.sidebar.items[2].count\n            let element = SidebarItem(name: tag, type: .Tag)\n            self.sidebar.items[2].insert(element, at: position)\n            indexPaths.append(IndexPath(row: position, section: 2))\n        }\n\n        insertRows(at: indexPaths, with: .automatic)\n    }\n\n    public func unloadAllTags() {\n        guard sidebar.items.indices.contains(2), sidebar.items[2].count > 0 else { return }\n\n        let rows = numberOfRows(inSection: 2)\n\n        if rows > 0 {\n            self.sidebar.items[2].removeAll()\n\n            var indexPaths = [IndexPath]()\n            for index in stride(from: rows - 1, to: -1, by: -1) {\n                indexPaths.append(IndexPath(row: index, section: 2))\n            }\n\n            deleteRows(at: indexPaths, with: .automatic)\n        }\n    }\n\n    public func removeTags(in notes: [Note]) {\n        for note in notes {\n            note.tags.removeAll()\n        }\n\n        loadTags(notes: notes)\n    }\n\n    public func loadTags(notes: [Note]) {\n        var toInsert = [String]()\n        var toDelete = [String]()\n\n        for note in notes {\n            guard let query = createQueryWithoutTags(), query.isFit(note: note) else { continue }\n\n            let result = note.scanContentTags()\n            if result.0.count > 0 {\n                toInsert.append(contentsOf: result.0)\n            }\n\n            if result.1.count > 0 {\n                toDelete.append(contentsOf: result.1)\n                note.tags.removeAll(where: { result.1.contains($0) })\n            }\n        }\n\n        toInsert = Array(Set(toInsert))\n        toDelete = Array(Set(toDelete))\n\n        insert(tags: toInsert)\n        delete(tags: toDelete)\n    }\n\n    public func insert(tags: [String]) {\n        let currentTags = sidebar.items[2].compactMap({ $0.name })\n        var toInsert = [String]()\n\n        for tag in tags {\n            if currentTags.contains(tag) {\n                continue\n            }\n            toInsert.append(tag)\n        }\n\n        guard toInsert.count > 0 else { return }\n\n        let nonSorted = currentTags + toInsert\n        let sorted = nonSorted.sorted()\n\n        var indexPaths = [IndexPath]()\n        for tag in toInsert {\n            guard let index = sorted.firstIndex(of: tag) else { continue }\n            indexPaths.append(IndexPath(row: index, section: 2))\n        }\n\n        sidebar.items[2] = sorted.compactMap({ SidebarItem(name: $0, type: .Tag) })\n        insertRows(at: indexPaths, with: .fade)\n    }\n\n    public func delete(tags: [String]) {\n        guard let vc = viewController else { return }\n\n        var allTags = [String]()\n\n        if let project = vc.storage.searchQuery.projects.first {\n            allTags = project.getAllTags()\n        } else if let type = vc.storage.searchQuery.type {\n            var notes = [Note]()\n            switch type {\n            case .All:\n                notes = Storage.shared().noteList\n                break\n            case .Inbox:\n                notes = Storage.shared().noteList.filter({ $0.project.isDefault })\n                break\n            case .Todo:\n                notes = Storage.shared().noteList.filter({ $0.content.string.contains(\"- [ ] \") })\n            default:\n                break\n            }\n\n            for note in notes {\n                allTags.append(contentsOf: note.tags)\n            }\n        }\n\n        let currentTags = sidebar.items[2].compactMap({ $0.name })\n        var toRemovePaths = [IndexPath]()\n        var toRemoveTags = [String]()\n\n        for tag in tags {\n            if !allTags.contains(tag) {\n                if let row = currentTags.firstIndex(of: tag) {\n                    toRemovePaths.append(IndexPath(row: row, section: 2))\n                    toRemoveTags.append(tag)\n                }\n            }\n        }\n\n        sidebar.items[2].removeAll(where: { toRemoveTags.contains($0.name) })\n        deleteRows(at: toRemovePaths, with: .fade)\n\n        deSelectTagIfNonExist(tags: toRemoveTags)\n    }\n\n    private func createQueryWithoutTags() -> SearchQuery? {\n        guard let vc = viewController else { return nil }\n\n        let query = SearchQuery()\n        query.projects = vc.storage.searchQuery.projects\n\n        if let type = vc.storage.searchQuery.type {\n            query.type = type\n\n            if query.projects.first != nil && type == .Tag {\n                query.type = .Project\n            }\n        }\n\n        return query\n    }\n\n    private func deSelectTagIfNonExist(tags: [String]) {\n        guard let vc = viewController,\n              let tag = vc.storage.searchQuery.tags.first\n        else { return }\n\n        guard tags.contains(tag) else { return }\n\n        if let project = vc.storage.searchQuery.projects.first,\n            let index = getIndexPathBy(project: project)\n        {\n            tableView(self, didSelectRowAt: index)\n            return\n        }\n\n        if let type = vc.storage.searchQuery.type,\n            let index = getIndexPathBy(type: type) {\n            tableView(self, didSelectRowAt: index)\n        }\n    }\n\n    public func getSelectedSidebarItem() -> SidebarItem? {\n        guard let vc = viewController,\n              let project = vc.storage.searchQuery.projects.first\n        else { return nil }\n\n        let items = sidebar.items\n\n        for item in items {\n            for subItem in item {\n                if subItem.project == project {\n                    return subItem\n                }\n            }\n        }\n\n        return nil\n    }\n\n    public func getIndexPathBy(project: Project) -> IndexPath? {\n        for (sectionId, section) in sidebar.items.enumerated() {\n            for (rowId, item) in section.enumerated() {\n                if item.project === project {\n                    let indexPath = IndexPath(row: rowId, section: sectionId)\n                    return indexPath\n                }\n            }\n        }\n\n        return nil\n    }\n\n    public func getIndexPathBy(tag: String) -> IndexPath? {\n        let tagsSection = SidebarSection.Tags.rawValue\n\n        for (rowId, item) in sidebar.items[tagsSection].enumerated() {\n            if item.name == tag {\n                let indexPath = IndexPath(row: rowId, section: tagsSection)\n                return indexPath\n            }\n        }\n\n        return nil\n    }\n\n    public func getIndexPathBy(type: SidebarItemType) -> IndexPath? {\n        let section = SidebarSection.System.rawValue\n\n        for (rowId, item) in sidebar.items[section].enumerated() {\n            if item.type == type {\n                let indexPath = IndexPath(row: rowId, section: section)\n                return indexPath\n            }\n        }\n\n        return nil\n    }\n\n    public func insertRows(projects: [Project]) {\n        guard sidebar.items.indices.contains(1) else { return }\n\n        var localItems = sidebar.items[1]\n        let existingProjects = localItems.compactMap { $0.project }\n\n        let toInsert = projects\n            .filter { !existingProjects.contains($0) && $0.settings.showInSidebar }\n            .sorted {\n                $0.label.localizedCaseInsensitiveCompare($1.label) == .orderedAscending\n            }\n\n        guard !toInsert.isEmpty else { return }\n\n        performBatchUpdates({\n            for project in toInsert {\n                let insertIndex = localItems.firstIndex {\n                    $0.name.localizedCaseInsensitiveCompare(project.label) == .orderedDescending\n                } ?? localItems.count\n\n                let item = SidebarItem(\n                    name: project.label,\n                    project: project,\n                    type: .Project\n                )\n                \n                localItems.insert(item, at: insertIndex)\n                sidebar.items[1].insert(item, at: insertIndex)\n\n                insertRows(at: [IndexPath(row: insertIndex, section: 1)], with: .fade)\n            }\n        }, completion: { _ in\n            UIApplication.getVC().resizeSidebar()\n        })\n    }\n\n    \n    public func removeRows(projects: [Project]) {\n        guard let vc = viewController else { return }\n\n        let toDelete: [Project] = projects.flatMap { [$0] + $0.getChildProjectsByURL() }\n        guard !toDelete.isEmpty else { return }\n        var deselectCurrent = false\n\n        performBatchUpdates({\n            var indexPathsToDelete = [IndexPath]()\n\n            for index in sidebar.items[1].indices.reversed() {\n                let item = sidebar.items[1][index]\n                guard let project = item.project else { continue }\n\n                if toDelete.contains(project) {\n                    sidebar.items[1].remove(at: index)\n                    indexPathsToDelete.append(IndexPath(row: index, section: 1))\n\n                    if project == vc.storage.searchQuery.projects.first {\n                        deselectCurrent = true\n                    }\n\n                    vc.storage.remove(project: project)\n                }\n            }\n\n            if !indexPathsToDelete.isEmpty {\n                deleteRows(at: indexPathsToDelete, with: .automatic)\n            }\n        }, completion: { _ in\n            if deselectCurrent {\n                vc.notesTable.notes.removeAll()\n                vc.notesTable.reloadData()\n\n                let indexPath = IndexPath(row: 0, section: 0)\n                self.tableView(self, didSelectRowAt: indexPath)\n            }\n\n            UIApplication.getVC().resizeSidebar()\n        })\n    }\n\n    public func select(project: Project) {\n        guard let indexPath = getIndexPathBy(project: project) else { return }\n        tableView(self, didSelectRowAt: indexPath)\n    }\n\n    public func select(tag: String) {\n        guard let indexPath = getIndexPathBy(tag: tag) else { return }\n        tableView(self, didSelectRowAt: indexPath)\n    }\n\n    public func remove(tag: String) {\n        guard let indexPath = getIndexPathBy(tag: tag) else { return }\n\n        sidebar.items[2].removeAll(where: { $0.name == tag})\n        deleteRows(at: [indexPath], with: .automatic)\n\n        selectCurrentProject()\n    }\n\n    public func reloadSidebar() {\n        sidebar = Sidebar()\n        reloadData()\n\n        var indexPath = IndexPath(row: 0, section: 0)\n\n        if\n            let projectURL = UserDefaultsManagement.lastProjectURL,\n            let project = Storage.shared().getProjectBy(url: projectURL),\n            let path = getIndexPathBy(project: project) {\n\n            indexPath = path\n        } else if let rowId = UserDefaultsManagement.lastSidebarItem {\n            indexPath = IndexPath(row: rowId, section: 0)\n        }\n\n        tableView(self, didSelectRowAt: indexPath)\n        \n        viewController?.resizeSidebar(withAnimation: true)\n    }\n\n    public func reload(indexPath: IndexPath) {\n        \n        // Important as cell resets after reloadRows\n        let currentPath = indexPathForSelectedRow\n\n        reloadRows(at: [indexPath], with: .automatic)\n        selectRow(at: currentPath, animated: false, scrollPosition: .none)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/ViewController+More.swift",
    "content": "//\n//  ViewController+More.swift\n//  FSNotes iOS\n//\n//  Created by Олександр Глущенко on 10.01.2021.\n//  Copyright © 2021 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nextension ViewController: UIDocumentPickerDelegate {\n    \n    func makeSidebarSettingsMenu(for sidebarItem: SidebarItem) -> UIMenu? {\n        let project = sidebarItem.project\n        let handler: (_ action: UIAction) -> () = { action in\n\n        switch action.identifier.rawValue {\n            case \"emptyBin\":\n                self.emptyBin()\n            case \"importNote\":\n                self.importNote(selectedProject: project)\n            case \"viewSettings\":\n                self.openProjectSettings(sidebarItem: sidebarItem)\n            case \"gitSettings\":\n                self.openGitSettings(selectedProject: project)\n            case \"bulkEditing\":\n                self.bulkEditing()\n            case \"createFolder\":\n                self.createFolder(selectedProject: project)\n            case \"removeFolder\":\n                self.removeFolder(selectedProject: project)\n            case \"renameFolder\":\n                self.renameFolder(selectedProject: project)\n            case \"removeTag\":\n                self.removeTag(sidebarItem: sidebarItem)\n            case \"renameTag\":\n                self.renameTag(sidebarItem: sidebarItem)\n            case \"openInFiles\":\n                self.openInFiles(selectedProject: project)\n            case \"lockFolder\":\n                self.lockProject(selectedProject: project)\n            case \"unlockFolder\":\n                self.unlockProject(selectedProject: project)\n            case \"decryptFolder\":\n                self.decryptProject(selectedProject: project)\n            case \"encryptFolder\":\n                self.encryptProject(selectedProject: project)\n            case \"gitAddCommitPush\":\n                self.addCommitPush(selectedProject: project)\n            default:\n                break\n            }\n        }\n\n        // Build popovers\n\n        var popoverActions = [FolderPopoverActions]()\n        switch sidebarItem.type {\n        case .Inbox:\n            popoverActions = [.importNote, .settingsFolder, .createFolder, .multipleSelection, .openInFiles, .settingsRepository]\n        case .All, .Todo:\n            popoverActions = [.settingsFolder, .createFolder, .multipleSelection]\n        case .Trash:\n            popoverActions = [.settingsFolder, .multipleSelection, .openInFiles, .emptyBin]\n        case .Project:\n            popoverActions = [.importNote, .settingsFolder, .createFolder, .removeFolder, .renameFolder, .multipleSelection, .openInFiles, .settingsRepository, .encryptFolder]\n        case .Tag:\n            popoverActions = [.removeTag, .renameTag, .multipleSelection]\n        case .Untagged:\n            popoverActions = [.createFolder, .multipleSelection]\n        case .ProjectEncryptedLocked:\n            popoverActions = [.unLockFolder, .decryptFolder, .settingsFolder, .removeFolder, .renameFolder, .multipleSelection, .openInFiles, .settingsRepository]\n        case .ProjectEncryptedUnlocked:\n            popoverActions = [.lockFolder, .decryptFolder, .importNote, .settingsFolder, .createFolder, .removeFolder, .renameFolder, .multipleSelection, .openInFiles, .settingsRepository]\n        default: break\n        }\n\n        // Build actions\n\n        var actions = [UIAction]()\n        if popoverActions.contains(.removeFolder) {\n            let title = NSLocalizedString(\"Remove Folder\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"trash\"), identifier: UIAction.Identifier(\"removeFolder\"), attributes: .destructive, handler: handler))\n        }\n\n        if popoverActions.contains(.emptyBin) {\n            let title = NSLocalizedString(\"Empty Bin\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"xmark.circle\"), identifier: UIAction.Identifier(\"emptyBin\"), handler: handler))\n        }\n\n        if popoverActions.contains(.importNote) {\n            let title = NSLocalizedString(\"Import Notes\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"square.and.arrow.down\"), identifier: UIAction.Identifier(\"importNote\"), handler: handler))\n        }\n\n        if popoverActions.contains(.settingsFolder) {\n            let title = NSLocalizedString(\"View Settings\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"gearshape\"), identifier: UIAction.Identifier(\"viewSettings\"), handler: handler))\n        }\n\n        if popoverActions.contains(.settingsRepository) {\n            let title = NSLocalizedString(\"Git Settings\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(named: \"gitSettings\"), identifier: UIAction.Identifier(\"gitSettings\"), handler: handler))\n\n            if let project = sidebarItem.project, project.getGitProject() != nil {\n                let titleAddCommit = NSLocalizedString(\"Git Add/commit/push\", comment: \"Main view popover table\")\n                actions.append(UIAction(title: titleAddCommit, image: UIImage(systemName: \"plus.circle\"), identifier: UIAction.Identifier(\"gitAddCommitPush\"), handler: handler))\n            }\n        }\n\n        if popoverActions.contains(.multipleSelection) {\n            let title = NSLocalizedString(\"Select\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"checkmark.circle\"), identifier: UIAction.Identifier(\"bulkEditing\"), handler: handler))\n        }\n\n        if popoverActions.contains(.createFolder) {\n            let title = NSLocalizedString(\"Create Folder\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"folder.badge.plus\"), identifier: UIAction.Identifier(\"createFolder\"), handler: handler))\n        }\n\n        if popoverActions.contains(.renameFolder) {\n            let title = NSLocalizedString(\"Rename Folder\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"pencil.circle\"), identifier: UIAction.Identifier(\"renameFolder\"), handler: handler))\n        }\n\n        if popoverActions.contains(.removeTag) {\n            let title = NSLocalizedString(\"Remove Tag\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"tag.slash\"), identifier: UIAction.Identifier(\"removeTag\"), handler: handler))\n        }\n\n        if popoverActions.contains(.renameTag) {\n            let title = NSLocalizedString(\"Rename Tag\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"pencil.circle\"), identifier: UIAction.Identifier(\"renameTag\"), handler: handler))\n        }\n\n        if popoverActions.contains(.openInFiles) {\n            let title = NSLocalizedString(\"Open in Files.app\", comment: \"Main view popover table\")\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"folder\"), identifier: UIAction.Identifier(\"openInFiles\"), handler: handler))\n        }\n\n        if popoverActions.contains(.lockFolder) {\n            let title = FolderPopoverActions.lockFolder.getDescription()\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"lock\"), identifier: UIAction.Identifier(\"lockFolder\"), handler: handler))\n        }\n\n        if popoverActions.contains(.unLockFolder) {\n            let title = FolderPopoverActions.unLockFolder.getDescription()\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"lock.open\"), identifier: UIAction.Identifier(\"unlockFolder\"), handler: handler))\n        }\n\n        if popoverActions.contains(.decryptFolder) {\n            let title = FolderPopoverActions.decryptFolder.getDescription()\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"lock.slash\"), identifier: UIAction.Identifier(\"decryptFolder\"), handler: handler))\n        }\n\n        if popoverActions.contains(.encryptFolder) {\n            let title = FolderPopoverActions.encryptFolder.getDescription()\n            actions.append(UIAction(title: title, image: UIImage(systemName: \"lock\"), identifier: UIAction.Identifier(\"encryptFolder\"), handler: handler))\n        }\n\n        // Build title\n\n        var mainTitle = String()\n        switch sidebarItem.type {\n        case .Project:\n            if let project = sidebarItem.project {\n                mainTitle = project.getFullLabel()\n            }\n        case .Untagged:\n            mainTitle = NSLocalizedString(\"Untagged\", comment: \"\")\n        default:\n            mainTitle = sidebarItem.getName()\n        }\n\n        return UIMenu(title: mainTitle,  children: actions)\n    }\n\n\n    @IBAction public func openSidebarSettings() {\n        let mvc = UIApplication.getVC()\n        if notesTable.isEditing {\n            if let selectedRows = mvc.notesTable.selectedIndexPaths {\n                var notes = [Note]()\n                for indexPath in selectedRows {\n                    if mvc.notesTable.notes.indices.contains(indexPath.row) {\n                        let note = mvc.notesTable.notes[indexPath.row]\n                        notes.append(note)\n                    }\n                }\n\n                mvc.notesTable.selectedIndexPaths = nil\n                mvc.notesTable.actionsSheet(notes: notes, presentController: self)\n            } else {\n                mvc.notesTable.allowsMultipleSelectionDuringEditing = false\n                mvc.notesTable.setEditing(false, animated: true)\n            }\n            return\n        }\n\n        let sidebarItem = sidebarTableView.getSidebarItem()\n        let projectLabel = sidebarItem?.project?.getFullLabel() ?? String()\n\n        var type = sidebarItem?.type\n        var indexPath: IndexPath?\n\n        if let tag = Storage.shared().searchQuery.tags.first {\n            indexPath = sidebarTableView.getIndexPathBy(tag: tag)\n        }\n\n        if let path = indexPath, path.section == SidebarSection.Tags.rawValue {\n            type = .Tag\n        }\n\n        guard type != .Label else { return }\n\n        var actions = [FolderPopoverActions]()\n\n        switch type {\n        case .Inbox:\n            actions = [.importNote, .settingsFolder, .createFolder, .multipleSelection, .openInFiles, .settingsRepository]\n        case .All, .Todo:\n            actions = [.settingsFolder, .multipleSelection]\n        case .Trash:\n            actions = [.settingsFolder, .multipleSelection, .openInFiles, .emptyBin]\n        case .Project:\n            actions = [.importNote, .settingsFolder, .createFolder, .removeFolder, .renameFolder, .multipleSelection, .openInFiles, .settingsRepository, .encryptFolder]\n        case .Tag:\n            actions = [.removeTag, .renameTag, .multipleSelection]\n        case .Untagged:\n            actions = [.multipleSelection]\n        case .ProjectEncryptedLocked:\n            actions = [.unLockFolder, .decryptFolder, .importNote, .settingsFolder, .createFolder, .removeFolder, .renameFolder, .multipleSelection, .openInFiles, .settingsRepository]\n        case .ProjectEncryptedUnlocked:\n            actions = [.lockFolder, .decryptFolder, .importNote, .settingsFolder, .createFolder, .removeFolder, .renameFolder, .multipleSelection, .openInFiles, .settingsRepository]\n        default: break\n        }\n\n        var mainTitle = type != .Tag && type == .Project ? projectLabel : sidebarItem?.getName()\n\n        if type == .Untagged {\n            mainTitle = NSLocalizedString(\"Untagged\", comment: \"\")\n        }\n\n        let actionSheet = UIAlertController(title: mainTitle, message: nil, preferredStyle: .actionSheet)\n\n        if actions.contains(.removeFolder) {\n            let title = NSLocalizedString(\"Remove Folder\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .destructive, handler: { _ in\n                self.removeFolder(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"trash\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.emptyBin) {\n            let title = NSLocalizedString(\"Empty Bin\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .destructive, handler: { _ in\n                self.emptyBin()\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"xmark.circle\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n        \n        if actions.contains(.importNote) {\n            let title = NSLocalizedString(\"Import Notes\", comment: \"Main view popover table\")\n            let importNote = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.importNote(selectedProject: sidebarItem?.project)\n            })\n            importNote.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n\n            if let image = UIImage(systemName: \"square.and.arrow.down\")?.resize(maxWidthHeight: 23) {\n                importNote.setValue(image, forKey: \"image\")\n            }\n\n            actionSheet.addAction(importNote)\n        }\n\n        if actions.contains(.settingsFolder) {\n            let title = NSLocalizedString(\"View Settings\", comment: \"Main view popover table\")\n            let settings = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.openProjectSettings(sidebarItem: sidebarItem)\n            })\n            settings.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"gearshape\")?.resize(maxWidthHeight: 23) {\n                settings.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(settings)\n        }\n\n        if actions.contains(.settingsRepository) {\n            let title = NSLocalizedString(\"Git Settings\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.openGitSettings(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(named: \"gitSettings\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.multipleSelection) {\n            let title = NSLocalizedString(\"Select\", comment: \"Main view popover table\")\n            let multipleSelection = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.bulkEditing()\n            })\n            multipleSelection.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"checkmark.circle\")?.resize(maxWidthHeight: 23) {\n                multipleSelection.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(multipleSelection)\n        }\n\n        if actions.contains(.createFolder) {\n            let title = NSLocalizedString(\"Create Folder\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.createFolder(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"folder.badge.plus\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.renameFolder) {\n            let title = NSLocalizedString(\"Rename Folder\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.renameFolder(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"pencil.circle\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.removeTag) {\n            let title = NSLocalizedString(\"Remove Tag\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .destructive, handler: { _ in\n                self.removeTag(sidebarItem: sidebarItem)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"tag.slash\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.renameTag) {\n            let title = NSLocalizedString(\"Rename Tag\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.renameTag(sidebarItem: sidebarItem)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"pencil.circle\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.openInFiles) {\n            let title = NSLocalizedString(\"Open in Files.app\", comment: \"Main view popover table\")\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.openInFiles(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"folder\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.lockFolder) {\n            let title = FolderPopoverActions.lockFolder.getDescription()\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.lockProject(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"lock\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.unLockFolder) {\n            let title = FolderPopoverActions.unLockFolder.getDescription()\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.unlockProject(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"lock.open\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.decryptFolder) {\n            let title = FolderPopoverActions.decryptFolder.getDescription()\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.decryptProject(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"lock.slash\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        if actions.contains(.encryptFolder) {\n            let title = FolderPopoverActions.encryptFolder.getDescription()\n            let alertAction = UIAlertAction(title:title, style: .default, handler: { _ in\n                self.encryptProject(selectedProject: sidebarItem?.project)\n            })\n            alertAction.setValue(CATextLayerAlignmentMode.left, forKey: \"titleTextAlignment\")\n            if let image = UIImage(systemName: \"lock\")?.resize(maxWidthHeight: 23) {\n                alertAction.setValue(image, forKey: \"image\")\n            }\n            actionSheet.addAction(alertAction)\n        }\n\n        let dismiss = UIAlertAction(title: NSLocalizedString(\"Cancel\", comment: \"\"), style: .cancel, handler: nil)\n        actionSheet.addAction(dismiss)\n\n        actionSheet.popoverPresentationController?.sourceView = view\n        actionSheet.popoverPresentationController?.sourceRect = CGRect(x: view.bounds.size.width / 2.0, y: view.bounds.size.height, width: 2.0, height: 1.0)\n\n        present(actionSheet, animated: true, completion: nil)\n    }\n\n    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {\n        guard let projectURL = selectedProject?.url else { return }\n\n        for url in urls {\n            let dstURL = projectURL.appendingPathComponent(url.lastPathComponent)\n            try? FileManager.default.copyItem(at: url, to: dstURL)\n        }\n\n        self.dismiss(animated: true, completion: nil)\n    }\n\n    private func importNote(selectedProject: Project?) {\n        self.selectedProject = selectedProject\n\n        let picker = UIDocumentPickerViewController(forOpeningContentTypes: [.item], asCopy: true)\n        picker.allowsMultipleSelection = true\n        picker.delegate = self\n        self.present(picker, animated: true, completion: nil)\n    }\n\n    public func openProjectSettings(sidebarItem: SidebarItem?) {\n        let vc = UIApplication.getVC()\n        let storage = Storage.shared()\n\n        // All projects\n\n        var currentProject = sidebarItem?.project\n        if currentProject == nil {\n            currentProject = storage.getCurrentProject()\n        }\n\n        // Virtual projects Notes and Todo\n\n        if sidebarItem?.type == .Todo || sidebarItem?.type == .All {\n            currentProject = sidebarItem?.project\n        }\n\n        guard let project = currentProject else { return }\n\n        let projectController = ProjectSettingsViewController(project: project, dismiss: true)\n        let controller = UINavigationController(rootViewController: projectController)\n\n        self.dismiss(animated: true, completion: nil)\n        vc.present(controller, animated: true, completion: nil)\n    }\n\n    @objc func bulkEditing() {\n        let mvc = UIApplication.getVC()\n\n        if !mvc.notesTable.isEditing {\n            mvc.notesTable.allowsMultipleSelectionDuringEditing = true\n            mvc.notesTable.setEditing(true, animated: true)\n\n            // load navbar\n            \n            let cancelTitle = NSLocalizedString(\"Cancel\", comment: \"\")\n            navigationItem.rightBarButtonItem = UIBarButtonItem(title: cancelTitle, style: .plain, target: self, action: #selector(cancel))\n\n            // load toolbar\n\n            let deleteImage = UIImage(systemName: \"trash\")\n            let calendarImage = UIImage(systemName: \"calendar\")\n            let duplicateImage = UIImage(systemName: \"doc.on.doc\")\n            let moveImage = UIImage(systemName: \"move.3d\")\n\n            if #available(iOS 14.0, *) {\n                var items = [UIBarButtonItem]()\n                items.append(UIBarButtonItem(image: deleteImage, style: .plain, target: self, action: #selector(removeNotes)))\n                items.append(UIBarButtonItem.flexibleSpace())\n                items.append(UIBarButtonItem(image: calendarImage, style: .plain, target: self, action: #selector(calendarNotes)))\n                items.append(UIBarButtonItem.flexibleSpace())\n                items.append(UIBarButtonItem(image: duplicateImage, style: .plain, target: self, action: #selector(duplicateNotes)))\n                items.append(UIBarButtonItem.flexibleSpace())\n                items.append(UIBarButtonItem(image: moveImage, style: .plain, target: self, action: #selector(moveNotes)))\n                toolbarItems = items\n            }\n\n            navigationController?.toolbar.tintColor = UIColor.mainTheme\n            navigationController?.setToolbarHidden(false, animated: true)\n            navigationController?.navigationBar.tintColor = UIColor.mainTheme\n        }\n    }\n\n    public func configureSidebarNavMenu() {\n        if let sidebarItem = UIApplication.getVC().lastSidebarItem {\n            configureNavMenu(for: sidebarItem)\n        }\n    }\n    \n    @objc func removeNotes() {\n        let notes = notesTable.getSelectedNotes()\n        notesTable.removeAction(notes: notes)\n        notesTable.turnOffEditing()\n\n        configureSidebarNavMenu()\n\n        navigationController?.setToolbarHidden(true, animated: true)\n\n        configureToolbar()\n    }\n\n    @objc func calendarNotes() {\n        let notes = notesTable.getSelectedNotes()\n        notesTable.dateAction(notes: notes)\n        notesTable.turnOffEditing()\n\n        configureSidebarNavMenu()\n        configureToolbar()\n        \n        navigationController?.setToolbarHidden(false, animated: true)\n    }\n\n    @objc func duplicateNotes() {\n        let notes = notesTable.getSelectedNotes()\n        notesTable.duplicateAction(notes: notes)\n        notesTable.turnOffEditing()\n\n        configureSidebarNavMenu()\n        configureToolbar()\n        \n        navigationController?.setToolbarHidden(false, animated: true)\n    }\n\n    @objc func moveNotes() {\n        let notes = notesTable.getSelectedNotes()\n        notesTable.moveAction(notes: notes)\n        notesTable.turnOffEditing()\n\n        configureSidebarNavMenu()\n        configureToolbar()\n        \n        navigationController?.setToolbarHidden(false, animated: true)\n    }\n\n    @objc func cancel() {\n        notesTable.turnOffEditing()\n\n        configureSidebarNavMenu()\n        configureToolbar()\n        \n        navigationController?.setToolbarHidden(false, animated: true)\n    }\n\n    private func createFolder(selectedProject: Project?) {\n        guard var selectedProject = selectedProject else { return }\n\n        if selectedProject.isVirtual {\n            selectedProject = self.storage.getDefault()!\n        }\n\n        let mvc = UIApplication.getVC()\n        let alertController = UIAlertController(title: NSLocalizedString(\"Create folder:\", comment: \"\"), message: nil, preferredStyle: .alert)\n\n        alertController.addTextField(configurationHandler: {\n            [] (textField: UITextField) in\n            textField.placeholder = NSLocalizedString(\"Enter folder name\", comment: \"\")\n        })\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            guard let name = alertController.textFields?[0].text, name.count > 0 else {\n                return\n            }\n\n            let newDir = selectedProject.url.appendingPathComponent(name, isDirectory: true)\n\n            do {\n                try FileManager.default.createDirectory(at: newDir, withIntermediateDirectories: false, attributes: nil)\n            } catch {\n                print(error)\n                return\n            }\n\n            if let projects = Storage.shared().insert(url: newDir) {\n                OperationQueue.main.addOperation {\n                    UIApplication.getVC().sidebarTableView.insertRows(projects: projects)\n                }\n            }\n        }\n\n        let title = NSLocalizedString(\"Cancel\", comment: \"\")\n        let cancelAction = UIAlertAction(title: title, style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.dismiss(animated: true, completion: nil)\n        mvc.present(alertController, animated: true) {\n            alertController.textFields![0].selectAll(nil)\n        }\n    }\n\n    private func removeFolder(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n        guard !selectedProject.isDefault else { return }\n\n        let mvc = UIApplication.getVC()\n        let alert = UIAlertController(\n            title: \"Folder removing 🚨\",\n            message: \"Are you really want to remove \\\"\\(selectedProject.label)\\\"? Folder content will be deleted, action can not be undone.\",\n            preferredStyle: UIAlertController.Style.alert\n        )\n\n        alert.addAction(UIAlertAction(title: \"OK\", style: .default, handler: { (action: UIAlertAction!) in\n            OperationQueue.main.addOperation {\n                mvc.sidebarTableView.removeRows(projects: [selectedProject])\n\n                if !selectedProject.isBookmark {\n                    try? FileManager.default.removeItem(at: selectedProject.url)\n                }\n\n                Storage.shared().remove(project: selectedProject)\n            }\n        }))\n\n        alert.addAction(UIAlertAction(title: \"Cancel\", style: .cancel, handler: { (action: UIAlertAction!) in\n        }))\n\n        if selectedProject.isBookmark {\n            OperationQueue.main.addOperation {\n                let bookmark = SandboxBookmark.sharedInstance()\n                bookmark.remove(url: selectedProject.url)\n\n                mvc.sidebarTableView.removeRows(projects: [selectedProject])\n            }\n        } else {\n            mvc.present(alert, animated: true, completion: nil)\n        }\n    }\n\n    private func renameFolder(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n\n        let mvc = UIApplication.getVC()\n        let title = NSLocalizedString(\"Rename folder:\", comment: \"Popover table\")\n        let alertController = UIAlertController(title: title, message: nil, preferredStyle: .alert)\n\n        alertController.addTextField(configurationHandler: {\n            [] (textField: UITextField) in\n            textField.placeholder = NSLocalizedString(\"Enter folder name\", comment: \"\")\n            textField.text = selectedProject.url.lastPathComponent\n        })\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            OperationQueue.main.addOperation {\n                guard let name = alertController.textFields?[0].text, name.count > 0 else {\n                    return\n                }\n\n                let newDir = selectedProject.url\n                    .deletingLastPathComponent()\n                    .appendingPathComponent(name, isDirectory: true)\n\n                do {\n                    try FileManager.default.moveItem(at: selectedProject.url, to: newDir)\n                } catch {\n                    print(error)\n                    return\n                }\n\n                mvc.sidebarTableView.removeRows(projects: [selectedProject])\n\n                if let projects = self.storage.insert(url: newDir) {\n                    mvc.sidebarTableView.insertRows(projects: projects)\n                    \n                    if let first = projects.first {\n                        mvc.sidebarTableView.select(project: first)\n                    }\n                }\n            }\n        }\n\n        let cancel = NSLocalizedString(\"Cancel\", comment: \"\")\n        let cancelAction = UIAlertAction(title: cancel, style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.dismiss(animated: true, completion: nil)\n        mvc.present(alertController, animated: true) {\n            alertController.textFields![0].selectAll(nil)\n        }\n    }\n\n    private func removeTag(sidebarItem: SidebarItem?) {\n        let mvc = UIApplication.getVC()\n\n        guard let sidebarItem = sidebarItem, sidebarItem.type == .Tag else { return }\n        guard let selectedProject = mvc.storage.searchQuery.projects.first else { return }\n\n        let tag = sidebarItem.name\n\n        let notes =\n            mvc.storage.noteList\n                .filter({ $0.project == selectedProject })\n                .filter({ $0.tags.contains(tag) })\n\n        for note in notes {\n            note.replace(tag: \"#\\(tag)\", with: \"\")\n            note.tags.removeAll(where: { $0 == tag })\n        }\n\n        mvc.sidebarTableView.remove(tag: tag)\n        self.dismiss(animated: true, completion: nil)\n    }\n\n    private func renameTag(sidebarItem: SidebarItem?) {\n        let mvc = UIApplication.getVC()\n\n        guard let sidebarItem = sidebarItem, sidebarItem.type == .Tag else { return }\n        guard let selectedProject = mvc.storage.searchQuery.projects.first else { return }\n\n        let tag = sidebarItem.name\n\n        let title = NSLocalizedString(\"Rename tag:\", comment: \"Popover table\")\n        let alertController = UIAlertController(title: title, message: nil, preferredStyle: .alert)\n\n        alertController.addTextField(configurationHandler: {\n            [] (textField: UITextField) in\n            textField.placeholder = NSLocalizedString(\"Enter new tag name\", comment: \"\")\n            textField.text = tag\n        })\n\n        let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n            guard var name = alertController.textFields?[0].text, name.count > 0 else {\n                return\n            }\n\n            name = name.withoutSpecialCharacters\n\n            guard name.count > 1 else { return }\n\n            let notes =\n                mvc.storage.noteList\n                    .filter({ $0.project == selectedProject })\n                    .filter({ $0.tags.contains(tag) })\n\n            for note in notes {\n                note.replace(tag: \"#\\(tag)\", with: \"#\\(name)\")\n                note.tags.removeAll(where: { $0 == tag })\n                _ = note.scanContentTags()\n            }\n\n            mvc.sidebarTableView.remove(tag: tag)\n            mvc.sidebarTableView.insert(tags: [name])\n\n            self.dismiss(animated: true, completion: nil)\n        }\n\n        let cancel = NSLocalizedString(\"Cancel\", comment: \"\")\n        let cancelAction = UIAlertAction(title: cancel, style: .cancel) { (_) in }\n\n        alertController.addAction(confirmAction)\n        alertController.addAction(cancelAction)\n\n        self.dismiss(animated: true, completion: nil)\n        mvc.present(alertController, animated: true) {\n            alertController.textFields![0].selectAll(nil)\n        }\n    }\n\n    private func openInFiles(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n\n        guard let path = selectedProject.url.path.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlPathAllowed) else { return }\n\n        if let projectUrl = URL(string: \"shareddocuments://\" + path) {\n            UIApplication.shared.open(projectUrl, options: [:])\n        }\n    }\n\n    private func openGitSettings(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n\n        let projectController = AppDelegate.getGitVC(for: selectedProject)\n        let controller = UINavigationController(rootViewController: projectController)\n\n        self.dismiss(animated: true, completion: nil)\n        UIApplication.getVC().present(controller, animated: true, completion: nil)\n    }\n\n    private func emptyBin() {\n        let notes = storage.getAllTrash()\n\n        storage.removeNotes(notes: notes, fsRemove: true, completely: true) { [self]_ in\n            self.notesTable.removeRows(notes: notes)\n        }\n    }\n\n    @objc public func unlock() {\n        guard let project = sidebarTableView.getSelectedSidebarItem()?.project else { return }\n\n        unlockProject(selectedProject: project)\n    }\n\n    public func unlockProject(selectedProject: Project?, createNote: Bool = false) {\n        guard let selectedProject = selectedProject else { return }\n\n        getMasterPassword() { password in\n            let result = selectedProject.unlock(password: password)\n\n            DispatchQueue.main.async {\n                guard result.1.count > 0 || result.0.count == 0 else {\n                    self.wrongPassAlert()\n                    return\n                }\n\n                self.sidebarTableView.loadTags(notes: result.1)\n                self.disableLockedProject()\n\n                if let indexPath = self.sidebarTableView.getIndexPathBy(project: selectedProject),\n                   let sidebarItem = self.sidebarTableView.getSidebarItem(project: selectedProject) {\n                    sidebarItem.load(type: .ProjectEncryptedUnlocked)\n\n                    self.sidebarTableView.reload(indexPath: indexPath)\n                    self.sidebarTableView.select(project: selectedProject)\n\n                    if createNote {\n                        self.createNote()\n                    }\n                }\n\n                self.reloadNotesTable()\n                self.configureSidebarNavMenu()\n            }\n        }\n    }\n\n    public func lockProject(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n\n        let locked = selectedProject.lock()\n        selectedProject.removeCache()\n\n        DispatchQueue.main.async {\n            self.sidebarTableView.loadTags(notes: locked)\n            self.enableLockedProject()\n\n            if let indexPath = self.sidebarTableView.getIndexPathBy(project: selectedProject),\n               let sidebarItem = self.sidebarTableView.getSidebarItem(project: selectedProject) {\n                sidebarItem.load(type: .ProjectEncryptedLocked)\n\n                self.sidebarTableView.reload(indexPath: indexPath)\n                self.sidebarTableView.select(project: selectedProject)\n            }\n            \n            self.reloadNotesTable()\n            self.configureSidebarNavMenu()\n        }\n    }\n\n    public func encryptProject(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n\n        getMasterPassword() { password in\n            let encrypted = selectedProject.encrypt(password: password)\n            selectedProject.removeCache()\n\n            DispatchQueue.main.async {\n                self.sidebarTableView.loadTags(notes: encrypted)\n                self.enableLockedProject()\n\n                if let indexPath = self.sidebarTableView.getIndexPathBy(project: selectedProject),\n                   let sidebarItem = self.sidebarTableView.getSidebarItem(project: selectedProject) {\n                    sidebarItem.load(type: .ProjectEncryptedLocked)\n\n                    self.sidebarTableView.reload(indexPath: indexPath)\n                    self.sidebarTableView.select(project: selectedProject)\n                }\n\n                self.reloadNotesTable()\n                self.configureSidebarNavMenu()\n            }\n        }\n    }\n\n    public func addCommitPush(selectedProject: Project?) {\n        guard let selectedProject = selectedProject?.getGitProject() else { return }\n\n        notesTable.saveRevisionAction(project: selectedProject)\n    }\n\n    public func decryptProject(selectedProject: Project?) {\n        guard let selectedProject = selectedProject else { return }\n\n        getMasterPassword() { password in\n            let notes = selectedProject.storage.getNotesBy(project: selectedProject)\n            let decrypted = selectedProject.decrypt(password: password)\n\n            DispatchQueue.main.async {\n                guard decrypted.count > 0 || notes.count == 0 else {\n                    self.wrongPassAlert()\n                    return\n                }\n\n                self.sidebarTableView.loadTags(notes: decrypted)\n                self.disableLockedProject()\n\n                if let indexPath = self.sidebarTableView.getIndexPathBy(project: selectedProject),\n                   let sidebarItem = self.sidebarTableView.getSidebarItem(project: selectedProject) {\n                    sidebarItem.load(type: .Project)\n\n                    self.sidebarTableView.reload(indexPath: indexPath)\n                    self.sidebarTableView.select(project: selectedProject)\n                }\n\n                self.reloadNotesTable()\n                self.configureSidebarNavMenu()\n            }\n        }\n    }\n\n    private func wrongPassAlert() {\n        let message = NSLocalizedString(\"Wrong password\", comment: \"\")\n        let alertController = UIAlertController(title: message, message: nil, preferredStyle: .alert)\n\n        let okAction = UIAlertAction(title: \"OK\", style: .cancel) { (_) in }\n        alertController.addAction(okAction)\n\n        self.present(alertController, animated: true, completion: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport LocalAuthentication\nimport WebKit\nimport AudioToolbox\nimport CoreSpotlight\n\nclass ViewController: UIViewController, UISearchBarDelegate, UIGestureRecognizerDelegate, UISearchControllerDelegate {\n\n    @IBOutlet weak var sidebarTableBottomConstraint: NSLayoutConstraint!\n    @IBOutlet weak var notesTableBottomContraint: NSLayoutConstraint!\n    @IBOutlet weak var notesTableLeadingConstraint: NSLayoutConstraint!\n    @IBOutlet weak var sidebarTableLeadingConstraint: NSLayoutConstraint!\n    @IBOutlet weak var sidebarTableWidth: NSLayoutConstraint!\n    @IBOutlet weak var notesTable: NotesTableView!\n    @IBOutlet weak var sidebarTableView: SidebarTableView!\n    @IBOutlet weak var leftPreSafeArea: UIView!\n    @IBOutlet weak var rightPreSafeArea: UIView!\n\n    @IBOutlet weak var lockedProject: UIImageView!\n\n    private var newsPopup: MPreviewView?\n    private var newsOverlay: UIView?\n\n    public var indicator: UIActivityIndicatorView?\n\n    public var storage = Storage.shared()\n    public var cloudDriveManager: CloudDriveManager?\n\n    private let searchQueue = OperationQueue()\n    private let metadataQueue = OperationQueue()\n    \n    public let gitQueue = OperationQueue()\n    public let gitQueueState = OperationQueue()\n\n    private var delayedInsert: Note?\n\n    private var maxSidebarWidth = CGFloat(0)\n    private var accessTime = DispatchTime.now()\n\n    public var isActiveTableUpdating = false\n\n    private var queryDidFinishGatheringObserver : Any?\n    private var isBackground: Bool = false\n\n    public var shouldReturnToControllerIndex = false\n\n    // Swipe animation from handleSidebarSwipe\n    private var sidebarWidth: CGFloat = 0\n    private var isLandscape: Bool?\n    public var restoreFindID: String?\n    \n    public var isLoadedDB: Bool = false\n    public var isLoadedSidebar: Bool = false\n\n    public var folderCapacity: String?\n    public var currentFolder: String?\n\n    lazy var searchBar = UISearchBar(frame: CGRect.zero)\n    \n    // Pass for access from CloudDriveManager\n    public var editorViewController: EditorViewController?\n    \n    private var gitClean: Bool = false\n    private var gitPullTimer: Timer?\n\n    private var searchFocus: Bool = false\n    private var searchString: String? = nil\n\n    // Project for import picker\n    public var selectedProject: Project?\n    public var initialLoadingState = false\n    \n    override func viewWillAppear(_ animated: Bool) {\n        navigationController?.navigationBar.prefersLargeTitles = false\n\n        super.viewWillAppear(animated)\n        navigationItem.searchController = nil\n    }\n\n    override func viewDidAppear(_ animated: Bool) {\n        if nil == Storage.shared().getRoot() {\n            let alert = UIAlertController(title: \"Storage not found\", message: \"Please enable iCloud Drive for this app and try again!\", preferredStyle: .alert)\n            alert.addAction(UIAlertAction(title: \"OK\", style: .destructive, handler: { action in\n                exit(0)\n            }))\n            self.present(alert, animated: true, completion: nil)\n        }\n\n        // Clean preview after previous loading\n        UIApplication.getEVC().getPreviewView()?.clean()\n\n        // If return from editor\n        UIApplication.getEVC().userActivity?.invalidate()\n\n        loadPreSafeArea()\n\n        if let sidebarItem = UIApplication.getVC().lastSidebarItem {\n            configureNavMenu(for: sidebarItem)\n        }\n\n        if searchFocus {\n            disableSearchFocus()\n\n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {\n                if let text = self.searchString {\n                    self.navigationItem.searchController?.searchBar.text = text\n                }\n                self.navigationItem.searchController?.searchBar.becomeFirstResponder()\n            })\n        } else if !isLoadedSidebar {\n            notesTable.showLoader()\n        }\n\n        super.viewDidAppear(animated)\n\n        configureSearchController()\n    }\n\n    override func viewDidLoad() {\n        startCloudDriveSyncEngine()\n\n        configureUI()\n        configureNotifications()\n        configureGestures()\n\n        gitQueue.qualityOfService = .userInteractive\n        gitQueue.maxConcurrentOperationCount = 1\n        gitQueue.isSuspended = true\n\n        gitQueueState.qualityOfService = .background\n        gitQueueState.maxConcurrentOperationCount = 1\n\n        scheduledGitPull()\n\n        disableLockedProject()\n        loadSidebar()\n\n        loadNotches()\n        loadPreSafeArea()\n\n        if !initialLoadingState {\n            configureSearchController()\n\n            initialLoadingState = true\n            \n            loadNews()\n            \n            if let sceneDelegate = UIApplication.getSceneDelegate(),\n               let shortcut = sceneDelegate.launchedShortcutItem {\n                handleShortCutItem(shortcut)\n                sceneDelegate.launchedShortcutItem = nil\n            } else {\n                self.restoreLastController()\n            }\n\n            DispatchQueue.global(qos: .userInteractive).async {\n                self.loadDB()\n            }\n        }\n\n        super.viewDidLoad()\n        \n        configureToolbar()\n\n        isLandscape = UIDevice.current.orientation.isLandscape\n    }\n\n    @objc public func didBecomeActive() {\n        DispatchQueue.global(qos: .background).async {\n            self.checkExternal()\n        }\n        \n        addPullTask()\n    }\n\n    public func scheduledGitPull() {\n        // Scheduling timer to Call the function \"updateCounting\" with the interval of 1 seconds\n\n        gitPullTimer?.invalidate()\n        gitPullTimer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(self.addPullTask), userInfo: nil, repeats: true)\n    }\n        \n    public func startCloudDriveSyncEngine(completion: (() -> ())? = nil) {\n        guard UserDefaultsManagement.iCloudDrive else { return }\n\n        cloudDriveManager = CloudDriveManager(delegate: self, storage: self.storage)\n        cloudDriveManager?.metadataQuery.disableUpdates()\n\n        if let cdm = self.cloudDriveManager {\n            self.queryDidFinishGatheringObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: cdm.metadataQuery, queue: self.metadataQueue) { notification in\n\n                cdm.queryDidFinishGathering(notification: (notification as NSNotification))\n\n                completion?()\n\n                NotificationCenter.default.removeObserver(self.queryDidFinishGatheringObserver as Any, name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: nil)\n\n                NotificationCenter.default.addObserver(forName: NSNotification.Name.NSMetadataQueryDidUpdate, object: cdm.metadataQuery, queue: self.metadataQueue) { notification in\n\n                    UIApplication.shared.runInBackground({\n                        cdm.handleMetadataQueryUpdates(notification: notification as NSNotification)\n                    })\n                }\n            }\n\n            self.cloudDriveManager?.metadataQuery.start()\n        }\n    }\n\n    public func stopCloudDriveSyncEngine() {\n        self.cloudDriveManager?.metadataQuery.stop()\n    }\n\n    public func configureUI() {\n        //UINavigationBar.appearance().isTranslucent = true\n\n        self.metadataQueue.qualityOfService = .userInteractive\n        self.indicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.large)\n\n        navigationItem.leftBarButtonItems = [\n            UIBarButtonItem(systemImageName: \"sidebar.left\", target: self, selector: #selector(openSidebar)),\n            UIBarButtonItem(systemImageName: \"gear\", target: self, selector: #selector(openSettings))\n        ]\n\n        setNavTitle(folder: NSLocalizedString(\"Inbox\", comment: \"\"))\n        \n        sidebarTableView.backgroundColor = UIColor.sidebar\n        sidebarTableView.dropDelegate = sidebarTableView\n        if #available(iOS 15.0, *) {\n            sidebarTableView.sectionHeaderTopPadding = 0\n        }\n\n        notesTable.viewDelegate = self\n        notesTable.dragInteractionEnabled = true\n        notesTable.dragDelegate = notesTable\n        notesTable.keyboardDismissMode = .interactive\n        notesTable.contentInsetAdjustmentBehavior = .never\n        notesTable.alwaysBounceVertical = true\n        notesTable.dataSource = notesTable\n        notesTable.delegate = notesTable\n        notesTable.layer.zPosition = 100\n        notesTable.rowHeight = UITableView.automaticDimension\n        notesTable.estimatedRowHeight = 160\n        notesTable.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: CGFloat.leastNormalMagnitude))\n    }\n\n    public var lastSidebarItem: SidebarItem? = nil\n\n    public func configureNavMenu(for sidebarItem: SidebarItem) {\n        lastSidebarItem = sidebarItem\n\n        if let menu = makeSidebarSettingsMenu(for: sidebarItem) {\n            navigationItem.rightBarButtonItem = UIBarButtonItem(systemImageName: \"ellipsis.circle\", menu: menu)\n        }\n    }\n\n    public func setNavTitle(folder: String? = nil, qty: String? = nil) {\n        if let folder = folder {\n            currentFolder = folder\n        }\n\n        if let qty = qty {\n            folderCapacity = qty\n        }\n\n        let folder = currentFolder ?? \"\"\n        var qty = folderCapacity ?? \"∞\"\n\n        if let item = sidebarTableView.getSidebarItem()?.project, item.isCleanGit {\n            qty += \" | git ✓\"\n        }\n\n        navigationItem.title = folder\n        \n        if #available(iOS 26.0, *) {\n            navigationItem.subtitle = qty\n        }\n    }\n\n    public func configureNotifications() {\n        NotificationCenter.default.addObserver(self,\n            selector: #selector(ubiquitousKeyValueStoreDidChange(_:)),\n            name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,\n            object: NSUbiquitousKeyValueStore.default)\n\n        if NSUbiquitousKeyValueStore.default.synchronize() == false {\n            fatalError(\"This app was not built with the proper entitlement requests.\")\n        }\n        \n        NSUbiquitousKeyValueStore.default.synchronize()\n\n        NotificationCenter.default.addObserver(self, selector: #selector(preferredContentSizeChanged), name: UIContentSizeCategory.didChangeNotification, object: nil)\n\n        NotificationCenter.default.addObserver(self, selector: #selector(rotated), name: UIDevice.orientationDidChangeNotification, object: nil)\n\n        NotificationCenter.default.addObserver(self, selector:#selector(willExitForeground), name: UIApplication.willEnterForegroundNotification, object: nil)\n\n        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)\n\n        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)\n        \n        NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)\n    }\n\n    public func configureGestures() {\n        let swipe = UIPanGestureRecognizer(target: self, action: #selector(handleSidebarSwipe))\n        swipe.minimumNumberOfTouches = 1\n        swipe.delegate = self\n        view.addGestureRecognizer(swipe)\n\n        let longTapOnSidebar = UILongPressGestureRecognizer(target: self, action: #selector(sidebarLongPress))\n        longTapOnSidebar.minimumPressDuration = 0.5\n        view.addGestureRecognizer(longTapOnSidebar)\n    }\n\n    public func configureSearchController() {\n        let text = navigationItem.searchController?.searchBar.text\n\n        let searchController = UISearchController(searchResultsController: nil)\n        searchController.hidesNavigationBarDuringPresentation = false\n        searchController.searchBar.delegate = self\n        searchController.searchBar.searchBarStyle = .minimal\n        searchController.searchBar.placeholder = NSLocalizedString(\"Search or create\", comment: \"\")\n        searchController.searchBar.returnKeyType = .done\n\n        if #available(iOS 26.0, *) {\n            searchController.searchBar.showsCancelButton = true\n        } else {\n            searchController.searchBar.showsCancelButton = false\n        }\n\n        searchController.searchBar.autocapitalizationType = .none\n        searchController.searchBar.keyboardAppearance = traitCollection.userInterfaceStyle == .dark ? .dark : .default\n\n        if let text = text {\n            searchController.searchBar.text = text\n        }\n\n        navigationItem.searchController = searchController\n        navigationController?.setToolbarHidden(false, animated: true)\n    }\n\n    public func configureToolbar() {\n        var items = [UIBarButtonItem]()\n\n        if #available(iOS 26.0, *) {\n            items.append(navigationItem.searchBarPlacementBarButtonItem)\n        }\n\n        items.append(.flexibleSpace())\n\n        items.append(\n            Buttons.getNewNote(\n                target: self,\n                selector: #selector(newButtonAction)\n            )\n        )\n        \n        if needsRightPadding() {\n            let rightPadding = UIBarButtonItem(\n                barButtonSystemItem: .fixedSpace,\n                target: nil,\n                action: nil\n            )\n            rightPadding.width = 30\n            items.append(rightPadding)\n        }\n\n        toolbarItems = items\n    }\n\n    private func needsRightPadding() -> Bool {\n        if #available(iOS 26.0, *) { return false }\n        return true\n    }\n\n\n    public func enableSearchFocus(string: String? = nil) {\n        searchFocus = true\n        searchString = string\n    }\n\n    public func disableSearchFocus() {\n        searchFocus = false\n    }\n    \n    public func handleShortCutItem(_ shortcutItem: UIApplicationShortcutItem) {\n        guard ShortcutIdentifier(fullType: shortcutItem.type) != nil else { return }\n        guard let shortCutType = shortcutItem.type as String? else { return }\n\n        switch shortCutType {\n        case ShortcutIdentifier.makeNew.type:\n            self.createNote()\n            break\n        case ShortcutIdentifier.clipboard.type:\n            self.createNote(pasteboard: true)\n            break\n        case ShortcutIdentifier.search.type:\n            self.loadViewIfNeeded()\n            self.enableSearchFocus()\n            self.popViewController()\n            self.loadSearchController()\n            break\n        default:\n            break\n        }\n    }\n\n    @IBAction public func openSidebar() {\n        if UserDefaultsManagement.sidebarIsOpened {\n            hideSidebar()\n        } else {\n            showSidebar()\n        }\n    }\n\n    @IBAction public func sidebarLongPress(gesture: UILongPressGestureRecognizer) {\n        guard UserDefaultsManagement.sidebarIsOpened else { return }\n\n        let p = gesture.location(in: self.sidebarTableView)\n\n        guard p.x < maxSidebarWidth, let indexPath = self.sidebarTableView.indexPathForRow(at: p) else { return }\n\n        if gesture.state != .ended {\n            sidebarTableView.tableView(sidebarTableView, didSelectRowAt: indexPath)\n\n            openSidebarSettings()\n        }\n\n        gesture.state = .ended\n    }\n\n    public func loadSidebar() {\n        sidebarTableView.dataSource = self.sidebarTableView\n        sidebarTableView.delegate = self.sidebarTableView\n        sidebarTableView.viewController = self\n        maxSidebarWidth = self.calculateLabelMaxWidth()\n\n        lockedProject.layer.zPosition = 1001\n        lockedProject.isUserInteractionEnabled = true\n        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(unlock))\n        lockedProject.addGestureRecognizer(tapRecognizer)\n\n        initSidebar()\n\n        if UserDefaultsManagement.sidebarIsOpened {\n            resizeSidebar()\n        }\n    }\n\n    public func loadDB() {\n        let storage = self.storage\n        \n        let dirsLoading = Date()\n        storage.loadNonSystemProject()\n        storage.loadProjectRelations()\n        \n        print(\"1. Loaded non system projects and relations in \\(dirsLoading.timeIntervalSinceNow * -1) seconds\")\n        \n        let notesLoadingPoint = Date()\n        let projects = storage.getProjects()\n        \n        for project in projects {\n            // print(\"Reading project: \\(project.label) (\\(project.url))\")\n            _ = project.loadNotes()\n        }\n        \n        print(\"2. Notes loading finished in \\(notesLoadingPoint.timeIntervalSinceNow * -1) seconds\")\n\n        OperationQueue.main.addOperation {\n            \n            self.importSavedInSharedExtension()\n            self.sidebarTableView.reloadSidebar()\n            \n            DispatchQueue.global(qos: .userInitiated).async {\n                let diffLoading = Date()\n                for project in storage.getProjects() {\n                    let changes = project.checkNotesCacheDiff()\n                    self.notesTable.doVisualChanges(results: changes)\n                }\n                \n                print(\"3. Notes diff loading finished in \\(diffLoading.timeIntervalSinceNow * -1) seconds\")\n                \n                // find://\n                if let restore = self.restoreFindID {\n                    self.restoreFindID = nil\n                    if let note = Storage.shared().getBy(title: restore) {\n                        OperationQueue.main.addOperation {\n                            self.notesTable.hideLoader()\n                            UIApplication.getEVC().load(note: note)\n                        }\n                    }\n                }\n                \n                // Load notes content\n                let notesFullLoading = Date()\n                self.storage.loadNotesContent()\n                print(\"4. Full notes loading in \\(notesFullLoading.timeIntervalSinceNow * -1) seconds\")\n                \n                let spotlightPoint = Date()\n                self.reIndexSpotlight()\n                print(\"5. Spotlight indexation finished in \\(spotlightPoint.timeIntervalSinceNow * -1) seconds\")\n                \n                // enable iCloud Drive updates after projects structure formalized\n                self.cloudDriveManager?.metadataQuery.enableUpdates()\n                self.isLoadedDB = true\n\n                self.gitQueue.isSuspended = false\n            }\n        }\n    }\n\n    private func reIndexSpotlight() {\n        CSSearchableIndex.default().deleteAllSearchableItems { (error) in\n            if let error = error {\n                print(\"Spotlight \\(error)\")\n            }\n        }\n\n        var spotlightItems = [CSSearchableItem]()\n        for note in storage.noteList {\n            if note.project.isTrash || !note.project.settings.showInCommon {\n                continue\n            }\n\n            let attributed = CSSearchableItemAttributeSet(itemContentType: \"Text\")\n            attributed.title = note.title\n            attributed.contentDescription = note.content.string\n            attributed.lastUsedDate = note.modifiedLocalAt\n\n            let item = CSSearchableItem(uniqueIdentifier: note.url.path, domainIdentifier: \"Notes\", attributeSet: attributed)\n            spotlightItems.append(item)\n        }\n\n        CSSearchableIndex.default().indexSearchableItems(spotlightItems) { (error) in\n            if let error = error {\n                print(\"Spotlight \\(error)\")\n            }\n        }\n    }\n\n    public func updateSpotlightIndex(notes: [Note]) {\n        var items = [CSSearchableItem]()\n        for note in notes {\n            let attributed = CSSearchableItemAttributeSet(itemContentType: \"Text\")\n            attributed.title = note.title\n            attributed.contentDescription = note.content.string\n            attributed.lastUsedDate = note.modifiedLocalAt\n\n            let item = CSSearchableItem(uniqueIdentifier: note.url.path, domainIdentifier: \"Notes\", attributeSet: attributed)\n            items.append(item)\n        }\n\n        CSSearchableIndex.default().indexSearchableItems(items, completionHandler: nil)\n    }\n\n    public func removeSpotlightIndex(notes: [Note]) {\n        var idents = [String]()\n        for note in notes {\n            idents.append(note.url.path)\n        }\n\n        CSSearchableIndex.default().deleteSearchableItems(withDomainIdentifiers: idents, completionHandler: nil)\n    }\n\n    private func loadNews() {\n        guard storage.isReadedNewsOutdated(),\n              let newsURL = storage.getNews(),\n              let defaultProject = storage.getDefault() else { return }\n\n        let isLandscape = UIDevice.current.orientation.isLandscape\n        newsPopup?.removeFromSuperview()\n        newsOverlay?.removeFromSuperview()\n\n        let screeenWidth = UIScreen.main.bounds.width\n        let screeenHeight = UIScreen.main.bounds.height\n\n        let overlay = UIView(frame: CGRect(x: 0, y: 0, width: screeenWidth, height: screeenHeight))\n        overlay.layer.zPosition = 104\n        overlay.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.5)\n        UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.addSubview(overlay)\n        self.newsOverlay = overlay\n\n        var width = UIScreen.main.bounds.width - 20\n        if isLandscape {\n            width = UIScreen.main.bounds.width * 0.75\n        }\n\n        let height = screeenHeight * 0.75\n        let note = Note(url: newsURL, with: defaultProject)\n        note.load()\n\n        let frame = CGRect(\n            x: (screeenWidth - width) / 2,\n            y: (screeenHeight - height) / 2,\n            width: width,\n            height: height\n        )\n\n        let news = MPreviewView(frame: frame, note: note, closure: {})\n        news.layer.zPosition = 105\n        news.backgroundColor = UIColor.white\n        news.layer.cornerRadius = 5\n        news.layer.masksToBounds = true\n        news.layer.borderWidth = 1\n        news.layer.borderColor = UIColor.gray.cgColor\n\n        if #available(iOS 15.0, *) {\n            var config = UIButton.Configuration.plain()\n            config.image = UIImage(systemName: \"xmark.circle.fill\")\n            config.preferredSymbolConfigurationForImage = .init(pointSize: 25)\n            config.baseForegroundColor = UIColor.mainTheme\n\n            let closeButton = UIButton(frame: CGRect(x: width - 5 - 60, y: 5, width: 60, height: 60))\n            closeButton.configuration = config\n\n            closeButton.addTarget(self, action: #selector(closeNews), for: .touchDown)\n            news.addSubview(closeButton)\n        }\n\n        UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.addSubview(news)\n\n        self.newsPopup = news\n\n    }\n\n    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {\n        if let recognizer = gestureRecognizer as? UIPanGestureRecognizer {\n            if recognizer.translation(in: self.view).x > 0 && !UserDefaultsManagement.sidebarIsOpened\n                || recognizer.translation(in: self.view).x < 0 &&\n                UserDefaultsManagement.sidebarIsOpened {\n                return true\n            }\n        }\n        return false\n    }\n\n    public func getLeftInset() -> CGFloat {\n        return view.safeAreaInsets.left\n    }\n    \n    public func getRightInset() -> CGFloat {\n        return view.safeAreaInsets.right\n    }\n\n    public func loadNotches() {\n        rightPreSafeArea.backgroundColor = .whiteBlack\n    }\n\n    public func loadPreSafeArea() {\n        if UserDefaultsManagement.sidebarIsOpened {\n            // blue/black pre safe area\n            leftPreSafeArea.backgroundColor = UIColor.sidebar\n            rightPreSafeArea.backgroundColor = .whiteBlack\n        } else {\n            leftPreSafeArea.backgroundColor = .whiteBlack\n            rightPreSafeArea.backgroundColor = .whiteBlack\n        }\n    }\n\n    @objc public func openSettings() {\n        navigationController?.interactivePopGestureRecognizer?.delegate = nil\n\n        navigationController?.pushViewController(SettingsViewController(), animated: true)\n    }\n\n    @objc func ubiquitousKeyValueStoreDidChange(_ notification: NSNotification) {\n        if let keys = notification.userInfo?[NSUbiquitousKeyValueStoreChangedKeysKey] as? [String] {\n            for key in keys {\n                if key == \"co.fluder.fsnotes.pins.shared\" {\n                    let result = storage.restoreCloudPins()\n\n                    DispatchQueue.main.async {\n                        if let added = result.added {\n                            self.notesTable.addPins(notes: added)\n                        }\n\n                        if let removed = result.removed {\n                            self.notesTable.removePins(notes: removed)\n                        }\n                    }\n                }\n                \n                if key.startsWith(string: \"es.fsnot.project-settings\") {\n                    let settingsKey = key.replacingOccurrences(of: \"es.fsnot.project-settings\", with: \"\")\n                    if let project = storage.getProjectBy(settingsKey: settingsKey) {\n                        project.reloadSettings()\n\n                        DispatchQueue.main.async {\n                            if let result = project.loadWebAPI() {\n                                self.notesTable.reloadRows(notes: result.0 + result.1)\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @objc func toggleSearch(refreshControl: UIRefreshControl) {\n        if storage.hasOrigins() {\n            addPullTask(force: true)\n        } else {\n            toggleSearchView()\n        }\n        \n        refreshControl.endRefreshing()\n    }\n    \n    @objc func addPullTask(force: Bool = false) {\n        guard storage.hasOrigins() else { return }\n\n        guard UIApplication.getVC().gitQueue.operationCount == 0 else {\n            print(\"Pull skipped\")\n            return\n        }\n\n        let viewController = UIApplication.getVC()\n\n        viewController.gitQueue.addOperation({\n            Storage.shared().pullAll(force: force)\n\n            if !UserDefaultsManagement.iCloudDrive {\n                self.checkNew()\n            }\n\n            //            if viewController.gitQueueState.operationCount == 0 {\n            //                viewController.gitQueueState.addOperation {\n            //                    Storage.shared().checkGitState()\n            //                    DispatchQueue.main.async {\n            //                        self.updateNotesCounter()\n            //                    }\n            //                }\n            //            }\n        })\n    }\n\n    public func checkNew() {\n        if let projects = Storage.shared().getGitProjects() {\n            for project in projects {\n                if let childProjects = project.getAllChild() {\n                    for childProject in childProjects {\n                        let changes = childProject.checkNotesCacheDiff(isGit: true)\n                        self.notesTable.doVisualChanges(results: changes)\n                    }\n                }\n\n                let changes = project.checkNotesCacheDiff(isGit: true)\n                self.notesTable.doVisualChanges(results: changes)\n            }\n        }\n    }\n    \n    public func checkExternal() {\n        let projects = Storage.shared().projects.filter({ $0.isBookmark })\n        \n        guard projects.count > 0 else { return }\n        \n        var remove = [Note]()\n        var insert = [Note]()\n        var reload = [Note]()\n        \n        for project in projects {\n            if let childProjects = project.getAllChild() {\n                for childProject in childProjects {\n                    let changes = childProject.checkFSAndMemoryDiff()\n                    remove += changes.0\n                    insert += changes.1\n                    reload += changes.2\n                }\n            }\n            \n            let changes = project.checkFSAndMemoryDiff()\n            remove += changes.0\n            insert += changes.1\n            reload += changes.2\n        }\n        \n        for note in insert {\n            note.loadPreviewInfo()\n        }\n        \n        for note in reload {\n            note.invalidateCache()\n            note.loadPreviewInfo()\n        }\n        \n        self.notesTable.doVisualChanges(results: (remove, insert, reload))\n    }\n\n    public func loadSearchController(query: String? = nil) {\n        if let query = query {\n            navigationItem.searchController?.searchBar.text = query\n        }\n\n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {\n            self.navigationItem.searchController?.searchBar.becomeFirstResponder()\n        }\n    }\n\n    private func toggleSearchView() {\n        loadSearchController()\n        sidebarTableView.deselectAll()\n        reloadNotesTable()\n    }\n\n    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {\n        buildSearchQuery()\n        reloadNotesTable()\n    }\n\n    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {\n        if #available(iOS 26.0, *) {\n            if let sc = navigationItem.searchController {\n                sc.isActive = false\n                sc.searchBar.resignFirstResponder()\n            }\n        } else {\n            configureSearchController()\n        }\n    }\n\n    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {\n        notesTable.setContentOffset(CGPoint(x: 0, y: -44), animated: true)\n\n        disableLockedProject()\n    }\n\n    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {\n        let content = searchBar.text\n        searchBar.text = \"\"\n\n        buildSearchQuery()\n        reloadNotesTable()\n\n        self.createNote(content: content)\n    }\n\n    public func configureIndicator(indicator: UIActivityIndicatorView, view: UIView) {\n        indicator.frame = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0)\n        indicator.center = view.center\n        indicator.layer.cornerRadius = 5\n        indicator.layer.borderWidth = 1\n        indicator.layer.borderColor = UIColor.lightGray.cgColor\n        view.addSubview(indicator)\n        indicator.bringSubviewToFront(view)\n    }\n\n    public func reloadNotesTable(completion: (() -> ())? = nil) {\n        isActiveTableUpdating = true\n        searchQueue.cancelAllOperations()\n        setNavTitle(qty: \"∞\")\n        searchQueue.cancelAllOperations()\n\n        let operation = BlockOperation()\n        operation.addExecutionBlock { [weak self] in\n            guard let self = self else {\n                completion?()\n                return\n            }\n\n            self.accessTime = DispatchTime.now()\n\n            let source = self.storage.noteList\n            var notes = [Note]()\n\n            for note in source {\n                if operation.isCancelled {\n                    break\n                }\n\n                if Storage.shared().searchQuery.isFit(note: note) {\n                    notes.append(note)\n                }\n            }\n\n            if let project = Storage.shared().searchQuery.projects.first, project.isLocked() {\n                notes.removeAll()\n            }\n\n            var modifiedNotesList = [Note]()\n\n            if !notes.isEmpty {\n                modifiedNotesList = self.storage.sortNotes(noteList: notes)\n            }\n\n            if operation.isCancelled {\n                completion?()\n                return\n            }\n\n            DispatchQueue.main.async {\n                self.setNavTitle(qty: String(notes.count))\n\n                if DispatchTime.now() < self.accessTime {\n                    completion?()\n                    return\n                }\n\n                self.notesTable.notes = modifiedNotesList\n                self.notesTable.reloadData()\n\n                if let note = self.delayedInsert {\n                    self.notesTable.insertRows(notes: [note])\n                    self.delayedInsert = nil\n                }\n\n                self.isActiveTableUpdating = false\n\n                completion?()\n            }\n        }\n\n        self.searchQueue.addOperation(operation)\n    }\n\n    public func updateNotesCounter() {\n        DispatchQueue.main.async {\n            self.setNavTitle(qty: String(self.notesTable.notes.count))\n        }\n    }\n\n    public func isNoteInsertionAllowed() -> Bool {\n        if let searchBar = getSearchBar() {\n            return !searchBar.isFirstResponder\n        }\n\n        return true\n    }\n\n    public func getSearchBar() -> UISearchBar? {\n        return navigationItem.searchController?.searchBar \n    }\n\n    @objc func newButtonAction() {\n        if let project = sidebarTableView.getSidebarProjects()?.first, project.isEncrypted, project.password == nil {\n            unlockProject(selectedProject: project, createNote: true)\n            return\n        }\n\n        createNote(content: nil)\n    }\n\n    @objc public func closeNews() {\n        UIImpactFeedbackGenerator(style: .medium).impactOccurred()\n\n        newsPopup?.removeFromSuperview()\n        newsOverlay?.removeFromSuperview()\n\n        // mark as read\n        UserDefaultsManagement.lastNews = storage.getNewsDate()\n    }\n\n    public func createNote(content: String? = nil, pasteboard: Bool = false) {\n        var currentProject: Project\n        if let project = storage.getProjects().first {\n            currentProject = project\n        } else {\n            return\n        }\n\n        if let item = self.sidebarTableView.getSidebarItem(),\n            let project = item.project,\n            !project.isTrash,\n            !project.isVirtual {\n            currentProject = project\n        }\n\n        let note = Note(name: \"\", project: currentProject)\n        if let content = content {\n            note.content = NSMutableAttributedString(string: content)\n        }\n\n        var selectedRange: NSRange?\n        if pasteboard {\n            if  let image = UIPasteboard.general.image,\n                let data = image.jpegData(compressionQuality: 1),\n                let imagePath = ImagesProcessor.writeFile(data: data, note: note)\n            {\n                let string = \"![](\\(imagePath))\\n\\n\"\n                note.content = NSMutableAttributedString(string: string)\n                selectedRange = NSRange(location: string.count, length: 0)\n            } else if let content = UIPasteboard.general.string {\n                note.content = NSMutableAttributedString(string: content)\n                selectedRange = NSRange(location: content.count, length: 0)\n            }\n        }\n        \n        if note.save() {\n            Storage.shared().add(note)\n        }\n\n        let evc = UIApplication.getEVC()\n        evc.note = note\n        evc.fill(note: note, selectedRange: selectedRange)\n\n        openEditorViewController()\n\n        if self.isActiveTableUpdating {\n            self.delayedInsert = note\n        } else {\n            notesTable.insertRows(notes: [note])\n            notesTable.scrollTo(note: note)\n        }\n\n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {\n            let evc = UIApplication.getEVC()\n            if note.previewState {\n                evc.togglePreview()\n            }\n            evc.editArea.becomeFirstResponder()\n\n            if let password = note.project.password {\n                if note.encrypt(password: password) {\n                    if note.unLock(password: password) {\n                        note.password = password\n                    }\n                }\n            }\n        }\n    }\n\n    public func openEditorViewController() {\n        navigationController?.interactivePopGestureRecognizer?.delegate = nil\n\n        if let controllers = navigationController?.viewControllers {\n            for controller in controllers {\n                if let _ = controller as? EditorViewController {\n                    return\n                }\n            }\n        }\n\n        let evc = UIApplication.getEVC()\n        editorViewController = evc\n        \n        navigationController?.pushViewController(evc, animated: true)\n    }\n\n    public func popViewController() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    public func savePasteboard(note: Note) {\n        let pboard = UIPasteboard.general\n        let pasteboardString: String? = pboard.string\n\n        if let content = pasteboardString {\n            note.content = NSMutableAttributedString(string: content)\n        }\n\n        if let image = pboard.image {\n            if let data = image.jpegData(compressionQuality: 1) {\n                guard let imagePath = ImagesProcessor.writeFile(data: data, note: note) else { return }\n\n                note.content = NSMutableAttributedString(string: \"![](\\(imagePath))\\n\\n\")\n            }\n        }\n\n        if note.save() {\n            Storage.shared().add(note)\n        }\n    }\n\n    public func importSavedInSharedExtension() {\n        var notes = [Note]()\n        \n        for url in UserDefaultsManagement.importURLs {\n            if let note = storage.importNote(url: url) {\n                notes.append(note)\n            }\n        }\n        \n        notesTable.insertRows(notes: notes)\n\n        UserDefaultsManagement.importURLs = []\n    }\n\n    @objc func preferredContentSizeChanged() {\n        view.setNeedsLayout()\n        view.layoutIfNeeded()\n    }\n\n    @objc func rotated() {\n        guard isLandscape != nil else {\n            isLandscape = UIDevice.current.orientation.isLandscape\n            return\n        }\n\n        let isLand = UIDevice.current.orientation.isLandscape\n        if let landscape = self.isLandscape, landscape != isLand, !UIDevice.current.orientation.isFlat {\n            isLandscape = isLand\n\n            DispatchQueue.main.async {\n                self.loadNews()\n                self.resizeSidebar(withAnimation: true)\n            }\n        }\n    }\n\n    @objc func willExitForeground() {\n        importSavedInSharedExtension()\n    }\n\n    private var swipeStartLeadingConstant: CGFloat = 0\n\n    @objc func handleSidebarSwipe(_ swipe: UIPanGestureRecognizer) {\n        let notchWidth = getLeftInset()\n        let translation = swipe.translation(in: notesTable)\n\n        if swipe.state == .began {\n            maxSidebarWidth = calculateLabelMaxWidth()\n            sidebarTableView.isUserInteractionEnabled = true\n\n            if !UserDefaultsManagement.sidebarIsOpened {\n                self.sidebarTableLeadingConstraint.constant = -self.maxSidebarWidth\n                self.sidebarTableWidth.constant = self.maxSidebarWidth\n                self.notesTableLeadingConstraint.constant = 0\n                leftPreSafeArea.backgroundColor = UIColor.sidebar\n                notesTable.dragInteractionEnabled = false\n                sidebarTableView.isUserInteractionEnabled = false\n                swipeStartLeadingConstant = 0\n            } else {\n                let correctLeading = self.maxSidebarWidth + notchWidth\n                self.sidebarTableLeadingConstraint.constant = 0\n                self.sidebarTableWidth.constant = self.maxSidebarWidth\n                self.notesTableLeadingConstraint.constant = correctLeading\n                notesTable.dragInteractionEnabled = true\n                sidebarTableView.isUserInteractionEnabled = true\n                swipeStartLeadingConstant = correctLeading\n            }\n\n            return\n        }\n\n        if swipe.state == .changed {\n            let newLeading = swipeStartLeadingConstant + translation.x\n            let sidebarRange = maxSidebarWidth + notchWidth\n\n            guard newLeading >= 0 && newLeading <= sidebarRange else { return }\n\n            UIView.animate(withDuration: 0.075, delay: 0.0, options: .beginFromCurrentState, animations: {\n                self.notesTableLeadingConstraint.constant = newLeading\n                let sidebarOffset = max(0, newLeading - notchWidth)\n                let sidebarProgress = min(sidebarOffset, self.maxSidebarWidth) / self.maxSidebarWidth\n                self.sidebarTableLeadingConstraint.constant = -self.maxSidebarWidth * (1 - sidebarProgress)\n                self.view.layoutIfNeeded()\n            })\n            return\n        }\n\n        if swipe.state == .ended {\n            if translation.x > 0 {\n                showSidebar()\n            }\n            if translation.x < 0 {\n                hideSidebar()\n            }\n        }\n    }\n\n    private func initSidebar() {\n        if UserDefaultsManagement.sidebarIsOpened {\n            self.sidebarTableLeadingConstraint.constant = 0\n            self.notesTableLeadingConstraint.constant = self.maxSidebarWidth + getLeftInset()\n\n            self.notesTable.dragInteractionEnabled = true\n            self.sidebarTableView.isUserInteractionEnabled = true\n        } else {\n            self.notesTableLeadingConstraint.constant = 0\n            self.sidebarTableLeadingConstraint.constant = -self.maxSidebarWidth\n            self.sidebarTableWidth.constant = 0\n\n            // blue/blck pre safe area\n            leftPreSafeArea.backgroundColor = UIColor.sidebar\n\n            self.notesTable.dragInteractionEnabled = false\n            self.sidebarTableView.isUserInteractionEnabled = false\n        }\n    }\n\n    private func showSidebar() {\n        let leftInset = getLeftInset()\n        UIView.animate(withDuration: 0.2, delay: 0.0, options: .init(), animations: {\n            self.notesTableLeadingConstraint.constant = self.maxSidebarWidth + leftInset\n            self.sidebarTableLeadingConstraint.constant = 0\n            self.sidebarTableWidth.constant = self.maxSidebarWidth\n            self.view.layoutIfNeeded()\n        }) { _ in\n            UserDefaultsManagement.sidebarIsOpened = true\n\n            self.notesTable.dragInteractionEnabled = true\n            self.sidebarTableView.isUserInteractionEnabled = true\n\n            self.leftPreSafeArea.backgroundColor = UIColor.sidebar\n        }\n    }\n\n    private func hideSidebar() {\n        UIView.animate(withDuration: 0.2, delay: 0.0, options: .init(), animations: {\n            self.notesTableLeadingConstraint.constant = 0\n            self.sidebarTableLeadingConstraint.constant = -self.maxSidebarWidth\n            self.view.layoutIfNeeded()\n        }) { _ in\n            UserDefaultsManagement.sidebarIsOpened = false\n\n            self.notesTable.dragInteractionEnabled = false\n            self.sidebarTableView.isUserInteractionEnabled = false\n\n            // white pre safe area\n            self.leftPreSafeArea.backgroundColor = .whiteBlack\n        }\n    }\n\n    @objc func keyboardWillShow(notification: NSNotification) {\n        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {\n            //notesTableBottomContraint.constant = keyboardSize.height\n            sidebarTableBottomConstraint.constant = keyboardSize.height\n        }\n    }\n\n    @objc func keyboardWillHide(notification: NSNotification) {\n        //notesTableBottomContraint.constant = 0\n        sidebarTableBottomConstraint.constant = 0\n    }\n\n    public func refreshTextStorage(note: Note) {\n        DispatchQueue.main.async {\n            UIApplication.getEVC().fill(note: note)\n        }\n    }\n\n    private func calculateLabelMaxWidth() -> CGFloat {\n        var width = CGFloat(0)\n        var font = UIFont(name: \"HelveticaNeue-BoldItalic\", size: 15)\n        let fontMetrics = UIFontMetrics(forTextStyle: .title3)\n        font = fontMetrics.scaledFont(for: font!)\n\n        let settings = NSLocalizedString(\"Settings\", comment: \"Sidebar settings\")\n        let untagged = NSLocalizedString(\"Untagged\", comment: \"Sidebar settings\")\n        let inbox = NSLocalizedString(\"Inbox\", comment: \"Inbox in sidebar\")\n        let notes = NSLocalizedString(\"Notes\", comment: \"Notes in sidebar\")\n        let todo = NSLocalizedString(\"Todo\", comment: \"Todo in sidebar\")\n        let trash = NSLocalizedString(\"Trash\", comment: \"Trash in sidebar\")\n\n        var sidebarItems = [String]()\n        var tags = [String]()\n\n        if let project = storage.searchQuery.projects.first {\n            tags = sidebarTableView.getAllTags(projects: [project])\n        }\n\n        sidebarItems = tags + Storage.shared().getProjects().map({ $0.label })\n            + [settings, inbox, notes, todo, trash, untagged]\n\n        for item in sidebarItems {\n            guard let font = font else { continue }\n\n            let labelWidth = (item as NSString).size(withAttributes: [.font: font]).width + 60\n\n            if labelWidth < (view.frame.size.width / 2) {\n                if labelWidth > width {\n                    width = labelWidth\n                }\n            } else {\n                width = view.frame.size.width / 2\n            }\n        }\n\n        return width\n    }\n\n    public func unLock(notes: [Note], completion: @escaping ([Note]?) -> ()) {\n        getMasterPassword() { password in\n            self.unLock(notes: notes, completion: completion, password: password)\n        }\n    }\n\n    public func unLock(notes: [Note], completion: @escaping ([Note]?) -> (), password: String) {\n        for note in notes {\n            var success = [Note]()\n            if note.unLock(password: password) {\n                note.password = password\n                success.append(note)\n            }\n\n            DispatchQueue.main.async {\n                self.notesTable.reloadRowForce(note: note)\n            }\n\n            completion(success)\n        }\n    }\n\n    public func toggleNotesLock(notes: [Note]) {\n        var notes = notes\n\n        notes = lockUnlocked(notes: notes)\n        guard notes.count > 0 else { return }\n\n        getMasterPassword() { password in\n            for note in notes {\n                if note.container == .encryptedTextPack {\n                    if note.unLock(password: password) {\n                        note.password = password\n\n                        DispatchQueue.main.async {\n                            self.notesTable.reloadRowForce(note: note)\n                            UIApplication.getEVC().fill(note: note)\n                            UIApplication.getVC().openEditorViewController()\n                        }\n                    }\n                } else {\n                    if note.encrypt(password: password) {\n                        note.password = nil\n\n                        DispatchQueue.main.async {\n                            self.notesTable.reloadRowForce(note: note)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    private func lockUnlocked(notes: [Note]) -> [Note] {\n        var notes = notes\n        var isFirst = true\n\n        for note in notes {\n            if note.isUnlocked() {\n                if note.lock() && isFirst {\n                    note.password = nil\n\n                    notesTable.reloadRowForce(note: note)\n                }\n                notes.removeAll { $0 === note }\n            }\n            isFirst = false\n        }\n\n        return notes\n    }\n\n    public func getMasterPassword(isUnlock: Bool = false, completion: @escaping (String) -> ()) {\n        let context = LAContext()\n        context.localizedFallbackTitle = NSLocalizedString(\"Enter Master Password\", comment: \"\")\n\n        var passwordExist = false\n        do {\n            let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n            let password = try item.readPassword()\n            passwordExist = password.count > 0\n        } catch {/*_*/}\n        \n        guard passwordExist && context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) else {\n            masterPasswordPrompt(completion: completion)\n            return\n        }\n\n        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: \"To access master password\") { (success, evaluateError) in\n\n            if !success {\n                self.masterPasswordPrompt(completion: completion)\n                return\n            }\n\n            do {\n                let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n                let password = try item.readPassword()\n\n                completion(password)\n                return\n            } catch {\n                print(error)\n            }\n\n            self.masterPasswordPrompt(completion: completion)\n        }\n    }\n\n    private func masterPasswordPrompt(completion: @escaping (String) -> ()) {\n        DispatchQueue.main.async {\n            let title = NSLocalizedString(\"Master password:\", comment: \"\")\n            let alertController = UIAlertController(title: title, message: nil, preferredStyle: .alert)\n\n            alertController.addTextField(configurationHandler: {\n                [] (textField: UITextField) in\n                textField.placeholder = \"mast3r passw0rd\"\n            })\n\n            let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n                guard let password = alertController.textFields?[0].text, password.count > 0 else {\n                    return\n                }\n\n                completion(password)\n            }\n\n            let cancelAction = UIAlertAction(title: \"Cancel\", style: .cancel) { (_) in }\n\n            alertController.addAction(confirmAction)\n            alertController.addAction(cancelAction)\n\n            self.present(alertController, animated: true) {\n                alertController.textFields![0].selectAll(nil)\n            }\n        }\n    }\n\n    public func unlockPasswordPrompt(completion: @escaping (String) -> ()) {\n        DispatchQueue.main.async {\n            let title = NSLocalizedString(\"Password:\", comment: \"\")\n            let alertController = UIAlertController(title: title, message: nil, preferredStyle: .alert)\n\n            alertController.addTextField(configurationHandler: {\n                [] (textField: UITextField) in\n                textField.placeholder = \"note passw0rd\"\n                textField.isSecureTextEntry = true\n            })\n\n            let confirmAction = UIAlertAction(title: \"OK\", style: .default) { (_) in\n                guard let password = alertController.textFields?[0].text, password.count > 0 else {\n                    return\n                }\n\n                completion(password)\n            }\n\n            let cancelAction = UIAlertAction(title: \"Cancel\", style: .cancel) { (_) in }\n\n            alertController.addAction(confirmAction)\n            alertController.addAction(cancelAction)\n\n            self.present(alertController, animated: true) {\n                alertController.textFields![0].selectAll(nil)\n            }\n        }\n    }\n\n    public func resizeSidebar(withAnimation: Bool = false) {\n        let leftInset = getLeftInset()\n        let width = calculateLabelMaxWidth()\n        maxSidebarWidth = width\n\n        guard UserDefaultsManagement.sidebarIsOpened else { return }\n\n        if maxSidebarWidth > view.frame.size.width {\n            maxSidebarWidth = view.frame.size.width / 2\n        }\n\n        if (withAnimation) {\n            UIView.animate(withDuration: 0.3, delay: 0, options: .beginFromCurrentState, animations: {\n                let width = self.maxSidebarWidth\n                self.notesTableLeadingConstraint.constant = width + leftInset\n                self.sidebarTableLeadingConstraint.constant = 0\n                self.sidebarTableWidth.constant = width\n            }) { _ in\n\n            }\n        } else {\n            notesTableLeadingConstraint.constant = maxSidebarWidth + leftInset\n            sidebarTableWidth.constant = maxSidebarWidth\n        }\n    }\n\n    public func restoreLastController() {\n        guard !self.storage.isCrashedLastTime,\n            let noteURL = UserDefaultsManagement.currentNote,\n            FileManager.default.fileExists(atPath: noteURL.path)\n        else { return }\n            \n        let note = Storage.shared().addNote(url: noteURL)\n        \n        guard !note.isEncrypted() else { return }\n        note.loadPreviewState()\n\n        UIApplication.getVC().openEditorViewController()\n        \n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n            UIApplication.getEVC().fill(note: note)\n            UIApplication.getEVC().configureNavMenu()\n            \n            if UserDefaultsManagement.currentEditorState == true,\n               let selectedRange = UserDefaultsManagement.currentRange,\n               !note.previewState,\n               selectedRange.upperBound <= note.content.length\n            {\n                UIApplication.getEVC().editArea.becomeFirstResponder()\n                UIApplication.getEVC().editArea.selectedRange = selectedRange\n                \n                DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {\n                    UIApplication.getEVC().editArea.scrollRangeToVisible(selectedRange)\n                }\n            }\n        }\n\n        UserDefaultsManagement.currentNote = nil\n    }\n    \n    public func reloadDatabase() {\n        Storage.instance = nil\n\n        storage = Storage.shared()\n        sidebarTableView.reloadSidebar()\n\n        initialLoadingState = false\n        viewDidLoad()\n    }\n\n    public func enableLockedProject() {\n        lockedProject.isHidden = false\n        clean()\n    }\n\n    public func disableLockedProject() {\n        lockedProject.isHidden = true\n    }\n\n    public func clean() {\n        notesTable.notes.removeAll()\n        notesTable.reloadData()\n    }\n\n    public func showAlert(message: String) {\n        DispatchQueue.main.async {\n            let title = NSLocalizedString(\"Web sharing error\", comment: \"\")\n            let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)\n            let confirmAction = UIAlertAction(title: \"OK\", style: .default)\n            alertController.addAction(confirmAction)\n            self.present(alertController, animated: true)\n        }\n    }\n\n    public func buildSearchQuery() {\n        let searchQuery = SearchQuery()\n\n        var projects = [Project]()\n        var tags = [String]()\n        var type: SidebarItemType?\n\n        if let sidebarTableView = self.sidebarTableView, let indexPaths = sidebarTableView.indexPathsForSelectedRows {\n\n            for indexPath in indexPaths {\n                let item = sidebarTableView.sidebar.items[indexPath.section][indexPath.row]\n\n                if let project = item.project, !project.isVirtual {\n                    projects.append(project)\n                }\n\n                if item.type == .Tag {\n                    tags.append(item.name)\n                }\n\n                if item.type == .All ||\n                    item.type == .Untagged ||\n                    item.type == .Todo ||\n                    item.type == .Trash ||\n                    item.type == .Inbox {\n\n                    type = item.type\n                }\n            }\n        }\n\n        if projects.count == 0 && type == nil {\n            type = .All\n        }\n\n        let filter = getSearchBar()?.text ?? \"\"\n\n        searchQuery.projects = projects\n        searchQuery.tags = tags\n        searchQuery.setFilter(filter)\n\n        if let type = type {\n            searchQuery.setType(type)\n        }\n\n        self.storage.setSearchQuery(value: searchQuery)\n    }\n}\n\nextension ViewController : UIPopoverPresentationControllerDelegate {\n    func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {\n        return .none\n    }\n}\n\nextension UIApplication {\n    public func runInBackground(_ closure: @escaping () -> Void, expirationHandler: (() -> Void)? = nil) {\n        let taskID: UIBackgroundTaskIdentifier\n        if let expirationHandler = expirationHandler {\n            taskID = self.beginBackgroundTask(expirationHandler: expirationHandler)\n        } else {\n            taskID = self.beginBackgroundTask(expirationHandler: { })\n        }\n\n        DispatchQueue.global(qos: .background).sync {\n            closure()\n        }\n        self.endBackgroundTask(taskID)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS/fr.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16097.2\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"pUA-i0-P2Y\">\n    <device id=\"retina6_5\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16087\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Basic View Controller-->\n        <scene sceneID=\"7hM-9K-GCb\">\n            <objects>\n                <viewController id=\"pUA-i0-P2Y\" customClass=\"BasicViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"2j2-dl-Yzt\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <containerView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ja1-Yx-J9n\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <connections>\n                                    <segue destination=\"Qe5-Pl-yOC\" kind=\"embed\" id=\"Nmv-TL-xfo\"/>\n                                </connections>\n                            </containerView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"bottom\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"bottom\" id=\"0oF-JR-UvE\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"top\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"top\" id=\"PHc-dp-DQt\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"trailing\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"trailing\" id=\"iwt-vB-his\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"leading\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"leading\" id=\"xj4-wq-plp\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"tub-hp-8vu\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Q9c-3W-wHO\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"133\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController storyboardIdentifier=\"listViewController\" id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsMultipleSelection=\"YES\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" contentViewInsetsToSafeArea=\"NO\" id=\"Mge-lh-GR9\" customClass=\"SidebarTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"0.83741801979999997\" green=\"0.83743780850000005\" blue=\"0.83742713930000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"sidebarCell\" rowHeight=\"53\" id=\"O2q-T0-6CW\" customClass=\"SidebarTableCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"O2q-T0-6CW\" id=\"tDd-4m-f4y\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BML-lv-XMi\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"16\" width=\"21\" height=\"21\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"21\" id=\"8Mj-2V-WOH\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"21\" id=\"wTd-8W-0ei\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZDf-m9-quL\">\n                                                    <rect key=\"frame\" x=\"47\" y=\"16\" width=\"42\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"2jK-Iv-hSY\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"leading\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"leading\" constant=\"15\" id=\"3wN-gR-43e\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"leading\" secondItem=\"BML-lv-XMi\" secondAttribute=\"trailing\" constant=\"11\" id=\"WoX-Z4-8rD\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"df2-um-WMI\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"top\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"top\" id=\"eS6-4w-fRe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"icon\" destination=\"BML-lv-XMi\" id=\"OEo-b9-tQT\"/>\n                                            <outlet property=\"label\" destination=\"ZDf-m9-quL\" id=\"NZJ-lZ-DhC\"/>\n                                            <outlet property=\"labelConstraint\" destination=\"WoX-Z4-8rD\" id=\"3y4-5j-nzf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"startLocation\">\n                                        <real key=\"value\" value=\"0.0\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"endLocation\">\n                                        <real key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"horizontalMode\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"diagonalMode\" value=\"NO\"/>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"startColor\">\n                                        <color key=\"value\" red=\"0.26237374695426474\" green=\"0.51481102530647083\" blue=\"0.63467639593908631\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"endColor\">\n                                        <color key=\"value\" red=\"0.30977162963466554\" green=\"0.48825662134271103\" blue=\"0.67302506345177648\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </tableView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"154\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"sUC-hL-bgg\" customClass=\"NotesTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"noteCell\" rowHeight=\"154\" id=\"uv7-Im-hed\" customClass=\"NoteCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"154\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"uv7-Im-hed\" id=\"De0-QG-drV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"154\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"pin_white.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ng0-bb-ENq\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"11\" width=\"23\" height=\"23\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"23\" id=\"KlO-n1-B2e\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"23\" id=\"k71-lI-ai0\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn1-Y0-0eh\">\n                                                    <rect key=\"frame\" x=\"23.000000000000004\" y=\"11\" width=\"33.333333333333343\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Preview\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LAf-Rz-QFy\">\n                                                    <rect key=\"frame\" x=\"23\" y=\"39\" width=\"377\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rsi-Av-qh2\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"0iB-an-r6e\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"3EZ-N8-htb\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t6a-FH-UHM\">\n                                                    <rect key=\"frame\" x=\"103\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"dd7-Po-Gye\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"eUw-LF-zQI\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L4T-lK-1pA\">\n                                                    <rect key=\"frame\" x=\"181\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"Qry-XG-kOl\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"mUL-BK-kWo\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label autoresizesSubviews=\"NO\" opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Date\" textAlignment=\"right\" lineBreakMode=\"clip\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AbV-ot-mEE\">\n                                                    <rect key=\"frame\" x=\"358\" y=\"11\" width=\"36\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" white=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"0OO-Nd-PCc\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"trailing\" id=\"0qP-JS-kYp\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Cn1-Y0-0eh\" secondAttribute=\"trailing\" priority=\"999\" constant=\"5\" id=\"7Uy-aY-372\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"leading\" secondItem=\"t6a-FH-UHM\" secondAttribute=\"trailing\" constant=\"8\" id=\"K3H-Qz-btY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" constant=\"14\" id=\"LJ9-2z-vAD\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leadingMargin\" constant=\"5\" id=\"MB0-DS-pMG\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"trailing\" secondItem=\"De0-QG-drV\" secondAttribute=\"trailingMargin\" id=\"ONj-Ke-bYc\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"thirdImageTop\" id=\"XPp-HF-VEk\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"YY9-pB-9Qe\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"secondImageTop\" id=\"Yvb-AC-CP7\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"top\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"bottom\" constant=\"5\" id=\"d2V-lD-g3R\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" id=\"fM2-85-PwK\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"iho-nX-yyl\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"23\" id=\"lRD-NL-mfR\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"firstImageTop\" id=\"uw7-pW-b3V\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"leading\" secondItem=\"rsi-Av-qh2\" secondAttribute=\"trailing\" constant=\"8\" id=\"zr3-db-Dgc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <inset key=\"separatorInset\" minX=\"15\" minY=\"0.0\" maxX=\"18\" maxY=\"0.0\"/>\n                                        <connections>\n                                            <outlet property=\"date\" destination=\"AbV-ot-mEE\" id=\"bLC-CN-Urn\"/>\n                                            <outlet property=\"imagePreview\" destination=\"rsi-Av-qh2\" id=\"7ax-Ce-vfL\"/>\n                                            <outlet property=\"imagePreviewSecond\" destination=\"t6a-FH-UHM\" id=\"My4-em-TVZ\"/>\n                                            <outlet property=\"imagePreviewThird\" destination=\"L4T-lK-1pA\" id=\"dxa-93-KoO\"/>\n                                            <outlet property=\"pin\" destination=\"Ng0-bb-ENq\" id=\"vgv-uX-Hak\"/>\n                                            <outlet property=\"preview\" destination=\"LAf-Rz-QFy\" id=\"OTM-Tt-F3b\"/>\n                                            <outlet property=\"title\" destination=\"Cn1-Y0-0eh\" id=\"giJ-Tv-pg9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"alp-5Z-1d9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"45\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Inbox ▽\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8VE-HM-shO\">\n                                        <rect key=\"frame\" x=\"175.66666666666666\" y=\"8\" width=\"63\" height=\"21\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"∞\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"m6a-dd-9sW\">\n                                        <rect key=\"frame\" x=\"202\" y=\"29\" width=\"10\" height=\"12\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"10\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UUp-E6-rvb\">\n                                        <rect key=\"frame\" x=\"366\" y=\"3\" width=\"38\" height=\"38\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"Eme-RV-Jot\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"38\" id=\"XB0-Gh-Rhh\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" image=\"more_white.png\"/>\n                                        <connections>\n                                            <action selector=\"bulkEditing:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"OHc-6e-Ap0\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yuS-7s-7qj\">\n                                        <rect key=\"frame\" x=\"11\" y=\"6\" width=\"35\" height=\"35\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"35\" id=\"bhN-xF-K9M\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"35\" id=\"uGB-NL-S3D\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" title=\"   \" image=\"search.png\"/>\n                                        <connections>\n                                            <action selector=\"openSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rzD-5M-jpI\"/>\n                                        </connections>\n                                    </button>\n                                    <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MB3-6y-v2m\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"45\"/>\n                                        <subviews>\n                                            <searchBar contentMode=\"redraw\" searchBarStyle=\"minimal\" placeholder=\"Search and create\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ywj-qM-UNi\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"7\" width=\"330\" height=\"28\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"28\" id=\"CeT-yV-UZz\"/>\n                                                </constraints>\n                                                <textInputTraits key=\"textInputTraits\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                            </searchBar>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1gp-bn-Xq5\">\n                                                <rect key=\"frame\" x=\"345\" y=\"4\" width=\"52\" height=\"32\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"16\"/>\n                                                <state key=\"normal\" title=\"Cancel\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                                <connections>\n                                                    <action selector=\"hideSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"pRF-bi-wcf\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"7\" id=\"1F0-4v-Fkk\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"leading\" secondItem=\"Ywj-qM-UNi\" secondAttribute=\"trailing\" constant=\"15\" id=\"3Ei-jM-H06\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"4\" id=\"So3-K9-1Ay\"/>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"leading\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"leading\" id=\"lfK-l4-lgP\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"1gp-bn-Xq5\" secondAttribute=\"trailing\" constant=\"17\" id=\"zZq-lK-avJ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.80974966287612915\" green=\"0.86932212114334106\" blue=\"0.95254331827163696\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" constant=\"11\" id=\"1VK-zF-gcR\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" id=\"2KN-W3-EX8\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" id=\"6Z3-5M-SSr\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"E4P-h2-Q50\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"centerX\" secondItem=\"m6a-dd-9sW\" secondAttribute=\"centerX\" id=\"Nhd-L1-bXr\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"6\" id=\"SGw-C8-KTf\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"29\" id=\"SP0-A0-34k\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"bottom\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"bottom\" id=\"XCH-gW-usb\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"45\" id=\"f3p-Br-Goh\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"8\" id=\"kdk-x0-9VK\"/>\n                                    <constraint firstItem=\"UUp-E6-rvb\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"3\" id=\"m4s-96-cCk\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"txa-PI-dmX\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"bottom\" id=\"vmc-WX-Kdu\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"trailing\" constant=\"10\" id=\"vy0-6Z-X0J\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zcg-gZ-ayJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1zz-x1-ZSj\" userLabel=\"left Pre Header\">\n                                <rect key=\"frame\" x=\"-100\" y=\"0.0\" width=\"100\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <color key=\"tintColor\" systemColor=\"linkColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wpe-hj-LME\" userLabel=\"right Pre Header\">\n                                <rect key=\"frame\" x=\"414\" y=\"0.0\" width=\"0.0\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5HY-PP-zis\" userLabel=\"left Pre Safe Area\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemIndigoColor\" red=\"0.34509803919999998\" green=\"0.33725490200000002\" blue=\"0.83921568629999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"657-iG-bJh\" userLabel=\"right Pre Safe Area\">\n                                <rect key=\"frame\" x=\"414\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemGreenColor\" red=\"0.20392156859999999\" green=\"0.78039215689999997\" blue=\"0.34901960780000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" name=\"link\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"5HY-PP-zis\" secondAttribute=\"bottom\" id=\"2S1-Nr-4us\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"top\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"646-6p-9Ei\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"657-iG-bJh\" secondAttribute=\"trailing\" id=\"EzF-WF-59H\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"F7z-L9-IJx\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"trailing\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"FC3-5g-ecO\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"5HY-PP-zis\" secondAttribute=\"trailing\" id=\"GdS-aI-zFZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"KUe-TY-0IR\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"-100\" id=\"Nnc-ac-kZm\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"Rkf-Ei-utF\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"WyW-Bd-SCR\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"ask-10-ADA\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"bottom\" id=\"h2b-2w-Imy\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"hm7-bB-XCW\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jVD-S8-1Ec\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jkH-Gz-0IJ\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"trailing\" id=\"kQL-us-md5\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"bottom\" id=\"lqI-Xe-LTO\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"trailing\" id=\"puE-T2-Fhz\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"657-iG-bJh\" secondAttribute=\"bottom\" id=\"s6e-2S-ra7\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"wpe-hj-LME\" secondAttribute=\"trailing\" id=\"sPE-j3-mF5\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"trailing\" id=\"uCf-ba-qsG\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"wpe-hj-LME\" secondAttribute=\"bottom\" id=\"xDG-1G-KJZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"leading\" id=\"xNm-iI-BiD\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"hRO-uY-yS2\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                    <connections>\n                        <outlet property=\"currentFolder\" destination=\"8VE-HM-shO\" id=\"5rb-vR-OgA\"/>\n                        <outlet property=\"folderCapacity\" destination=\"m6a-dd-9sW\" id=\"Mdo-la-wuE\"/>\n                        <outlet property=\"headerView\" destination=\"alp-5Z-1d9\" id=\"cXW-wJ-XFm\"/>\n                        <outlet property=\"leftPreHeader\" destination=\"1zz-x1-ZSj\" id=\"j81-Mx-cbD\"/>\n                        <outlet property=\"leftPreSafeArea\" destination=\"5HY-PP-zis\" id=\"P39-3d-yrJ\"/>\n                        <outlet property=\"notesTable\" destination=\"sUC-hL-bgg\" id=\"Iqp-8V-0Ly\"/>\n                        <outlet property=\"preHeaderView\" destination=\"zcg-gZ-ayJ\" id=\"1c1-8H-2gn\"/>\n                        <outlet property=\"rightPreHeader\" destination=\"wpe-hj-LME\" id=\"hfT-yp-bKE\"/>\n                        <outlet property=\"rightPreSafeArea\" destination=\"657-iG-bJh\" id=\"T5i-i3-SQA\"/>\n                        <outlet property=\"search\" destination=\"Ywj-qM-UNi\" id=\"FFN-oi-ibv\"/>\n                        <outlet property=\"searchButton\" destination=\"yuS-7s-7qj\" id=\"PUs-Xi-SMU\"/>\n                        <outlet property=\"searchCancel\" destination=\"1gp-bn-Xq5\" id=\"k7J-hm-b5c\"/>\n                        <outlet property=\"searchView\" destination=\"MB3-6y-v2m\" id=\"C6r-2P-Y6W\"/>\n                        <outlet property=\"settingsButton\" destination=\"UUp-E6-rvb\" id=\"wUB-8I-7YG\"/>\n                        <outlet property=\"sidebarTableView\" destination=\"Mge-lh-GR9\" id=\"PMJ-cU-cu8\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"141.29464285714286\" y=\"133.33333333333334\"/>\n        </scene>\n        <!--Editor View Controller-->\n        <scene sceneID=\"slE-pv-o03\">\n            <objects>\n                <viewController storyboardIdentifier=\"editorViewController\" id=\"ric-rS-hWq\" customClass=\"EditorViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ddk-kN-IZ8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"interactive\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ecm-ZU-dhM\" customClass=\"EditTextView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"812\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" autocorrectionType=\"no\" keyboardAppearance=\"light\" smartQuotesType=\"no\"/>\n                            </textView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"top\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"top\" id=\"N5x-s4-zby\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"trailing\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"trailing\" id=\"RB6-wy-4rq\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"bottom\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"bottom\" constant=\"6\" id=\"TH4-jD-Xnb\"/>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"leading\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"leading\" id=\"V6w-av-pPX\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"QrF-sP-UlZ\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"editArea\" destination=\"ecm-ZU-dhM\" id=\"kTy-5J-L7P\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ihg-8y-LLI\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"928.79999999999995\" y=\"133.5832083958021\"/>\n        </scene>\n        <!--Preview View Controller-->\n        <scene sceneID=\"HXZ-PF-sPm\">\n            <objects>\n                <viewController storyboardIdentifier=\"previewViewController\" id=\"Oga-nk-3WY\" customClass=\"PreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Fn5-LP-Dsx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"ByR-0t-POa\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"DZq-E6-XdK\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1668\" y=\"134\"/>\n        </scene>\n        <!--Table View Controller-->\n        <scene sceneID=\"8HG-j4-oXm\">\n            <objects>\n                <tableViewController id=\"6ci-Ie-asX\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" id=\"ngK-1d-578\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Section-1\" id=\"Qe6-HW-ixo\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"66s-Gh-Luv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"66s-Gh-Luv\" id=\"d3l-FU-ZeG\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"9Pi-CL-R7G\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"9Pi-CL-R7G\" id=\"Sia-kY-FXM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"jFN-r0-w0O\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"jFN-r0-w0O\" id=\"f2a-UK-Dww\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-2\" id=\"sXm-Sf-piq\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Hf5-np-yWa\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"243.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Hf5-np-yWa\" id=\"v25-Aq-Loe\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"V0c-IL-XTx\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"287.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"V0c-IL-XTx\" id=\"jqb-Z0-IMB\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"GNL-at-ms7\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"331.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"GNL-at-ms7\" id=\"qt7-dA-nds\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-3\" id=\"w10-Gt-pMh\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Eu2-qK-XhF\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"431.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Eu2-qK-XhF\" id=\"WPZ-Hg-lf6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"zzy-np-NW2\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"475.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"zzy-np-NW2\" id=\"brQ-fw-NYY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"fSW-YV-KfQ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"519.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"fSW-YV-KfQ\" id=\"ccD-lE-b1g\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"6ci-Ie-asX\" id=\"EpY-vk-GBo\"/>\n                            <outlet property=\"delegate\" destination=\"6ci-Ie-asX\" id=\"DAI-OV-W1R\"/>\n                        </connections>\n                    </tableView>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"gGo-VN-Sc1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2452\" y=\"134\"/>\n        </scene>\n        <!--Image Preview View Controller-->\n        <scene sceneID=\"OOK-4o-43g\">\n            <objects>\n                <viewController storyboardIdentifier=\"imagePreviewViewController\" id=\"gXA-UP-nPE\" customClass=\"ImagePreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Hcy-mV-Ewd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1T-1l-93q\" customClass=\"ImageScrollView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"852\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            </scrollView>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gYe-LF-KuA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"852\" width=\"414\" height=\"44\"/>\n                                <items>\n                                    <navigationItem id=\"nkb-GO-G7U\"/>\n                                </items>\n                            </navigationBar>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"trailing\" id=\"YAG-UM-ijf\"/>\n                            <constraint firstItem=\"gYe-LF-KuA\" firstAttribute=\"leading\" secondItem=\"Hcy-mV-Ewd\" secondAttribute=\"leading\" id=\"ate-Ff-XmV\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"bottom\" id=\"rlq-M4-xPb\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"DVk-Fs-Jhg\"/>\n                    </view>\n                    <toolbarItems/>\n                    <simulatedToolbarMetrics key=\"simulatedBottomBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"imageScrollView\" destination=\"T1T-1l-93q\" id=\"sHb-Vp-jwF\"/>\n                        <outlet property=\"navigation\" destination=\"gYe-LF-KuA\" id=\"P4L-eh-YMx\"/>\n                        <outlet property=\"navigationBar\" destination=\"nkb-GO-G7U\" id=\"DJ1-0k-0oR\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mXN-5G-zCr\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3216\" y=\"134\"/>\n        </scene>\n        <!--Swifty Page Controller-->\n        <scene sceneID=\"b50-aI-65w\">\n            <objects>\n                <viewController id=\"Qe5-Pl-yOC\" customClass=\"SwiftyPageController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"TTB-WN-czk\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"lgj-UL-SQR\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"qVs-qv-gW1\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"885\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"more_white.png\" width=\"75\" height=\"75\"/>\n        <image name=\"pin_white.png\" width=\"128\" height=\"128\"/>\n        <image name=\"search.png\" width=\"39\" height=\"39\"/>\n        <namedColor name=\"link\">\n            <color red=\"0.23999999463558197\" green=\"0.50999999046325684\" blue=\"0.88999998569488525\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS/nl-NL.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16097.2\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"pUA-i0-P2Y\">\n    <device id=\"retina6_5\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16087\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Basic View Controller-->\n        <scene sceneID=\"7hM-9K-GCb\">\n            <objects>\n                <viewController id=\"pUA-i0-P2Y\" customClass=\"BasicViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"2j2-dl-Yzt\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <containerView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ja1-Yx-J9n\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <connections>\n                                    <segue destination=\"Qe5-Pl-yOC\" kind=\"embed\" id=\"Nmv-TL-xfo\"/>\n                                </connections>\n                            </containerView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"bottom\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"bottom\" id=\"0oF-JR-UvE\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"top\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"top\" id=\"PHc-dp-DQt\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"trailing\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"trailing\" id=\"iwt-vB-his\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"leading\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"leading\" id=\"xj4-wq-plp\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"tub-hp-8vu\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Q9c-3W-wHO\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"133\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController storyboardIdentifier=\"listViewController\" id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsMultipleSelection=\"YES\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" contentViewInsetsToSafeArea=\"NO\" id=\"Mge-lh-GR9\" customClass=\"SidebarTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"0.83741801979999997\" green=\"0.83743780850000005\" blue=\"0.83742713930000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"sidebarCell\" rowHeight=\"53\" id=\"O2q-T0-6CW\" customClass=\"SidebarTableCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"O2q-T0-6CW\" id=\"tDd-4m-f4y\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BML-lv-XMi\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"16\" width=\"21\" height=\"21\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"21\" id=\"8Mj-2V-WOH\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"21\" id=\"wTd-8W-0ei\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZDf-m9-quL\">\n                                                    <rect key=\"frame\" x=\"47\" y=\"16\" width=\"42\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"2jK-Iv-hSY\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"leading\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"leading\" constant=\"15\" id=\"3wN-gR-43e\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"leading\" secondItem=\"BML-lv-XMi\" secondAttribute=\"trailing\" constant=\"11\" id=\"WoX-Z4-8rD\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"df2-um-WMI\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"top\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"top\" id=\"eS6-4w-fRe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"icon\" destination=\"BML-lv-XMi\" id=\"OEo-b9-tQT\"/>\n                                            <outlet property=\"label\" destination=\"ZDf-m9-quL\" id=\"NZJ-lZ-DhC\"/>\n                                            <outlet property=\"labelConstraint\" destination=\"WoX-Z4-8rD\" id=\"3y4-5j-nzf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"startLocation\">\n                                        <real key=\"value\" value=\"0.0\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"endLocation\">\n                                        <real key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"horizontalMode\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"diagonalMode\" value=\"NO\"/>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"startColor\">\n                                        <color key=\"value\" red=\"0.26237374695426474\" green=\"0.51481102530647083\" blue=\"0.63467639593908631\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"endColor\">\n                                        <color key=\"value\" red=\"0.30977162963466554\" green=\"0.48825662134271103\" blue=\"0.67302506345177648\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </tableView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"154\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"sUC-hL-bgg\" customClass=\"NotesTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"noteCell\" rowHeight=\"154\" id=\"uv7-Im-hed\" customClass=\"NoteCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"154\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"uv7-Im-hed\" id=\"De0-QG-drV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"154\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"pin_white.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ng0-bb-ENq\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"11\" width=\"23\" height=\"23\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"23\" id=\"KlO-n1-B2e\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"23\" id=\"k71-lI-ai0\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn1-Y0-0eh\">\n                                                    <rect key=\"frame\" x=\"23.000000000000004\" y=\"11\" width=\"33.333333333333343\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Preview\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LAf-Rz-QFy\">\n                                                    <rect key=\"frame\" x=\"23\" y=\"39\" width=\"377\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rsi-Av-qh2\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"0iB-an-r6e\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"3EZ-N8-htb\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t6a-FH-UHM\">\n                                                    <rect key=\"frame\" x=\"103\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"dd7-Po-Gye\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"eUw-LF-zQI\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L4T-lK-1pA\">\n                                                    <rect key=\"frame\" x=\"181\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"Qry-XG-kOl\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"mUL-BK-kWo\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label autoresizesSubviews=\"NO\" opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Date\" textAlignment=\"right\" lineBreakMode=\"clip\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AbV-ot-mEE\">\n                                                    <rect key=\"frame\" x=\"358\" y=\"11\" width=\"36\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" white=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"0OO-Nd-PCc\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"trailing\" id=\"0qP-JS-kYp\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Cn1-Y0-0eh\" secondAttribute=\"trailing\" priority=\"999\" constant=\"5\" id=\"7Uy-aY-372\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"leading\" secondItem=\"t6a-FH-UHM\" secondAttribute=\"trailing\" constant=\"8\" id=\"K3H-Qz-btY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" constant=\"14\" id=\"LJ9-2z-vAD\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leadingMargin\" constant=\"5\" id=\"MB0-DS-pMG\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"trailing\" secondItem=\"De0-QG-drV\" secondAttribute=\"trailingMargin\" id=\"ONj-Ke-bYc\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"thirdImageTop\" id=\"XPp-HF-VEk\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"YY9-pB-9Qe\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"secondImageTop\" id=\"Yvb-AC-CP7\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"top\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"bottom\" constant=\"5\" id=\"d2V-lD-g3R\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" id=\"fM2-85-PwK\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"iho-nX-yyl\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"23\" id=\"lRD-NL-mfR\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"firstImageTop\" id=\"uw7-pW-b3V\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"leading\" secondItem=\"rsi-Av-qh2\" secondAttribute=\"trailing\" constant=\"8\" id=\"zr3-db-Dgc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <inset key=\"separatorInset\" minX=\"15\" minY=\"0.0\" maxX=\"18\" maxY=\"0.0\"/>\n                                        <connections>\n                                            <outlet property=\"date\" destination=\"AbV-ot-mEE\" id=\"bLC-CN-Urn\"/>\n                                            <outlet property=\"imagePreview\" destination=\"rsi-Av-qh2\" id=\"7ax-Ce-vfL\"/>\n                                            <outlet property=\"imagePreviewSecond\" destination=\"t6a-FH-UHM\" id=\"My4-em-TVZ\"/>\n                                            <outlet property=\"imagePreviewThird\" destination=\"L4T-lK-1pA\" id=\"dxa-93-KoO\"/>\n                                            <outlet property=\"pin\" destination=\"Ng0-bb-ENq\" id=\"vgv-uX-Hak\"/>\n                                            <outlet property=\"preview\" destination=\"LAf-Rz-QFy\" id=\"OTM-Tt-F3b\"/>\n                                            <outlet property=\"title\" destination=\"Cn1-Y0-0eh\" id=\"giJ-Tv-pg9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"alp-5Z-1d9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"45\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Inbox ▽\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8VE-HM-shO\">\n                                        <rect key=\"frame\" x=\"175.66666666666666\" y=\"8\" width=\"63\" height=\"21\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"∞\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"m6a-dd-9sW\">\n                                        <rect key=\"frame\" x=\"202\" y=\"29\" width=\"10\" height=\"12\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"10\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UUp-E6-rvb\">\n                                        <rect key=\"frame\" x=\"366\" y=\"3\" width=\"38\" height=\"38\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"Eme-RV-Jot\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"38\" id=\"XB0-Gh-Rhh\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" image=\"more_white.png\"/>\n                                        <connections>\n                                            <action selector=\"bulkEditing:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"OHc-6e-Ap0\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yuS-7s-7qj\">\n                                        <rect key=\"frame\" x=\"11\" y=\"6\" width=\"35\" height=\"35\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"35\" id=\"bhN-xF-K9M\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"35\" id=\"uGB-NL-S3D\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" title=\"   \" image=\"search.png\"/>\n                                        <connections>\n                                            <action selector=\"openSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rzD-5M-jpI\"/>\n                                        </connections>\n                                    </button>\n                                    <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MB3-6y-v2m\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"45\"/>\n                                        <subviews>\n                                            <searchBar contentMode=\"redraw\" searchBarStyle=\"minimal\" placeholder=\"Search and create\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ywj-qM-UNi\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"7\" width=\"330\" height=\"28\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"28\" id=\"CeT-yV-UZz\"/>\n                                                </constraints>\n                                                <textInputTraits key=\"textInputTraits\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                            </searchBar>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1gp-bn-Xq5\">\n                                                <rect key=\"frame\" x=\"345\" y=\"4\" width=\"52\" height=\"32\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"16\"/>\n                                                <state key=\"normal\" title=\"Cancel\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                                <connections>\n                                                    <action selector=\"hideSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"pRF-bi-wcf\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"7\" id=\"1F0-4v-Fkk\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"leading\" secondItem=\"Ywj-qM-UNi\" secondAttribute=\"trailing\" constant=\"15\" id=\"3Ei-jM-H06\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"4\" id=\"So3-K9-1Ay\"/>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"leading\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"leading\" id=\"lfK-l4-lgP\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"1gp-bn-Xq5\" secondAttribute=\"trailing\" constant=\"17\" id=\"zZq-lK-avJ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.80974966287612915\" green=\"0.86932212114334106\" blue=\"0.95254331827163696\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" constant=\"11\" id=\"1VK-zF-gcR\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" id=\"2KN-W3-EX8\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" id=\"6Z3-5M-SSr\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"E4P-h2-Q50\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"centerX\" secondItem=\"m6a-dd-9sW\" secondAttribute=\"centerX\" id=\"Nhd-L1-bXr\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"6\" id=\"SGw-C8-KTf\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"29\" id=\"SP0-A0-34k\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"bottom\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"bottom\" id=\"XCH-gW-usb\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"45\" id=\"f3p-Br-Goh\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"8\" id=\"kdk-x0-9VK\"/>\n                                    <constraint firstItem=\"UUp-E6-rvb\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"3\" id=\"m4s-96-cCk\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"txa-PI-dmX\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"bottom\" id=\"vmc-WX-Kdu\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"trailing\" constant=\"10\" id=\"vy0-6Z-X0J\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zcg-gZ-ayJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1zz-x1-ZSj\" userLabel=\"left Pre Header\">\n                                <rect key=\"frame\" x=\"-100\" y=\"0.0\" width=\"100\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <color key=\"tintColor\" systemColor=\"linkColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wpe-hj-LME\" userLabel=\"right Pre Header\">\n                                <rect key=\"frame\" x=\"414\" y=\"0.0\" width=\"0.0\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5HY-PP-zis\" userLabel=\"left Pre Safe Area\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemIndigoColor\" red=\"0.34509803919999998\" green=\"0.33725490200000002\" blue=\"0.83921568629999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"657-iG-bJh\" userLabel=\"right Pre Safe Area\">\n                                <rect key=\"frame\" x=\"414\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemGreenColor\" red=\"0.20392156859999999\" green=\"0.78039215689999997\" blue=\"0.34901960780000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" name=\"link\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"5HY-PP-zis\" secondAttribute=\"bottom\" id=\"2S1-Nr-4us\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"top\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"646-6p-9Ei\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"657-iG-bJh\" secondAttribute=\"trailing\" id=\"EzF-WF-59H\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"F7z-L9-IJx\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"trailing\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"FC3-5g-ecO\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"5HY-PP-zis\" secondAttribute=\"trailing\" id=\"GdS-aI-zFZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"KUe-TY-0IR\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"-100\" id=\"Nnc-ac-kZm\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"Rkf-Ei-utF\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"WyW-Bd-SCR\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"ask-10-ADA\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"bottom\" id=\"h2b-2w-Imy\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"hm7-bB-XCW\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jVD-S8-1Ec\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jkH-Gz-0IJ\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"trailing\" id=\"kQL-us-md5\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"bottom\" id=\"lqI-Xe-LTO\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"trailing\" id=\"puE-T2-Fhz\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"657-iG-bJh\" secondAttribute=\"bottom\" id=\"s6e-2S-ra7\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"wpe-hj-LME\" secondAttribute=\"trailing\" id=\"sPE-j3-mF5\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"trailing\" id=\"uCf-ba-qsG\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"wpe-hj-LME\" secondAttribute=\"bottom\" id=\"xDG-1G-KJZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"leading\" id=\"xNm-iI-BiD\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"hRO-uY-yS2\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                    <connections>\n                        <outlet property=\"currentFolder\" destination=\"8VE-HM-shO\" id=\"5rb-vR-OgA\"/>\n                        <outlet property=\"folderCapacity\" destination=\"m6a-dd-9sW\" id=\"Mdo-la-wuE\"/>\n                        <outlet property=\"headerView\" destination=\"alp-5Z-1d9\" id=\"cXW-wJ-XFm\"/>\n                        <outlet property=\"leftPreHeader\" destination=\"1zz-x1-ZSj\" id=\"j81-Mx-cbD\"/>\n                        <outlet property=\"leftPreSafeArea\" destination=\"5HY-PP-zis\" id=\"P39-3d-yrJ\"/>\n                        <outlet property=\"notesTable\" destination=\"sUC-hL-bgg\" id=\"Iqp-8V-0Ly\"/>\n                        <outlet property=\"preHeaderView\" destination=\"zcg-gZ-ayJ\" id=\"1c1-8H-2gn\"/>\n                        <outlet property=\"rightPreHeader\" destination=\"wpe-hj-LME\" id=\"hfT-yp-bKE\"/>\n                        <outlet property=\"rightPreSafeArea\" destination=\"657-iG-bJh\" id=\"T5i-i3-SQA\"/>\n                        <outlet property=\"search\" destination=\"Ywj-qM-UNi\" id=\"FFN-oi-ibv\"/>\n                        <outlet property=\"searchButton\" destination=\"yuS-7s-7qj\" id=\"PUs-Xi-SMU\"/>\n                        <outlet property=\"searchCancel\" destination=\"1gp-bn-Xq5\" id=\"k7J-hm-b5c\"/>\n                        <outlet property=\"searchView\" destination=\"MB3-6y-v2m\" id=\"C6r-2P-Y6W\"/>\n                        <outlet property=\"settingsButton\" destination=\"UUp-E6-rvb\" id=\"wUB-8I-7YG\"/>\n                        <outlet property=\"sidebarTableView\" destination=\"Mge-lh-GR9\" id=\"PMJ-cU-cu8\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"141.29464285714286\" y=\"133.33333333333334\"/>\n        </scene>\n        <!--Editor View Controller-->\n        <scene sceneID=\"slE-pv-o03\">\n            <objects>\n                <viewController storyboardIdentifier=\"editorViewController\" id=\"ric-rS-hWq\" customClass=\"EditorViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ddk-kN-IZ8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"interactive\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ecm-ZU-dhM\" customClass=\"EditTextView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"812\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" autocorrectionType=\"no\" keyboardAppearance=\"light\" smartQuotesType=\"no\"/>\n                            </textView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"top\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"top\" id=\"N5x-s4-zby\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"trailing\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"trailing\" id=\"RB6-wy-4rq\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"bottom\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"bottom\" constant=\"6\" id=\"TH4-jD-Xnb\"/>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"leading\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"leading\" id=\"V6w-av-pPX\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"QrF-sP-UlZ\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"editArea\" destination=\"ecm-ZU-dhM\" id=\"kTy-5J-L7P\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ihg-8y-LLI\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"928.79999999999995\" y=\"133.5832083958021\"/>\n        </scene>\n        <!--Preview View Controller-->\n        <scene sceneID=\"HXZ-PF-sPm\">\n            <objects>\n                <viewController storyboardIdentifier=\"previewViewController\" id=\"Oga-nk-3WY\" customClass=\"PreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Fn5-LP-Dsx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"ByR-0t-POa\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"DZq-E6-XdK\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1668\" y=\"134\"/>\n        </scene>\n        <!--Table View Controller-->\n        <scene sceneID=\"8HG-j4-oXm\">\n            <objects>\n                <tableViewController id=\"6ci-Ie-asX\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" id=\"ngK-1d-578\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Section-1\" id=\"Qe6-HW-ixo\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"66s-Gh-Luv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"66s-Gh-Luv\" id=\"d3l-FU-ZeG\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"9Pi-CL-R7G\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"9Pi-CL-R7G\" id=\"Sia-kY-FXM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"jFN-r0-w0O\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"jFN-r0-w0O\" id=\"f2a-UK-Dww\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-2\" id=\"sXm-Sf-piq\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Hf5-np-yWa\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"243.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Hf5-np-yWa\" id=\"v25-Aq-Loe\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"V0c-IL-XTx\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"287.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"V0c-IL-XTx\" id=\"jqb-Z0-IMB\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"GNL-at-ms7\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"331.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"GNL-at-ms7\" id=\"qt7-dA-nds\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-3\" id=\"w10-Gt-pMh\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Eu2-qK-XhF\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"431.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Eu2-qK-XhF\" id=\"WPZ-Hg-lf6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"zzy-np-NW2\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"475.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"zzy-np-NW2\" id=\"brQ-fw-NYY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"fSW-YV-KfQ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"519.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"fSW-YV-KfQ\" id=\"ccD-lE-b1g\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"6ci-Ie-asX\" id=\"EpY-vk-GBo\"/>\n                            <outlet property=\"delegate\" destination=\"6ci-Ie-asX\" id=\"DAI-OV-W1R\"/>\n                        </connections>\n                    </tableView>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"gGo-VN-Sc1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2452\" y=\"134\"/>\n        </scene>\n        <!--Image Preview View Controller-->\n        <scene sceneID=\"OOK-4o-43g\">\n            <objects>\n                <viewController storyboardIdentifier=\"imagePreviewViewController\" id=\"gXA-UP-nPE\" customClass=\"ImagePreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Hcy-mV-Ewd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1T-1l-93q\" customClass=\"ImageScrollView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"852\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            </scrollView>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gYe-LF-KuA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"852\" width=\"414\" height=\"44\"/>\n                                <items>\n                                    <navigationItem id=\"nkb-GO-G7U\"/>\n                                </items>\n                            </navigationBar>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"trailing\" id=\"YAG-UM-ijf\"/>\n                            <constraint firstItem=\"gYe-LF-KuA\" firstAttribute=\"leading\" secondItem=\"Hcy-mV-Ewd\" secondAttribute=\"leading\" id=\"ate-Ff-XmV\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"bottom\" id=\"rlq-M4-xPb\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"DVk-Fs-Jhg\"/>\n                    </view>\n                    <toolbarItems/>\n                    <simulatedToolbarMetrics key=\"simulatedBottomBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"imageScrollView\" destination=\"T1T-1l-93q\" id=\"sHb-Vp-jwF\"/>\n                        <outlet property=\"navigation\" destination=\"gYe-LF-KuA\" id=\"P4L-eh-YMx\"/>\n                        <outlet property=\"navigationBar\" destination=\"nkb-GO-G7U\" id=\"DJ1-0k-0oR\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mXN-5G-zCr\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3216\" y=\"134\"/>\n        </scene>\n        <!--Swifty Page Controller-->\n        <scene sceneID=\"b50-aI-65w\">\n            <objects>\n                <viewController id=\"Qe5-Pl-yOC\" customClass=\"SwiftyPageController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"TTB-WN-czk\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"lgj-UL-SQR\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"qVs-qv-gW1\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"885\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"more_white.png\" width=\"75\" height=\"75\"/>\n        <image name=\"pin_white.png\" width=\"128\" height=\"128\"/>\n        <image name=\"search.png\" width=\"39\" height=\"39\"/>\n        <namedColor name=\"link\">\n            <color red=\"0.23999999463558197\" green=\"0.50999999046325684\" blue=\"0.88999998569488525\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS/pt-PT.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16097.2\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"pUA-i0-P2Y\">\n    <device id=\"retina6_5\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16087\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Basic View Controller-->\n        <scene sceneID=\"7hM-9K-GCb\">\n            <objects>\n                <viewController id=\"pUA-i0-P2Y\" customClass=\"BasicViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"2j2-dl-Yzt\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <containerView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ja1-Yx-J9n\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <connections>\n                                    <segue destination=\"Qe5-Pl-yOC\" kind=\"embed\" id=\"Nmv-TL-xfo\"/>\n                                </connections>\n                            </containerView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"bottom\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"bottom\" id=\"0oF-JR-UvE\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"top\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"top\" id=\"PHc-dp-DQt\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"trailing\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"trailing\" id=\"iwt-vB-his\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"leading\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"leading\" id=\"xj4-wq-plp\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"tub-hp-8vu\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Q9c-3W-wHO\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"133\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController storyboardIdentifier=\"listViewController\" id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsMultipleSelection=\"YES\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" contentViewInsetsToSafeArea=\"NO\" id=\"Mge-lh-GR9\" customClass=\"SidebarTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"0.83741801979999997\" green=\"0.83743780850000005\" blue=\"0.83742713930000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"sidebarCell\" rowHeight=\"53\" id=\"O2q-T0-6CW\" customClass=\"SidebarTableCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"O2q-T0-6CW\" id=\"tDd-4m-f4y\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BML-lv-XMi\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"16\" width=\"21\" height=\"21\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"21\" id=\"8Mj-2V-WOH\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"21\" id=\"wTd-8W-0ei\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZDf-m9-quL\">\n                                                    <rect key=\"frame\" x=\"47\" y=\"16\" width=\"42\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"2jK-Iv-hSY\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"leading\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"leading\" constant=\"15\" id=\"3wN-gR-43e\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"leading\" secondItem=\"BML-lv-XMi\" secondAttribute=\"trailing\" constant=\"11\" id=\"WoX-Z4-8rD\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"df2-um-WMI\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"top\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"top\" id=\"eS6-4w-fRe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"icon\" destination=\"BML-lv-XMi\" id=\"OEo-b9-tQT\"/>\n                                            <outlet property=\"label\" destination=\"ZDf-m9-quL\" id=\"NZJ-lZ-DhC\"/>\n                                            <outlet property=\"labelConstraint\" destination=\"WoX-Z4-8rD\" id=\"3y4-5j-nzf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"startLocation\">\n                                        <real key=\"value\" value=\"0.0\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"endLocation\">\n                                        <real key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"horizontalMode\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"diagonalMode\" value=\"NO\"/>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"startColor\">\n                                        <color key=\"value\" red=\"0.26237374695426474\" green=\"0.51481102530647083\" blue=\"0.63467639593908631\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"endColor\">\n                                        <color key=\"value\" red=\"0.30977162963466554\" green=\"0.48825662134271103\" blue=\"0.67302506345177648\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </tableView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"154\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"sUC-hL-bgg\" customClass=\"NotesTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"noteCell\" rowHeight=\"154\" id=\"uv7-Im-hed\" customClass=\"NoteCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"154\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"uv7-Im-hed\" id=\"De0-QG-drV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"154\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"pin_white.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ng0-bb-ENq\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"11\" width=\"23\" height=\"23\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"23\" id=\"KlO-n1-B2e\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"23\" id=\"k71-lI-ai0\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn1-Y0-0eh\">\n                                                    <rect key=\"frame\" x=\"23.000000000000004\" y=\"11\" width=\"33.333333333333343\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Preview\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LAf-Rz-QFy\">\n                                                    <rect key=\"frame\" x=\"23\" y=\"39\" width=\"377\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rsi-Av-qh2\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"0iB-an-r6e\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"3EZ-N8-htb\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t6a-FH-UHM\">\n                                                    <rect key=\"frame\" x=\"103\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"dd7-Po-Gye\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"eUw-LF-zQI\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L4T-lK-1pA\">\n                                                    <rect key=\"frame\" x=\"181\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"Qry-XG-kOl\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"mUL-BK-kWo\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label autoresizesSubviews=\"NO\" opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Date\" textAlignment=\"right\" lineBreakMode=\"clip\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AbV-ot-mEE\">\n                                                    <rect key=\"frame\" x=\"358\" y=\"11\" width=\"36\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" white=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"0OO-Nd-PCc\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"trailing\" id=\"0qP-JS-kYp\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Cn1-Y0-0eh\" secondAttribute=\"trailing\" priority=\"999\" constant=\"5\" id=\"7Uy-aY-372\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"leading\" secondItem=\"t6a-FH-UHM\" secondAttribute=\"trailing\" constant=\"8\" id=\"K3H-Qz-btY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" constant=\"14\" id=\"LJ9-2z-vAD\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leadingMargin\" constant=\"5\" id=\"MB0-DS-pMG\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"trailing\" secondItem=\"De0-QG-drV\" secondAttribute=\"trailingMargin\" id=\"ONj-Ke-bYc\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"thirdImageTop\" id=\"XPp-HF-VEk\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"YY9-pB-9Qe\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"secondImageTop\" id=\"Yvb-AC-CP7\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"top\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"bottom\" constant=\"5\" id=\"d2V-lD-g3R\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" id=\"fM2-85-PwK\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"iho-nX-yyl\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"23\" id=\"lRD-NL-mfR\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"firstImageTop\" id=\"uw7-pW-b3V\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"leading\" secondItem=\"rsi-Av-qh2\" secondAttribute=\"trailing\" constant=\"8\" id=\"zr3-db-Dgc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <inset key=\"separatorInset\" minX=\"15\" minY=\"0.0\" maxX=\"18\" maxY=\"0.0\"/>\n                                        <connections>\n                                            <outlet property=\"date\" destination=\"AbV-ot-mEE\" id=\"bLC-CN-Urn\"/>\n                                            <outlet property=\"imagePreview\" destination=\"rsi-Av-qh2\" id=\"7ax-Ce-vfL\"/>\n                                            <outlet property=\"imagePreviewSecond\" destination=\"t6a-FH-UHM\" id=\"My4-em-TVZ\"/>\n                                            <outlet property=\"imagePreviewThird\" destination=\"L4T-lK-1pA\" id=\"dxa-93-KoO\"/>\n                                            <outlet property=\"pin\" destination=\"Ng0-bb-ENq\" id=\"vgv-uX-Hak\"/>\n                                            <outlet property=\"preview\" destination=\"LAf-Rz-QFy\" id=\"OTM-Tt-F3b\"/>\n                                            <outlet property=\"title\" destination=\"Cn1-Y0-0eh\" id=\"giJ-Tv-pg9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"alp-5Z-1d9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"45\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Inbox ▽\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8VE-HM-shO\">\n                                        <rect key=\"frame\" x=\"175.66666666666666\" y=\"8\" width=\"63\" height=\"21\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"∞\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"m6a-dd-9sW\">\n                                        <rect key=\"frame\" x=\"202\" y=\"29\" width=\"10\" height=\"12\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"10\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UUp-E6-rvb\">\n                                        <rect key=\"frame\" x=\"366\" y=\"3\" width=\"38\" height=\"38\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"Eme-RV-Jot\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"38\" id=\"XB0-Gh-Rhh\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" image=\"more_white.png\"/>\n                                        <connections>\n                                            <action selector=\"bulkEditing:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"OHc-6e-Ap0\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yuS-7s-7qj\">\n                                        <rect key=\"frame\" x=\"11\" y=\"6\" width=\"35\" height=\"35\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"35\" id=\"bhN-xF-K9M\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"35\" id=\"uGB-NL-S3D\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" title=\"   \" image=\"search.png\"/>\n                                        <connections>\n                                            <action selector=\"openSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rzD-5M-jpI\"/>\n                                        </connections>\n                                    </button>\n                                    <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MB3-6y-v2m\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"45\"/>\n                                        <subviews>\n                                            <searchBar contentMode=\"redraw\" searchBarStyle=\"minimal\" placeholder=\"Search and create\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ywj-qM-UNi\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"7\" width=\"330\" height=\"28\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"28\" id=\"CeT-yV-UZz\"/>\n                                                </constraints>\n                                                <textInputTraits key=\"textInputTraits\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                            </searchBar>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1gp-bn-Xq5\">\n                                                <rect key=\"frame\" x=\"345\" y=\"4\" width=\"52\" height=\"32\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"16\"/>\n                                                <state key=\"normal\" title=\"Cancel\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                                <connections>\n                                                    <action selector=\"hideSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"pRF-bi-wcf\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"7\" id=\"1F0-4v-Fkk\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"leading\" secondItem=\"Ywj-qM-UNi\" secondAttribute=\"trailing\" constant=\"15\" id=\"3Ei-jM-H06\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"4\" id=\"So3-K9-1Ay\"/>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"leading\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"leading\" id=\"lfK-l4-lgP\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"1gp-bn-Xq5\" secondAttribute=\"trailing\" constant=\"17\" id=\"zZq-lK-avJ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.80974966287612915\" green=\"0.86932212114334106\" blue=\"0.95254331827163696\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" constant=\"11\" id=\"1VK-zF-gcR\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" id=\"2KN-W3-EX8\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" id=\"6Z3-5M-SSr\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"E4P-h2-Q50\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"centerX\" secondItem=\"m6a-dd-9sW\" secondAttribute=\"centerX\" id=\"Nhd-L1-bXr\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"6\" id=\"SGw-C8-KTf\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"29\" id=\"SP0-A0-34k\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"bottom\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"bottom\" id=\"XCH-gW-usb\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"45\" id=\"f3p-Br-Goh\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"8\" id=\"kdk-x0-9VK\"/>\n                                    <constraint firstItem=\"UUp-E6-rvb\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"3\" id=\"m4s-96-cCk\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"txa-PI-dmX\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"bottom\" id=\"vmc-WX-Kdu\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"trailing\" constant=\"10\" id=\"vy0-6Z-X0J\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zcg-gZ-ayJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1zz-x1-ZSj\" userLabel=\"left Pre Header\">\n                                <rect key=\"frame\" x=\"-100\" y=\"0.0\" width=\"100\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <color key=\"tintColor\" systemColor=\"linkColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wpe-hj-LME\" userLabel=\"right Pre Header\">\n                                <rect key=\"frame\" x=\"414\" y=\"0.0\" width=\"0.0\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5HY-PP-zis\" userLabel=\"left Pre Safe Area\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemIndigoColor\" red=\"0.34509803919999998\" green=\"0.33725490200000002\" blue=\"0.83921568629999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"657-iG-bJh\" userLabel=\"right Pre Safe Area\">\n                                <rect key=\"frame\" x=\"414\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemGreenColor\" red=\"0.20392156859999999\" green=\"0.78039215689999997\" blue=\"0.34901960780000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" name=\"link\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"5HY-PP-zis\" secondAttribute=\"bottom\" id=\"2S1-Nr-4us\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"top\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"646-6p-9Ei\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"657-iG-bJh\" secondAttribute=\"trailing\" id=\"EzF-WF-59H\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"F7z-L9-IJx\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"trailing\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"FC3-5g-ecO\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"5HY-PP-zis\" secondAttribute=\"trailing\" id=\"GdS-aI-zFZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"KUe-TY-0IR\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"-100\" id=\"Nnc-ac-kZm\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"Rkf-Ei-utF\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"WyW-Bd-SCR\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"ask-10-ADA\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"bottom\" id=\"h2b-2w-Imy\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"hm7-bB-XCW\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jVD-S8-1Ec\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jkH-Gz-0IJ\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"trailing\" id=\"kQL-us-md5\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"bottom\" id=\"lqI-Xe-LTO\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"trailing\" id=\"puE-T2-Fhz\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"657-iG-bJh\" secondAttribute=\"bottom\" id=\"s6e-2S-ra7\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"wpe-hj-LME\" secondAttribute=\"trailing\" id=\"sPE-j3-mF5\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"trailing\" id=\"uCf-ba-qsG\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"wpe-hj-LME\" secondAttribute=\"bottom\" id=\"xDG-1G-KJZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"leading\" id=\"xNm-iI-BiD\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"hRO-uY-yS2\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                    <connections>\n                        <outlet property=\"currentFolder\" destination=\"8VE-HM-shO\" id=\"5rb-vR-OgA\"/>\n                        <outlet property=\"folderCapacity\" destination=\"m6a-dd-9sW\" id=\"Mdo-la-wuE\"/>\n                        <outlet property=\"headerView\" destination=\"alp-5Z-1d9\" id=\"cXW-wJ-XFm\"/>\n                        <outlet property=\"leftPreHeader\" destination=\"1zz-x1-ZSj\" id=\"j81-Mx-cbD\"/>\n                        <outlet property=\"leftPreSafeArea\" destination=\"5HY-PP-zis\" id=\"P39-3d-yrJ\"/>\n                        <outlet property=\"notesTable\" destination=\"sUC-hL-bgg\" id=\"Iqp-8V-0Ly\"/>\n                        <outlet property=\"preHeaderView\" destination=\"zcg-gZ-ayJ\" id=\"1c1-8H-2gn\"/>\n                        <outlet property=\"rightPreHeader\" destination=\"wpe-hj-LME\" id=\"hfT-yp-bKE\"/>\n                        <outlet property=\"rightPreSafeArea\" destination=\"657-iG-bJh\" id=\"T5i-i3-SQA\"/>\n                        <outlet property=\"search\" destination=\"Ywj-qM-UNi\" id=\"FFN-oi-ibv\"/>\n                        <outlet property=\"searchButton\" destination=\"yuS-7s-7qj\" id=\"PUs-Xi-SMU\"/>\n                        <outlet property=\"searchCancel\" destination=\"1gp-bn-Xq5\" id=\"k7J-hm-b5c\"/>\n                        <outlet property=\"searchView\" destination=\"MB3-6y-v2m\" id=\"C6r-2P-Y6W\"/>\n                        <outlet property=\"settingsButton\" destination=\"UUp-E6-rvb\" id=\"wUB-8I-7YG\"/>\n                        <outlet property=\"sidebarTableView\" destination=\"Mge-lh-GR9\" id=\"PMJ-cU-cu8\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"141.29464285714286\" y=\"133.33333333333334\"/>\n        </scene>\n        <!--Editor View Controller-->\n        <scene sceneID=\"slE-pv-o03\">\n            <objects>\n                <viewController storyboardIdentifier=\"editorViewController\" id=\"ric-rS-hWq\" customClass=\"EditorViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ddk-kN-IZ8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"interactive\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ecm-ZU-dhM\" customClass=\"EditTextView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"812\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" autocorrectionType=\"no\" keyboardAppearance=\"light\" smartQuotesType=\"no\"/>\n                            </textView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"top\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"top\" id=\"N5x-s4-zby\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"trailing\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"trailing\" id=\"RB6-wy-4rq\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"bottom\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"bottom\" constant=\"6\" id=\"TH4-jD-Xnb\"/>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"leading\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"leading\" id=\"V6w-av-pPX\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"QrF-sP-UlZ\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"editArea\" destination=\"ecm-ZU-dhM\" id=\"kTy-5J-L7P\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ihg-8y-LLI\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"928.79999999999995\" y=\"133.5832083958021\"/>\n        </scene>\n        <!--Preview View Controller-->\n        <scene sceneID=\"HXZ-PF-sPm\">\n            <objects>\n                <viewController storyboardIdentifier=\"previewViewController\" id=\"Oga-nk-3WY\" customClass=\"PreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Fn5-LP-Dsx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"ByR-0t-POa\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"DZq-E6-XdK\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1668\" y=\"134\"/>\n        </scene>\n        <!--Table View Controller-->\n        <scene sceneID=\"8HG-j4-oXm\">\n            <objects>\n                <tableViewController id=\"6ci-Ie-asX\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" id=\"ngK-1d-578\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Section-1\" id=\"Qe6-HW-ixo\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"66s-Gh-Luv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"66s-Gh-Luv\" id=\"d3l-FU-ZeG\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"9Pi-CL-R7G\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"9Pi-CL-R7G\" id=\"Sia-kY-FXM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"jFN-r0-w0O\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"jFN-r0-w0O\" id=\"f2a-UK-Dww\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-2\" id=\"sXm-Sf-piq\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Hf5-np-yWa\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"243.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Hf5-np-yWa\" id=\"v25-Aq-Loe\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"V0c-IL-XTx\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"287.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"V0c-IL-XTx\" id=\"jqb-Z0-IMB\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"GNL-at-ms7\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"331.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"GNL-at-ms7\" id=\"qt7-dA-nds\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-3\" id=\"w10-Gt-pMh\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Eu2-qK-XhF\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"431.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Eu2-qK-XhF\" id=\"WPZ-Hg-lf6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"zzy-np-NW2\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"475.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"zzy-np-NW2\" id=\"brQ-fw-NYY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"fSW-YV-KfQ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"519.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"fSW-YV-KfQ\" id=\"ccD-lE-b1g\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"6ci-Ie-asX\" id=\"EpY-vk-GBo\"/>\n                            <outlet property=\"delegate\" destination=\"6ci-Ie-asX\" id=\"DAI-OV-W1R\"/>\n                        </connections>\n                    </tableView>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"gGo-VN-Sc1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2452\" y=\"134\"/>\n        </scene>\n        <!--Image Preview View Controller-->\n        <scene sceneID=\"OOK-4o-43g\">\n            <objects>\n                <viewController storyboardIdentifier=\"imagePreviewViewController\" id=\"gXA-UP-nPE\" customClass=\"ImagePreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Hcy-mV-Ewd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1T-1l-93q\" customClass=\"ImageScrollView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"852\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            </scrollView>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gYe-LF-KuA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"852\" width=\"414\" height=\"44\"/>\n                                <items>\n                                    <navigationItem id=\"nkb-GO-G7U\"/>\n                                </items>\n                            </navigationBar>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"trailing\" id=\"YAG-UM-ijf\"/>\n                            <constraint firstItem=\"gYe-LF-KuA\" firstAttribute=\"leading\" secondItem=\"Hcy-mV-Ewd\" secondAttribute=\"leading\" id=\"ate-Ff-XmV\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"bottom\" id=\"rlq-M4-xPb\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"DVk-Fs-Jhg\"/>\n                    </view>\n                    <toolbarItems/>\n                    <simulatedToolbarMetrics key=\"simulatedBottomBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"imageScrollView\" destination=\"T1T-1l-93q\" id=\"sHb-Vp-jwF\"/>\n                        <outlet property=\"navigation\" destination=\"gYe-LF-KuA\" id=\"P4L-eh-YMx\"/>\n                        <outlet property=\"navigationBar\" destination=\"nkb-GO-G7U\" id=\"DJ1-0k-0oR\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mXN-5G-zCr\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3216\" y=\"134\"/>\n        </scene>\n        <!--Swifty Page Controller-->\n        <scene sceneID=\"b50-aI-65w\">\n            <objects>\n                <viewController id=\"Qe5-Pl-yOC\" customClass=\"SwiftyPageController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"TTB-WN-czk\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"lgj-UL-SQR\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"qVs-qv-gW1\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"885\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"more_white.png\" width=\"75\" height=\"75\"/>\n        <image name=\"pin_white.png\" width=\"128\" height=\"128\"/>\n        <image name=\"search.png\" width=\"39\" height=\"39\"/>\n        <namedColor name=\"link\">\n            <color red=\"0.23999999463558197\" green=\"0.50999999046325684\" blue=\"0.88999998569488525\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS/ru.lproj/InfoPlist.strings",
    "content": "\"NSCameraUsageDescription\" = \"Требуется прикрепить фото к заметкам\";\n\n\"NSFaceIDUsageDescription\" = \"Шифрование и дешифрование с помощью FaceID\";\n\n\"NSLocationWhenInUseUsageDescription\" = \"Запрошено при прикреплении фотографии\";\n\n\"NSPhotoLibraryAddUsageDescription\" = \"Требуется разрешение на запись изображений в приложении для фотографий\";\n\n\"NSPhotoLibraryUsageDescription\" = \"Требуется прикрепление изображений к заметкам\";\n"
  },
  {
    "path": "FSNotes iOS/ru.lproj/LaunchScreen.strings",
    "content": "\n"
  },
  {
    "path": "FSNotes iOS/ru.lproj/Localizable.strings",
    "content": "/* Settings */\n\"+\" = \"+\";\n\n/* No comment provided by engineer. */\n\"...\" = \"...\";\n\n/* Settings */\n\"Add External Folder\" = \"Внешняя директория\";\n\n/* Settings */\n\"Advanced\" = \"Advanced\";\n\n/* Archive in sidebar */\n\"Archive\" = \"Архив\";\n\n/* No comment provided by engineer. */\n\"Are you sure you want to delete all versions of this note?\" = \"Вы уверены, что хотите удалить все версии этой заметки?\";\n\n/* No comment provided by engineer. */\n\"Are you sure you want to delete the history of all notes?\" = \"Вы уверены, что хотите удалить историю всех заметок?\";\n\n/* No comment provided by engineer. */\n\"Are you sure you want to delete this image?\" = \"Вы уверены, что хотите удалить это изображение?\";\n\n/* Settings */\n\"Auto Rename By Title\" = \"По заголовку\";\n\n/* Settings */\n\"Autocorrection\" = \"Aвтоисправление\";\n\n/* Settings */\n\"build\" = \"билд\";\n\n/* No comment provided by engineer. */\n\"Cancel\" = \"Отменить\";\n\n/* No comment provided by engineer. */\n\"Change Creation Date\" = \"Change Creation Date\";\n\n/* Settings */\n\"Check Spelling\" = \"Check Spelling\";\n\n/* No comment provided by engineer. */\n\"Code\" = \"Блок кода\";\n\n/* Settings */\n\"Code Block Live Highlighting\" = \"Code Block Live Highlighting\";\n\n/* Settings */\n\"Code Theme\" = \"Тема кода\";\n\n/* No comment provided by engineer. */\n\"Compatible with DayOne JSON (zip), Bear and Ulysses (textbundle), markdown, txt, rtf.\" = \"Совместимо с DayOne JSON (zip), Bear and Ulysses (textbundle), markdown, txt, rtf.\";\n\n/* Settings */\n\"Container\" = \"Контейнер\";\n\n/* No comment provided by engineer. */\n\"Copy Plain Text\" = \"Copy Plain Text\";\n\n/* Main view popover table */\n\"Create Folder\" = \"Create Folder\";\n\n/* No comment provided by engineer. */\n\"Create folder:\" = \"Создать папку:\";\n\n/* No comment provided by engineer. */\n\"Create Web Page\" = \"Create Web Page\";\n\n/* No comment provided by engineer. */\n\"Creation Date\" = \"Creation Date\";\n\n/* Main view popover table */\n\"Decrypt\" = \"Decrypt\";\n\n/* Settings */\n\"Default Keyboard\" = \"Default Keyboard\";\n\n/* Table row action */\n\"Delete\" = \"Удалить\";\n\n/* No comment provided by engineer. */\n\"Delete Web Page\" = \"Delete Web Page\";\n\n/* No comment provided by engineer. */\n\"Documents\" = \"Документы\";\n\n/* No comment provided by engineer. */\n\"Done\" = \"Done\";\n\n/* No comment provided by engineer. */\n\"Duplicate\" = \"Создать копию\";\n\n/* Settings */\n\"Dynamic Type\" = \"Динамический шрифт\";\n\n/* Settings */\n\"Editor\" = \"Редактор\";\n\n/* Main view popover table */\n\"Empty Bin\" = \"Очистить корзину\";\n\n/* Main view popover table */\n\"Encrypt\" = \"Encrypt\";\n\n/* No comment provided by engineer. */\n\"Enter folder name\" = \"Введите название папки\";\n\n/* No comment provided by engineer. */\n\"Enter Master Password\" = \"Введите пароль\";\n\n/* No comment provided by engineer. */\n\"Enter new tag name\" = \"Введите название тега\";\n\n/* No comment provided by engineer. */\n\"Enter note name\" = \"Введите название заметки\";\n\n/* Settings */\n\"Extension\" = \"Расширение\";\n\n/* Settings */\n\"Family\" = \"Семейство шрифтов\";\n\n/* No comment provided by engineer. */\n\"File with this name already exist\" = \"Файл с таким именем уже существует\";\n\n/* Settings */\n\"Files\" = \"Files\";\n\n/* Settings */\n\"Files Naming\" = \"Именование файлов\";\n\n/* No comment provided by engineer. */\n\"Folder name:\" = \"Название папки:\";\n\n/* No comment provided by engineer. */\n\"Folder with this name already exist\" = \"Папка с таким именем уже существует\";\n\n/* Settings */\n\"Folders\" = \"Folders\";\n\n/* Settings */\n\"Font\" = \"Шрифт\";\n\n/* Settings */\n\"Font Family\" = \"Семейство шрифтов\";\n\n/* Settings */\n\"Font Size\" = \"Font Size\";\n\n/* Settings */\n\"Format: Untitled Note\" = \"Формат: Untitled Note\";\n\n/* Settings */\n\"Format: yyyy-MM-dd hh.mm.ss a\" = \"Формат: yyyy-MM-dd hh.mm.ss a\";\n\n/* Settings */\n\"Format: yyyyMMddHHmmss\" = \"Формат: yyyyMMddHHmmss\";\n\n/* Settings */\n\"FSNotes\" = \"FSNotes\";\n\n/* Settings */\n\"General\" = \"Основные\";\n\n/* Settings */\n\"Git\" = \"Git\";\n\n/* Main view popover table */\n\"Git Add/commit/push\" = \"Git Add/commit/push\";\n\n/* Main view popover table */\n\"Git Settings\" = \"Git Settings\";\n\n/* No comment provided by engineer. */\n\"History\" = \"История\";\n\n/* Settings */\n\"iCloud Drive\" = \"iCloud Drive\";\n\n/* Settings */\n\"Icon\" = \"Icon\";\n\n/* No comment provided by engineer. */\n\"Images source:\" = \"Источник изображения:\";\n\n/* Settings */\n\"Import Notes\" = \"Import Notes\";\n\n/* Inbox in sidebar */\n\"Inbox\" = \"Входящие\";\n\n/* No comment provided by engineer. */\n\"Invalid Password\" = \"Неверный пароль\";\n\n/* Settings */\n\"Library\" = \"Library\";\n\n/* Settings */\n\"Line Spacing\" = \"Межстрочный интервал\";\n\n/* Settings */\n\"Live Images Preview\" = \"Live Images Preview\";\n\n/* No comment provided by engineer. */\n\"Lock\" = \"Заблокировать\";\n\n/* Settings */\n\"Master\" = \"Master\";\n\n/* No comment provided by engineer. */\n\"Master password:\" = \"Мастер пароль:\";\n\n/* Settings */\n\"MathJax\" = \"MathJax\";\n\n/* No comment provided by engineer. */\n\"Modification Date\" = \"Modification Date\";\n\n/* Table row action */\n\"More\" = \"Ещё\";\n\n/* Move view */\n\"Move\" = \"Переместить\";\n\n/* No comment provided by engineer. */\n\"New Note\" = \"New Note\";\n\n/* No comment provided by engineer. */\n\"None\" = \"Умолчанию\";\n\n/* Notes in sidebar */\n\"Notes\" = \"Заметки\";\n\n/* No comment provided by engineer. */\n\"Notes List\" = \"Notes List\";\n\n/* Main view popover table */\n\"Open in Files.app\" = \"Открыть в Files.app\";\n\n/* Document opened */\n\"Open Note\" = \"Open Note\";\n\n/* No comment provided by engineer. */\n\"Passphrase\" = \"Passphrase\";\n\n/* No comment provided by engineer. */\n\"Password\" = \"Password\";\n\n/* No comment provided by engineer. */\n\"Password has been successfully changed\" = \"Password has been successfully changed\";\n\n/* No comment provided by engineer. */\n\"Password:\" = \"Password:\";\n\n/* No comment provided by engineer. */\n\"Photos\" = \"Фото\";\n\n/* No comment provided by engineer. */\n\"Picture removing\" = \"Удаление изображения\";\n\n/* Table row action */\n\"Pin\" = \"Прикрепить\";\n\n/* No comment provided by engineer. */\n\"Please enter valid password\" = \"Введите действующий пароль\";\n\n/* No comment provided by engineer. */\n\"Please try again\" = \"Please try again\";\n\n/* No comment provided by engineer. */\n\"Private Key\" = \"Private Key\";\n\n/* No comment provided by engineer. */\n\"Project removing ❌\" = \"Удаление проекта ❌\";\n\n/* No comment provided by engineer. */\n\"Public Key (optional)\" = \"Public Key (optional)\";\n\n/* No comment provided by engineer. */\n\"Pull (every 30 sec)\" = \"Pull (every 30 sec)\";\n\n/* No comment provided by engineer. */\n\"Remove Encryption\" = \"Remove Encryption\";\n\n/* Main view popover table */\n\"Remove Folder\" = \"Remove Folder\";\n\n/* Main view popover table */\n\"Remove Tag\" = \"Remove Tag\";\n\n/* No comment provided by engineer. */\n\"Rename\" = \"Переименовать\";\n\n/* Main view popover table */\n\"Rename Folder\" = \"Rename Folder\";\n\n/* Popover table */\n\"Rename folder:\" = \"Переименовать папку:\";\n\n/* No comment provided by engineer. */\n\"Rename note:\" = \"Переименовать заметку:\";\n\n/* Main view popover table */\n\"Rename Tag\" = \"Rename Tag\";\n\n/* Popover table */\n\"Rename tag:\" = \"Переименовать тег:\";\n\n/* No comment provided by engineer. */\n\"Save\" = \"Save\";\n\n/* No comment provided by engineer. */\n\"Save Clipboard\" = \"Save Clipboard\";\n\n/* No comment provided by engineer. */\n\"Save Revision\" = \"Save Revision\";\n\n/* No comment provided by engineer. */\n\"Saved versions\" = \"Сохраненные версии\";\n\n/* No comment provided by engineer. */\n\"Search or create\" = \"Найти или создать\";\n\n/* No comment provided by engineer. */\n\"Search or Create\" = \"Search or Create\";\n\n/* Settings */\n\"Security\" = \"Security\";\n\n/* Main view popover table */\n\"Select\" = \"Выбрать\";\n\n/* Sidebar settings */\n\"Settings\" = \"Наcтройки\";\n\n/* No comment provided by engineer. */\n\"Share\" = \"Поделиться\";\n\n/* No comment provided by engineer. */\n\"Show Folder in Library\" = \"Show Folder in Library\";\n\n/* No comment provided by engineer. */\n\"Show Notes in \\\"Notes\\\" and \\\"Todo\\\"\" = \"Show Notes in \\\"Notes\\\" and \\\"Todo\\\"\";\n\n/* Settings */\n\"Sort By\" = \"Sort By\";\n\n/* Settings */\n\"SoulverCore\" = \"SoulverCore\";\n\n/* Settings */\n\"Storage\" = \"Хранилище\";\n\n/* Settings */\n\"Support\" = \"Поддержка\";\n\n/* Settings */\n\"Thanks\" = \"Thanks\";\n\n/* Settings */\n\"Theme\" = \"Тема\";\n\n/* No comment provided by engineer. */\n\"Tip: To use old notes, you must decrypt them separately with the old key and encrypt them again.\" = \"Tip: To use old notes, you must decrypt them separately with the old key and encrypt them again.\";\n\n/* No comment provided by engineer. */\n\"Title\" = \"Заголовку\";\n\n/* Sidebar items - Todo in sidebar */\n\"Todo\" = \"Todo\";\n\n/* Sidebar label - Trash in sidebar */\n\"Trash\" = \"Корзина\";\n\n/* Settings */\n\"Twitter\" = \"Twitter\";\n\n/* No comment provided by engineer. */\n\"Unlock\" = \"Разблокировать\";\n\n/* Table row action */\n\"Unpin\" = \"Unpin\";\n\n/* No comment provided by engineer. */\n\"Untagged\" = \"Без тегов\";\n\n/* No comment provided by engineer. */\n\"Update\" = \"Update\";\n\n/* No comment provided by engineer. */\n\"Use First Line as Title\" = \"Use First Line as Title\";\n\n/* No comment provided by engineer. */\n\"Use Inline Tags\" = \"Use Inline Tags\";\n\n/* No comment provided by engineer. */\n\"Verify Password\" = \"Verify Password\";\n\n/* Settings */\n\"Version\" = \"Версия\";\n\n/* No comment provided by engineer. */\n\"View\" = \"Вид\";\n\n/* Main view popover table */\n\"View Settings\" = \"View Settings\";\n\n/* No comment provided by engineer. */\n\"Visibility\" = \"Видимость\";\n\n/* No comment provided by engineer. */\n\"Web sharing error\" = \"Web sharing error\";\n\n/* Settings */\n\"Website\" = \"Website\";\n\n/* No comment provided by engineer. */\n\"Wrong password\" = \"Wrong password\";\n\n/* No comment provided by engineer. */\n\"Wrong repeated password\" = \"Wrong repeated password\";\n\n/* No comment provided by engineer. */\n\"Сlearing history\" = \"Очистка истории\";\n\n/* No comment provided by engineer. */\n\"✅ - \" = \"✅ - \";\n"
  },
  {
    "path": "FSNotes iOS/ru.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16097.2\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"pUA-i0-P2Y\">\n    <device id=\"retina6_5\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16087\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Basic View Controller-->\n        <scene sceneID=\"7hM-9K-GCb\">\n            <objects>\n                <viewController id=\"pUA-i0-P2Y\" customClass=\"BasicViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"2j2-dl-Yzt\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <containerView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ja1-Yx-J9n\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <connections>\n                                    <segue destination=\"Qe5-Pl-yOC\" kind=\"embed\" id=\"Nmv-TL-xfo\"/>\n                                </connections>\n                            </containerView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"bottom\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"bottom\" id=\"0oF-JR-UvE\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"top\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"top\" id=\"PHc-dp-DQt\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"trailing\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"trailing\" id=\"iwt-vB-his\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"leading\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"leading\" id=\"xj4-wq-plp\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"tub-hp-8vu\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Q9c-3W-wHO\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"133\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController storyboardIdentifier=\"listViewController\" id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsMultipleSelection=\"YES\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" contentViewInsetsToSafeArea=\"NO\" id=\"Mge-lh-GR9\" customClass=\"SidebarTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"0.83741801979999997\" green=\"0.83743780850000005\" blue=\"0.83742713930000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"sidebarCell\" rowHeight=\"53\" id=\"O2q-T0-6CW\" customClass=\"SidebarTableCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"O2q-T0-6CW\" id=\"tDd-4m-f4y\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BML-lv-XMi\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"16\" width=\"21\" height=\"21\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"21\" id=\"8Mj-2V-WOH\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"21\" id=\"wTd-8W-0ei\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZDf-m9-quL\">\n                                                    <rect key=\"frame\" x=\"47\" y=\"16\" width=\"42\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"2jK-Iv-hSY\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"leading\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"leading\" constant=\"15\" id=\"3wN-gR-43e\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"leading\" secondItem=\"BML-lv-XMi\" secondAttribute=\"trailing\" constant=\"11\" id=\"WoX-Z4-8rD\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"df2-um-WMI\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"top\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"top\" id=\"eS6-4w-fRe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"icon\" destination=\"BML-lv-XMi\" id=\"OEo-b9-tQT\"/>\n                                            <outlet property=\"label\" destination=\"ZDf-m9-quL\" id=\"NZJ-lZ-DhC\"/>\n                                            <outlet property=\"labelConstraint\" destination=\"WoX-Z4-8rD\" id=\"3y4-5j-nzf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"startLocation\">\n                                        <real key=\"value\" value=\"0.0\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"endLocation\">\n                                        <real key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"horizontalMode\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"diagonalMode\" value=\"NO\"/>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"startColor\">\n                                        <color key=\"value\" red=\"0.26237374695426474\" green=\"0.51481102530647083\" blue=\"0.63467639593908631\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"endColor\">\n                                        <color key=\"value\" red=\"0.30977162963466554\" green=\"0.48825662134271103\" blue=\"0.67302506345177648\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </tableView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"154\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"sUC-hL-bgg\" customClass=\"NotesTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"noteCell\" rowHeight=\"154\" id=\"uv7-Im-hed\" customClass=\"NoteCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"154\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"uv7-Im-hed\" id=\"De0-QG-drV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"154\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"pin_white.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ng0-bb-ENq\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"11\" width=\"23\" height=\"23\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"23\" id=\"KlO-n1-B2e\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"23\" id=\"k71-lI-ai0\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn1-Y0-0eh\">\n                                                    <rect key=\"frame\" x=\"23.000000000000004\" y=\"11\" width=\"33.333333333333343\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Preview\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LAf-Rz-QFy\">\n                                                    <rect key=\"frame\" x=\"23\" y=\"39\" width=\"377\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rsi-Av-qh2\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"0iB-an-r6e\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"3EZ-N8-htb\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t6a-FH-UHM\">\n                                                    <rect key=\"frame\" x=\"103\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"dd7-Po-Gye\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"eUw-LF-zQI\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L4T-lK-1pA\">\n                                                    <rect key=\"frame\" x=\"181\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"Qry-XG-kOl\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"mUL-BK-kWo\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label autoresizesSubviews=\"NO\" opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Date\" textAlignment=\"right\" lineBreakMode=\"clip\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AbV-ot-mEE\">\n                                                    <rect key=\"frame\" x=\"358\" y=\"11\" width=\"36\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" white=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"0OO-Nd-PCc\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"trailing\" id=\"0qP-JS-kYp\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Cn1-Y0-0eh\" secondAttribute=\"trailing\" priority=\"999\" constant=\"5\" id=\"7Uy-aY-372\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"leading\" secondItem=\"t6a-FH-UHM\" secondAttribute=\"trailing\" constant=\"8\" id=\"K3H-Qz-btY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" constant=\"14\" id=\"LJ9-2z-vAD\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leadingMargin\" constant=\"5\" id=\"MB0-DS-pMG\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"trailing\" secondItem=\"De0-QG-drV\" secondAttribute=\"trailingMargin\" id=\"ONj-Ke-bYc\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"thirdImageTop\" id=\"XPp-HF-VEk\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"YY9-pB-9Qe\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"secondImageTop\" id=\"Yvb-AC-CP7\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"top\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"bottom\" constant=\"5\" id=\"d2V-lD-g3R\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" id=\"fM2-85-PwK\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"iho-nX-yyl\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"23\" id=\"lRD-NL-mfR\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"firstImageTop\" id=\"uw7-pW-b3V\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"leading\" secondItem=\"rsi-Av-qh2\" secondAttribute=\"trailing\" constant=\"8\" id=\"zr3-db-Dgc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <inset key=\"separatorInset\" minX=\"15\" minY=\"0.0\" maxX=\"18\" maxY=\"0.0\"/>\n                                        <connections>\n                                            <outlet property=\"date\" destination=\"AbV-ot-mEE\" id=\"bLC-CN-Urn\"/>\n                                            <outlet property=\"imagePreview\" destination=\"rsi-Av-qh2\" id=\"7ax-Ce-vfL\"/>\n                                            <outlet property=\"imagePreviewSecond\" destination=\"t6a-FH-UHM\" id=\"My4-em-TVZ\"/>\n                                            <outlet property=\"imagePreviewThird\" destination=\"L4T-lK-1pA\" id=\"dxa-93-KoO\"/>\n                                            <outlet property=\"pin\" destination=\"Ng0-bb-ENq\" id=\"vgv-uX-Hak\"/>\n                                            <outlet property=\"preview\" destination=\"LAf-Rz-QFy\" id=\"OTM-Tt-F3b\"/>\n                                            <outlet property=\"title\" destination=\"Cn1-Y0-0eh\" id=\"giJ-Tv-pg9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"alp-5Z-1d9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"45\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Inbox ▽\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8VE-HM-shO\">\n                                        <rect key=\"frame\" x=\"175.66666666666666\" y=\"8\" width=\"63\" height=\"21\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"∞\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"m6a-dd-9sW\">\n                                        <rect key=\"frame\" x=\"202\" y=\"29\" width=\"10\" height=\"12\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"10\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UUp-E6-rvb\">\n                                        <rect key=\"frame\" x=\"366\" y=\"3\" width=\"38\" height=\"38\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"Eme-RV-Jot\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"38\" id=\"XB0-Gh-Rhh\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" image=\"more_white.png\"/>\n                                        <connections>\n                                            <action selector=\"bulkEditing:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"OHc-6e-Ap0\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yuS-7s-7qj\">\n                                        <rect key=\"frame\" x=\"11\" y=\"6\" width=\"35\" height=\"35\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"35\" id=\"bhN-xF-K9M\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"35\" id=\"uGB-NL-S3D\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" title=\"   \" image=\"search.png\"/>\n                                        <connections>\n                                            <action selector=\"openSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rzD-5M-jpI\"/>\n                                        </connections>\n                                    </button>\n                                    <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MB3-6y-v2m\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"45\"/>\n                                        <subviews>\n                                            <searchBar contentMode=\"redraw\" searchBarStyle=\"minimal\" placeholder=\"Search and create\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ywj-qM-UNi\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"7\" width=\"330\" height=\"28\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"28\" id=\"CeT-yV-UZz\"/>\n                                                </constraints>\n                                                <textInputTraits key=\"textInputTraits\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                            </searchBar>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1gp-bn-Xq5\">\n                                                <rect key=\"frame\" x=\"345\" y=\"4\" width=\"52\" height=\"32\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"16\"/>\n                                                <state key=\"normal\" title=\"Cancel\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                                <connections>\n                                                    <action selector=\"hideSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"pRF-bi-wcf\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"7\" id=\"1F0-4v-Fkk\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"leading\" secondItem=\"Ywj-qM-UNi\" secondAttribute=\"trailing\" constant=\"15\" id=\"3Ei-jM-H06\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"4\" id=\"So3-K9-1Ay\"/>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"leading\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"leading\" id=\"lfK-l4-lgP\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"1gp-bn-Xq5\" secondAttribute=\"trailing\" constant=\"17\" id=\"zZq-lK-avJ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.80974966287612915\" green=\"0.86932212114334106\" blue=\"0.95254331827163696\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" constant=\"11\" id=\"1VK-zF-gcR\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" id=\"2KN-W3-EX8\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" id=\"6Z3-5M-SSr\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"E4P-h2-Q50\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"centerX\" secondItem=\"m6a-dd-9sW\" secondAttribute=\"centerX\" id=\"Nhd-L1-bXr\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"6\" id=\"SGw-C8-KTf\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"29\" id=\"SP0-A0-34k\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"bottom\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"bottom\" id=\"XCH-gW-usb\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"45\" id=\"f3p-Br-Goh\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"8\" id=\"kdk-x0-9VK\"/>\n                                    <constraint firstItem=\"UUp-E6-rvb\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"3\" id=\"m4s-96-cCk\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"txa-PI-dmX\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"bottom\" id=\"vmc-WX-Kdu\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"trailing\" constant=\"10\" id=\"vy0-6Z-X0J\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zcg-gZ-ayJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1zz-x1-ZSj\" userLabel=\"left Pre Header\">\n                                <rect key=\"frame\" x=\"-100\" y=\"0.0\" width=\"100\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <color key=\"tintColor\" systemColor=\"linkColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wpe-hj-LME\" userLabel=\"right Pre Header\">\n                                <rect key=\"frame\" x=\"414\" y=\"0.0\" width=\"0.0\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5HY-PP-zis\" userLabel=\"left Pre Safe Area\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemIndigoColor\" red=\"0.34509803919999998\" green=\"0.33725490200000002\" blue=\"0.83921568629999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"657-iG-bJh\" userLabel=\"right Pre Safe Area\">\n                                <rect key=\"frame\" x=\"414\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemGreenColor\" red=\"0.20392156859999999\" green=\"0.78039215689999997\" blue=\"0.34901960780000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" name=\"link\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"5HY-PP-zis\" secondAttribute=\"bottom\" id=\"2S1-Nr-4us\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"top\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"646-6p-9Ei\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"657-iG-bJh\" secondAttribute=\"trailing\" id=\"EzF-WF-59H\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"F7z-L9-IJx\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"trailing\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"FC3-5g-ecO\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"5HY-PP-zis\" secondAttribute=\"trailing\" id=\"GdS-aI-zFZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"KUe-TY-0IR\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"-100\" id=\"Nnc-ac-kZm\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"Rkf-Ei-utF\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"WyW-Bd-SCR\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"ask-10-ADA\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"bottom\" id=\"h2b-2w-Imy\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"hm7-bB-XCW\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jVD-S8-1Ec\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jkH-Gz-0IJ\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"trailing\" id=\"kQL-us-md5\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"bottom\" id=\"lqI-Xe-LTO\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"trailing\" id=\"puE-T2-Fhz\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"657-iG-bJh\" secondAttribute=\"bottom\" id=\"s6e-2S-ra7\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"wpe-hj-LME\" secondAttribute=\"trailing\" id=\"sPE-j3-mF5\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"trailing\" id=\"uCf-ba-qsG\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"wpe-hj-LME\" secondAttribute=\"bottom\" id=\"xDG-1G-KJZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"leading\" id=\"xNm-iI-BiD\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"hRO-uY-yS2\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                    <connections>\n                        <outlet property=\"currentFolder\" destination=\"8VE-HM-shO\" id=\"5rb-vR-OgA\"/>\n                        <outlet property=\"folderCapacity\" destination=\"m6a-dd-9sW\" id=\"Mdo-la-wuE\"/>\n                        <outlet property=\"headerView\" destination=\"alp-5Z-1d9\" id=\"cXW-wJ-XFm\"/>\n                        <outlet property=\"leftPreHeader\" destination=\"1zz-x1-ZSj\" id=\"j81-Mx-cbD\"/>\n                        <outlet property=\"leftPreSafeArea\" destination=\"5HY-PP-zis\" id=\"P39-3d-yrJ\"/>\n                        <outlet property=\"notesTable\" destination=\"sUC-hL-bgg\" id=\"Iqp-8V-0Ly\"/>\n                        <outlet property=\"preHeaderView\" destination=\"zcg-gZ-ayJ\" id=\"1c1-8H-2gn\"/>\n                        <outlet property=\"rightPreHeader\" destination=\"wpe-hj-LME\" id=\"hfT-yp-bKE\"/>\n                        <outlet property=\"rightPreSafeArea\" destination=\"657-iG-bJh\" id=\"T5i-i3-SQA\"/>\n                        <outlet property=\"search\" destination=\"Ywj-qM-UNi\" id=\"FFN-oi-ibv\"/>\n                        <outlet property=\"searchButton\" destination=\"yuS-7s-7qj\" id=\"PUs-Xi-SMU\"/>\n                        <outlet property=\"searchCancel\" destination=\"1gp-bn-Xq5\" id=\"k7J-hm-b5c\"/>\n                        <outlet property=\"searchView\" destination=\"MB3-6y-v2m\" id=\"C6r-2P-Y6W\"/>\n                        <outlet property=\"settingsButton\" destination=\"UUp-E6-rvb\" id=\"wUB-8I-7YG\"/>\n                        <outlet property=\"sidebarTableView\" destination=\"Mge-lh-GR9\" id=\"PMJ-cU-cu8\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"141.29464285714286\" y=\"133.33333333333334\"/>\n        </scene>\n        <!--Editor View Controller-->\n        <scene sceneID=\"slE-pv-o03\">\n            <objects>\n                <viewController storyboardIdentifier=\"editorViewController\" id=\"ric-rS-hWq\" customClass=\"EditorViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ddk-kN-IZ8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"interactive\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ecm-ZU-dhM\" customClass=\"EditTextView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"812\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" autocorrectionType=\"no\" keyboardAppearance=\"light\" smartQuotesType=\"no\"/>\n                            </textView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"top\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"top\" id=\"N5x-s4-zby\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"trailing\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"trailing\" id=\"RB6-wy-4rq\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"bottom\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"bottom\" constant=\"6\" id=\"TH4-jD-Xnb\"/>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"leading\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"leading\" id=\"V6w-av-pPX\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"QrF-sP-UlZ\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"editArea\" destination=\"ecm-ZU-dhM\" id=\"kTy-5J-L7P\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ihg-8y-LLI\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"928.79999999999995\" y=\"133.5832083958021\"/>\n        </scene>\n        <!--Preview View Controller-->\n        <scene sceneID=\"HXZ-PF-sPm\">\n            <objects>\n                <viewController storyboardIdentifier=\"previewViewController\" id=\"Oga-nk-3WY\" customClass=\"PreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Fn5-LP-Dsx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"ByR-0t-POa\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"DZq-E6-XdK\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1668\" y=\"134\"/>\n        </scene>\n        <!--Table View Controller-->\n        <scene sceneID=\"8HG-j4-oXm\">\n            <objects>\n                <tableViewController id=\"6ci-Ie-asX\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" id=\"ngK-1d-578\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Section-1\" id=\"Qe6-HW-ixo\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"66s-Gh-Luv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"66s-Gh-Luv\" id=\"d3l-FU-ZeG\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"9Pi-CL-R7G\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"9Pi-CL-R7G\" id=\"Sia-kY-FXM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"jFN-r0-w0O\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"jFN-r0-w0O\" id=\"f2a-UK-Dww\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-2\" id=\"sXm-Sf-piq\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Hf5-np-yWa\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"243.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Hf5-np-yWa\" id=\"v25-Aq-Loe\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"V0c-IL-XTx\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"287.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"V0c-IL-XTx\" id=\"jqb-Z0-IMB\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"GNL-at-ms7\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"331.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"GNL-at-ms7\" id=\"qt7-dA-nds\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-3\" id=\"w10-Gt-pMh\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Eu2-qK-XhF\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"431.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Eu2-qK-XhF\" id=\"WPZ-Hg-lf6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"zzy-np-NW2\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"475.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"zzy-np-NW2\" id=\"brQ-fw-NYY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"fSW-YV-KfQ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"519.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"fSW-YV-KfQ\" id=\"ccD-lE-b1g\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"6ci-Ie-asX\" id=\"EpY-vk-GBo\"/>\n                            <outlet property=\"delegate\" destination=\"6ci-Ie-asX\" id=\"DAI-OV-W1R\"/>\n                        </connections>\n                    </tableView>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"gGo-VN-Sc1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2452\" y=\"134\"/>\n        </scene>\n        <!--Image Preview View Controller-->\n        <scene sceneID=\"OOK-4o-43g\">\n            <objects>\n                <viewController storyboardIdentifier=\"imagePreviewViewController\" id=\"gXA-UP-nPE\" customClass=\"ImagePreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Hcy-mV-Ewd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1T-1l-93q\" customClass=\"ImageScrollView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"852\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            </scrollView>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gYe-LF-KuA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"852\" width=\"414\" height=\"44\"/>\n                                <items>\n                                    <navigationItem id=\"nkb-GO-G7U\"/>\n                                </items>\n                            </navigationBar>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"trailing\" id=\"YAG-UM-ijf\"/>\n                            <constraint firstItem=\"gYe-LF-KuA\" firstAttribute=\"leading\" secondItem=\"Hcy-mV-Ewd\" secondAttribute=\"leading\" id=\"ate-Ff-XmV\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"bottom\" id=\"rlq-M4-xPb\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"DVk-Fs-Jhg\"/>\n                    </view>\n                    <toolbarItems/>\n                    <simulatedToolbarMetrics key=\"simulatedBottomBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"imageScrollView\" destination=\"T1T-1l-93q\" id=\"sHb-Vp-jwF\"/>\n                        <outlet property=\"navigation\" destination=\"gYe-LF-KuA\" id=\"P4L-eh-YMx\"/>\n                        <outlet property=\"navigationBar\" destination=\"nkb-GO-G7U\" id=\"DJ1-0k-0oR\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mXN-5G-zCr\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3216\" y=\"134\"/>\n        </scene>\n        <!--Swifty Page Controller-->\n        <scene sceneID=\"b50-aI-65w\">\n            <objects>\n                <viewController id=\"Qe5-Pl-yOC\" customClass=\"SwiftyPageController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"TTB-WN-czk\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"lgj-UL-SQR\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"qVs-qv-gW1\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"885\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"more_white.png\" width=\"75\" height=\"75\"/>\n        <image name=\"pin_white.png\" width=\"128\" height=\"128\"/>\n        <image name=\"search.png\" width=\"39\" height=\"39\"/>\n        <namedColor name=\"link\">\n            <color red=\"0.23999999463558197\" green=\"0.50999999046325684\" blue=\"0.88999998569488525\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS/uk.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16097.2\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"pUA-i0-P2Y\">\n    <device id=\"retina6_5\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16087\"/>\n        <capability name=\"Named colors\" minToolsVersion=\"9.0\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Basic View Controller-->\n        <scene sceneID=\"7hM-9K-GCb\">\n            <objects>\n                <viewController id=\"pUA-i0-P2Y\" customClass=\"BasicViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"2j2-dl-Yzt\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <containerView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ja1-Yx-J9n\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <connections>\n                                    <segue destination=\"Qe5-Pl-yOC\" kind=\"embed\" id=\"Nmv-TL-xfo\"/>\n                                </connections>\n                            </containerView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"bottom\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"bottom\" id=\"0oF-JR-UvE\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"top\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"top\" id=\"PHc-dp-DQt\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"trailing\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"trailing\" id=\"iwt-vB-his\"/>\n                            <constraint firstItem=\"Ja1-Yx-J9n\" firstAttribute=\"leading\" secondItem=\"2j2-dl-Yzt\" secondAttribute=\"leading\" id=\"xj4-wq-plp\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"tub-hp-8vu\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Q9c-3W-wHO\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"133\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController storyboardIdentifier=\"listViewController\" id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsMultipleSelection=\"YES\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" contentViewInsetsToSafeArea=\"NO\" id=\"Mge-lh-GR9\" customClass=\"SidebarTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"0.83741801979999997\" green=\"0.83743780850000005\" blue=\"0.83742713930000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"sidebarCell\" rowHeight=\"53\" id=\"O2q-T0-6CW\" customClass=\"SidebarTableCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"53\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"O2q-T0-6CW\" id=\"tDd-4m-f4y\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"53\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BML-lv-XMi\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"16\" width=\"21\" height=\"21\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"21\" id=\"8Mj-2V-WOH\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"21\" id=\"wTd-8W-0ei\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZDf-m9-quL\">\n                                                    <rect key=\"frame\" x=\"47\" y=\"16\" width=\"42\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"2jK-Iv-hSY\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"leading\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"leading\" constant=\"15\" id=\"3wN-gR-43e\"/>\n                                                <constraint firstItem=\"ZDf-m9-quL\" firstAttribute=\"leading\" secondItem=\"BML-lv-XMi\" secondAttribute=\"trailing\" constant=\"11\" id=\"WoX-Z4-8rD\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"centerY\" secondItem=\"tDd-4m-f4y\" secondAttribute=\"centerY\" id=\"df2-um-WMI\"/>\n                                                <constraint firstItem=\"BML-lv-XMi\" firstAttribute=\"top\" secondItem=\"ZDf-m9-quL\" secondAttribute=\"top\" id=\"eS6-4w-fRe\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"icon\" destination=\"BML-lv-XMi\" id=\"OEo-b9-tQT\"/>\n                                            <outlet property=\"label\" destination=\"ZDf-m9-quL\" id=\"NZJ-lZ-DhC\"/>\n                                            <outlet property=\"labelConstraint\" destination=\"WoX-Z4-8rD\" id=\"3y4-5j-nzf\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"startLocation\">\n                                        <real key=\"value\" value=\"0.0\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"endLocation\">\n                                        <real key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"horizontalMode\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"diagonalMode\" value=\"NO\"/>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"startColor\">\n                                        <color key=\"value\" red=\"0.26237374695426474\" green=\"0.51481102530647083\" blue=\"0.63467639593908631\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"endColor\">\n                                        <color key=\"value\" red=\"0.30977162963466554\" green=\"0.48825662134271103\" blue=\"0.67302506345177648\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </tableView>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" rowHeight=\"154\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"sUC-hL-bgg\" customClass=\"NotesTableView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"414\" height=\"807\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"noteCell\" rowHeight=\"154\" id=\"uv7-Im-hed\" customClass=\"NoteCellView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"154\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"uv7-Im-hed\" id=\"De0-QG-drV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"154\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"pin_white.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ng0-bb-ENq\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"11\" width=\"23\" height=\"23\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"23\" id=\"KlO-n1-B2e\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"23\" id=\"k71-lI-ai0\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" horizontalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn1-Y0-0eh\">\n                                                    <rect key=\"frame\" x=\"23.000000000000004\" y=\"11\" width=\"33.333333333333343\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Preview\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LAf-Rz-QFy\">\n                                                    <rect key=\"frame\" x=\"23\" y=\"39\" width=\"377\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"textColor\" name=\"secondaryLabelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rsi-Av-qh2\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"0iB-an-r6e\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"3EZ-N8-htb\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"t6a-FH-UHM\">\n                                                    <rect key=\"frame\" x=\"103\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"dd7-Po-Gye\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"eUw-LF-zQI\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L4T-lK-1pA\">\n                                                    <rect key=\"frame\" x=\"181\" y=\"69\" width=\"70\" height=\"70\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"70\" id=\"Qry-XG-kOl\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"70\" id=\"mUL-BK-kWo\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label autoresizesSubviews=\"NO\" opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Date\" textAlignment=\"right\" lineBreakMode=\"clip\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AbV-ot-mEE\">\n                                                    <rect key=\"frame\" x=\"358\" y=\"11\" width=\"36\" height=\"21\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" white=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                    <attributedString key=\"userComments\">\n                                                        <fragment content=\"#bc-ignore!\"/>\n                                                    </attributedString>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"0OO-Nd-PCc\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"leading\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"trailing\" id=\"0qP-JS-kYp\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Cn1-Y0-0eh\" secondAttribute=\"trailing\" priority=\"999\" constant=\"5\" id=\"7Uy-aY-372\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"leading\" secondItem=\"t6a-FH-UHM\" secondAttribute=\"trailing\" constant=\"8\" id=\"K3H-Qz-btY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"trailing\" constant=\"14\" id=\"LJ9-2z-vAD\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leadingMargin\" constant=\"5\" id=\"MB0-DS-pMG\"/>\n                                                <constraint firstItem=\"AbV-ot-mEE\" firstAttribute=\"trailing\" secondItem=\"De0-QG-drV\" secondAttribute=\"trailingMargin\" id=\"ONj-Ke-bYc\"/>\n                                                <constraint firstItem=\"L4T-lK-1pA\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"thirdImageTop\" id=\"XPp-HF-VEk\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"YY9-pB-9Qe\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"secondImageTop\" id=\"Yvb-AC-CP7\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"top\" secondItem=\"Ng0-bb-ENq\" secondAttribute=\"bottom\" constant=\"5\" id=\"d2V-lD-g3R\"/>\n                                                <constraint firstItem=\"Ng0-bb-ENq\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" id=\"fM2-85-PwK\"/>\n                                                <constraint firstItem=\"Cn1-Y0-0eh\" firstAttribute=\"top\" secondItem=\"De0-QG-drV\" secondAttribute=\"topMargin\" id=\"iho-nX-yyl\"/>\n                                                <constraint firstItem=\"LAf-Rz-QFy\" firstAttribute=\"leading\" secondItem=\"De0-QG-drV\" secondAttribute=\"leading\" constant=\"23\" id=\"lRD-NL-mfR\"/>\n                                                <constraint firstItem=\"rsi-Av-qh2\" firstAttribute=\"top\" secondItem=\"LAf-Rz-QFy\" secondAttribute=\"bottom\" constant=\"12\" identifier=\"firstImageTop\" id=\"uw7-pW-b3V\"/>\n                                                <constraint firstItem=\"t6a-FH-UHM\" firstAttribute=\"leading\" secondItem=\"rsi-Av-qh2\" secondAttribute=\"trailing\" constant=\"8\" id=\"zr3-db-Dgc\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <inset key=\"separatorInset\" minX=\"15\" minY=\"0.0\" maxX=\"18\" maxY=\"0.0\"/>\n                                        <connections>\n                                            <outlet property=\"date\" destination=\"AbV-ot-mEE\" id=\"bLC-CN-Urn\"/>\n                                            <outlet property=\"imagePreview\" destination=\"rsi-Av-qh2\" id=\"7ax-Ce-vfL\"/>\n                                            <outlet property=\"imagePreviewSecond\" destination=\"t6a-FH-UHM\" id=\"My4-em-TVZ\"/>\n                                            <outlet property=\"imagePreviewThird\" destination=\"L4T-lK-1pA\" id=\"dxa-93-KoO\"/>\n                                            <outlet property=\"pin\" destination=\"Ng0-bb-ENq\" id=\"vgv-uX-Hak\"/>\n                                            <outlet property=\"preview\" destination=\"LAf-Rz-QFy\" id=\"OTM-Tt-F3b\"/>\n                                            <outlet property=\"title\" destination=\"Cn1-Y0-0eh\" id=\"giJ-Tv-pg9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"alp-5Z-1d9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"45\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Inbox ▽\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8VE-HM-shO\">\n                                        <rect key=\"frame\" x=\"175.66666666666666\" y=\"8\" width=\"63\" height=\"21\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"∞\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"m6a-dd-9sW\">\n                                        <rect key=\"frame\" x=\"202\" y=\"29\" width=\"10\" height=\"12\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"10\"/>\n                                        <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                        <attributedString key=\"userComments\">\n                                            <fragment content=\"#bc-ignore!\"/>\n                                        </attributedString>\n                                    </label>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UUp-E6-rvb\">\n                                        <rect key=\"frame\" x=\"366\" y=\"3\" width=\"38\" height=\"38\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"Eme-RV-Jot\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"38\" id=\"XB0-Gh-Rhh\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" image=\"more_white.png\"/>\n                                        <connections>\n                                            <action selector=\"bulkEditing:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"OHc-6e-Ap0\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yuS-7s-7qj\">\n                                        <rect key=\"frame\" x=\"11\" y=\"6\" width=\"35\" height=\"35\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"35\" id=\"bhN-xF-K9M\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"35\" id=\"uGB-NL-S3D\"/>\n                                        </constraints>\n                                        <inset key=\"imageEdgeInsets\" minX=\"5\" minY=\"5\" maxX=\"5\" maxY=\"5\"/>\n                                        <state key=\"normal\" title=\"   \" image=\"search.png\"/>\n                                        <connections>\n                                            <action selector=\"openSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rzD-5M-jpI\"/>\n                                        </connections>\n                                    </button>\n                                    <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MB3-6y-v2m\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"45\"/>\n                                        <subviews>\n                                            <searchBar contentMode=\"redraw\" searchBarStyle=\"minimal\" placeholder=\"Search and create\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ywj-qM-UNi\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"7\" width=\"330\" height=\"28\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"28\" id=\"CeT-yV-UZz\"/>\n                                                </constraints>\n                                                <textInputTraits key=\"textInputTraits\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                            </searchBar>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1gp-bn-Xq5\">\n                                                <rect key=\"frame\" x=\"345\" y=\"4\" width=\"52\" height=\"32\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"16\"/>\n                                                <state key=\"normal\" title=\"Cancel\"/>\n                                                <attributedString key=\"userComments\">\n                                                    <fragment content=\"#bc-ignore!\"/>\n                                                </attributedString>\n                                                <connections>\n                                                    <action selector=\"hideSearchView:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"pRF-bi-wcf\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"7\" id=\"1F0-4v-Fkk\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"leading\" secondItem=\"Ywj-qM-UNi\" secondAttribute=\"trailing\" constant=\"15\" id=\"3Ei-jM-H06\"/>\n                                            <constraint firstItem=\"1gp-bn-Xq5\" firstAttribute=\"top\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"top\" constant=\"4\" id=\"So3-K9-1Ay\"/>\n                                            <constraint firstItem=\"Ywj-qM-UNi\" firstAttribute=\"leading\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"leading\" id=\"lfK-l4-lgP\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"1gp-bn-Xq5\" secondAttribute=\"trailing\" constant=\"17\" id=\"zZq-lK-avJ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.80974966287612915\" green=\"0.86932212114334106\" blue=\"0.95254331827163696\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" constant=\"11\" id=\"1VK-zF-gcR\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"leading\" id=\"2KN-W3-EX8\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" id=\"6Z3-5M-SSr\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"E4P-h2-Q50\"/>\n                                    <constraint firstItem=\"MB3-6y-v2m\" firstAttribute=\"centerX\" secondItem=\"m6a-dd-9sW\" secondAttribute=\"centerX\" id=\"Nhd-L1-bXr\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"6\" id=\"SGw-C8-KTf\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"29\" id=\"SP0-A0-34k\"/>\n                                    <constraint firstItem=\"yuS-7s-7qj\" firstAttribute=\"bottom\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"bottom\" id=\"XCH-gW-usb\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"45\" id=\"f3p-Br-Goh\"/>\n                                    <constraint firstItem=\"8VE-HM-shO\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"8\" id=\"kdk-x0-9VK\"/>\n                                    <constraint firstItem=\"UUp-E6-rvb\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"top\" constant=\"3\" id=\"m4s-96-cCk\"/>\n                                    <constraint firstItem=\"m6a-dd-9sW\" firstAttribute=\"centerX\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"centerX\" id=\"txa-PI-dmX\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"MB3-6y-v2m\" secondAttribute=\"bottom\" id=\"vmc-WX-Kdu\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"UUp-E6-rvb\" secondAttribute=\"trailing\" constant=\"10\" id=\"vy0-6Z-X0J\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zcg-gZ-ayJ\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1zz-x1-ZSj\" userLabel=\"left Pre Header\">\n                                <rect key=\"frame\" x=\"-100\" y=\"0.0\" width=\"100\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <color key=\"tintColor\" systemColor=\"linkColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                        <color key=\"value\" systemColor=\"systemBlueColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wpe-hj-LME\" userLabel=\"right Pre Header\">\n                                <rect key=\"frame\" x=\"414\" y=\"0.0\" width=\"0.0\" height=\"89\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemRedColor\" red=\"1\" green=\"0.23137254900000001\" blue=\"0.18823529410000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5HY-PP-zis\" userLabel=\"left Pre Safe Area\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemIndigoColor\" red=\"0.34509803919999998\" green=\"0.33725490200000002\" blue=\"0.83921568629999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"657-iG-bJh\" userLabel=\"right Pre Safe Area\">\n                                <rect key=\"frame\" x=\"414\" y=\"89\" width=\"0.0\" height=\"807\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemGreenColor\" red=\"0.20392156859999999\" green=\"0.78039215689999997\" blue=\"0.34901960780000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                        <color key=\"value\" name=\"link\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"5HY-PP-zis\" secondAttribute=\"bottom\" id=\"2S1-Nr-4us\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"top\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"646-6p-9Ei\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"657-iG-bJh\" secondAttribute=\"trailing\" id=\"EzF-WF-59H\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"F7z-L9-IJx\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"trailing\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"FC3-5g-ecO\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"5HY-PP-zis\" secondAttribute=\"trailing\" id=\"GdS-aI-zFZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"bottom\" id=\"KUe-TY-0IR\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"-100\" id=\"Nnc-ac-kZm\"/>\n                            <constraint firstItem=\"5HY-PP-zis\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"Rkf-Ei-utF\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"WyW-Bd-SCR\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"trailing\" id=\"ask-10-ADA\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"bottom\" id=\"h2b-2w-Imy\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"top\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"top\" id=\"hm7-bB-XCW\"/>\n                            <constraint firstItem=\"zcg-gZ-ayJ\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jVD-S8-1Ec\"/>\n                            <constraint firstItem=\"1zz-x1-ZSj\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"top\" id=\"jkH-Gz-0IJ\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"zcg-gZ-ayJ\" secondAttribute=\"trailing\" id=\"kQL-us-md5\"/>\n                            <constraint firstItem=\"657-iG-bJh\" firstAttribute=\"top\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"bottom\" id=\"lqI-Xe-LTO\"/>\n                            <constraint firstItem=\"wpe-hj-LME\" firstAttribute=\"leading\" secondItem=\"alp-5Z-1d9\" secondAttribute=\"trailing\" id=\"puE-T2-Fhz\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"657-iG-bJh\" secondAttribute=\"bottom\" id=\"s6e-2S-ra7\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"wpe-hj-LME\" secondAttribute=\"trailing\" id=\"sPE-j3-mF5\"/>\n                            <constraint firstItem=\"hRO-uY-yS2\" firstAttribute=\"leading\" secondItem=\"1zz-x1-ZSj\" secondAttribute=\"trailing\" id=\"uCf-ba-qsG\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"bottom\" secondItem=\"wpe-hj-LME\" secondAttribute=\"bottom\" id=\"xDG-1G-KJZ\"/>\n                            <constraint firstItem=\"alp-5Z-1d9\" firstAttribute=\"leading\" secondItem=\"hRO-uY-yS2\" secondAttribute=\"leading\" id=\"xNm-iI-BiD\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"hRO-uY-yS2\"/>\n                        <userDefinedRuntimeAttributes>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"normalBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                            <userDefinedRuntimeAttribute type=\"color\" keyPath=\"nightBackgroundColor\">\n                                <color key=\"value\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                            </userDefinedRuntimeAttribute>\n                        </userDefinedRuntimeAttributes>\n                    </view>\n                    <connections>\n                        <outlet property=\"currentFolder\" destination=\"8VE-HM-shO\" id=\"5rb-vR-OgA\"/>\n                        <outlet property=\"folderCapacity\" destination=\"m6a-dd-9sW\" id=\"Mdo-la-wuE\"/>\n                        <outlet property=\"headerView\" destination=\"alp-5Z-1d9\" id=\"cXW-wJ-XFm\"/>\n                        <outlet property=\"leftPreHeader\" destination=\"1zz-x1-ZSj\" id=\"j81-Mx-cbD\"/>\n                        <outlet property=\"leftPreSafeArea\" destination=\"5HY-PP-zis\" id=\"P39-3d-yrJ\"/>\n                        <outlet property=\"notesTable\" destination=\"sUC-hL-bgg\" id=\"Iqp-8V-0Ly\"/>\n                        <outlet property=\"preHeaderView\" destination=\"zcg-gZ-ayJ\" id=\"1c1-8H-2gn\"/>\n                        <outlet property=\"rightPreHeader\" destination=\"wpe-hj-LME\" id=\"hfT-yp-bKE\"/>\n                        <outlet property=\"rightPreSafeArea\" destination=\"657-iG-bJh\" id=\"T5i-i3-SQA\"/>\n                        <outlet property=\"search\" destination=\"Ywj-qM-UNi\" id=\"FFN-oi-ibv\"/>\n                        <outlet property=\"searchButton\" destination=\"yuS-7s-7qj\" id=\"PUs-Xi-SMU\"/>\n                        <outlet property=\"searchCancel\" destination=\"1gp-bn-Xq5\" id=\"k7J-hm-b5c\"/>\n                        <outlet property=\"searchView\" destination=\"MB3-6y-v2m\" id=\"C6r-2P-Y6W\"/>\n                        <outlet property=\"settingsButton\" destination=\"UUp-E6-rvb\" id=\"wUB-8I-7YG\"/>\n                        <outlet property=\"sidebarTableView\" destination=\"Mge-lh-GR9\" id=\"PMJ-cU-cu8\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"141.29464285714286\" y=\"133.33333333333334\"/>\n        </scene>\n        <!--Editor View Controller-->\n        <scene sceneID=\"slE-pv-o03\">\n            <objects>\n                <viewController storyboardIdentifier=\"editorViewController\" id=\"ric-rS-hWq\" customClass=\"EditorViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ddk-kN-IZ8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"interactive\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ecm-ZU-dhM\" customClass=\"EditTextView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"812\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" autocorrectionType=\"no\" keyboardAppearance=\"light\" smartQuotesType=\"no\"/>\n                            </textView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"top\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"top\" id=\"N5x-s4-zby\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"trailing\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"trailing\" id=\"RB6-wy-4rq\"/>\n                            <constraint firstItem=\"QrF-sP-UlZ\" firstAttribute=\"bottom\" secondItem=\"ecm-ZU-dhM\" secondAttribute=\"bottom\" constant=\"6\" id=\"TH4-jD-Xnb\"/>\n                            <constraint firstItem=\"ecm-ZU-dhM\" firstAttribute=\"leading\" secondItem=\"QrF-sP-UlZ\" secondAttribute=\"leading\" id=\"V6w-av-pPX\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"QrF-sP-UlZ\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"editArea\" destination=\"ecm-ZU-dhM\" id=\"kTy-5J-L7P\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Ihg-8y-LLI\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"928.79999999999995\" y=\"133.5832083958021\"/>\n        </scene>\n        <!--Preview View Controller-->\n        <scene sceneID=\"HXZ-PF-sPm\">\n            <objects>\n                <viewController storyboardIdentifier=\"previewViewController\" id=\"Oga-nk-3WY\" customClass=\"PreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Fn5-LP-Dsx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"ByR-0t-POa\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"DZq-E6-XdK\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1668\" y=\"134\"/>\n        </scene>\n        <!--Table View Controller-->\n        <scene sceneID=\"8HG-j4-oXm\">\n            <objects>\n                <tableViewController id=\"6ci-Ie-asX\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" id=\"ngK-1d-578\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Section-1\" id=\"Qe6-HW-ixo\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"66s-Gh-Luv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"66s-Gh-Luv\" id=\"d3l-FU-ZeG\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"9Pi-CL-R7G\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333332061767578\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"9Pi-CL-R7G\" id=\"Sia-kY-FXM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"jFN-r0-w0O\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"jFN-r0-w0O\" id=\"f2a-UK-Dww\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-2\" id=\"sXm-Sf-piq\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Hf5-np-yWa\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"243.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Hf5-np-yWa\" id=\"v25-Aq-Loe\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"V0c-IL-XTx\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"287.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"V0c-IL-XTx\" id=\"jqb-Z0-IMB\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"GNL-at-ms7\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"331.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"GNL-at-ms7\" id=\"qt7-dA-nds\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Section-3\" id=\"w10-Gt-pMh\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"Eu2-qK-XhF\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"431.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Eu2-qK-XhF\" id=\"WPZ-Hg-lf6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"zzy-np-NW2\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"475.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"zzy-np-NW2\" id=\"brQ-fw-NYY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" preservesSuperviewLayoutMargins=\"YES\" selectionStyle=\"default\" indentationWidth=\"10\" id=\"fSW-YV-KfQ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"519.33333206176758\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" preservesSuperviewLayoutMargins=\"YES\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"fSW-YV-KfQ\" id=\"ccD-lE-b1g\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                                <attributedString key=\"userComments\">\n                                    <fragment content=\"#bc-ignore!\"/>\n                                </attributedString>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"6ci-Ie-asX\" id=\"EpY-vk-GBo\"/>\n                            <outlet property=\"delegate\" destination=\"6ci-Ie-asX\" id=\"DAI-OV-W1R\"/>\n                        </connections>\n                    </tableView>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"gGo-VN-Sc1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2452\" y=\"134\"/>\n        </scene>\n        <!--Image Preview View Controller-->\n        <scene sceneID=\"OOK-4o-43g\">\n            <objects>\n                <viewController storyboardIdentifier=\"imagePreviewViewController\" id=\"gXA-UP-nPE\" customClass=\"ImagePreviewViewController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Hcy-mV-Ewd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1T-1l-93q\" customClass=\"ImageScrollView\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"852\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                            </scrollView>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gYe-LF-KuA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"852\" width=\"414\" height=\"44\"/>\n                                <items>\n                                    <navigationItem id=\"nkb-GO-G7U\"/>\n                                </items>\n                            </navigationBar>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"trailing\" id=\"YAG-UM-ijf\"/>\n                            <constraint firstItem=\"gYe-LF-KuA\" firstAttribute=\"leading\" secondItem=\"Hcy-mV-Ewd\" secondAttribute=\"leading\" id=\"ate-Ff-XmV\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"gYe-LF-KuA\" secondAttribute=\"bottom\" id=\"rlq-M4-xPb\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"DVk-Fs-Jhg\"/>\n                    </view>\n                    <toolbarItems/>\n                    <simulatedToolbarMetrics key=\"simulatedBottomBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"imageScrollView\" destination=\"T1T-1l-93q\" id=\"sHb-Vp-jwF\"/>\n                        <outlet property=\"navigation\" destination=\"gYe-LF-KuA\" id=\"P4L-eh-YMx\"/>\n                        <outlet property=\"navigationBar\" destination=\"nkb-GO-G7U\" id=\"DJ1-0k-0oR\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"mXN-5G-zCr\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"3216\" y=\"134\"/>\n        </scene>\n        <!--Swifty Page Controller-->\n        <scene sceneID=\"b50-aI-65w\">\n            <objects>\n                <viewController id=\"Qe5-Pl-yOC\" customClass=\"SwiftyPageController\" customModule=\"FSNotes_iOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"TTB-WN-czk\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"lgj-UL-SQR\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"qVs-qv-gW1\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-704\" y=\"885\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"more_white.png\" width=\"75\" height=\"75\"/>\n        <image name=\"pin_white.png\" width=\"128\" height=\"128\"/>\n        <image name=\"search.png\" width=\"39\" height=\"39\"/>\n        <namedColor name=\"link\">\n            <color red=\"0.23999999463558197\" green=\"0.50999999046325684\" blue=\"0.88999998569488525\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </namedColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "FSNotes iOS Share/.bartycrouch.toml",
    "content": "[update]\ntasks = [\"interfaces\", \"code\", \"transform\", \"normalize\"]\n\n[update.interfaces]\npaths = [\".\"]\ndefaultToBase = false\nignoreEmptyStrings = false\nunstripped = false\n\n[update.code]\ncodePaths = [\".\"]\nlocalizablePaths = [\".\"]\ndefaultToKeys = true\nadditive = true\nunstripped = false\nplistArguments = true\n\n[update.transform]\ncodePaths = [\".\"]\nlocalizablePaths = [\".\"]\ntransformer = \"foundation\"\nsupportedLanguageEnumPath = \".\"\ntypeName = \"BartyCrouch\"\ntranslateMethodName = \"translate\"\n\n[update.normalize]\npaths = [\".\"]\nsourceLocale = \"en\"\nharmonizeWithSource = true\nsortByKeys = true\n\n[lint]\npaths = [\".\"]\nduplicateKeys = true\nemptyValues = true\n"
  },
  {
    "path": "FSNotes iOS Share/FSNotes iOS Share.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.developer.icloud-container-identifiers</key>\n\t<array>\n\t\t<string>iCloud.co.fluder.fsnotes</string>\n\t</array>\n\t<key>com.apple.developer.icloud-services</key>\n\t<array>\n\t\t<string>CloudDocuments</string>\n\t</array>\n\t<key>com.apple.developer.ubiquity-container-identifiers</key>\n\t<array>\n\t\t<string>iCloud.co.fluder.fsnotes</string>\n\t</array>\n\t<key>com.apple.developer.ubiquity-kvstore-identifier</key>\n\t<string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.es.fsnot.user.defaults</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes iOS Share/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>NSPrivacyAccessedAPITypes</key>\n    <array>\n        <dict>\n            <key>NSPrivacyAccessedAPIType</key>\n            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>\n            <key>NSPrivacyAccessedAPITypeReasons</key>\n            <array>\n                <string>DDA9.1</string>\n            </array>\n        </dict>\n        <dict>\n            <key>NSPrivacyAccessedAPIType</key>\n            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>\n            <key>NSPrivacyAccessedAPITypeReasons</key>\n            <array>\n                <string>CA92.1</string>\n            </array>\n        </dict>\n    </array>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>FSNotes</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>NSExtensionActivationRule</key>\n\t\t\t<string>SUBQUERY (\n    extensionItems,\n    $extensionItem,\n    SUBQUERY (\n        $extensionItem.attachments,\n        $attachment,\n        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO \"public.image\"\n    ).@count &gt; 0\n).@count == 1\nOR\nSUBQUERY (\n    extensionItems,\n    $extensionItem,\n    SUBQUERY (\n        $extensionItem.attachments,\n        $attachment,\n        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO \"public.url\"\n    ).@count == 1\n).@count == 1\nOR\nSUBQUERY (\n    extensionItems,\n    $extensionItem,\n    SUBQUERY (\n        $extensionItem.attachments,\n        $attachment,\n        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO \"public.plain-text\"\n    ).@count == 1\n).@count == 1</string>\n\t\t</dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.share-services</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>ShareViewController</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes iOS Share/Localizable.xcstrings",
    "content": "{\n  \"sourceLanguage\" : \"en\",\n  \"strings\" : {\n    \"Inbox\" : {\n      \"localizations\" : {\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Příchozí\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"इनबॉक्स\"\n          }\n        }\n      }\n    },\n    \"New note\" : {\n      \"localizations\" : {\n        \"ar-IQ\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"ملاحظة جديدة\"\n          }\n        },\n        \"cs\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nová poznámka\"\n          }\n        },\n        \"de\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Speichern\"\n          }\n        },\n        \"es\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nueva nota\"\n          }\n        },\n        \"fr\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nouvelle note\"\n          }\n        },\n        \"he\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"New note\"\n          }\n        },\n        \"hi\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"नया नोट\"\n          }\n        },\n        \"it\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nuova nota\"\n          }\n        },\n        \"ja\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新規ノート\"\n          }\n        },\n        \"ko\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"새 메모\"\n          }\n        },\n        \"nl-NL\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nieuwe notitie\"\n          }\n        },\n        \"pt-BR\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova nota\"\n          }\n        },\n        \"pt-PT\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Nova nota\"\n          }\n        },\n        \"ru\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Сохранить\"\n          }\n        },\n        \"uk\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"Зберегти\"\n          }\n        },\n        \"zh-Hans\" : {\n          \"stringUnit\" : {\n            \"state\" : \"translated\",\n            \"value\" : \"新笔记\"\n          }\n        }\n      }\n    }\n  },\n  \"version\" : \"1.0\"\n}"
  },
  {
    "path": "FSNotes iOS Share/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14313.18\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"j1y-V4-xli\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14283.14\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Share View Controller-->\n        <scene sceneID=\"ceB-am-kn3\">\n            <objects>\n                <viewController id=\"j1y-V4-xli\" customClass=\"ShareViewController\" customModule=\"FSNotes_iOS_Share_Extension\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" opaque=\"NO\" contentMode=\"scaleToFill\" id=\"wbc-yd-nQP\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"1Xd-am-t49\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"CEy-Cv-SGf\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"140\" y=\"133.5832083958021\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "FSNotes iOS Share/NSMutableAttributedString+.swift",
    "content": "//\n//  NSMutableAttributedString+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.11.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(OSX)\nimport AppKit\n#else\nimport UIKit\n#endif\n\nextension NSMutableAttributedString {\n\n    convenience init(url: URL, title: String = \"\", path: String) {\n        self.init()\n    }\n\n    public func unloadImagesAndFiles() -> NSMutableAttributedString {\n        return self\n    }\n\n    public func loadImagesAndFiles(note: Note) {\n\n    }\n\n    public func unloadTasks() -> NSMutableAttributedString {\n        return self\n    }\n\n    public func loadTasks() {\n\n    }\n\n    public func unloadAttachments() -> NSMutableAttributedString {\n        return self\n    }\n\n    public func loadAttachments(_ note: Note) -> NSMutableAttributedString {\n        return self\n    }\n\n    public func replaceTag(name: String, with replaceString: String) {\n\n    }\n\n    public func getImagesAndFiles() -> [(url: URL, title: String, path: String)] {\n        return []\n    }\n\n    public func getMeta(at location: Int) -> (url: URL, title: String, path: String)? {\n        return nil\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS Share/ShareViewController.swift",
    "content": "//\n//  ShareViewController.swift\n//  FSNotes iOS Share\n//\n//  Created by Oleksandr Glushchenko on 3/18/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport UIKit\nimport MobileCoreServices\nimport Social\nimport UniformTypeIdentifiers\n\n@objc(ShareViewController)\nclass ShareViewController: SLComposeServiceViewController {\n\n    // MARK: - Properties\n\n    private var hasImages = false\n    private var urlPreview: String?\n\n    // MARK: - Lifecycle\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        configureNavigationBar()\n    }\n\n    // MARK: - Configuration\n\n    private func configureNavigationBar() {\n        guard let navigationBar = navigationController?.navigationBar,\n              let rightButton = navigationBar.topItem?.rightBarButtonItem else {\n            return\n        }\n\n        rightButton.title = NSLocalizedString(\"New note\", comment: \"\")\n        navigationBar.tintColor = .mainTheme\n\n        let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 20))\n        titleLabel.text = \"FSNotes\"\n        titleLabel.font = UserDefaultsManagement.noteFont.bold().withSize(18)\n        navigationBar.topItem?.titleView = titleLabel\n    }\n\n    // MARK: - Preview\n\n    override func loadPreviewView() -> UIView! {\n        urlPreview = textView.text\n\n        guard let inputItems = extensionContext?.inputItems as? [NSExtensionItem] else {\n            return UIView()\n        }\n\n        processInputItems(inputItems)\n        return hasImages ? super.loadPreviewView() : UIView()\n    }\n\n    private func processInputItems(_ items: [NSExtensionItem]) {\n        for item in items {\n            guard let attachments = item.attachments else { continue }\n\n            for attachment in attachments {\n                if checkForImages(in: attachment) {\n                    hasImages = true\n                    textView.text = \"\"\n                    return\n                }\n\n                loadURLIfNeeded(from: attachment)\n            }\n        }\n    }\n\n    private func checkForImages(in attachment: NSItemProvider) -> Bool {\n        return attachment.hasItemConformingToTypeIdentifier(kUTTypeImage as String) ||\n               attachment.hasItemConformingToTypeIdentifier(kUTTypeJPEG as String)\n    }\n\n    private func loadURLIfNeeded(from attachment: NSItemProvider) {\n        guard attachment.hasItemConformingToTypeIdentifier(kUTTypeURL as String) else {\n            return\n        }\n\n        attachment.loadItem(forTypeIdentifier: kUTTypeURL as String, options: nil) { [weak self] url, error in\n            guard let self = self,\n                  let url = url as? URL,\n                  error == nil else {\n                return\n            }\n\n            self.handleLoadedURL(url)\n        }\n    }\n\n    private func handleLoadedURL(_ url: URL) {\n        if url.absoluteString.starts(with: \"file:///\") {\n            loadFileContent(from: url)\n        } else {\n            updateTextViewWithURL(url)\n        }\n    }\n\n    private func loadFileContent(from url: URL) {\n        guard let fileData = try? Data(contentsOf: url),\n              let text = String(data: fileData, encoding: .utf8) else {\n            return\n        }\n\n        DispatchQueue.main.async { [weak self] in\n            self?.textView.text = text\n        }\n    }\n\n    private func updateTextViewWithURL(_ url: URL) {\n        DispatchQueue.main.async { [weak self] in\n            guard let self = self else { return }\n            let preview = self.urlPreview ?? \"\"\n            self.textView.text = \"\\(preview)\\n\\n\\(url.absoluteString)\".trimmingCharacters(in: .whitespacesAndNewlines)\n        }\n    }\n\n    // MARK: - Validation & Post\n\n    override func isContentValid() -> Bool {\n        return true\n    }\n\n    override func didSelectPost() {\n        saveNote()\n    }\n\n    override func configurationItems() -> [Any]! {\n        return []\n    }\n\n    // MARK: - Save Note\n\n    private func saveNote() {\n        guard let inputItems = extensionContext?.inputItems as? [NSExtensionItem] else {\n            closeExtension()\n            return\n        }\n\n        let note = createNote()\n        processAttachments(from: inputItems, note: note)\n    }\n\n    private func createNote() -> Note {\n        let note = Note()\n        Storage.shared().add(note)\n\n        var urls = UserDefaultsManagement.importURLs\n        urls.insert(note.url, at: 0)\n        UserDefaultsManagement.importURLs = urls\n\n        return note\n    }\n\n    private func appendTextContent(to note: Note) {\n        guard !textView.text.isEmpty else { return }\n        note.append(string: NSMutableAttributedString(string: textView.text))\n    }\n\n    private func processAttachments(from items: [NSExtensionItem], note: Note) {\n        var imageProviders: [NSItemProvider] = []\n\n        for item in items {\n            guard let attachments = item.attachments else { continue }\n\n            for provider in attachments {\n                if provider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) {\n                    imageProviders.append(provider)\n                } else if provider.hasItemConformingToTypeIdentifier(kUTTypeURL as String) {\n                    processURLAttachment(note: note)\n                    return\n                } else if provider.hasItemConformingToTypeIdentifier(kUTTypeText as String) {\n                    processTextAttachment(note: note)\n                    return\n                }\n            }\n        }\n\n        if imageProviders.isEmpty {\n            closeExtension()\n        } else {\n            processImageAttachments(imageProviders, note: note)\n        }\n    }\n\n    private func processImageAttachments(_ providers: [NSItemProvider], note: Note) {\n        let totalCount = providers.count\n        var processedCount = 0\n\n        for provider in providers {\n            provider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: [:]) { [weak self] data, error in\n                guard let self = self, error == nil else {\n                    processedCount += 1\n                    if processedCount == totalCount {\n                        self?.finalizeNoteSave(note)\n                    }\n                    return\n                }\n\n                let imageData = self.extractImageData(from: data)\n                let url = data as? URL\n\n                if let imageData = imageData {\n                    note.append(image: imageData, url: url)\n                }\n\n                processedCount += 1\n                if processedCount == totalCount {\n                    self.finalizeNoteSave(note)\n                }\n            }\n        }\n    }\n\n    private func extractImageData(from data: Any?) -> Data? {\n        if let data = data as? Data {\n            return data\n        } else if let image = data as? UIImage {\n            return image.jpegData(compressionQuality: 1)\n        } else if let url = data as? URL {\n            return try? Data(contentsOf: url)\n        }\n        return nil\n    }\n\n    private func processURLAttachment(note: Note) {\n        guard !hasImages, let contentText = contentText else {\n            closeExtension()\n            return\n        }\n\n        if let url = URL(string: contentText),\n           let data = try? Data(contentsOf: url),\n           let image = UIImage(data: data),\n           image.size.width > 0 {\n            note.append(image: data)\n        } else {\n            appendContentWithPrefix(contentText, to: note)\n        }\n\n        finalizeNoteSave(note)\n    }\n\n    private func processTextAttachment(note: Note) {\n        guard !hasImages, let contentText = contentText else {\n            closeExtension()\n            return\n        }\n\n        appendContentWithPrefix(contentText, to: note)\n        finalizeNoteSave(note)\n    }\n\n    private func appendContentWithPrefix(_ content: String, to note: Note) {\n        let prefix = note.content.length == 0 ? \"\" : \"\\n\\n\"\n        let string = NSMutableAttributedString(string: \"\\(prefix)\\(content)\")\n        note.append(string: string)\n    }\n\n    private func finalizeNoteSave(_ note: Note) {\n        if note.saveSimple() {\n            Storage.shared().add(note)\n        }\n        closeExtension()\n    }\n\n    private func closeExtension() {\n        extensionContext?.completeRequest(returningItems: extensionContext?.inputItems, completionHandler: nil)\n    }\n}\n"
  },
  {
    "path": "FSNotes iOS Share/es.lproj/Localizable.strings",
    "content": "/* No comment provided by engineer. */\n\"Append to\" = \"\";\n\n/* No comment provided by engineer. */\n\"Choose for append\" = \"\";\n\n/* No comment provided by engineer. */\n\"New note\" = \"\";\n\n/* No comment provided by engineer. */\n\"Project\" = \"\";\n"
  },
  {
    "path": "FSNotes iOS Share/pt.lproj/InfoPlist.strings",
    "content": "/* Bundle display name */\n\"CFBundleDisplayName\" = \"FSNotes\";\n\n/* Bundle name */\n\"CFBundleName\" = \"مشاركة\";\n\n"
  },
  {
    "path": "FSNotes iOS Share/ru.lproj/InfoPlist.strings",
    "content": ""
  },
  {
    "path": "FSNotes iOS Share/ru.lproj/Localizable.strings",
    "content": "/* No comment provided by engineer. */\n\"Append to\" = \"Добавить к заметке\";\n\n/* No comment provided by engineer. */\n\"Choose for append\" = \"Выбрать заметку для добавления\";\n\n/* No comment provided by engineer. */\n\"New note\" = \"Сохранить\";\n\n/* No comment provided by engineer. */\n\"Project\" = \"Добавить в проект\";\n"
  },
  {
    "path": "FSNotes iOS Share/ru.lproj/MainInterface.strings",
    "content": "\n"
  },
  {
    "path": "FSNotes iOS Share/uk.lproj/InfoPlist.strings",
    "content": ""
  },
  {
    "path": "FSNotes iOS Share/uk.lproj/MainInterface.strings",
    "content": "\n"
  },
  {
    "path": "FSNotes iOS Share/zh-Hans-CN.lproj/InfoPlist.strings",
    "content": "/* Bundle display name */\n\"CFBundleDisplayName\" = \"FSNotes\";\n\n/* Bundle name */\n\"CFBundleName\" = \"FSNotes iOS分享扩展\";\n\n"
  },
  {
    "path": "FSNotes iOS Share/zh-Hans-CN.lproj/Localizable.strings",
    "content": "/* No comment provided by engineer. */\n\"Append to\" = \"附加到\";\n\n/* No comment provided by engineer. */\n\"Choose for append\" = \"选择追加\";\n\n/* No comment provided by engineer. */\n\"New note\" = \"新笔记\";\n\n/* No comment provided by engineer. */\n\"Project\" = \"项目\";\n"
  },
  {
    "path": "FSNotes iOS Share/zh-Hans.lproj/MainInterface.strings",
    "content": "\n"
  },
  {
    "path": "FSNotes.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\t1102DDB12EE4C280005029A6 /* EditTextView+Complete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1102DDB02EE4C277005029A6 /* EditTextView+Complete.swift */; };\n\t\t1102DDB22EE4C280005029A6 /* EditTextView+Complete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1102DDB02EE4C277005029A6 /* EditTextView+Complete.swift */; };\n\t\t110BE0112EE86B4A00C5E456 /* Clojure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0102EE86B4600C5E456 /* Clojure.swift */; };\n\t\t110BE0122EE86B4A00C5E456 /* Clojure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0102EE86B4600C5E456 /* Clojure.swift */; };\n\t\t110BE0132EE86B4A00C5E456 /* Clojure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0102EE86B4600C5E456 /* Clojure.swift */; };\n\t\t110BE0152EE8C1C900C5E456 /* Html.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0142EE8C1C600C5E456 /* Html.swift */; };\n\t\t110BE0162EE8C1C900C5E456 /* Html.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0142EE8C1C600C5E456 /* Html.swift */; };\n\t\t110BE0172EE8C1C900C5E456 /* Html.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0142EE8C1C600C5E456 /* Html.swift */; };\n\t\t110BE0192EE8C25100C5E456 /* Css.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0182EE8C24B00C5E456 /* Css.swift */; };\n\t\t110BE01A2EE8C25100C5E456 /* Css.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0182EE8C24B00C5E456 /* Css.swift */; };\n\t\t110BE01B2EE8C25100C5E456 /* Css.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0182EE8C24B00C5E456 /* Css.swift */; };\n\t\t110BE01D2EE8C3BE00C5E456 /* Shell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE01C2EE8C3BA00C5E456 /* Shell.swift */; };\n\t\t110BE01E2EE8C3BE00C5E456 /* Shell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE01C2EE8C3BA00C5E456 /* Shell.swift */; };\n\t\t110BE01F2EE8C3BE00C5E456 /* Shell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE01C2EE8C3BA00C5E456 /* Shell.swift */; };\n\t\t110BE0212EE8C53C00C5E456 /* TypeScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0202EE8C53600C5E456 /* TypeScript.swift */; };\n\t\t110BE0222EE8C53C00C5E456 /* TypeScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0202EE8C53600C5E456 /* TypeScript.swift */; };\n\t\t110BE0232EE8C53C00C5E456 /* TypeScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0202EE8C53600C5E456 /* TypeScript.swift */; };\n\t\t110BE0252EE8C5B000C5E456 /* Lisp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0242EE8C5AC00C5E456 /* Lisp.swift */; };\n\t\t110BE0262EE8C5B000C5E456 /* Lisp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0242EE8C5AC00C5E456 /* Lisp.swift */; };\n\t\t110BE0272EE8C5B000C5E456 /* Lisp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110BE0242EE8C5AC00C5E456 /* Lisp.swift */; };\n\t\t110D09832E9C152B001555FA /* NSRange+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D09812E9C1525001555FA /* NSRange+.swift */; };\n\t\t110D09842E9C152B001555FA /* NSRange+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D09812E9C1525001555FA /* NSRange+.swift */; };\n\t\t110D09852E9C152B001555FA /* NSRange+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D09812E9C1525001555FA /* NSRange+.swift */; };\n\t\t110D09862E9C152B001555FA /* NSRange+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110D09812E9C1525001555FA /* NSRange+.swift */; };\n\t\t110E409F2EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110E409D2EA0150000C62F49 /* NSTextCheckingResult+.swift */; };\n\t\t110E40A02EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110E409D2EA0150000C62F49 /* NSTextCheckingResult+.swift */; };\n\t\t110E40A12EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110E409D2EA0150000C62F49 /* NSTextCheckingResult+.swift */; };\n\t\t110E40A22EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110E409D2EA0150000C62F49 /* NSTextCheckingResult+.swift */; };\n\t\t110E40A42EA039CE00C62F49 /* EditTextView+DragOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110E40A32EA039AA00C62F49 /* EditTextView+DragOperation.swift */; };\n\t\t110E40A52EA039CE00C62F49 /* EditTextView+DragOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110E40A32EA039AA00C62F49 /* EditTextView+DragOperation.swift */; };\n\t\t111013152EC8F1B600B6CF1B /* ImagePreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111013142EC8F1B600B6CF1B /* ImagePreviewViewController.swift */; };\n\t\t111013182ECA102200B6CF1B /* Pasteboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = D796EB40251E127300CE5C80 /* Pasteboard.swift */; };\n\t\t113685522EC795B80033767F /* Data+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77AD7FB27F9D1C90077BD45 /* Data+.swift */; };\n\t\t113685532EC796EF0033767F /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79FE8A01F77D04A00113CFD /* Note.swift */; };\n\t\t1136855A2EC7A21F0033767F /* NSMutableAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685592EC7A2130033767F /* NSMutableAttributedString+.swift */; };\n\t\t1136855C2EC7A6A50033767F /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1136855B2EC7A69C0033767F /* Platform.swift */; };\n\t\t1136855E2EC7A6A50033767F /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1136855B2EC7A69C0033767F /* Platform.swift */; };\n\t\t1136855F2EC7A6A50033767F /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1136855B2EC7A69C0033767F /* Platform.swift */; };\n\t\t113685602EC7A6A50033767F /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1136855B2EC7A69C0033767F /* Platform.swift */; };\n\t\t113685622EC869950033767F /* URL+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685612EC869860033767F /* URL+Image.swift */; };\n\t\t113685632EC869950033767F /* URL+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685612EC869860033767F /* URL+Image.swift */; };\n\t\t113685642EC869950033767F /* URL+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685612EC869860033767F /* URL+Image.swift */; };\n\t\t113685652EC869950033767F /* URL+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685612EC869860033767F /* URL+Image.swift */; };\n\t\t113685682EC889E20033767F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685672EC889DC0033767F /* SceneDelegate.swift */; };\n\t\t1136856A2EC8AE2F0033767F /* UIBarButtonItem+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113685692EC8AE260033767F /* UIBarButtonItem+.swift */; };\n\t\t113A31A02EEE2D47009B50B0 /* Note+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113A319F2EEE2D3A009B50B0 /* Note+Preview.swift */; };\n\t\t113A31A12EEE2D47009B50B0 /* Note+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113A319F2EEE2D3A009B50B0 /* Note+Preview.swift */; };\n\t\t113A31A22EEE2D47009B50B0 /* Note+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113A319F2EEE2D3A009B50B0 /* Note+Preview.swift */; };\n\t\t113A31A32EEE2D47009B50B0 /* Note+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113A319F2EEE2D3A009B50B0 /* Note+Preview.swift */; };\n\t\t113EEBD72EDBA63D00A94F29 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D7DB5ED520248D5500E7E1B6 /* Assets.xcassets */; };\n\t\t11598DA32EDCB8D40036E387 /* UIFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11598DA22EDCB8D40036E387 /* UIFont+.swift */; };\n\t\t11598DA42EDCB9B40036E387 /* UIFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11598DA22EDCB8D40036E387 /* UIFont+.swift */; };\n\t\t1161828D2E637E31005B5EE0 /* SwiftHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116182862E62B046005B5EE0 /* SwiftHighlighter.swift */; };\n\t\t1161828E2E637E31005B5EE0 /* SwiftHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116182862E62B046005B5EE0 /* SwiftHighlighter.swift */; };\n\t\t1161828F2E637E31005B5EE0 /* SwiftHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116182862E62B046005B5EE0 /* SwiftHighlighter.swift */; };\n\t\t1166D1F72E91BA8800B061CA /* CodeBlockDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1166D1F62E91BA7F00B061CA /* CodeBlockDetector.swift */; };\n\t\t1166D1F82E91BA8800B061CA /* CodeBlockDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1166D1F62E91BA7F00B061CA /* CodeBlockDetector.swift */; };\n\t\t1166D1F92E91BA8800B061CA /* CodeBlockDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1166D1F62E91BA7F00B061CA /* CodeBlockDetector.swift */; };\n\t\t1175E0922EDC929400B92794 /* ny-2026.icon in Resources */ = {isa = PBXBuildFile; fileRef = 1175E0912EDC929400B92794 /* ny-2026.icon */; };\n\t\t117C0E4D2EEDB9C30086419C /* EditTextView+Clicked.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117C0E4C2EEDB9B70086419C /* EditTextView+Clicked.swift */; };\n\t\t117C0E4E2EEDB9C40086419C /* EditTextView+Clicked.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117C0E4C2EEDB9B70086419C /* EditTextView+Clicked.swift */; };\n\t\t11A6A8FA2EF06B9D005D000A /* EditTextView+MoveLines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A6A8F92EF06B90005D000A /* EditTextView+MoveLines.swift */; };\n\t\t11A6A8FB2EF06B9D005D000A /* EditTextView+MoveLines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A6A8F92EF06B90005D000A /* EditTextView+MoveLines.swift */; };\n\t\t11A6A8FD2EF074D8005D000A /* EditTextView+Todo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A6A8FC2EF074D2005D000A /* EditTextView+Todo.swift */; };\n\t\t11A6A8FE2EF074D8005D000A /* EditTextView+Todo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A6A8FC2EF074D2005D000A /* EditTextView+Todo.swift */; };\n\t\t11A95B622EDC56DC0081ED29 /* modern.icon in Resources */ = {isa = PBXBuildFile; fileRef = 11A95B612EDC56DC0081ED29 /* modern.icon */; };\n\t\t11AA4B1F2EF9A47A0075A9E4 /* EditorViewController+ScrollPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AA4B1E2EF9A4680075A9E4 /* EditorViewController+ScrollPosition.swift */; };\n\t\t11AA4B202EF9A47A0075A9E4 /* EditorViewController+ScrollPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AA4B1E2EF9A4680075A9E4 /* EditorViewController+ScrollPosition.swift */; };\n\t\t11ABE5E22EEEFD0E00E7C9EB /* NotesCounterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11ABE5E12EEEFCF700E7C9EB /* NotesCounterView.swift */; };\n\t\t11ABE5E32EEEFD0E00E7C9EB /* NotesCounterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11ABE5E12EEEFCF700E7C9EB /* NotesCounterView.swift */; };\n\t\t11AF633E2E898435004E7157 /* Sql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AF633D2E898430004E7157 /* Sql.swift */; };\n\t\t11AF633F2E898435004E7157 /* Sql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AF633D2E898430004E7157 /* Sql.swift */; };\n\t\t11AF63402E898435004E7157 /* Sql.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11AF633D2E898430004E7157 /* Sql.swift */; };\n\t\t11B3F5962F182E5900A3531D /* EditorViewController+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B3F5952F182E4E00A3531D /* EditorViewController+Search.swift */; };\n\t\t11BD71662EDC87B700541BF9 /* classic-2025.icon in Resources */ = {isa = PBXBuildFile; fileRef = 11BD71652EDC87B700541BF9 /* classic-2025.icon */; };\n\t\t11BD8F922EDDEC3D000673A7 /* GitHubDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F912EDDEC33000673A7 /* GitHubDark.swift */; };\n\t\t11BD8F932EDDEC3D000673A7 /* GitHubDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F912EDDEC33000673A7 /* GitHubDark.swift */; };\n\t\t11BD8F942EDDEC3D000673A7 /* GitHubDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F912EDDEC33000673A7 /* GitHubDark.swift */; };\n\t\t11BD8F962EDDF32E000673A7 /* SolarizedLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F952EDDF320000673A7 /* SolarizedLight.swift */; };\n\t\t11BD8F972EDDF32E000673A7 /* SolarizedLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F952EDDF320000673A7 /* SolarizedLight.swift */; };\n\t\t11BD8F982EDDF32E000673A7 /* SolarizedLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F952EDDF320000673A7 /* SolarizedLight.swift */; };\n\t\t11BD8F9A2EDDF336000673A7 /* SolarizedDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F992EDDF332000673A7 /* SolarizedDark.swift */; };\n\t\t11BD8F9B2EDDF336000673A7 /* SolarizedDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F992EDDF332000673A7 /* SolarizedDark.swift */; };\n\t\t11BD8F9C2EDDF336000673A7 /* SolarizedDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F992EDDF332000673A7 /* SolarizedDark.swift */; };\n\t\t11BD8F9E2EDE0235000673A7 /* AtomOneLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F9D2EDE022C000673A7 /* AtomOneLight.swift */; };\n\t\t11BD8F9F2EDE0235000673A7 /* AtomOneLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F9D2EDE022C000673A7 /* AtomOneLight.swift */; };\n\t\t11BD8FA02EDE0235000673A7 /* AtomOneLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8F9D2EDE022C000673A7 /* AtomOneLight.swift */; };\n\t\t11BD8FA22EDE024D000673A7 /* AtomOneDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8FA12EDE023E000673A7 /* AtomOneDark.swift */; };\n\t\t11BD8FA32EDE024D000673A7 /* AtomOneDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8FA12EDE023E000673A7 /* AtomOneDark.swift */; };\n\t\t11BD8FA42EDE024D000673A7 /* AtomOneDark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8FA12EDE023E000673A7 /* AtomOneDark.swift */; };\n\t\t11BD8FA62EDE0683000673A7 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8FA52EDE0679000673A7 /* Theme.swift */; };\n\t\t11BD8FA72EDE0683000673A7 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8FA52EDE0679000673A7 /* Theme.swift */; };\n\t\t11BD8FA82EDE0683000673A7 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BD8FA52EDE0679000673A7 /* Theme.swift */; };\n\t\t11BD8FAA2EDE1AF8000673A7 /* UserDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB3820FEDE230005E120 /* UserDataService.swift */; };\n\t\t11BD8FAB2EDE1AF8000673A7 /* UserDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB3820FEDE230005E120 /* UserDataService.swift */; };\n\t\t11BF066A2EE331B5006C7336 /* Scala.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06692EE331B2006C7336 /* Scala.swift */; };\n\t\t11BF066B2EE331B5006C7336 /* Scala.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06692EE331B2006C7336 /* Scala.swift */; };\n\t\t11BF066C2EE331B5006C7336 /* Scala.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06692EE331B2006C7336 /* Scala.swift */; };\n\t\t11BF066E2EE33201006C7336 /* Bash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF066D2EE331FE006C7336 /* Bash.swift */; };\n\t\t11BF066F2EE33201006C7336 /* Bash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF066D2EE331FE006C7336 /* Bash.swift */; };\n\t\t11BF06702EE33201006C7336 /* Bash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF066D2EE331FE006C7336 /* Bash.swift */; };\n\t\t11BF06722EE33262006C7336 /* Haskell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06712EE3325F006C7336 /* Haskell.swift */; };\n\t\t11BF06732EE33262006C7336 /* Haskell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06712EE3325F006C7336 /* Haskell.swift */; };\n\t\t11BF06742EE33262006C7336 /* Haskell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06712EE3325F006C7336 /* Haskell.swift */; };\n\t\t11BF06762EE49546006C7336 /* Lua.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06752EE49542006C7336 /* Lua.swift */; };\n\t\t11BF06772EE49546006C7336 /* Lua.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06752EE49542006C7336 /* Lua.swift */; };\n\t\t11BF06782EE49546006C7336 /* Lua.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06752EE49542006C7336 /* Lua.swift */; };\n\t\t11BF067A2EE495C2006C7336 /* Perl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06792EE495C0006C7336 /* Perl.swift */; };\n\t\t11BF067B2EE495C2006C7336 /* Perl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06792EE495C0006C7336 /* Perl.swift */; };\n\t\t11BF067C2EE495C2006C7336 /* Perl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF06792EE495C0006C7336 /* Perl.swift */; };\n\t\t11BF067E2EE4968C006C7336 /* Erlang.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF067D2EE49689006C7336 /* Erlang.swift */; };\n\t\t11BF067F2EE4968C006C7336 /* Erlang.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF067D2EE49689006C7336 /* Erlang.swift */; };\n\t\t11BF06802EE4968C006C7336 /* Erlang.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF067D2EE49689006C7336 /* Erlang.swift */; };\n\t\t11D6C0C72EE2256B006017F0 /* Python.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0C62EE22567006017F0 /* Python.swift */; };\n\t\t11D6C0C82EE2256B006017F0 /* Python.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0C62EE22567006017F0 /* Python.swift */; };\n\t\t11D6C0C92EE2256B006017F0 /* Python.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0C62EE22567006017F0 /* Python.swift */; };\n\t\t11D6C0CB2EE225E7006017F0 /* C.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0CA2EE225E1006017F0 /* C.swift */; };\n\t\t11D6C0CC2EE225E7006017F0 /* C.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0CA2EE225E1006017F0 /* C.swift */; };\n\t\t11D6C0CD2EE225E7006017F0 /* C.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0CA2EE225E1006017F0 /* C.swift */; };\n\t\t11D6C0CF2EE2279E006017F0 /* Cpp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0CE2EE22799006017F0 /* Cpp.swift */; };\n\t\t11D6C0D02EE2279E006017F0 /* Cpp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0CE2EE22799006017F0 /* Cpp.swift */; };\n\t\t11D6C0D12EE2279E006017F0 /* Cpp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0CE2EE22799006017F0 /* Cpp.swift */; };\n\t\t11D6C0D32EE227F9006017F0 /* Java.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0D22EE227F6006017F0 /* Java.swift */; };\n\t\t11D6C0D42EE227F9006017F0 /* Java.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0D22EE227F6006017F0 /* Java.swift */; };\n\t\t11D6C0D52EE227F9006017F0 /* Java.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0D22EE227F6006017F0 /* Java.swift */; };\n\t\t11D6C0D72EE229E9006017F0 /* Go.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0D62EE229E7006017F0 /* Go.swift */; };\n\t\t11D6C0D82EE229E9006017F0 /* Go.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0D62EE229E7006017F0 /* Go.swift */; };\n\t\t11D6C0D92EE229E9006017F0 /* Go.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0D62EE229E7006017F0 /* Go.swift */; };\n\t\t11D6C0DB2EE22B0F006017F0 /* Rust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0DA2EE22B0D006017F0 /* Rust.swift */; };\n\t\t11D6C0DC2EE22B0F006017F0 /* Rust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0DA2EE22B0D006017F0 /* Rust.swift */; };\n\t\t11D6C0DD2EE22B0F006017F0 /* Rust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0DA2EE22B0D006017F0 /* Rust.swift */; };\n\t\t11D6C0DF2EE22B77006017F0 /* Csharp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0DE2EE22B74006017F0 /* Csharp.swift */; };\n\t\t11D6C0E02EE22B77006017F0 /* Csharp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0DE2EE22B74006017F0 /* Csharp.swift */; };\n\t\t11D6C0E12EE22B77006017F0 /* Csharp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0DE2EE22B74006017F0 /* Csharp.swift */; };\n\t\t11D6C0E32EE22BF2006017F0 /* Kotlin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0E22EE22BEE006017F0 /* Kotlin.swift */; };\n\t\t11D6C0E42EE22BF2006017F0 /* Kotlin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0E22EE22BEE006017F0 /* Kotlin.swift */; };\n\t\t11D6C0E52EE22BF2006017F0 /* Kotlin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0E22EE22BEE006017F0 /* Kotlin.swift */; };\n\t\t11D6C0E72EE22C11006017F0 /* R.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0E62EE22C0F006017F0 /* R.swift */; };\n\t\t11D6C0E82EE22C11006017F0 /* R.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0E62EE22C0F006017F0 /* R.swift */; };\n\t\t11D6C0E92EE22C11006017F0 /* R.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0E62EE22C0F006017F0 /* R.swift */; };\n\t\t11D6C0EB2EE22C6B006017F0 /* Ruby.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0EA2EE22C69006017F0 /* Ruby.swift */; };\n\t\t11D6C0EC2EE22C6B006017F0 /* Ruby.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0EA2EE22C69006017F0 /* Ruby.swift */; };\n\t\t11D6C0ED2EE22C6B006017F0 /* Ruby.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0EA2EE22C69006017F0 /* Ruby.swift */; };\n\t\t11D6C0EF2EE22CBC006017F0 /* Matlab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0EE2EE22CB8006017F0 /* Matlab.swift */; };\n\t\t11D6C0F02EE22CBC006017F0 /* Matlab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0EE2EE22CB8006017F0 /* Matlab.swift */; };\n\t\t11D6C0F12EE22CBC006017F0 /* Matlab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0EE2EE22CB8006017F0 /* Matlab.swift */; };\n\t\t11D6C0F32EE22D3B006017F0 /* Dart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0F22EE22D39006017F0 /* Dart.swift */; };\n\t\t11D6C0F42EE22D3B006017F0 /* Dart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0F22EE22D39006017F0 /* Dart.swift */; };\n\t\t11D6C0F52EE22D3B006017F0 /* Dart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0F22EE22D39006017F0 /* Dart.swift */; };\n\t\t11D6C0F72EE22D78006017F0 /* Vb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0F62EE22D73006017F0 /* Vb.swift */; };\n\t\t11D6C0F82EE22D78006017F0 /* Vb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0F62EE22D73006017F0 /* Vb.swift */; };\n\t\t11D6C0F92EE22D78006017F0 /* Vb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0F62EE22D73006017F0 /* Vb.swift */; };\n\t\t11D6C0FB2EE22E00006017F0 /* Assembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0FA2EE22DFC006017F0 /* Assembly.swift */; };\n\t\t11D6C0FC2EE22E00006017F0 /* Assembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0FA2EE22DFC006017F0 /* Assembly.swift */; };\n\t\t11D6C0FD2EE22E00006017F0 /* Assembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0FA2EE22DFC006017F0 /* Assembly.swift */; };\n\t\t11D6C0FF2EE22E4A006017F0 /* Scratch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0FE2EE22E48006017F0 /* Scratch.swift */; };\n\t\t11D6C1002EE22E4A006017F0 /* Scratch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0FE2EE22E48006017F0 /* Scratch.swift */; };\n\t\t11D6C1012EE22E4A006017F0 /* Scratch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C0FE2EE22E48006017F0 /* Scratch.swift */; };\n\t\t11D6C1032EE22E8F006017F0 /* Groovy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C1022EE22E8B006017F0 /* Groovy.swift */; };\n\t\t11D6C1042EE22E8F006017F0 /* Groovy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C1022EE22E8B006017F0 /* Groovy.swift */; };\n\t\t11D6C1052EE22E8F006017F0 /* Groovy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C1022EE22E8B006017F0 /* Groovy.swift */; };\n\t\t11D6C1072EE22EED006017F0 /* ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C1062EE22EE8006017F0 /* ObjectiveC.swift */; };\n\t\t11D6C1082EE22EED006017F0 /* ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C1062EE22EE8006017F0 /* ObjectiveC.swift */; };\n\t\t11D6C1092EE22EED006017F0 /* ObjectiveC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D6C1062EE22EE8006017F0 /* ObjectiveC.swift */; };\n\t\t11D702A62E5ADDED004DBAEC /* LayoutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D702A52E5ADDE2004DBAEC /* LayoutManager.swift */; };\n\t\t11D702A72E5ADDED004DBAEC /* LayoutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D702A52E5ADDE2004DBAEC /* LayoutManager.swift */; };\n\t\t11D702AC2E5B8E0C004DBAEC /* HtmlExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D702AB2E5B8E02004DBAEC /* HtmlExtractor.swift */; };\n\t\t11D702AD2E5B8E0C004DBAEC /* HtmlExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D702AB2E5B8E02004DBAEC /* HtmlExtractor.swift */; };\n\t\t11D702AE2E5B8E0C004DBAEC /* HtmlExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D702AB2E5B8E02004DBAEC /* HtmlExtractor.swift */; };\n\t\t11D9431A2E643EF40010CC2B /* JavaScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943192E643EF20010CC2B /* JavaScript.swift */; };\n\t\t11D9431B2E643EF40010CC2B /* JavaScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943192E643EF20010CC2B /* JavaScript.swift */; };\n\t\t11D9431C2E643EF40010CC2B /* JavaScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943192E643EF20010CC2B /* JavaScript.swift */; };\n\t\t11D9431E2E643F250010CC2B /* Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D9431D2E643F1F0010CC2B /* Swift.swift */; };\n\t\t11D9431F2E643F250010CC2B /* Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D9431D2E643F1F0010CC2B /* Swift.swift */; };\n\t\t11D943202E643F250010CC2B /* Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D9431D2E643F1F0010CC2B /* Swift.swift */; };\n\t\t11D943222E643F410010CC2B /* Php.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943212E643F3B0010CC2B /* Php.swift */; };\n\t\t11D943232E643F410010CC2B /* Php.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943212E643F3B0010CC2B /* Php.swift */; };\n\t\t11D943242E643F410010CC2B /* Php.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943212E643F3B0010CC2B /* Php.swift */; };\n\t\t11D943272E643F630010CC2B /* GitHubLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943262E643F5E0010CC2B /* GitHubLight.swift */; };\n\t\t11D943282E643F630010CC2B /* GitHubLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943262E643F5E0010CC2B /* GitHubLight.swift */; };\n\t\t11D943292E643F630010CC2B /* GitHubLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D943262E643F5E0010CC2B /* GitHubLight.swift */; };\n\t\t11F018AC2EF7E78600F07580 /* MPreviewFindPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F018AB2EF7E77B00F07580 /* MPreviewFindPanel.swift */; };\n\t\t11F018AD2EF7E78600F07580 /* MPreviewFindPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F018AB2EF7E77B00F07580 /* MPreviewFindPanel.swift */; };\n\t\t11F018B22EF8415600F07580 /* MPreviewContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F018B12EF8415200F07580 /* MPreviewContainerView.swift */; };\n\t\t11F018B32EF8415600F07580 /* MPreviewContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F018B12EF8415200F07580 /* MPreviewContainerView.swift */; };\n\t\t11F1771A2EF1E93500CC566F /* ViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F177192EF1E92C00CC566F /* ViewController+Menu.swift */; };\n\t\t11F1771B2EF1E93500CC566F /* ViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F177192EF1E92C00CC566F /* ViewController+Menu.swift */; };\n\t\t11F2D4F42F104322002E4E47 /* Project+Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F2D4F32F1042F4002E4E47 /* Project+Date.swift */; };\n\t\t11F2D4F52F104322002E4E47 /* Project+Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F2D4F32F1042F4002E4E47 /* Project+Date.swift */; };\n\t\t11F2D4F62F104322002E4E47 /* Project+Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F2D4F32F1042F4002E4E47 /* Project+Date.swift */; };\n\t\t11F2D4F72F104322002E4E47 /* Project+Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F2D4F32F1042F4002E4E47 /* Project+Date.swift */; };\n\t\t11F389562EEA10930008EC18 /* Mermaid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F389552EEA108C0008EC18 /* Mermaid.swift */; };\n\t\t11F389572EEA10930008EC18 /* Mermaid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F389552EEA108C0008EC18 /* Mermaid.swift */; };\n\t\t11F389582EEA10930008EC18 /* Mermaid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F389552EEA108C0008EC18 /* Mermaid.swift */; };\n\t\t11F3F4832EDB0E0B00435CBF /* URL+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2A20FEDE230005E120 /* URL+.swift */; };\n\t\t11F3F4842EDB0E0B00435CBF /* URL+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2A20FEDE230005E120 /* URL+.swift */; };\n\t\t11F3F4852EDB0E2A00435CBF /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2920FEDE230005E120 /* String+.swift */; };\n\t\t11F3F4862EDB0E2A00435CBF /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2920FEDE230005E120 /* String+.swift */; };\n\t\t11F3F4872EDB0E4400435CBF /* DateFormatter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2820FEDE230005E120 /* DateFormatter+.swift */; };\n\t\t11F3F4882EDB0E4400435CBF /* DateFormatter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2820FEDE230005E120 /* DateFormatter+.swift */; };\n\t\t11F43F3C2F127EE300652350 /* Meet FSNotes 7.textbundle in Resources */ = {isa = PBXBuildFile; fileRef = 11F43F3A2F127C6900652350 /* Meet FSNotes 7.textbundle */; };\n\t\t11F5D53B2EFDA17000A66466 /* modern.icon in Resources */ = {isa = PBXBuildFile; fileRef = 11F5D53A2EFDA17000A66466 /* modern.icon */; };\n\t\t11F5D53C2EFDA17000A66466 /* modern.icon in Resources */ = {isa = PBXBuildFile; fileRef = 11F5D53A2EFDA17000A66466 /* modern.icon */; };\n\t\t275592971F3AE9B5006B8988 /* MainWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 275592961F3AE9B5006B8988 /* MainWindowController.swift */; };\n\t\t2799407C218484C900727B20 /* TitleBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2799407B218484C900727B20 /* TitleBarView.swift */; };\n\t\t42E001C62ADAC2930099E7AD /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 42E001C52ADAC2930099E7AD /* Localizable.xcstrings */; };\n\t\t42E001C72ADAC2930099E7AD /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 42E001C52ADAC2930099E7AD /* Localizable.xcstrings */; };\n\t\t42E001CA2ADAC2930099E7AD /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 42E001C92ADAC2930099E7AD /* Localizable.xcstrings */; };\n\t\t42E001CC2ADAC2930099E7AD /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 42E001CB2ADAC2930099E7AD /* InfoPlist.xcstrings */; };\n\t\t42E001CF2ADAC2930099E7AD /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 42E001CE2ADAC2930099E7AD /* Localizable.xcstrings */; };\n\t\t48BEA1E16CCED6900AD756F7 /* Pods_FSNotes_iOS_Share_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99068B82274CF88F23C4761D /* Pods_FSNotes_iOS_Share_Extension.framework */; };\n\t\t8F7136EE23490CBF004DFA6E /* Markdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F7136ED23490CBF004DFA6E /* Markdown.swift */; };\n\t\t8F7136F023490CBF004DFA6E /* Markdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F7136ED23490CBF004DFA6E /* Markdown.swift */; };\n\t\tBE957A4A1B908EC91BECB3D3 /* Pods_FSNotes__iCloud_.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6066605B9BAF43A4BF3B60C1 /* Pods_FSNotes__iCloud_.framework */; };\n\t\tCE3427A778205E1713A014B9 /* Pods_FSNotes_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85B72F46887638CA9CC70D39 /* Pods_FSNotes_iOS.framework */; };\n\t\tD4DB932C9F51CAE71393A28B /* Pods_FSNotes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F616385FF783029192B97DF6 /* Pods_FSNotes.framework */; };\n\t\tD7013E0026C3B116006F58E3 /* NSColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7013DFF26C3B116006F58E3 /* NSColor+.swift */; };\n\t\tD7013E0126C3B116006F58E3 /* NSColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7013DFF26C3B116006F58E3 /* NSColor+.swift */; };\n\t\tD7038E2620FB24E000A54E69 /* NoteAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7038E2520FB24E000A54E69 /* NoteAttachment.swift */; };\n\t\tD7038E2720FB24E000A54E69 /* NoteAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7038E2520FB24E000A54E69 /* NoteAttachment.swift */; };\n\t\tD706396A202230BB00BC8446 /* EditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7063969202230BB00BC8446 /* EditorViewController.swift */; };\n\t\tD70716DC2307E82900B44B0D /* SingleImageTouchDownGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70716DB2307E82900B44B0D /* SingleImageTouchDownGestureRecognizer.swift */; };\n\t\tD708AC672000EF5800A1760F /* NoteType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D708AC662000EF5800A1760F /* NoteType.swift */; };\n\t\tD708AC682000F0E100A1760F /* NoteType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D708AC662000EF5800A1760F /* NoteType.swift */; };\n\t\tD709C9E229AFD9E0006EF9A8 /* GitTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D709C9E129AFD9E0006EF9A8 /* GitTableViewCell.swift */; };\n\t\tD70B1FAB29213EDF003923DC /* HyperlinkTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70B1FAA29213EDF003923DC /* HyperlinkTextField.swift */; };\n\t\tD70B1FAC29213EE0003923DC /* HyperlinkTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70B1FAA29213EDF003923DC /* HyperlinkTextField.swift */; };\n\t\tD70E9DEE2901AE9100A3C634 /* Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5628EB5EBE008B3BBC /* Branch.swift */; };\n\t\tD70E9DEF2901AE9400A3C634 /* Branches.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5728EB5EBE008B3BBC /* Branches.swift */; };\n\t\tD70E9DF02901AE9700A3C634 /* BranchesIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5828EB5EBE008B3BBC /* BranchesIterator.swift */; };\n\t\tD70E9DF12901AE9B00A3C634 /* KeyAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6E28EB5EC0008B3BBC /* KeyAuthentication.swift */; };\n\t\tD70E9DF22901AE9E00A3C634 /* Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6F28EB5EC0008B3BBC /* Authentication.swift */; };\n\t\tD70E9DF32901AEA100A3C634 /* PasswordAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7028EB5EC0008B3BBC /* PasswordAuthentication.swift */; };\n\t\tD70E9DF42901AEA800A3C634 /* Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5428EB5EBE008B3BBC /* Commit.swift */; };\n\t\tD70E9DF52901AEAF00A3C634 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5F28EB5EBE008B3BBC /* Blob.swift */; };\n\t\tD70E9DF62901AEAF00A3C634 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5C28EB5EBE008B3BBC /* Error.swift */; };\n\t\tD70E9DF72901AEAF00A3C634 /* ConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5B28EB5EBE008B3BBC /* ConfigManager.swift */; };\n\t\tD70E9DF82901AEAF00A3C634 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5A28EB5EBE008B3BBC /* Strings.swift */; };\n\t\tD70E9DF92901AEAF00A3C634 /* Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5E28EB5EBE008B3BBC /* Progress.swift */; };\n\t\tD70E9DFA2901AEAF00A3C634 /* Signature.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6128EB5EBF008B3BBC /* Signature.swift */; };\n\t\tD70E9DFB2901AEAF00A3C634 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6228EB5EBF008B3BBC /* Object.swift */; };\n\t\tD70E9DFC2901AEAF00A3C634 /* Wrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5D28EB5EBE008B3BBC /* Wrapper.swift */; };\n\t\tD70E9DFD2901AEAF00A3C634 /* OID.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6028EB5EBF008B3BBC /* OID.swift */; };\n\t\tD70E9DFE2901AEAF00A3C634 /* StaticSshKeyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E32C2B28F8D0740048614B /* StaticSshKeyDelegate.swift */; };\n\t\tD70E9DFF2901AEAF00A3C634 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D771E96E28EDFBF600CD4871 /* Errors.swift */; };\n\t\tD70E9E002901AEB600A3C634 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6C28EB5EC0008B3BBC /* Diff.swift */; };\n\t\tD70E9E012901AEB600A3C634 /* DiffEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6B28EB5EC0008B3BBC /* DiffEntry.swift */; };\n\t\tD70E9E022901AEBF00A3C634 /* Head.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7E28EB5EC2008B3BBC /* Head.swift */; };\n\t\tD70E9E032901AEBF00A3C634 /* Head+Checkout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7D28EB5EC2008B3BBC /* Head+Checkout.swift */; };\n\t\tD70E9E042901AEBF00A3C634 /* Head+Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7F28EB5EC2008B3BBC /* Head+Merge.swift */; };\n\t\tD70E9E052901AEC400A3C634 /* Index+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7B28EB5EC1008B3BBC /* Index+Files.swift */; };\n\t\tD70E9E062901AEC400A3C634 /* Index.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7928EB5EC1008B3BBC /* Index.swift */; };\n\t\tD70E9E072901AEC400A3C634 /* Index+Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7A28EB5EC1008B3BBC /* Index+Commit.swift */; };\n\t\tD70E9E082901AEC900A3C634 /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8A28EB5EC3008B3BBC /* Reference.swift */; };\n\t\tD70E9E0A2901AECF00A3C634 /* Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7228EB5EC0008B3BBC /* Remote.swift */; };\n\t\tD70E9E0B2901AED400A3C634 /* Remotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7328EB5EC0008B3BBC /* Remotes.swift */; };\n\t\tD70E9E0C2901AEDA00A3C634 /* Repository+Lookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8728EB5EC3008B3BBC /* Repository+Lookup.swift */; };\n\t\tD70E9E0D2901AEDA00A3C634 /* Repository+Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8828EB5EC3008B3BBC /* Repository+Commit.swift */; };\n\t\tD70E9E0E2901AEDA00A3C634 /* Repository+Open.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8628EB5EC3008B3BBC /* Repository+Open.swift */; };\n\t\tD70E9E0F2901AEDA00A3C634 /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8528EB5EC3008B3BBC /* Repository.swift */; };\n\t\tD70E9E102901AEDA00A3C634 /* RepositoryManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8428EB5EC3008B3BBC /* RepositoryManager.swift */; };\n\t\tD70E9E112901AEE100A3C634 /* RevisionIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6828EB5EBF008B3BBC /* RevisionIterator.swift */; };\n\t\tD70E9E122901AEE100A3C634 /* FileHistoryIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6928EB5EBF008B3BBC /* FileHistoryIterator.swift */; };\n\t\tD70E9E132901AEE600A3C634 /* Statuses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7528EB5EC1008B3BBC /* Statuses.swift */; };\n\t\tD70E9E142901AEEB00A3C634 /* StatusIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7728EB5EC1008B3BBC /* StatusIterator.swift */; };\n\t\tD70E9E152901AEEB00A3C634 /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7628EB5EC1008B3BBC /* Status.swift */; };\n\t\tD70E9E162901AEF300A3C634 /* TagIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6428EB5EBF008B3BBC /* TagIterator.swift */; };\n\t\tD70E9E172901AEF300A3C634 /* Tags.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6528EB5EBF008B3BBC /* Tags.swift */; };\n\t\tD70E9E182901AEF300A3C634 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6628EB5EBF008B3BBC /* Tag.swift */; };\n\t\tD70E9E192901AEF900A3C634 /* TreeEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8128EB5EC2008B3BBC /* TreeEntry.swift */; };\n\t\tD70E9E1A2901AEF900A3C634 /* Tree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8228EB5EC2008B3BBC /* Tree.swift */; };\n\t\tD70F830428CE858E004818C5 /* Git in Frameworks */ = {isa = PBXBuildFile; productRef = D70F830328CE858E004818C5 /* Git */; };\n\t\tD70F830628CE8596004818C5 /* Git in Frameworks */ = {isa = PBXBuildFile; productRef = D70F830528CE8596004818C5 /* Git */; };\n\t\tD7104A64230BD8C500B6D8EE /* SortDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7104A63230BD8C500B6D8EE /* SortDirection.swift */; };\n\t\tD7104A65230BD8C500B6D8EE /* SortDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7104A63230BD8C500B6D8EE /* SortDirection.swift */; };\n\t\tD7104A67230BD8C500B6D8EE /* SortDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7104A63230BD8C500B6D8EE /* SortDirection.swift */; };\n\t\tD7104A68230BD8C500B6D8EE /* SortDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7104A63230BD8C500B6D8EE /* SortDirection.swift */; };\n\t\tD71354042042AFC800E3776F /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71354032042AFC800E3776F /* SettingsViewController.swift */; };\n\t\tD714496220C72D3500D7AD46 /* UIImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714496120C72D3400D7AD46 /* UIImage+.swift */; };\n\t\tD714749B279CE8EE001A8B29 /* MainNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714749A279CE8EE001A8B29 /* MainNavigationController.swift */; };\n\t\tD714749D279D7DBC001A8B29 /* SearchQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714749C279D7DBC001A8B29 /* SearchQuery.swift */; };\n\t\tD7153DFD2285A93300A2C20F /* AboutWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7153DFC2285A93300A2C20F /* AboutWindowController.swift */; };\n\t\tD7153DFE2285A93300A2C20F /* AboutWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7153DFC2285A93300A2C20F /* AboutWindowController.swift */; };\n\t\tD7153E052285C09C00A2C20F /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7153E042285C09C00A2C20F /* AboutViewController.swift */; };\n\t\tD7153E062285C09C00A2C20F /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7153E042285C09C00A2C20F /* AboutViewController.swift */; };\n\t\tD7153E092285EC6100A2C20F /* TitleTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7153E082285EC6100A2C20F /* TitleTextField.swift */; };\n\t\tD7153E0A2285EC6100A2C20F /* TitleTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7153E082285EC6100A2C20F /* TitleTextField.swift */; };\n\t\tD7163D2F24E81B5C00B1FC05 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D7163D2E24E81B5C00B1FC05 /* Main.storyboard */; };\n\t\tD7163D3424E81D9900B1FC05 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D7163D3324E81D9900B1FC05 /* MainInterface.storyboard */; };\n\t\tD7166F541F32F75E001A883F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D7793C781F211C6000CA39B7 /* Main.storyboard */; };\n\t\tD7170C1D20F8565B001DDB36 /* FileSystemEventManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7170C1C20F8565B001DDB36 /* FileSystemEventManager.swift */; };\n\t\tD7170C1E20F8565B001DDB36 /* FileSystemEventManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7170C1C20F8565B001DDB36 /* FileSystemEventManager.swift */; };\n\t\tD71760932826CAC4009794D8 /* MPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730829123084340003185D1 /* MPreviewView.swift */; };\n\t\tD7194B872023863A0062F1E3 /* ImagesProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D777D7802009115C00D86B33 /* ImagesProcessor.swift */; };\n\t\tD71AA0222143A4A8004AFD2A /* MoveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71AA0212143A4A8004AFD2A /* MoveViewController.swift */; };\n\t\tD71B9D7A2867027000D2F323 /* NoteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D792867027000D2F323 /* NoteViewController.swift */; };\n\t\tD71B9D7B2867027000D2F323 /* NoteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D792867027000D2F323 /* NoteViewController.swift */; };\n\t\tD71B9D822868658100D2F323 /* EditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D812868658100D2F323 /* EditorViewController.swift */; };\n\t\tD71B9D832868658100D2F323 /* EditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D812868658100D2F323 /* EditorViewController.swift */; };\n\t\tD71B9D862868BF7F00D2F323 /* TextStorageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D852868BF7F00D2F323 /* TextStorageProcessor.swift */; };\n\t\tD71B9D872868BF7F00D2F323 /* TextStorageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D852868BF7F00D2F323 /* TextStorageProcessor.swift */; };\n\t\tD71B9D892868BF7F00D2F323 /* TextStorageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71B9D852868BF7F00D2F323 /* TextStorageProcessor.swift */; };\n\t\tD71C4A4E1F520F1B00EBA30B /* MPreview.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D71C4A4D1F520F0E00EBA30B /* MPreview.bundle */; };\n\t\tD71FD21F2101B2D5008BEFA1 /* NoteAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7038E2520FB24E000A54E69 /* NoteAttachment.swift */; };\n\t\tD71FD2252101CFD0008BEFA1 /* UITextView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71FD2242101CFD0008BEFA1 /* UITextView+.swift */; };\n\t\tD720240F22A9412B000A7691 /* Markdown.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240922A9412B000A7691 /* Markdown.icns */; };\n\t\tD720241022A9412B000A7691 /* Markdown.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240922A9412B000A7691 /* Markdown.icns */; };\n\t\tD720241222A9412B000A7691 /* Text.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240A22A9412B000A7691 /* Text.icns */; };\n\t\tD720241322A9412B000A7691 /* Text.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240A22A9412B000A7691 /* Text.icns */; };\n\t\tD720241522A9412B000A7691 /* TextBundle.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240B22A9412B000A7691 /* TextBundle.icns */; };\n\t\tD720241622A9412B000A7691 /* TextBundle.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240B22A9412B000A7691 /* TextBundle.icns */; };\n\t\tD720241922A941A3000A7691 /* EncryptedTextPack.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720241822A941A3000A7691 /* EncryptedTextPack.icns */; };\n\t\tD720241A22A941A3000A7691 /* EncryptedTextPack.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720241822A941A3000A7691 /* EncryptedTextPack.icns */; };\n\t\tD72682AA29BE8E2000F6E961 /* RepositoryAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72682A929BE8E1F00F6E961 /* RepositoryAction.swift */; };\n\t\tD72682AB29BE8E2000F6E961 /* RepositoryAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72682A929BE8E1F00F6E961 /* RepositoryAction.swift */; };\n\t\tD72682AD29BE8E2000F6E961 /* RepositoryAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72682A929BE8E1F00F6E961 /* RepositoryAction.swift */; };\n\t\tD72682AE29BE8E2100F6E961 /* RepositoryAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72682A929BE8E1F00F6E961 /* RepositoryAction.swift */; };\n\t\tD726DE8A287ACC1E00F8406C /* NSWindow+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D726DE89287ACC1E00F8406C /* NSWindow+.swift */; };\n\t\tD726DE8B287ACC1E00F8406C /* NSWindow+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D726DE89287ACC1E00F8406C /* NSWindow+.swift */; };\n\t\tD72DAF0829B27D75001243BB /* ProjectSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72DAF0729B27D75001243BB /* ProjectSettings.swift */; };\n\t\tD72DAF0929B27D75001243BB /* ProjectSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72DAF0729B27D75001243BB /* ProjectSettings.swift */; };\n\t\tD72DAF0B29B27D75001243BB /* ProjectSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72DAF0729B27D75001243BB /* ProjectSettings.swift */; };\n\t\tD72DAF0C29B27D75001243BB /* ProjectSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72DAF0729B27D75001243BB /* ProjectSettings.swift */; };\n\t\tD730829223084340003185D1 /* MPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730829123084340003185D1 /* MPreviewView.swift */; };\n\t\tD730829323084340003185D1 /* MPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730829123084340003185D1 /* MPreviewView.swift */; };\n\t\tD730BD27222BF30700E69C93 /* KeychainConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD26222BF30700E69C93 /* KeychainConfiguration.swift */; };\n\t\tD730BD28222BF30700E69C93 /* KeychainConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD26222BF30700E69C93 /* KeychainConfiguration.swift */; };\n\t\tD730BD2A222BF32A00E69C93 /* KeychainPasswordItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD29222BF32A00E69C93 /* KeychainPasswordItem.swift */; };\n\t\tD730BD2B222BF32A00E69C93 /* KeychainPasswordItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD29222BF32A00E69C93 /* KeychainPasswordItem.swift */; };\n\t\tD730BD2E222DABA100E69C93 /* NoteContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD2D222DABA100E69C93 /* NoteContainer.swift */; };\n\t\tD730BD2F222DABA100E69C93 /* NoteContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD2D222DABA100E69C93 /* NoteContainer.swift */; };\n\t\tD730BD30222DABA100E69C93 /* NoteContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD2D222DABA100E69C93 /* NoteContainer.swift */; };\n\t\tD730BD31222DABA100E69C93 /* NoteContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD2D222DABA100E69C93 /* NoteContainer.swift */; };\n\t\tD730BD35222DB11E00E69C93 /* TextBundleInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD34222DB11E00E69C93 /* TextBundleInfo.swift */; };\n\t\tD730BD36222DB11E00E69C93 /* TextBundleInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD34222DB11E00E69C93 /* TextBundleInfo.swift */; };\n\t\tD730BD37222DB11E00E69C93 /* TextBundleInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD34222DB11E00E69C93 /* TextBundleInfo.swift */; };\n\t\tD730BD38222DB11E00E69C93 /* TextBundleInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD34222DB11E00E69C93 /* TextBundleInfo.swift */; };\n\t\tD730BD3C222DB9FC00E69C93 /* NameHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD3B222DB9FC00E69C93 /* NameHelper.swift */; };\n\t\tD730BD3D222DB9FC00E69C93 /* NameHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD3B222DB9FC00E69C93 /* NameHelper.swift */; };\n\t\tD730BD3E222DB9FC00E69C93 /* NameHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD3B222DB9FC00E69C93 /* NameHelper.swift */; };\n\t\tD730BD3F222DB9FC00E69C93 /* NameHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD3B222DB9FC00E69C93 /* NameHelper.swift */; };\n\t\tD730BD45223510A700E69C93 /* KeychainPasswordItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD29222BF32A00E69C93 /* KeychainPasswordItem.swift */; };\n\t\tD730BD46223510A900E69C93 /* KeychainConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD26222BF30700E69C93 /* KeychainConfiguration.swift */; };\n\t\tD730BD5A223BFEB200E69C93 /* RuntimeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD59223BFEB200E69C93 /* RuntimeError.swift */; };\n\t\tD730BD5B223BFEB200E69C93 /* RuntimeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD59223BFEB200E69C93 /* RuntimeError.swift */; };\n\t\tD730BD5C223BFEB200E69C93 /* RuntimeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD59223BFEB200E69C93 /* RuntimeError.swift */; };\n\t\tD7315ECF215ECF3000AB49D4 /* EditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315ECE215ECF3000AB49D4 /* EditorView.swift */; };\n\t\tD7315ED0215ECF3000AB49D4 /* EditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315ECE215ECF3000AB49D4 /* EditorView.swift */; };\n\t\tD7315ED2215ED15500AB49D4 /* SidebarSplitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315ED1215ED15500AB49D4 /* SidebarSplitView.swift */; };\n\t\tD7315ED3215ED15500AB49D4 /* SidebarSplitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315ED1215ED15500AB49D4 /* SidebarSplitView.swift */; };\n\t\tD7315ED5215ED95600AB49D4 /* NSAppearance+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315ED4215ED95600AB49D4 /* NSAppearance+.swift */; };\n\t\tD7315ED6215ED95600AB49D4 /* NSAppearance+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315ED4215ED95600AB49D4 /* NSAppearance+.swift */; };\n\t\tD73290BA2099F0AB0003F647 /* UndoData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78678CA2093AE10001A6620 /* UndoData.swift */; };\n\t\tD735E5BD1F2EF66000173215 /* NoteCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D735E5BC1F2EF66000173215 /* NoteCellView.swift */; };\n\t\tD735E5BF1F2F001500173215 /* NoteRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D735E5BE1F2F001500173215 /* NoteRowView.swift */; };\n\t\tD73673A820D10CF2000BA61D /* CloudDriveManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73673A720D10CF2000BA61D /* CloudDriveManager.swift */; };\n\t\tD736DDA927B5DD370012ED70 /* EditorSelectionRect.swift in Sources */ = {isa = PBXBuildFile; fileRef = D736DDA827B5DD370012ED70 /* EditorSelectionRect.swift */; };\n\t\tD736DDAB27BABFFB0012ED70 /* RevisionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D736DDAA27BABFF80012ED70 /* RevisionsViewController.swift */; };\n\t\tD736DDAD27BAC7940012ED70 /* Note+History.swift in Sources */ = {isa = PBXBuildFile; fileRef = D736DDAC27BAC7940012ED70 /* Note+History.swift */; };\n\t\tD73794BF2336642500E75A28 /* (null) in Sources */ = {isa = PBXBuildFile; };\n\t\tD73794C123366F5200E75A28 /* ImageScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73794C023366F5200E75A28 /* ImageScrollView.swift */; };\n\t\tD738356D2242871400B260DD /* MasterPasswordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D738356C2242871400B260DD /* MasterPasswordViewController.swift */; };\n\t\tD738356E2242871400B260DD /* MasterPasswordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D738356C2242871400B260DD /* MasterPasswordViewController.swift */; };\n\t\tD73B3135298FBF4400F46144 /* GitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73B3134298FBF4400F46144 /* GitViewController.swift */; };\n\t\tD73BCC8C28EB5EC3008B3BBC /* Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5428EB5EBE008B3BBC /* Commit.swift */; };\n\t\tD73BCC8D28EB5EC3008B3BBC /* Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5428EB5EBE008B3BBC /* Commit.swift */; };\n\t\tD73BCC8F28EB5EC3008B3BBC /* Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5628EB5EBE008B3BBC /* Branch.swift */; };\n\t\tD73BCC9028EB5EC3008B3BBC /* Branch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5628EB5EBE008B3BBC /* Branch.swift */; };\n\t\tD73BCC9228EB5EC3008B3BBC /* Branches.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5728EB5EBE008B3BBC /* Branches.swift */; };\n\t\tD73BCC9328EB5EC3008B3BBC /* Branches.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5728EB5EBE008B3BBC /* Branches.swift */; };\n\t\tD73BCC9528EB5EC3008B3BBC /* BranchesIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5828EB5EBE008B3BBC /* BranchesIterator.swift */; };\n\t\tD73BCC9628EB5EC3008B3BBC /* BranchesIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5828EB5EBE008B3BBC /* BranchesIterator.swift */; };\n\t\tD73BCC9828EB5EC3008B3BBC /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5A28EB5EBE008B3BBC /* Strings.swift */; };\n\t\tD73BCC9928EB5EC3008B3BBC /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5A28EB5EBE008B3BBC /* Strings.swift */; };\n\t\tD73BCC9B28EB5EC3008B3BBC /* ConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5B28EB5EBE008B3BBC /* ConfigManager.swift */; };\n\t\tD73BCC9C28EB5EC3008B3BBC /* ConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5B28EB5EBE008B3BBC /* ConfigManager.swift */; };\n\t\tD73BCC9E28EB5EC3008B3BBC /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5C28EB5EBE008B3BBC /* Error.swift */; };\n\t\tD73BCC9F28EB5EC3008B3BBC /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5C28EB5EBE008B3BBC /* Error.swift */; };\n\t\tD73BCCA128EB5EC3008B3BBC /* Wrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5D28EB5EBE008B3BBC /* Wrapper.swift */; };\n\t\tD73BCCA228EB5EC3008B3BBC /* Wrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5D28EB5EBE008B3BBC /* Wrapper.swift */; };\n\t\tD73BCCA428EB5EC3008B3BBC /* Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5E28EB5EBE008B3BBC /* Progress.swift */; };\n\t\tD73BCCA528EB5EC3008B3BBC /* Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5E28EB5EBE008B3BBC /* Progress.swift */; };\n\t\tD73BCCA728EB5EC3008B3BBC /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5F28EB5EBE008B3BBC /* Blob.swift */; };\n\t\tD73BCCA828EB5EC3008B3BBC /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC5F28EB5EBE008B3BBC /* Blob.swift */; };\n\t\tD73BCCAA28EB5EC3008B3BBC /* OID.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6028EB5EBF008B3BBC /* OID.swift */; };\n\t\tD73BCCAB28EB5EC3008B3BBC /* OID.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6028EB5EBF008B3BBC /* OID.swift */; };\n\t\tD73BCCAD28EB5EC3008B3BBC /* Signature.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6128EB5EBF008B3BBC /* Signature.swift */; };\n\t\tD73BCCAE28EB5EC3008B3BBC /* Signature.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6128EB5EBF008B3BBC /* Signature.swift */; };\n\t\tD73BCCB028EB5EC3008B3BBC /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6228EB5EBF008B3BBC /* Object.swift */; };\n\t\tD73BCCB128EB5EC3008B3BBC /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6228EB5EBF008B3BBC /* Object.swift */; };\n\t\tD73BCCB328EB5EC3008B3BBC /* TagIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6428EB5EBF008B3BBC /* TagIterator.swift */; };\n\t\tD73BCCB428EB5EC3008B3BBC /* TagIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6428EB5EBF008B3BBC /* TagIterator.swift */; };\n\t\tD73BCCB628EB5EC3008B3BBC /* Tags.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6528EB5EBF008B3BBC /* Tags.swift */; };\n\t\tD73BCCB728EB5EC3008B3BBC /* Tags.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6528EB5EBF008B3BBC /* Tags.swift */; };\n\t\tD73BCCB928EB5EC3008B3BBC /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6628EB5EBF008B3BBC /* Tag.swift */; };\n\t\tD73BCCBA28EB5EC3008B3BBC /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6628EB5EBF008B3BBC /* Tag.swift */; };\n\t\tD73BCCBC28EB5EC3008B3BBC /* RevisionIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6828EB5EBF008B3BBC /* RevisionIterator.swift */; };\n\t\tD73BCCBD28EB5EC3008B3BBC /* RevisionIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6828EB5EBF008B3BBC /* RevisionIterator.swift */; };\n\t\tD73BCCBF28EB5EC3008B3BBC /* FileHistoryIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6928EB5EBF008B3BBC /* FileHistoryIterator.swift */; };\n\t\tD73BCCC028EB5EC3008B3BBC /* FileHistoryIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6928EB5EBF008B3BBC /* FileHistoryIterator.swift */; };\n\t\tD73BCCC228EB5EC3008B3BBC /* DiffEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6B28EB5EC0008B3BBC /* DiffEntry.swift */; };\n\t\tD73BCCC328EB5EC3008B3BBC /* DiffEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6B28EB5EC0008B3BBC /* DiffEntry.swift */; };\n\t\tD73BCCC528EB5EC4008B3BBC /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6C28EB5EC0008B3BBC /* Diff.swift */; };\n\t\tD73BCCC628EB5EC4008B3BBC /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6C28EB5EC0008B3BBC /* Diff.swift */; };\n\t\tD73BCCC828EB5EC4008B3BBC /* KeyAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6E28EB5EC0008B3BBC /* KeyAuthentication.swift */; };\n\t\tD73BCCC928EB5EC4008B3BBC /* KeyAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6E28EB5EC0008B3BBC /* KeyAuthentication.swift */; };\n\t\tD73BCCCB28EB5EC4008B3BBC /* Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6F28EB5EC0008B3BBC /* Authentication.swift */; };\n\t\tD73BCCCC28EB5EC4008B3BBC /* Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC6F28EB5EC0008B3BBC /* Authentication.swift */; };\n\t\tD73BCCCE28EB5EC4008B3BBC /* PasswordAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7028EB5EC0008B3BBC /* PasswordAuthentication.swift */; };\n\t\tD73BCCCF28EB5EC4008B3BBC /* PasswordAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7028EB5EC0008B3BBC /* PasswordAuthentication.swift */; };\n\t\tD73BCCD128EB5EC4008B3BBC /* Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7228EB5EC0008B3BBC /* Remote.swift */; };\n\t\tD73BCCD228EB5EC4008B3BBC /* Remote.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7228EB5EC0008B3BBC /* Remote.swift */; };\n\t\tD73BCCD428EB5EC4008B3BBC /* Remotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7328EB5EC0008B3BBC /* Remotes.swift */; };\n\t\tD73BCCD528EB5EC4008B3BBC /* Remotes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7328EB5EC0008B3BBC /* Remotes.swift */; };\n\t\tD73BCCD728EB5EC4008B3BBC /* Statuses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7528EB5EC1008B3BBC /* Statuses.swift */; };\n\t\tD73BCCD828EB5EC4008B3BBC /* Statuses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7528EB5EC1008B3BBC /* Statuses.swift */; };\n\t\tD73BCCDA28EB5EC4008B3BBC /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7628EB5EC1008B3BBC /* Status.swift */; };\n\t\tD73BCCDB28EB5EC4008B3BBC /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7628EB5EC1008B3BBC /* Status.swift */; };\n\t\tD73BCCDD28EB5EC4008B3BBC /* StatusIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7728EB5EC1008B3BBC /* StatusIterator.swift */; };\n\t\tD73BCCDE28EB5EC4008B3BBC /* StatusIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7728EB5EC1008B3BBC /* StatusIterator.swift */; };\n\t\tD73BCCE028EB5EC4008B3BBC /* Index.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7928EB5EC1008B3BBC /* Index.swift */; };\n\t\tD73BCCE128EB5EC4008B3BBC /* Index.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7928EB5EC1008B3BBC /* Index.swift */; };\n\t\tD73BCCE328EB5EC4008B3BBC /* Index+Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7A28EB5EC1008B3BBC /* Index+Commit.swift */; };\n\t\tD73BCCE428EB5EC4008B3BBC /* Index+Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7A28EB5EC1008B3BBC /* Index+Commit.swift */; };\n\t\tD73BCCE628EB5EC4008B3BBC /* Index+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7B28EB5EC1008B3BBC /* Index+Files.swift */; };\n\t\tD73BCCE728EB5EC4008B3BBC /* Index+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7B28EB5EC1008B3BBC /* Index+Files.swift */; };\n\t\tD73BCCE928EB5EC4008B3BBC /* Head+Checkout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7D28EB5EC2008B3BBC /* Head+Checkout.swift */; };\n\t\tD73BCCEA28EB5EC4008B3BBC /* Head+Checkout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7D28EB5EC2008B3BBC /* Head+Checkout.swift */; };\n\t\tD73BCCEC28EB5EC4008B3BBC /* Head.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7E28EB5EC2008B3BBC /* Head.swift */; };\n\t\tD73BCCED28EB5EC4008B3BBC /* Head.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7E28EB5EC2008B3BBC /* Head.swift */; };\n\t\tD73BCCEF28EB5EC4008B3BBC /* Head+Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7F28EB5EC2008B3BBC /* Head+Merge.swift */; };\n\t\tD73BCCF028EB5EC4008B3BBC /* Head+Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC7F28EB5EC2008B3BBC /* Head+Merge.swift */; };\n\t\tD73BCCF228EB5EC4008B3BBC /* TreeEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8128EB5EC2008B3BBC /* TreeEntry.swift */; };\n\t\tD73BCCF328EB5EC4008B3BBC /* TreeEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8128EB5EC2008B3BBC /* TreeEntry.swift */; };\n\t\tD73BCCF528EB5EC4008B3BBC /* Tree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8228EB5EC2008B3BBC /* Tree.swift */; };\n\t\tD73BCCF628EB5EC4008B3BBC /* Tree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8228EB5EC2008B3BBC /* Tree.swift */; };\n\t\tD73BCCF828EB5EC4008B3BBC /* RepositoryManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8428EB5EC3008B3BBC /* RepositoryManager.swift */; };\n\t\tD73BCCF928EB5EC4008B3BBC /* RepositoryManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8428EB5EC3008B3BBC /* RepositoryManager.swift */; };\n\t\tD73BCCFB28EB5EC4008B3BBC /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8528EB5EC3008B3BBC /* Repository.swift */; };\n\t\tD73BCCFC28EB5EC4008B3BBC /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8528EB5EC3008B3BBC /* Repository.swift */; };\n\t\tD73BCCFE28EB5EC4008B3BBC /* Repository+Open.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8628EB5EC3008B3BBC /* Repository+Open.swift */; };\n\t\tD73BCCFF28EB5EC4008B3BBC /* Repository+Open.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8628EB5EC3008B3BBC /* Repository+Open.swift */; };\n\t\tD73BCD0128EB5EC4008B3BBC /* Repository+Lookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8728EB5EC3008B3BBC /* Repository+Lookup.swift */; };\n\t\tD73BCD0228EB5EC4008B3BBC /* Repository+Lookup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8728EB5EC3008B3BBC /* Repository+Lookup.swift */; };\n\t\tD73BCD0428EB5EC4008B3BBC /* Repository+Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8828EB5EC3008B3BBC /* Repository+Commit.swift */; };\n\t\tD73BCD0528EB5EC4008B3BBC /* Repository+Commit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8828EB5EC3008B3BBC /* Repository+Commit.swift */; };\n\t\tD73BCD0728EB5EC4008B3BBC /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8A28EB5EC3008B3BBC /* Reference.swift */; };\n\t\tD73BCD0828EB5EC4008B3BBC /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8A28EB5EC3008B3BBC /* Reference.swift */; };\n\t\tD73BCD0A28EB5EC4008B3BBC /* Reference+Target.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8B28EB5EC3008B3BBC /* Reference+Target.swift */; };\n\t\tD73BCD0B28EB5EC4008B3BBC /* Reference+Target.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8B28EB5EC3008B3BBC /* Reference+Target.swift */; };\n\t\tD73FABDA207F2EB600A98483 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D7465F27207F2CD600E46A52 /* Images.xcassets */; };\n\t\tD73FAE9F21553CAA0058BE61 /* UIApplication+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73FAE9E21553CAA0058BE61 /* UIApplication+.swift */; };\n\t\tD74112281FABA21B00AB619A /* MainWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74112271FABA21B00AB619A /* MainWindow.swift */; };\n\t\tD74112291FABA29100AB619A /* MainWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74112271FABA21B00AB619A /* MainWindow.swift */; };\n\t\tD743FB5324CD72B0003A8913 /* SettingsFilesNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BAC62E249D11F8008D29AA /* SettingsFilesNaming.swift */; };\n\t\tD743FB5424CD72B1003A8913 /* SettingsFilesNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BAC62E249D11F8008D29AA /* SettingsFilesNaming.swift */; };\n\t\tD7465F28207F2CD600E46A52 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D7465F27207F2CD600E46A52 /* Images.xcassets */; };\n\t\tD7470D072170E890006B2A92 /* NSTextStorage++.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7470D062170E890006B2A92 /* NSTextStorage++.swift */; };\n\t\tD7470D082170E890006B2A92 /* NSTextStorage++.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7470D062170E890006B2A92 /* NSTextStorage++.swift */; };\n\t\tD7470D092170E890006B2A92 /* NSTextStorage++.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7470D062170E890006B2A92 /* NSTextStorage++.swift */; };\n\t\tD7487F922173503C00D09383 /* AttributedBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74B7B642137D3A1007F5331 /* AttributedBox.swift */; };\n\t\tD7487F932173503C00D09383 /* AttributedBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74B7B642137D3A1007F5331 /* AttributedBox.swift */; };\n\t\tD7487FD721738A1800D09383 /* NSImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7487FD5217389F800D09383 /* NSImage+.swift */; };\n\t\tD7487FD821738A1900D09383 /* NSImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7487FD5217389F800D09383 /* NSImage+.swift */; };\n\t\tD7487FEB2174E62A00D09383 /* NSAttributedStringKey+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7487FE82174E5CB00D09383 /* NSAttributedStringKey+.swift */; };\n\t\tD7487FEC2174E62B00D09383 /* NSAttributedStringKey+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7487FE82174E5CB00D09383 /* NSAttributedStringKey+.swift */; };\n\t\tD7487FED2174E62B00D09383 /* NSAttributedStringKey+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7487FE82174E5CB00D09383 /* NSAttributedStringKey+.swift */; };\n\t\tD74B7B672137D3A1007F5331 /* AttributedBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74B7B642137D3A1007F5331 /* AttributedBox.swift */; };\n\t\tD74B7B692137EFA9007F5331 /* SingleTouchDownGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74B7B682137EFA9007F5331 /* SingleTouchDownGestureRecognizer.swift */; };\n\t\tD74D479F256DF2EB00D97647 /* FSNTextAttachmentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74D479E256DF2EB00D97647 /* FSNTextAttachmentCell.swift */; };\n\t\tD74D47A0256DF2EB00D97647 /* FSNTextAttachmentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74D479E256DF2EB00D97647 /* FSNTextAttachmentCell.swift */; };\n\t\tD74DFBAC21661BA300F67D64 /* Date+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76E10C0215A55CE0017F4A3 /* Date+.swift */; };\n\t\tD74DFBAD21661BA400F67D64 /* Date+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76E10C0215A55CE0017F4A3 /* Date+.swift */; };\n\t\tD750345E285F817D00086424 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2920FEDE230005E120 /* String+.swift */; };\n\t\tD750345F285F81F300086424 /* URL+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2A20FEDE230005E120 /* URL+.swift */; };\n\t\tD7503460285F827800086424 /* DateFormatter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2820FEDE230005E120 /* DateFormatter+.swift */; };\n\t\tD7508FC81F337E850047AB76 /* SearchTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7508FC71F337E850047AB76 /* SearchTextField.swift */; };\n\t\tD7508FCE1F3438540047AB76 /* PrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7508FCD1F3438540047AB76 /* PrefsViewController.swift */; };\n\t\tD752D80823454750006842F9 /* NSTextAttachment+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D752D80723454750006842F9 /* NSTextAttachment+.swift */; };\n\t\tD752D80923454750006842F9 /* NSTextAttachment+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D752D80723454750006842F9 /* NSTextAttachment+.swift */; };\n\t\tD752D80B23454750006842F9 /* NSTextAttachment+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D752D80723454750006842F9 /* NSTextAttachment+.swift */; };\n\t\tD75627CE26D1165A000AF6EA /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75627CD26D1165A000AF6EA /* ImageFormat.swift */; };\n\t\tD75627CF26D1165A000AF6EA /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75627CD26D1165A000AF6EA /* ImageFormat.swift */; };\n\t\tD75627D126D1165A000AF6EA /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75627CD26D1165A000AF6EA /* ImageFormat.swift */; };\n\t\tD75627D226D1165A000AF6EA /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75627CD26D1165A000AF6EA /* ImageFormat.swift */; };\n\t\tD75629B127D4DB7E00F55588 /* CodeFontViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75629B027D4DB7E00F55588 /* CodeFontViewController.swift */; };\n\t\tD75629B327D4DE9F00F55588 /* CodeThemeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75629B227D4DE9F00F55588 /* CodeThemeViewController.swift */; };\n\t\tD75629B527D5036D00F55588 /* SortByViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75629B427D5036D00F55588 /* SortByViewController.swift */; };\n\t\tD75629B727D53EB100F55588 /* ThanksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75629B627D53EB100F55588 /* ThanksViewController.swift */; };\n\t\tD75A34E527D7CD440085438F /* SidebarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75A34E427D7CD440085438F /* SidebarViewController.swift */; };\n\t\tD75EE7F72078B22D0055F159 /* SidebarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7F62078B22D0055F159 /* SidebarItem.swift */; };\n\t\tD75EE7F82078B22D0055F159 /* SidebarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7F62078B22D0055F159 /* SidebarItem.swift */; };\n\t\tD75EE7FA2078B3C00055F159 /* Sidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7F92078B3C00055F159 /* Sidebar.swift */; };\n\t\tD75EE7FB2078B3C00055F159 /* Sidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7F92078B3C00055F159 /* Sidebar.swift */; };\n\t\tD75EE7FD2078C5460055F159 /* SidebarCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7FC2078C5460055F159 /* SidebarCellView.swift */; };\n\t\tD75EE7FE2078C5460055F159 /* SidebarCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7FC2078C5460055F159 /* SidebarCellView.swift */; };\n\t\tD75EE8002078E0C60055F159 /* SidebarItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7FF2078E0C60055F159 /* SidebarItemType.swift */; };\n\t\tD75EE8012078E0C60055F159 /* SidebarItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7FF2078E0C60055F159 /* SidebarItemType.swift */; };\n\t\tD75F1DF1206D660D00F70B28 /* MPreview.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D71C4A4D1F520F0E00EBA30B /* MPreview.bundle */; };\n\t\tD75F3339205EC34800CC887E /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75F3338205EC34800CC887E /* ShareViewController.swift */; };\n\t\tD75F3340205EC34800CC887E /* FSNotes iOS Share Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D75F3336205EC34800CC887E /* FSNotes iOS Share Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tD76025B2204EEF64000B9F59 /* TextFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76025B1204EEF64000B9F59 /* TextFormatter.swift */; };\n\t\tD76025B3204EEF64000B9F59 /* TextFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76025B1204EEF64000B9F59 /* TextFormatter.swift */; };\n\t\tD76025B4204EEF64000B9F59 /* TextFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76025B1204EEF64000B9F59 /* TextFormatter.swift */; };\n\t\tD76447DC1F3A4F0700965F01 /* UserDefaultsManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76447DB1F3A4F0700965F01 /* UserDefaultsManagement.swift */; };\n\t\tD7679376201F0BFD000F7BBF /* SortBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7679375201F0BFD000F7BBF /* SortBy.swift */; };\n\t\tD7679377201F0BFD000F7BBF /* SortBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7679375201F0BFD000F7BBF /* SortBy.swift */; };\n\t\tD7679389201F21F5000F7BBF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7679388201F21F5000F7BBF /* AppDelegate.swift */; };\n\t\tD767938B201F21F5000F7BBF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D767938A201F21F5000F7BBF /* ViewController.swift */; };\n\t\tD7680FB225D02B2C00810DA8 /* FileManager+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7680FB125D02B2C00810DA8 /* FileManager+.swift */; };\n\t\tD7680FB325D02B2C00810DA8 /* FileManager+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7680FB125D02B2C00810DA8 /* FileManager+.swift */; };\n\t\tD7680FB525D02B2C00810DA8 /* FileManager+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7680FB125D02B2C00810DA8 /* FileManager+.swift */; };\n\t\tD7680FB625D02B2C00810DA8 /* FileManager+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7680FB125D02B2C00810DA8 /* FileManager+.swift */; };\n\t\tD768D758245E86670028F344 /* NSAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D768D754245E854D0028F344 /* NSAttributedString+.swift */; };\n\t\tD768D759245E86680028F344 /* NSAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D768D754245E854D0028F344 /* NSAttributedString+.swift */; };\n\t\tD768D75A245E86690028F344 /* NSAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D768D754245E854D0028F344 /* NSAttributedString+.swift */; };\n\t\tD768D75C245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D768D75B245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift */; };\n\t\tD768D75D245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D768D75B245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift */; };\n\t\tD76E10C1215A55CE0017F4A3 /* Date+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76E10C0215A55CE0017F4A3 /* Date+.swift */; };\n\t\tD76F3682272563EC00D1FFB4 /* NSAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D768D754245E854D0028F344 /* NSAttributedString+.swift */; };\n\t\tD77015822C972B7500CFF0E8 /* SettingsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77015812C972B6D00CFF0E8 /* SettingsTableViewCell.swift */; };\n\t\tD771E96F28EDFBF600CD4871 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D771E96E28EDFBF600CD4871 /* Errors.swift */; };\n\t\tD771E97028EDFBF600CD4871 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D771E96E28EDFBF600CD4871 /* Errors.swift */; };\n\t\tD772C8842217362C007E440B /* ViewController+Print.swift in Sources */ = {isa = PBXBuildFile; fileRef = D772C8832217362C007E440B /* ViewController+Print.swift */; };\n\t\tD772C8852217362C007E440B /* ViewController+Print.swift in Sources */ = {isa = PBXBuildFile; fileRef = D772C8832217362C007E440B /* ViewController+Print.swift */; };\n\t\tD7737393223D59CF00154B9E /* KeychainConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD26222BF30700E69C93 /* KeychainConfiguration.swift */; };\n\t\tD7737394223D59D300154B9E /* KeychainPasswordItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730BD29222BF32A00E69C93 /* KeychainPasswordItem.swift */; };\n\t\tD773DE801F36F45900A39C9F /* SandboxBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773DE7F1F36F45900A39C9F /* SandboxBookmark.swift */; };\n\t\tD7767C7F234E47B9006A0716 /* Markdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F7136ED23490CBF004DFA6E /* Markdown.swift */; };\n\t\tD777D7812009115C00D86B33 /* ImagesProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D777D7802009115C00D86B33 /* ImagesProcessor.swift */; };\n\t\tD777D782200912A400D86B33 /* ImagesProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D777D7802009115C00D86B33 /* ImagesProcessor.swift */; };\n\t\tD7793C731F211C6000CA39B7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7793C721F211C6000CA39B7 /* AppDelegate.swift */; };\n\t\tD7793C751F211C6000CA39B7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7793C741F211C6000CA39B7 /* ViewController.swift */; };\n\t\tD779C7BB1F415C0300FADEE1 /* PrefsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D779C7BA1F415BE300FADEE1 /* PrefsWindowController.swift */; };\n\t\tD77A12372C469ACF001B388B /* SearchQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714749C279D7DBC001A8B29 /* SearchQuery.swift */; };\n\t\tD77A12382C469AD0001B388B /* SearchQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714749C279D7DBC001A8B29 /* SearchQuery.swift */; };\n\t\tD77A6F7F28B11496006A0353 /* PreferencesWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77A6F7E28B11496006A0353 /* PreferencesWebViewController.swift */; };\n\t\tD77A6F8028B11496006A0353 /* PreferencesWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77A6F7E28B11496006A0353 /* PreferencesWebViewController.swift */; };\n\t\tD77AD7FC27F9D1C90077BD45 /* Data+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77AD7FB27F9D1C90077BD45 /* Data+.swift */; };\n\t\tD77AD7FD27F9D1C90077BD45 /* Data+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77AD7FB27F9D1C90077BD45 /* Data+.swift */; };\n\t\tD77AD7FF27F9D1C90077BD45 /* Data+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77AD7FB27F9D1C90077BD45 /* Data+.swift */; };\n\t\tD77CC041216A608500582B97 /* EditorScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77CC040216A608500582B97 /* EditorScrollView.swift */; };\n\t\tD77CC042216A608500582B97 /* EditorScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77CC040216A608500582B97 /* EditorScrollView.swift */; };\n\t\tD77E0536246312B200AD7772 /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77E05282463124300AD7772 /* StorageType.swift */; };\n\t\tD77E0537246312B300AD7772 /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77E05282463124300AD7772 /* StorageType.swift */; };\n\t\tD77E0538246312B400AD7772 /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77E05282463124300AD7772 /* StorageType.swift */; };\n\t\tD77E0539246312B400AD7772 /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77E05282463124300AD7772 /* StorageType.swift */; };\n\t\tD77F41B32A0D48F500E2B7A2 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D77F41B22A0D48F500E2B7A2 /* Launch Screen.storyboard */; };\n\t\tD77F89DF28D38B5D00BECC87 /* ViewController+Web.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F89DE28D38B5D00BECC87 /* ViewController+Web.swift */; };\n\t\tD77F89E028D38B5E00BECC87 /* ViewController+Web.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F89DE28D38B5D00BECC87 /* ViewController+Web.swift */; };\n\t\tD78115632153B36C004FA1CA /* Buttons.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78115622153B36C004FA1CA /* Buttons.swift */; };\n\t\tD78115672153D4D9004FA1CA /* ProjectsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78115662153D4D9004FA1CA /* ProjectsViewController.swift */; };\n\t\tD781156B2153E05A004FA1CA /* ProjectSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D781156A2153E05A004FA1CA /* ProjectSettingsViewController.swift */; };\n\t\tD783B505208A1BFD00328A41 /* EditorSplitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D783B504208A1BFD00328A41 /* EditorSplitView.swift */; };\n\t\tD783B506208A1BFD00328A41 /* EditorSplitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D783B504208A1BFD00328A41 /* EditorSplitView.swift */; };\n\t\tD785805C27A3483B000C1BAF /* FolderPopoverActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D785805B27A3483B000C1BAF /* FolderPopoverActions.swift */; };\n\t\tD78678CB2093AE10001A6620 /* UndoData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78678CA2093AE10001A6620 /* UndoData.swift */; };\n\t\tD78678CC2093AE10001A6620 /* UndoData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78678CA2093AE10001A6620 /* UndoData.swift */; };\n\t\tD792297521A845B4005F468F /* ProjectSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792297421A845B4005F468F /* ProjectSettingsViewController.swift */; };\n\t\tD792297621A845B4005F468F /* ProjectSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792297421A845B4005F468F /* ProjectSettingsViewController.swift */; };\n\t\tD792DD8227A6C980006ADC01 /* FSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD8127A6C980006ADC01 /* FSParser.swift */; };\n\t\tD792DD8327A6C980006ADC01 /* FSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD8127A6C980006ADC01 /* FSParser.swift */; };\n\t\tD792DD8527A6C980006ADC01 /* FSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD8127A6C980006ADC01 /* FSParser.swift */; };\n\t\tD792DD8627A6C980006ADC01 /* FSParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD8127A6C980006ADC01 /* FSParser.swift */; };\n\t\tD792DD9427A6D6F5006ADC01 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2920FEDE230005E120 /* String+.swift */; };\n\t\tD792DD9627A6D71C006ADC01 /* String+Punycode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD9527A6D71C006ADC01 /* String+Punycode.swift */; };\n\t\tD792DD9727A6D71C006ADC01 /* String+Punycode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD9527A6D71C006ADC01 /* String+Punycode.swift */; };\n\t\tD792DD9927A6D71C006ADC01 /* String+Punycode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D792DD9527A6D71C006ADC01 /* String+Punycode.swift */; };\n\t\tD794558E27C05743000C283F /* ProViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D794558D27C05743000C283F /* ProViewController.swift */; };\n\t\tD794559A27C1B3F9000C283F /* ExternalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D794559927C1B3F9000C283F /* ExternalViewController.swift */; };\n\t\tD7958A3922ED512D00EDBDDC /* SandboxBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7958A3822ED512D00EDBDDC /* SandboxBookmark.swift */; };\n\t\tD7958A3A22ED512D00EDBDDC /* SandboxBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7958A3822ED512D00EDBDDC /* SandboxBookmark.swift */; };\n\t\tD79651B12517741400333AD4 /* ProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79651B02517741400333AD4 /* ProgressState.swift */; };\n\t\tD79651B22517741400333AD4 /* ProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79651B02517741400333AD4 /* ProgressState.swift */; };\n\t\tD79651B42517741400333AD4 /* ProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79651B02517741400333AD4 /* ProgressState.swift */; };\n\t\tD79651B52517741400333AD4 /* ProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79651B02517741400333AD4 /* ProgressState.swift */; };\n\t\tD796EB41251E127300CE5C80 /* Pasteboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = D796EB40251E127300CE5C80 /* Pasteboard.swift */; };\n\t\tD796EB42251E127300CE5C80 /* Pasteboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = D796EB40251E127300CE5C80 /* Pasteboard.swift */; };\n\t\tD797004C1F3DD10700BAD94D /* EditTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D797004B1F3DD10700BAD94D /* EditTextView.swift */; };\n\t\tD79798A229C0FE6A00B9A878 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79798A129C0FE6A00B9A878 /* SettingsViewController.swift */; };\n\t\tD79798A329C0FE6A00B9A878 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79798A129C0FE6A00B9A878 /* SettingsViewController.swift */; };\n\t\tD79A13CD2A0E9C980037510B /* UIColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79A13CC2A0E9C980037510B /* UIColor+.swift */; };\n\t\tD79A13CE2A0E9C980037510B /* UIColor+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79A13CC2A0E9C980037510B /* UIColor+.swift */; };\n\t\tD79C26252872384C00CB70E6 /* EditorViewController+Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79C26242872384C00CB70E6 /* EditorViewController+Sharing.swift */; };\n\t\tD79C26262872384C00CB70E6 /* EditorViewController+Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79C26242872384C00CB70E6 /* EditorViewController+Sharing.swift */; };\n\t\tD79F92121FA8B9E2008C297E /* PreviewTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CE196B1FA4BA5E004BF8EE /* PreviewTextField.swift */; };\n\t\tD79FE8A21F77D04A00113CFD /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79FE8A01F77D04A00113CFD /* Note.swift */; };\n\t\tD7A415141F2FBDA00099B82C /* NotesTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A415131F2FBDA00099B82C /* NotesTableView.swift */; };\n\t\tD7A549C324DD9D3400537544 /* SettingsEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A549C224DD9D3400537544 /* SettingsEditorViewController.swift */; };\n\t\tD7A65C5920F11C38003E5ADC /* LanguageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A65C5820F11C38003E5ADC /* LanguageType.swift */; };\n\t\tD7A65C5A20F11C38003E5ADC /* LanguageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A65C5820F11C38003E5ADC /* LanguageType.swift */; };\n\t\tD7A9C1D62910784400905619 /* Project+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A9C1D52910784400905619 /* Project+Git.swift */; };\n\t\tD7A9C1D72910784400905619 /* Project+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A9C1D52910784400905619 /* Project+Git.swift */; };\n\t\tD7A9C1D92910784400905619 /* Project+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A9C1D52910784400905619 /* Project+Git.swift */; };\n\t\tD7A9C1DB29107A0800905619 /* Git in Frameworks */ = {isa = PBXBuildFile; productRef = D7A9C1DA29107A0800905619 /* Git */; };\n\t\tD7A9C1DC29107B7600905619 /* Reference+Target.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73BCC8B28EB5EC3008B3BBC /* Reference+Target.swift */; };\n\t\tD7ADFD112066CF9400B531F9 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7ADFD102066CF9400B531F9 /* CoreLocation.framework */; };\n\t\tD7B13DBD2C64F445008EBCAA /* Printer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B13DBC2C64F445008EBCAA /* Printer.swift */; };\n\t\tD7B13DBE2C64F445008EBCAA /* Printer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B13DBC2C64F445008EBCAA /* Printer.swift */; };\n\t\tD7B2B6EA245EEA620084B78D /* LanguageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A65C5820F11C38003E5ADC /* LanguageType.swift */; };\n\t\tD7B2B6EC245EEA790084B78D /* LanguageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A65C5820F11C38003E5ADC /* LanguageType.swift */; };\n\t\tD7B34F9725195D7E0007877E /* PreviewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B34F9625195D7E0007877E /* PreviewState.swift */; };\n\t\tD7B34F9825195D7E0007877E /* PreviewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B34F9625195D7E0007877E /* PreviewState.swift */; };\n\t\tD7B34F9A25195D7E0007877E /* PreviewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B34F9625195D7E0007877E /* PreviewState.swift */; };\n\t\tD7B34F9B25195D7E0007877E /* PreviewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B34F9625195D7E0007877E /* PreviewState.swift */; };\n\t\tD7B3FE7021027A5E00764C39 /* UserDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB3820FEDE230005E120 /* UserDataService.swift */; };\n\t\tD7B3FE7121027A6D00764C39 /* UserDataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB3820FEDE230005E120 /* UserDataService.swift */; };\n\t\tD7B4AC5E2471253100F3888A /* NoteMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B4AC5D2471253100F3888A /* NoteMeta.swift */; };\n\t\tD7B4AC5F2471253100F3888A /* NoteMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B4AC5D2471253100F3888A /* NoteMeta.swift */; };\n\t\tD7B4AC612471253100F3888A /* NoteMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B4AC5D2471253100F3888A /* NoteMeta.swift */; };\n\t\tD7B4AC622471253100F3888A /* NoteMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B4AC5D2471253100F3888A /* NoteMeta.swift */; };\n\t\tD7B6E59A207912E300FE0E20 /* Project.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B6E599207912E300FE0E20 /* Project.swift */; };\n\t\tD7B6E59B207912E300FE0E20 /* Project.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B6E599207912E300FE0E20 /* Project.swift */; };\n\t\tD7B6E59D20794B8C00FE0E20 /* Project.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B6E599207912E300FE0E20 /* Project.swift */; };\n\t\tD7BA204D2186E3DD0064824B /* TitleBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2799407B218484C900727B20 /* TitleBarView.swift */; };\n\t\tD7BAC62F249D11F8008D29AA /* SettingsFilesNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BAC62E249D11F8008D29AA /* SettingsFilesNaming.swift */; };\n\t\tD7BAC631249D1204008D29AA /* SettingsFilesNaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BAC62E249D11F8008D29AA /* SettingsFilesNaming.swift */; };\n\t\tD7BB2DFE29A0157700D5055A /* Storage+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BB2DFD29A0157700D5055A /* Storage+Git.swift */; };\n\t\tD7BB2DFF29A0157700D5055A /* Storage+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BB2DFD29A0157700D5055A /* Storage+Git.swift */; };\n\t\tD7BB2E0129A0157700D5055A /* Storage+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BB2DFD29A0157700D5055A /* Storage+Git.swift */; };\n\t\tD7BCF035296B0DAA00F72A4F /* AboutImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BCF034296B0DAA00F72A4F /* AboutImageView.swift */; };\n\t\tD7BCF036296B0DAA00F72A4F /* AboutImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BCF034296B0DAA00F72A4F /* AboutImageView.swift */; };\n\t\tD7BDFE59201F671900897A58 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E025071F3B6DDB00EDDA32 /* Storage.swift */; };\n\t\tD7BDFE5D201F677B00897A58 /* UserDefaultsManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76447DB1F3A4F0700965F01 /* UserDefaultsManagement.swift */; };\n\t\tD7BDFE60201F677B00897A58 /* NoteType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D708AC662000EF5800A1760F /* NoteType.swift */; };\n\t\tD7BDFE61201F677B00897A58 /* SortBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7679375201F0BFD000F7BBF /* SortBy.swift */; };\n\t\tD7BDFE62201F678C00897A58 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79FE8A01F77D04A00113CFD /* Note.swift */; };\n\t\tD7BDFE68201F67DA00897A58 /* NotesTextProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F95F391FF2759300E2A447 /* NotesTextProcessor.swift */; };\n\t\tD7BDFE6A201F68B700897A58 /* NotesTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BDFE69201F68B700897A58 /* NotesTableView.swift */; };\n\t\tD7BDFE6C201F6DC200897A58 /* EditTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BDFE6B201F6DC200897A58 /* EditTextView.swift */; };\n\t\tD7BDFE70201F788D00897A58 /* NoteCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BDFE6F201F788D00897A58 /* NoteCellView.swift */; };\n\t\tD7C1C99A235606CB0021A32D /* SidebarHeaderCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C1C999235606CB0021A32D /* SidebarHeaderCellView.swift */; };\n\t\tD7C1C99B235606CB0021A32D /* SidebarHeaderCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C1C999235606CB0021A32D /* SidebarHeaderCellView.swift */; };\n\t\tD7C33F6E29E09A690006C473 /* AppIconViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C33F6D29E09A690006C473 /* AppIconViewController.swift */; };\n\t\tD7C6DB5B25AA880600F8F76F /* ViewController+More.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C6DB5A25AA880600F8F76F /* ViewController+More.swift */; };\n\t\tD7C803EE2046DBBD005DA599 /* DefaultExtensionControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C803ED2046DBBD005DA599 /* DefaultExtensionControllerView.swift */; };\n\t\tD7C9029223547A1E00A89BD8 /* FSTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C9029123547A1E00A89BD8 /* FSTag.swift */; };\n\t\tD7C9029323547A1E00A89BD8 /* FSTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C9029123547A1E00A89BD8 /* FSTag.swift */; };\n\t\tD7C9029523547A1E00A89BD8 /* FSTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7C9029123547A1E00A89BD8 /* FSTag.swift */; };\n\t\tD7CA7FD4232652E300E9717A /* PreferencesGitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CA7FD3232652E300E9717A /* PreferencesGitViewController.swift */; };\n\t\tD7CA7FD5232652E300E9717A /* PreferencesGitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CA7FD3232652E300E9717A /* PreferencesGitViewController.swift */; };\n\t\tD7CB9905207E5AE300037E91 /* SidebarTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB9904207E5AE300037E91 /* SidebarTableRowView.swift */; };\n\t\tD7CB9906207E5AE300037E91 /* SidebarTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CB9904207E5AE300037E91 /* SidebarTableRowView.swift */; };\n\t\tD7CBAFFE214D5A1C002ECD5A /* ShortcutIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBAFFD214D5A1C002ECD5A /* ShortcutIdentifier.swift */; };\n\t\tD7CC44C12A1E5E4F00743857 /* ViewController+WebApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CC44C02A1E5E4F00743857 /* ViewController+WebApi.swift */; };\n\t\tD7CC44C22A1E5E4F00743857 /* ViewController+WebApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CC44C02A1E5E4F00743857 /* ViewController+WebApi.swift */; };\n\t\tD7CC44C42A1E5E4F00743857 /* ViewController+WebApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CC44C02A1E5E4F00743857 /* ViewController+WebApi.swift */; };\n\t\tD7CC44C62A1E5F7600743857 /* ApiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CC44C52A1E5F7600743857 /* ApiResponse.swift */; };\n\t\tD7CC44C72A1E5F7600743857 /* ApiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CC44C52A1E5F7600743857 /* ApiResponse.swift */; };\n\t\tD7CC44C92A1E5F7600743857 /* ApiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CC44C52A1E5F7600743857 /* ApiResponse.swift */; };\n\t\tD7CCEDB92C6BA2F300A3BB83 /* ClickableTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CCEDB82C6BA2F300A3BB83 /* ClickableTextField.swift */; };\n\t\tD7CCEDBA2C6BA2F300A3BB83 /* ClickableTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CCEDB82C6BA2F300A3BB83 /* ClickableTextField.swift */; };\n\t\tD7CD5CC42181F7530009D63B /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E025071F3B6DDB00EDDA32 /* Storage.swift */; };\n\t\tD7CD5CC5218209820009D63B /* UserDefaultsManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76447DB1F3A4F0700965F01 /* UserDefaultsManagement.swift */; };\n\t\tD7CD5CC6218209960009D63B /* Project.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B6E599207912E300FE0E20 /* Project.swift */; };\n\t\tD7CD5CC7218209BD0009D63B /* SortBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7679375201F0BFD000F7BBF /* SortBy.swift */; };\n\t\tD7CD5CC9218209D80009D63B /* NoteType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D708AC662000EF5800A1760F /* NoteType.swift */; };\n\t\tD7CD5CCC21820B7A0009D63B /* UserDefaultsManagement+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CD5CCA21820A380009D63B /* UserDefaultsManagement+.swift */; };\n\t\tD7CD5CCD21820B7B0009D63B /* UserDefaultsManagement+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CD5CCA21820A380009D63B /* UserDefaultsManagement+.swift */; };\n\t\tD7CD5CCE21820C9D0009D63B /* DateFormatter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2820FEDE230005E120 /* DateFormatter+.swift */; };\n\t\tD7CD5CD021820CBC0009D63B /* URL+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F13BB2A20FEDE230005E120 /* URL+.swift */; };\n\t\tD7CD5CD121820CCD0009D63B /* Date+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76E10C0215A55CE0017F4A3 /* Date+.swift */; };\n\t\tD7CD5CD421820D640009D63B /* NSAttributedStringKey+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7487FE82174E5CB00D09383 /* NSAttributedStringKey+.swift */; };\n\t\tD7CD5CD521820D700009D63B /* ImagesProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D777D7802009115C00D86B33 /* ImagesProcessor.swift */; };\n\t\tD7CD5CDB21832C190009D63B /* UserDefaultsManagement+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CD5CDA21832C190009D63B /* UserDefaultsManagement+.swift */; };\n\t\tD7CD5CDC21832C190009D63B /* UserDefaultsManagement+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CD5CDA21832C190009D63B /* UserDefaultsManagement+.swift */; };\n\t\tD7CD5F681F508E74006AA35D /* SourceCodePro-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7CD5F671F508E6A006AA35D /* SourceCodePro-Bold.ttf */; };\n\t\tD7CD5F691F508E74006AA35D /* SourceCodePro-BoldIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7CD5F661F508E6A006AA35D /* SourceCodePro-BoldIt.ttf */; };\n\t\tD7CD5F6C1F51185F006AA35D /* NSFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CD5F6B1F51185F006AA35D /* NSFont+.swift */; };\n\t\tD7CDE9DC2161767A00DC5978 /* AppearanceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CDE9DB2161767A00DC5978 /* AppearanceType.swift */; };\n\t\tD7CDE9DD2161767B00DC5978 /* AppearanceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CDE9DB2161767A00DC5978 /* AppearanceType.swift */; };\n\t\tD7CDE9DE216178DE00DC5978 /* AppearanceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CDE9DB2161767A00DC5978 /* AppearanceType.swift */; };\n\t\tD7CE196C1FA4BA5E004BF8EE /* PreviewTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CE196B1FA4BA5E004BF8EE /* PreviewTextField.swift */; };\n\t\tD7CF7EAB29E2093C00FEC0C5 /* SecurityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CF7EAA29E2093C00FEC0C5 /* SecurityViewController.swift */; };\n\t\tD7D01AFD2C65203A00F545D0 /* PrinterLegacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D01AFC2C65203A00F545D0 /* PrinterLegacy.swift */; };\n\t\tD7D01AFE2C65208000F545D0 /* PrinterLegacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D01AFC2C65203A00F545D0 /* PrinterLegacy.swift */; };\n\t\tD7D03BAF205C250500D96A6D /* FontViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D03BAE205C250500D96A6D /* FontViewController.swift */; };\n\t\tD7D1DE68216D05A800AC1845 /* NameTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D1DE67216D05A800AC1845 /* NameTextField.swift */; };\n\t\tD7D1DE69216D05A800AC1845 /* NameTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D1DE67216D05A800AC1845 /* NameTextField.swift */; };\n\t\tD7D2F27E2B54BD42003DCA47 /* Shout in Frameworks */ = {isa = PBXBuildFile; productRef = D7D2F27D2B54BD42003DCA47 /* Shout */; };\n\t\tD7D2F2802B54BDD4003DCA47 /* Shout in Frameworks */ = {isa = PBXBuildFile; productRef = D7D2F27F2B54BDD4003DCA47 /* Shout */; };\n\t\tD7D2F2822B54BE59003DCA47 /* Shout in Frameworks */ = {isa = PBXBuildFile; productRef = D7D2F2812B54BE59003DCA47 /* Shout */; };\n\t\tD7D372F4207B5B0F00AFBD9F /* SidebarNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D372F3207B5B0F00AFBD9F /* SidebarNotesView.swift */; };\n\t\tD7D372F5207B5B0F00AFBD9F /* SidebarNotesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D372F3207B5B0F00AFBD9F /* SidebarNotesView.swift */; };\n\t\tD7D372F7207BB09500AFBD9F /* SidebarOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D372F6207BB09500AFBD9F /* SidebarOutlineView.swift */; };\n\t\tD7D372F8207BB09500AFBD9F /* SidebarOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D372F6207BB09500AFBD9F /* SidebarOutlineView.swift */; };\n\t\tD7D3D2A427BEEA61001C1497 /* Note+History.swift in Sources */ = {isa = PBXBuildFile; fileRef = D736DDAC27BAC7940012ED70 /* Note+History.swift */; };\n\t\tD7D3D2A527BEEA62001C1497 /* Note+History.swift in Sources */ = {isa = PBXBuildFile; fileRef = D736DDAC27BAC7940012ED70 /* Note+History.swift */; };\n\t\tD7D79C28236798C300898A2D /* Welcome.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D7D79C27236798C300898A2D /* Welcome.bundle */; };\n\t\tD7D79C29236798C300898A2D /* Welcome.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D7D79C27236798C300898A2D /* Welcome.bundle */; };\n\t\tD7D7CD3A232774BC0016AC15 /* ViewController+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D7CD39232774BC0016AC15 /* ViewController+Git.swift */; };\n\t\tD7D7CD3B232774BC0016AC15 /* ViewController+Git.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D7CD39232774BC0016AC15 /* ViewController+Git.swift */; };\n\t\tD7D9503D209D806F001FB60B /* SidebarTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D9503C209D806F001FB60B /* SidebarTableView.swift */; };\n\t\tD7D9503F209D846E001FB60B /* SidebarTableCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D9503E209D846E001FB60B /* SidebarTableCellView.swift */; };\n\t\tD7D97F3C290437A200C651D4 /* NSWindowController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D97F3B290437A200C651D4 /* NSWindowController+.swift */; };\n\t\tD7D97F3D290437A200C651D4 /* NSWindowController+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D97F3B290437A200C651D4 /* NSWindowController+.swift */; };\n\t\tD7DA9E1E21031901001CF0BE /* OutlineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA9E1D21031901001CF0BE /* OutlineHeaderView.swift */; };\n\t\tD7DA9E1F21031901001CF0BE /* OutlineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA9E1D21031901001CF0BE /* OutlineHeaderView.swift */; };\n\t\tD7DA9E2121033489001CF0BE /* NSMutableAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA9E2021033489001CF0BE /* NSMutableAttributedString+.swift */; };\n\t\tD7DA9E2221033489001CF0BE /* NSMutableAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA9E2021033489001CF0BE /* NSMutableAttributedString+.swift */; };\n\t\tD7DA9E2321033834001CF0BE /* NSMutableAttributedString+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA9E2021033489001CF0BE /* NSMutableAttributedString+.swift */; };\n\t\tD7DD5A881F88D4EA00CE947E /* FileWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DD5A871F88D4EA00CE947E /* FileWatcher.swift */; };\n\t\tD7DD5A8A1F88D50000CE947E /* FileWatcherEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DD5A891F88D50000CE947E /* FileWatcherEvent.swift */; };\n\t\tD7DD79581F4E60D000D5724B /* SourceCodePro-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD79561F4E606600D5724B /* SourceCodePro-Black.ttf */; };\n\t\tD7DD79591F4E60D000D5724B /* SourceCodePro-It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD79551F4E606600D5724B /* SourceCodePro-It.ttf */; };\n\t\tD7DD795B1F4E611D00D5724B /* SourceCodePro-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD795A1F4E611200D5724B /* SourceCodePro-Regular.ttf */; };\n\t\tD7E025081F3B6DDB00EDDA32 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E025071F3B6DDB00EDDA32 /* Storage.swift */; };\n\t\tD7E32C2C28F8D0740048614B /* StaticSshKeyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E32C2B28F8D0740048614B /* StaticSshKeyDelegate.swift */; };\n\t\tD7E32C2D28F8D0750048614B /* StaticSshKeyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E32C2B28F8D0740048614B /* StaticSshKeyDelegate.swift */; };\n\t\tD7E51713220D814D00A9CAD9 /* UTI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E51712220D814D00A9CAD9 /* UTI.swift */; };\n\t\tD7E51714220D814D00A9CAD9 /* UTI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E51712220D814D00A9CAD9 /* UTI.swift */; };\n\t\tD7E6ACE920832D41003599A2 /* AppDelegate+URLRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E6ACE820832D40003599A2 /* AppDelegate+URLRoutes.swift */; };\n\t\tD7E6ACEA20832D41003599A2 /* AppDelegate+URLRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E6ACE820832D40003599A2 /* AppDelegate+URLRoutes.swift */; };\n\t\tD7E6D9D320808623003ECAFC /* SidebarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7F62078B22D0055F159 /* SidebarItem.swift */; };\n\t\tD7E6D9D42080862F003ECAFC /* SidebarItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7FF2078E0C60055F159 /* SidebarItemType.swift */; };\n\t\tD7E7DB3327A9B17000408725 /* DatePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E7DB3227A9B16F00408725 /* DatePickerViewController.swift */; };\n\t\tD7E81C2E1F925B5F00416A91 /* PrefsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D779C7BA1F415BE300FADEE1 /* PrefsWindowController.swift */; };\n\t\tD7E81C2F1F925B5F00416A91 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7793C741F211C6000CA39B7 /* ViewController.swift */; };\n\t\tD7E81C301F925B5F00416A91 /* FileWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DD5A871F88D4EA00CE947E /* FileWatcher.swift */; };\n\t\tD7E81C321F925B5F00416A91 /* PrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7508FCD1F3438540047AB76 /* PrefsViewController.swift */; };\n\t\tD7E81C331F925B5F00416A91 /* UserDefaultsManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76447DB1F3A4F0700965F01 /* UserDefaultsManagement.swift */; };\n\t\tD7E81C341F925B5F00416A91 /* EditTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D797004B1F3DD10700BAD94D /* EditTextView.swift */; };\n\t\tD7E81C361F925B5F00416A91 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7793C721F211C6000CA39B7 /* AppDelegate.swift */; };\n\t\tD7E81C371F925B5F00416A91 /* NoteRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D735E5BE1F2F001500173215 /* NoteRowView.swift */; };\n\t\tD7E81C381F925B5F00416A91 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E025071F3B6DDB00EDDA32 /* Storage.swift */; };\n\t\tD7E81C391F925B5F00416A91 /* FileWatcherEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DD5A891F88D50000CE947E /* FileWatcherEvent.swift */; };\n\t\tD7E81C3A1F925B5F00416A91 /* NotesTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A415131F2FBDA00099B82C /* NotesTableView.swift */; };\n\t\tD7E81C3D1F925B5F00416A91 /* SandboxBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773DE7F1F36F45900A39C9F /* SandboxBookmark.swift */; };\n\t\tD7E81C3F1F925B5F00416A91 /* NSFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CD5F6B1F51185F006AA35D /* NSFont+.swift */; };\n\t\tD7E81C411F925B5F00416A91 /* SearchTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7508FC71F337E850047AB76 /* SearchTextField.swift */; };\n\t\tD7E81C421F925B5F00416A91 /* MainWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 275592961F3AE9B5006B8988 /* MainWindowController.swift */; };\n\t\tD7E81C441F925B5F00416A91 /* NoteCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D735E5BC1F2EF66000173215 /* NoteCellView.swift */; };\n\t\tD7E81C461F925B5F00416A91 /* Note.swift in Sources */ = {isa = PBXBuildFile; fileRef = D79FE8A01F77D04A00113CFD /* Note.swift */; };\n\t\tD7E81C4B1F925B5F00416A91 /* MPreview.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D71C4A4D1F520F0E00EBA30B /* MPreview.bundle */; };\n\t\tD7E81C4C1F925B5F00416A91 /* SourceCodePro-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7CD5F671F508E6A006AA35D /* SourceCodePro-Bold.ttf */; };\n\t\tD7E81C4D1F925B5F00416A91 /* SourceCodePro-BoldIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7CD5F661F508E6A006AA35D /* SourceCodePro-BoldIt.ttf */; };\n\t\tD7E81C4E1F925B5F00416A91 /* SourceCodePro-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD795A1F4E611200D5724B /* SourceCodePro-Regular.ttf */; };\n\t\tD7E81C4F1F925B5F00416A91 /* SourceCodePro-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD79561F4E606600D5724B /* SourceCodePro-Black.ttf */; };\n\t\tD7E81C501F925B5F00416A91 /* SourceCodePro-It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD79551F4E606600D5724B /* SourceCodePro-It.ttf */; };\n\t\tD7E81C531F925B5F00416A91 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D7793C781F211C6000CA39B7 /* Main.storyboard */; };\n\t\tD7E9FEBA2C4AA59D0025D8E3 /* SidebarItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75EE7FF2078E0C60055F159 /* SidebarItemType.swift */; };\n\t\tD7E9FEBC2C4AA64B0025D8E3 /* SearchQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = D714749C279D7DBC001A8B29 /* SearchQuery.swift */; };\n\t\tD7ECE68A22B6B481006A14C6 /* TextBundle.icns in Resources */ = {isa = PBXBuildFile; fileRef = D720240B22A9412B000A7691 /* TextBundle.icns */; };\n\t\tD7EDEDFB219203C9000B8C1A /* NoteCellView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDEDFA219203C9000B8C1A /* NoteCellView+.swift */; };\n\t\tD7EDEDFC219203C9000B8C1A /* NoteCellView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDEDFA219203C9000B8C1A /* NoteCellView+.swift */; };\n\t\tD7EDEDFD21920402000B8C1A /* NoteCellView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EDEDFA219203C9000B8C1A /* NoteCellView+.swift */; };\n\t\tD7F2F19721C503F000E41811 /* AvenirNext-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18721C503EF00E41811 /* AvenirNext-MediumItalic.ttf */; };\n\t\tD7F2F19821C503F000E41811 /* AvenirNext-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18721C503EF00E41811 /* AvenirNext-MediumItalic.ttf */; };\n\t\tD7F2F19921C503F000E41811 /* AvenirNext-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18721C503EF00E41811 /* AvenirNext-MediumItalic.ttf */; };\n\t\tD7F2F19A21C503F000E41811 /* AvenirNext-UltraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18821C503EF00E41811 /* AvenirNext-UltraLight.ttf */; };\n\t\tD7F2F19B21C503F000E41811 /* AvenirNext-UltraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18821C503EF00E41811 /* AvenirNext-UltraLight.ttf */; };\n\t\tD7F2F19C21C503F000E41811 /* AvenirNext-UltraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18821C503EF00E41811 /* AvenirNext-UltraLight.ttf */; };\n\t\tD7F2F19D21C503F000E41811 /* AvenirNext-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18921C503EF00E41811 /* AvenirNext-Medium.ttf */; };\n\t\tD7F2F19E21C503F000E41811 /* AvenirNext-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18921C503EF00E41811 /* AvenirNext-Medium.ttf */; };\n\t\tD7F2F19F21C503F000E41811 /* AvenirNext-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18921C503EF00E41811 /* AvenirNext-Medium.ttf */; };\n\t\tD7F2F1A021C503F000E41811 /* AvenirNext-Heavy.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18A21C503EF00E41811 /* AvenirNext-Heavy.ttf */; };\n\t\tD7F2F1A121C503F000E41811 /* AvenirNext-Heavy.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18A21C503EF00E41811 /* AvenirNext-Heavy.ttf */; };\n\t\tD7F2F1A221C503F000E41811 /* AvenirNext-Heavy.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18A21C503EF00E41811 /* AvenirNext-Heavy.ttf */; };\n\t\tD7F2F1A321C503F000E41811 /* AvenirNext-DemiItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18B21C503EF00E41811 /* AvenirNext-DemiItalic.ttf */; };\n\t\tD7F2F1A421C503F000E41811 /* AvenirNext-DemiItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18B21C503EF00E41811 /* AvenirNext-DemiItalic.ttf */; };\n\t\tD7F2F1A521C503F000E41811 /* AvenirNext-DemiItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18B21C503EF00E41811 /* AvenirNext-DemiItalic.ttf */; };\n\t\tD7F2F1A621C503F000E41811 /* AvenirNext-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18C21C503EF00E41811 /* AvenirNext-BoldItalic.ttf */; };\n\t\tD7F2F1A721C503F000E41811 /* AvenirNext-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18C21C503EF00E41811 /* AvenirNext-BoldItalic.ttf */; };\n\t\tD7F2F1A821C503F000E41811 /* AvenirNext-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18C21C503EF00E41811 /* AvenirNext-BoldItalic.ttf */; };\n\t\tD7F2F1A921C503F000E41811 /* AvenirNext-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18D21C503EF00E41811 /* AvenirNext-Regular.ttf */; };\n\t\tD7F2F1AA21C503F000E41811 /* AvenirNext-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18D21C503EF00E41811 /* AvenirNext-Regular.ttf */; };\n\t\tD7F2F1AB21C503F000E41811 /* AvenirNext-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18D21C503EF00E41811 /* AvenirNext-Regular.ttf */; };\n\t\tD7F2F1AC21C503F000E41811 /* AvenirNext-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18E21C503EF00E41811 /* AvenirNext-Light.ttf */; };\n\t\tD7F2F1AD21C503F000E41811 /* AvenirNext-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18E21C503EF00E41811 /* AvenirNext-Light.ttf */; };\n\t\tD7F2F1AE21C503F000E41811 /* AvenirNext-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18E21C503EF00E41811 /* AvenirNext-Light.ttf */; };\n\t\tD7F2F1AF21C503F000E41811 /* AvenirNext-Demi.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18F21C503EF00E41811 /* AvenirNext-Demi.ttf */; };\n\t\tD7F2F1B021C503F000E41811 /* AvenirNext-Demi.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18F21C503EF00E41811 /* AvenirNext-Demi.ttf */; };\n\t\tD7F2F1B121C503F000E41811 /* AvenirNext-Demi.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F18F21C503EF00E41811 /* AvenirNext-Demi.ttf */; };\n\t\tD7F2F1B221C503F000E41811 /* AvenirNext-HeavyItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19021C503EF00E41811 /* AvenirNext-HeavyItalic.ttf */; };\n\t\tD7F2F1B321C503F000E41811 /* AvenirNext-HeavyItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19021C503EF00E41811 /* AvenirNext-HeavyItalic.ttf */; };\n\t\tD7F2F1B421C503F000E41811 /* AvenirNext-HeavyItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19021C503EF00E41811 /* AvenirNext-HeavyItalic.ttf */; };\n\t\tD7F2F1B521C503F000E41811 /* AvenirNext-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19121C503F000E41811 /* AvenirNext-ThinItalic.ttf */; };\n\t\tD7F2F1B621C503F000E41811 /* AvenirNext-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19121C503F000E41811 /* AvenirNext-ThinItalic.ttf */; };\n\t\tD7F2F1B721C503F000E41811 /* AvenirNext-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19121C503F000E41811 /* AvenirNext-ThinItalic.ttf */; };\n\t\tD7F2F1B821C503F000E41811 /* AvenirNext-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19221C503F000E41811 /* AvenirNext-Bold.ttf */; };\n\t\tD7F2F1B921C503F000E41811 /* AvenirNext-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19221C503F000E41811 /* AvenirNext-Bold.ttf */; };\n\t\tD7F2F1BA21C503F000E41811 /* AvenirNext-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19221C503F000E41811 /* AvenirNext-Bold.ttf */; };\n\t\tD7F2F1BB21C503F000E41811 /* AvenirNext-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19321C503F000E41811 /* AvenirNext-Thin.ttf */; };\n\t\tD7F2F1BC21C503F000E41811 /* AvenirNext-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19321C503F000E41811 /* AvenirNext-Thin.ttf */; };\n\t\tD7F2F1BD21C503F000E41811 /* AvenirNext-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19321C503F000E41811 /* AvenirNext-Thin.ttf */; };\n\t\tD7F2F1BE21C503F000E41811 /* AvenirNext-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19421C503F000E41811 /* AvenirNext-Italic.ttf */; };\n\t\tD7F2F1BF21C503F000E41811 /* AvenirNext-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19421C503F000E41811 /* AvenirNext-Italic.ttf */; };\n\t\tD7F2F1C021C503F000E41811 /* AvenirNext-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19421C503F000E41811 /* AvenirNext-Italic.ttf */; };\n\t\tD7F2F1C121C503F000E41811 /* AvenirNext-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19521C503F000E41811 /* AvenirNext-LightItalic.ttf */; };\n\t\tD7F2F1C221C503F000E41811 /* AvenirNext-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19521C503F000E41811 /* AvenirNext-LightItalic.ttf */; };\n\t\tD7F2F1C321C503F000E41811 /* AvenirNext-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19521C503F000E41811 /* AvenirNext-LightItalic.ttf */; };\n\t\tD7F2F1C421C503F000E41811 /* AvenirNext-UltraLightIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19621C503F000E41811 /* AvenirNext-UltraLightIt.ttf */; };\n\t\tD7F2F1C521C503F000E41811 /* AvenirNext-UltraLightIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19621C503F000E41811 /* AvenirNext-UltraLightIt.ttf */; };\n\t\tD7F2F1C621C503F000E41811 /* AvenirNext-UltraLightIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7F2F19621C503F000E41811 /* AvenirNext-UltraLightIt.ttf */; };\n\t\tD7F5C0EF223ED0570038F172 /* PreferencesGeneralViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0EE223ED0570038F172 /* PreferencesGeneralViewController.swift */; };\n\t\tD7F5C0F0223ED0570038F172 /* PreferencesGeneralViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0EE223ED0570038F172 /* PreferencesGeneralViewController.swift */; };\n\t\tD7F5C0F2223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0F1223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift */; };\n\t\tD7F5C0F3223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0F1223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift */; };\n\t\tD7F5C0F5223ED5620038F172 /* PreferencesEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0F4223ED5620038F172 /* PreferencesEditorViewController.swift */; };\n\t\tD7F5C0F6223ED5620038F172 /* PreferencesEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0F4223ED5620038F172 /* PreferencesEditorViewController.swift */; };\n\t\tD7F5C0F8223ED57D0038F172 /* PreferencesSecurityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0F7223ED57D0038F172 /* PreferencesSecurityViewController.swift */; };\n\t\tD7F5C0F9223ED57D0038F172 /* PreferencesSecurityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0F7223ED57D0038F172 /* PreferencesSecurityViewController.swift */; };\n\t\tD7F5C0FB223ED58F0038F172 /* PreferencesAdvancedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0FA223ED58F0038F172 /* PreferencesAdvancedViewController.swift */; };\n\t\tD7F5C0FC223ED58F0038F172 /* PreferencesAdvancedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F5C0FA223ED58F0038F172 /* PreferencesAdvancedViewController.swift */; };\n\t\tD7F6CFF02056AC22008C584A /* LanguageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F6CFEF2056AC22008C584A /* LanguageViewController.swift */; };\n\t\tD7F95F3A1FF2759300E2A447 /* NotesTextProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F95F391FF2759300E2A447 /* NotesTextProcessor.swift */; };\n\t\tD7FA916520555067002BB0AB /* SourceCodePro-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD79561F4E606600D5724B /* SourceCodePro-Black.ttf */; };\n\t\tD7FA916620555067002BB0AB /* SourceCodePro-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7CD5F671F508E6A006AA35D /* SourceCodePro-Bold.ttf */; };\n\t\tD7FA916720555067002BB0AB /* SourceCodePro-BoldIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7CD5F661F508E6A006AA35D /* SourceCodePro-BoldIt.ttf */; };\n\t\tD7FA916820555067002BB0AB /* SourceCodePro-It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD79551F4E606600D5724B /* SourceCodePro-It.ttf */; };\n\t\tD7FA916920555067002BB0AB /* SourceCodePro-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7DD795A1F4E611200D5724B /* SourceCodePro-Regular.ttf */; };\n\t\tD7FB716C2BE7F66500808E56 /* EditorViewController+QuickLook.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FB716B2BE7F66500808E56 /* EditorViewController+QuickLook.swift */; };\n\t\tD7FDA4F7236DBC6900C3B4AA /* Sidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FDA4F6236DBC6900C3B4AA /* Sidebar.swift */; };\n\t\tD7FFD09C1FF677ED0064CBA6 /* NotesTextProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F95F391FF2759300E2A447 /* NotesTextProcessor.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tD75F333E205EC34800CC887E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D7793C671F211C6000CA39B7 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D75F3335205EC34800CC887E;\n\t\t\tremoteInfo = \"FSNotes iOS Share\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t6F13BB1A20FEDDF50005E120 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6F13BB6620FEDE560005E120 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD713542C2042D46E00E3776F /* Embed Watch Content */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(CONTENTS_FOLDER_PATH)/Watch\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Watch Content\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD721893F21020D3300FE3AF2 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD73E3DE0205D17360044FF84 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\tD75F3340205EC34800CC887E /* FSNotes iOS Share Extension.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7D7CD56232791670016AC15 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 6;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7D7CD58232791810016AC15 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 7;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1102DDB02EE4C277005029A6 /* EditTextView+Complete.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditTextView+Complete.swift\"; sourceTree = \"<group>\"; };\n\t\t110BE0102EE86B4600C5E456 /* Clojure.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Clojure.swift; sourceTree = \"<group>\"; };\n\t\t110BE0142EE8C1C600C5E456 /* Html.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Html.swift; sourceTree = \"<group>\"; };\n\t\t110BE0182EE8C24B00C5E456 /* Css.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Css.swift; sourceTree = \"<group>\"; };\n\t\t110BE01C2EE8C3BA00C5E456 /* Shell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shell.swift; sourceTree = \"<group>\"; };\n\t\t110BE0202EE8C53600C5E456 /* TypeScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypeScript.swift; sourceTree = \"<group>\"; };\n\t\t110BE0242EE8C5AC00C5E456 /* Lisp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lisp.swift; sourceTree = \"<group>\"; };\n\t\t110D09812E9C1525001555FA /* NSRange+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSRange+.swift\"; sourceTree = \"<group>\"; };\n\t\t110E409D2EA0150000C62F49 /* NSTextCheckingResult+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSTextCheckingResult+.swift\"; sourceTree = \"<group>\"; };\n\t\t110E40A32EA039AA00C62F49 /* EditTextView+DragOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditTextView+DragOperation.swift\"; sourceTree = \"<group>\"; };\n\t\t111013142EC8F1B600B6CF1B /* ImagePreviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagePreviewViewController.swift; sourceTree = \"<group>\"; };\n\t\t113685592EC7A2130033767F /* NSMutableAttributedString+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSMutableAttributedString+.swift\"; sourceTree = \"<group>\"; };\n\t\t1136855B2EC7A69C0033767F /* Platform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Platform.swift; sourceTree = \"<group>\"; };\n\t\t113685612EC869860033767F /* URL+Image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"URL+Image.swift\"; sourceTree = \"<group>\"; };\n\t\t113685672EC889DC0033767F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = \"<group>\"; };\n\t\t113685692EC8AE260033767F /* UIBarButtonItem+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIBarButtonItem+.swift\"; sourceTree = \"<group>\"; };\n\t\t113A319F2EEE2D3A009B50B0 /* Note+Preview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Note+Preview.swift\"; sourceTree = \"<group>\"; };\n\t\t11598DA22EDCB8D40036E387 /* UIFont+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIFont+.swift\"; sourceTree = \"<group>\"; };\n\t\t116182862E62B046005B5EE0 /* SwiftHighlighter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftHighlighter.swift; sourceTree = \"<group>\"; };\n\t\t1166D1F62E91BA7F00B061CA /* CodeBlockDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeBlockDetector.swift; sourceTree = \"<group>\"; };\n\t\t1175E0912EDC929400B92794 /* ny-2026.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = \"ny-2026.icon\"; sourceTree = \"<group>\"; };\n\t\t1175E0992EDCA60200B92794 /* FSNotes - Readme.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = \"FSNotes - Readme.md\"; sourceTree = \"<group>\"; };\n\t\t1175E09A2EDCA60200B92794 /* FSNotes 4.0 Change Log.textbundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = \"FSNotes 4.0 Change Log.textbundle\"; sourceTree = \"<group>\"; };\n\t\t1175E09B2EDCA60200B92794 /* FSNotes 4.0 for iOS.textbundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = \"FSNotes 4.0 for iOS.textbundle\"; sourceTree = \"<group>\"; };\n\t\t1175E09C2EDCA60200B92794 /* FSNotes 5.0 Change Log.textbundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = \"FSNotes 5.0 Change Log.textbundle\"; sourceTree = \"<group>\"; };\n\t\t1175E09D2EDCA60200B92794 /* Meet FSNotes 6.textbundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = \"Meet FSNotes 6.textbundle\"; sourceTree = \"<group>\"; };\n\t\t117C0E4C2EEDB9B70086419C /* EditTextView+Clicked.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditTextView+Clicked.swift\"; sourceTree = \"<group>\"; };\n\t\t11A6A8F92EF06B90005D000A /* EditTextView+MoveLines.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditTextView+MoveLines.swift\"; sourceTree = \"<group>\"; };\n\t\t11A6A8FC2EF074D2005D000A /* EditTextView+Todo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditTextView+Todo.swift\"; sourceTree = \"<group>\"; };\n\t\t11A95B612EDC56DC0081ED29 /* modern.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = modern.icon; sourceTree = \"<group>\"; };\n\t\t11AA4B1E2EF9A4680075A9E4 /* EditorViewController+ScrollPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditorViewController+ScrollPosition.swift\"; sourceTree = \"<group>\"; };\n\t\t11ABE5E12EEEFCF700E7C9EB /* NotesCounterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesCounterView.swift; sourceTree = \"<group>\"; };\n\t\t11AF633D2E898430004E7157 /* Sql.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sql.swift; sourceTree = \"<group>\"; };\n\t\t11B3F5952F182E4E00A3531D /* EditorViewController+Search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditorViewController+Search.swift\"; sourceTree = \"<group>\"; };\n\t\t11BD71652EDC87B700541BF9 /* classic-2025.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = \"classic-2025.icon\"; sourceTree = \"<group>\"; };\n\t\t11BD8F912EDDEC33000673A7 /* GitHubDark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubDark.swift; sourceTree = \"<group>\"; };\n\t\t11BD8F952EDDF320000673A7 /* SolarizedLight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SolarizedLight.swift; sourceTree = \"<group>\"; };\n\t\t11BD8F992EDDF332000673A7 /* SolarizedDark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SolarizedDark.swift; sourceTree = \"<group>\"; };\n\t\t11BD8F9D2EDE022C000673A7 /* AtomOneLight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AtomOneLight.swift; sourceTree = \"<group>\"; };\n\t\t11BD8FA12EDE023E000673A7 /* AtomOneDark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AtomOneDark.swift; sourceTree = \"<group>\"; };\n\t\t11BD8FA52EDE0679000673A7 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = \"<group>\"; };\n\t\t11BF06692EE331B2006C7336 /* Scala.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scala.swift; sourceTree = \"<group>\"; };\n\t\t11BF066D2EE331FE006C7336 /* Bash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bash.swift; sourceTree = \"<group>\"; };\n\t\t11BF06712EE3325F006C7336 /* Haskell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Haskell.swift; sourceTree = \"<group>\"; };\n\t\t11BF06752EE49542006C7336 /* Lua.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lua.swift; sourceTree = \"<group>\"; };\n\t\t11BF06792EE495C0006C7336 /* Perl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Perl.swift; sourceTree = \"<group>\"; };\n\t\t11BF067D2EE49689006C7336 /* Erlang.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Erlang.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0C62EE22567006017F0 /* Python.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Python.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0CA2EE225E1006017F0 /* C.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = C.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0CE2EE22799006017F0 /* Cpp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cpp.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0D22EE227F6006017F0 /* Java.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Java.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0D62EE229E7006017F0 /* Go.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Go.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0DA2EE22B0D006017F0 /* Rust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Rust.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0DE2EE22B74006017F0 /* Csharp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Csharp.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0E22EE22BEE006017F0 /* Kotlin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Kotlin.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0E62EE22C0F006017F0 /* R.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = R.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0EA2EE22C69006017F0 /* Ruby.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ruby.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0EE2EE22CB8006017F0 /* Matlab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Matlab.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0F22EE22D39006017F0 /* Dart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dart.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0F62EE22D73006017F0 /* Vb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Vb.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0FA2EE22DFC006017F0 /* Assembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Assembly.swift; sourceTree = \"<group>\"; };\n\t\t11D6C0FE2EE22E48006017F0 /* Scratch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scratch.swift; sourceTree = \"<group>\"; };\n\t\t11D6C1022EE22E8B006017F0 /* Groovy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Groovy.swift; sourceTree = \"<group>\"; };\n\t\t11D6C1062EE22EE8006017F0 /* ObjectiveC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectiveC.swift; sourceTree = \"<group>\"; };\n\t\t11D702A52E5ADDE2004DBAEC /* LayoutManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayoutManager.swift; sourceTree = \"<group>\"; };\n\t\t11D702AB2E5B8E02004DBAEC /* HtmlExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HtmlExtractor.swift; sourceTree = \"<group>\"; };\n\t\t11D943192E643EF20010CC2B /* JavaScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JavaScript.swift; sourceTree = \"<group>\"; };\n\t\t11D9431D2E643F1F0010CC2B /* Swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Swift.swift; sourceTree = \"<group>\"; };\n\t\t11D943212E643F3B0010CC2B /* Php.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Php.swift; sourceTree = \"<group>\"; };\n\t\t11D943262E643F5E0010CC2B /* GitHubLight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubLight.swift; sourceTree = \"<group>\"; };\n\t\t11F018AB2EF7E77B00F07580 /* MPreviewFindPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPreviewFindPanel.swift; sourceTree = \"<group>\"; };\n\t\t11F018B12EF8415200F07580 /* MPreviewContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPreviewContainerView.swift; sourceTree = \"<group>\"; };\n\t\t11F177192EF1E92C00CC566F /* ViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"ViewController+Menu.swift\"; sourceTree = \"<group>\"; };\n\t\t11F2D4F32F1042F4002E4E47 /* Project+Date.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Project+Date.swift\"; sourceTree = \"<group>\"; };\n\t\t11F389552EEA108C0008EC18 /* Mermaid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mermaid.swift; sourceTree = \"<group>\"; };\n\t\t11F43F3A2F127C6900652350 /* Meet FSNotes 7.textbundle */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = \"Meet FSNotes 7.textbundle\"; sourceTree = \"<group>\"; };\n\t\t11F5D53A2EFDA17000A66466 /* modern.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = modern.icon; sourceTree = \"<group>\"; };\n\t\t15136766333878E10A6B0457 /* Pods_FSNotes__Notarized_.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FSNotes__Notarized_.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t275592961F3AE9B5006B8988 /* MainWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainWindowController.swift; sourceTree = \"<group>\"; };\n\t\t2799407B218484C900727B20 /* TitleBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleBarView.swift; sourceTree = \"<group>\"; };\n\t\t365935BA74CEA7B5CAFAB536 /* Pods-FSNotes.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes.debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotes/Pods-FSNotes.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t42E001C52ADAC2930099E7AD /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = \"<group>\"; };\n\t\t42E001C92ADAC2930099E7AD /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = \"<group>\"; };\n\t\t42E001CB2ADAC2930099E7AD /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = \"<group>\"; };\n\t\t42E001CD2ADAC2930099E7AD /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/Main.xcstrings; sourceTree = \"<group>\"; };\n\t\t42E001CE2ADAC2930099E7AD /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = \"<group>\"; };\n\t\t4796D64E77383E6A5A3F900B /* Pods-FSNotes iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes iOS.release.xcconfig\"; path = \"Target Support Files/Pods-FSNotes iOS/Pods-FSNotes iOS.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t484D580095FCD450AE46554D /* Pods-FSNotes iOS Share Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes iOS Share Extension.debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotes iOS Share Extension/Pods-FSNotes iOS Share Extension.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6066605B9BAF43A4BF3B60C1 /* Pods_FSNotes__iCloud_.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FSNotes__iCloud_.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t62E7ACC8B47FFD05898BD354 /* Pods-FSNotes (iCloud).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes (iCloud).debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotes (iCloud)/Pods-FSNotes (iCloud).debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6ED8B562C4824136E3D33EDC /* Pods-FSNotesCore macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotesCore macOS.debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotesCore macOS/Pods-FSNotesCore macOS.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6F13BB2820FEDE230005E120 /* DateFormatter+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"DateFormatter+.swift\"; sourceTree = \"<group>\"; };\n\t\t6F13BB2920FEDE230005E120 /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"String+.swift\"; sourceTree = \"<group>\"; };\n\t\t6F13BB2A20FEDE230005E120 /* URL+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"URL+.swift\"; sourceTree = \"<group>\"; };\n\t\t6F13BB3820FEDE230005E120 /* UserDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDataService.swift; sourceTree = \"<group>\"; };\n\t\t747C0F2A42B8190F5AC0ECDB /* Pods-FSNotes (iCloud Documents).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes (iCloud Documents).debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotes (iCloud Documents)/Pods-FSNotes (iCloud Documents).debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t781ADC8297B1AC61D8E278F6 /* Pods-FSNotes iOS Share Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes iOS Share Extension.release.xcconfig\"; path = \"Target Support Files/Pods-FSNotes iOS Share Extension/Pods-FSNotes iOS Share Extension.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t85B72F46887638CA9CC70D39 /* Pods_FSNotes_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FSNotes_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t8F7136ED23490CBF004DFA6E /* Markdown.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Markdown.swift; sourceTree = \"<group>\"; };\n\t\t9381D32FA909CAB6102C4A5C /* Pods-FSNotes (Notarized).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes (Notarized).debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotes (Notarized)/Pods-FSNotes (Notarized).debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t99068B82274CF88F23C4761D /* Pods_FSNotes_iOS_Share_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FSNotes_iOS_Share_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9EA62EEDB6BE9BF8727E66E0 /* Pods-FSNotes.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes.release.xcconfig\"; path = \"Target Support Files/Pods-FSNotes/Pods-FSNotes.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA0C1E679E6D0B408CAC6372D /* Pods-FSNotesCore macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotesCore macOS.release.xcconfig\"; path = \"Target Support Files/Pods-FSNotesCore macOS/Pods-FSNotesCore macOS.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB3A8E91DD978BBA557F778F9 /* Pods_FSNotesCore_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FSNotesCore_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC1E2B9BF60C418804784CC3B /* Pods-FSNotes (Notarized).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes (Notarized).release.xcconfig\"; path = \"Target Support Files/Pods-FSNotes (Notarized)/Pods-FSNotes (Notarized).release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC8E92DD65B370BD263427B83 /* Pods-FSNotes (iCloud Documents).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes (iCloud Documents).release.xcconfig\"; path = \"Target Support Files/Pods-FSNotes (iCloud Documents)/Pods-FSNotes (iCloud Documents).release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD7013DFF26C3B116006F58E3 /* NSColor+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSColor+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7038E2520FB24E000A54E69 /* NoteAttachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteAttachment.swift; sourceTree = \"<group>\"; };\n\t\tD7063969202230BB00BC8446 /* EditorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditorViewController.swift; sourceTree = \"<group>\"; };\n\t\tD70716DB2307E82900B44B0D /* SingleImageTouchDownGestureRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleImageTouchDownGestureRecognizer.swift; sourceTree = \"<group>\"; };\n\t\tD708AC662000EF5800A1760F /* NoteType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteType.swift; sourceTree = \"<group>\"; };\n\t\tD709C9E129AFD9E0006EF9A8 /* GitTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitTableViewCell.swift; sourceTree = \"<group>\"; };\n\t\tD70B1FAA29213EDF003923DC /* HyperlinkTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HyperlinkTextField.swift; sourceTree = \"<group>\"; };\n\t\tD7104A63230BD8C500B6D8EE /* SortDirection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortDirection.swift; sourceTree = \"<group>\"; };\n\t\tD71354032042AFC800E3776F /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD714496120C72D3400D7AD46 /* UIImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIImage+.swift\"; sourceTree = \"<group>\"; };\n\t\tD714749A279CE8EE001A8B29 /* MainNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainNavigationController.swift; sourceTree = \"<group>\"; };\n\t\tD714749C279D7DBC001A8B29 /* SearchQuery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchQuery.swift; sourceTree = \"<group>\"; };\n\t\tD7153DFC2285A93300A2C20F /* AboutWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutWindowController.swift; sourceTree = \"<group>\"; };\n\t\tD7153E042285C09C00A2C20F /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7153E082285EC6100A2C20F /* TitleTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleTextField.swift; sourceTree = \"<group>\"; };\n\t\tD7163D2E24E81B5C00B1FC05 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = \"<group>\"; };\n\t\tD7163D3324E81D9900B1FC05 /* MainInterface.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\tD7170C1C20F8565B001DDB36 /* FileSystemEventManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemEventManager.swift; sourceTree = \"<group>\"; };\n\t\tD71AA0212143A4A8004AFD2A /* MoveViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveViewController.swift; sourceTree = \"<group>\"; };\n\t\tD71B9D792867027000D2F323 /* NoteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteViewController.swift; sourceTree = \"<group>\"; };\n\t\tD71B9D812868658100D2F323 /* EditorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditorViewController.swift; sourceTree = \"<group>\"; };\n\t\tD71B9D852868BF7F00D2F323 /* TextStorageProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextStorageProcessor.swift; sourceTree = \"<group>\"; };\n\t\tD71C4A4D1F520F0E00EBA30B /* MPreview.bundle */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.plug-in\"; path = MPreview.bundle; sourceTree = \"<group>\"; };\n\t\tD71FD2242101CFD0008BEFA1 /* UITextView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UITextView+.swift\"; sourceTree = \"<group>\"; };\n\t\tD720240922A9412B000A7691 /* Markdown.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Markdown.icns; sourceTree = \"<group>\"; };\n\t\tD720240A22A9412B000A7691 /* Text.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Text.icns; sourceTree = \"<group>\"; };\n\t\tD720240B22A9412B000A7691 /* TextBundle.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = TextBundle.icns; sourceTree = \"<group>\"; };\n\t\tD720241822A941A3000A7691 /* EncryptedTextPack.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = EncryptedTextPack.icns; sourceTree = \"<group>\"; };\n\t\tD72682A929BE8E1F00F6E961 /* RepositoryAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepositoryAction.swift; sourceTree = \"<group>\"; };\n\t\tD726DE89287ACC1E00F8406C /* NSWindow+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSWindow+.swift\"; sourceTree = \"<group>\"; };\n\t\tD72DAF0729B27D75001243BB /* ProjectSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectSettings.swift; sourceTree = \"<group>\"; };\n\t\tD72E05861F5220D300977D02 /* Down.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Down.framework; sourceTree = \"<group>\"; };\n\t\tD730829123084340003185D1 /* MPreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPreviewView.swift; sourceTree = \"<group>\"; };\n\t\tD730BD26222BF30700E69C93 /* KeychainConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainConfiguration.swift; sourceTree = \"<group>\"; };\n\t\tD730BD29222BF32A00E69C93 /* KeychainPasswordItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainPasswordItem.swift; sourceTree = \"<group>\"; };\n\t\tD730BD2D222DABA100E69C93 /* NoteContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteContainer.swift; sourceTree = \"<group>\"; };\n\t\tD730BD34222DB11E00E69C93 /* TextBundleInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextBundleInfo.swift; sourceTree = \"<group>\"; };\n\t\tD730BD3B222DB9FC00E69C93 /* NameHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NameHelper.swift; sourceTree = \"<group>\"; };\n\t\tD730BD59223BFEB200E69C93 /* RuntimeError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeError.swift; sourceTree = \"<group>\"; };\n\t\tD7315ECE215ECF3000AB49D4 /* EditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditorView.swift; sourceTree = \"<group>\"; };\n\t\tD7315ED1215ED15500AB49D4 /* SidebarSplitView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarSplitView.swift; sourceTree = \"<group>\"; };\n\t\tD7315ED4215ED95600AB49D4 /* NSAppearance+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSAppearance+.swift\"; sourceTree = \"<group>\"; };\n\t\tD735E5BC1F2EF66000173215 /* NoteCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteCellView.swift; sourceTree = \"<group>\"; };\n\t\tD735E5BE1F2F001500173215 /* NoteRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteRowView.swift; sourceTree = \"<group>\"; };\n\t\tD73673A720D10CF2000BA61D /* CloudDriveManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudDriveManager.swift; sourceTree = \"<group>\"; };\n\t\tD736DDA827B5DD370012ED70 /* EditorSelectionRect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditorSelectionRect.swift; sourceTree = \"<group>\"; };\n\t\tD736DDAA27BABFF80012ED70 /* RevisionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RevisionsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD736DDAC27BAC7940012ED70 /* Note+History.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Note+History.swift\"; sourceTree = \"<group>\"; };\n\t\tD73794C023366F5200E75A28 /* ImageScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageScrollView.swift; sourceTree = \"<group>\"; };\n\t\tD738356C2242871400B260DD /* MasterPasswordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterPasswordViewController.swift; sourceTree = \"<group>\"; };\n\t\tD73B3134298FBF4400F46144 /* GitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitViewController.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5428EB5EBE008B3BBC /* Commit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Commit.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5628EB5EBE008B3BBC /* Branch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Branch.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5728EB5EBE008B3BBC /* Branches.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Branches.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5828EB5EBE008B3BBC /* BranchesIterator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BranchesIterator.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5A28EB5EBE008B3BBC /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5B28EB5EBE008B3BBC /* ConfigManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigManager.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5C28EB5EBE008B3BBC /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5D28EB5EBE008B3BBC /* Wrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Wrapper.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5E28EB5EBE008B3BBC /* Progress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Progress.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC5F28EB5EBE008B3BBC /* Blob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Blob.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6028EB5EBF008B3BBC /* OID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OID.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6128EB5EBF008B3BBC /* Signature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signature.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6228EB5EBF008B3BBC /* Object.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Object.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6428EB5EBF008B3BBC /* TagIterator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TagIterator.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6528EB5EBF008B3BBC /* Tags.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tags.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6628EB5EBF008B3BBC /* Tag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6828EB5EBF008B3BBC /* RevisionIterator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RevisionIterator.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6928EB5EBF008B3BBC /* FileHistoryIterator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileHistoryIterator.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6B28EB5EC0008B3BBC /* DiffEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiffEntry.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6C28EB5EC0008B3BBC /* Diff.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Diff.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6E28EB5EC0008B3BBC /* KeyAuthentication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyAuthentication.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC6F28EB5EC0008B3BBC /* Authentication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Authentication.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7028EB5EC0008B3BBC /* PasswordAuthentication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordAuthentication.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7228EB5EC0008B3BBC /* Remote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Remote.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7328EB5EC0008B3BBC /* Remotes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Remotes.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7528EB5EC1008B3BBC /* Statuses.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Statuses.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7628EB5EC1008B3BBC /* Status.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Status.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7728EB5EC1008B3BBC /* StatusIterator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusIterator.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7928EB5EC1008B3BBC /* Index.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Index.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7A28EB5EC1008B3BBC /* Index+Commit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Index+Commit.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC7B28EB5EC1008B3BBC /* Index+Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Index+Files.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC7D28EB5EC2008B3BBC /* Head+Checkout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Head+Checkout.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC7E28EB5EC2008B3BBC /* Head.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Head.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC7F28EB5EC2008B3BBC /* Head+Merge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Head+Merge.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC8128EB5EC2008B3BBC /* TreeEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TreeEntry.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC8228EB5EC2008B3BBC /* Tree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tree.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC8428EB5EC3008B3BBC /* RepositoryManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RepositoryManager.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC8528EB5EC3008B3BBC /* Repository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Repository.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC8628EB5EC3008B3BBC /* Repository+Open.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Repository+Open.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC8728EB5EC3008B3BBC /* Repository+Lookup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Repository+Lookup.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC8828EB5EC3008B3BBC /* Repository+Commit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Repository+Commit.swift\"; sourceTree = \"<group>\"; };\n\t\tD73BCC8A28EB5EC3008B3BBC /* Reference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reference.swift; sourceTree = \"<group>\"; };\n\t\tD73BCC8B28EB5EC3008B3BBC /* Reference+Target.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"Reference+Target.swift\"; sourceTree = \"<group>\"; };\n\t\tD73FAE9E21553CAA0058BE61 /* UIApplication+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIApplication+.swift\"; sourceTree = \"<group>\"; };\n\t\tD74112271FABA21B00AB619A /* MainWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainWindow.swift; sourceTree = \"<group>\"; };\n\t\tD7465F27207F2CD600E46A52 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\tD7470D062170E890006B2A92 /* NSTextStorage++.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSTextStorage++.swift\"; sourceTree = \"<group>\"; };\n\t\tD7487FD5217389F800D09383 /* NSImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSImage+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7487FE82174E5CB00D09383 /* NSAttributedStringKey+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSAttributedStringKey+.swift\"; sourceTree = \"<group>\"; };\n\t\tD74922111FACE9B100C45108 /* Down.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Down.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD74B7B642137D3A1007F5331 /* AttributedBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributedBox.swift; sourceTree = \"<group>\"; };\n\t\tD74B7B682137EFA9007F5331 /* SingleTouchDownGestureRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleTouchDownGestureRecognizer.swift; sourceTree = \"<group>\"; };\n\t\tD74D479E256DF2EB00D97647 /* FSNTextAttachmentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSNTextAttachmentCell.swift; sourceTree = \"<group>\"; };\n\t\tD7508FC71F337E850047AB76 /* SearchTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTextField.swift; sourceTree = \"<group>\"; };\n\t\tD7508FCD1F3438540047AB76 /* PrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD752D80723454750006842F9 /* NSTextAttachment+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSTextAttachment+.swift\"; sourceTree = \"<group>\"; };\n\t\tD75627CD26D1165A000AF6EA /* ImageFormat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFormat.swift; sourceTree = \"<group>\"; };\n\t\tD75629B027D4DB7E00F55588 /* CodeFontViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeFontViewController.swift; sourceTree = \"<group>\"; };\n\t\tD75629B227D4DE9F00F55588 /* CodeThemeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeThemeViewController.swift; sourceTree = \"<group>\"; };\n\t\tD75629B427D5036D00F55588 /* SortByViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortByViewController.swift; sourceTree = \"<group>\"; };\n\t\tD75629B627D53EB100F55588 /* ThanksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThanksViewController.swift; sourceTree = \"<group>\"; };\n\t\tD75A34E427D7CD440085438F /* SidebarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarViewController.swift; sourceTree = \"<group>\"; };\n\t\tD75EE7F62078B22D0055F159 /* SidebarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarItem.swift; sourceTree = \"<group>\"; };\n\t\tD75EE7F92078B3C00055F159 /* Sidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sidebar.swift; sourceTree = \"<group>\"; };\n\t\tD75EE7FC2078C5460055F159 /* SidebarCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarCellView.swift; sourceTree = \"<group>\"; };\n\t\tD75EE7FF2078E0C60055F159 /* SidebarItemType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarItemType.swift; sourceTree = \"<group>\"; };\n\t\tD75F3336205EC34800CC887E /* FSNotes iOS Share Extension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = \"FSNotes iOS Share Extension.appex\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD75F3338205EC34800CC887E /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = \"<group>\"; };\n\t\tD75F333D205EC34800CC887E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD75F3344205ECE8900CC887E /* FSNotes iOS Share.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = \"FSNotes iOS Share.entitlements\"; sourceTree = \"<group>\"; };\n\t\tD76025B1204EEF64000B9F59 /* TextFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFormatter.swift; sourceTree = \"<group>\"; };\n\t\tD76447DB1F3A4F0700965F01 /* UserDefaultsManagement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsManagement.swift; sourceTree = \"<group>\"; };\n\t\tD7679375201F0BFD000F7BBF /* SortBy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortBy.swift; sourceTree = \"<group>\"; };\n\t\tD7679386201F21F5000F7BBF /* FSNotes iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"FSNotes iOS.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD7679388201F21F5000F7BBF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tD767938A201F21F5000F7BBF /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7679397201F21F5000F7BBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD7680FB125D02B2C00810DA8 /* FileManager+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"FileManager+.swift\"; sourceTree = \"<group>\"; };\n\t\tD768D754245E854D0028F344 /* NSAttributedString+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSAttributedString+.swift\"; sourceTree = \"<group>\"; };\n\t\tD768D75B245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerticallyAlignedTextFieldCell.swift; sourceTree = \"<group>\"; };\n\t\tD76E10C0215A55CE0017F4A3 /* Date+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Date+.swift\"; sourceTree = \"<group>\"; };\n\t\tD77015812C972B6D00CFF0E8 /* SettingsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTableViewCell.swift; sourceTree = \"<group>\"; };\n\t\tD771E96E28EDFBF600CD4871 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = \"<group>\"; };\n\t\tD772C8832217362C007E440B /* ViewController+Print.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"ViewController+Print.swift\"; sourceTree = \"<group>\"; };\n\t\tD773DE7F1F36F45900A39C9F /* SandboxBookmark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SandboxBookmark.swift; sourceTree = \"<group>\"; };\n\t\tD77671B71FACEDDE00DDF28D /* MASShortcut.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MASShortcut.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD777D7802009115C00D86B33 /* ImagesProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagesProcessor.swift; sourceTree = \"<group>\"; };\n\t\tD7793C6F1F211C6000CA39B7 /* FSNotes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSNotes.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD7793C721F211C6000CA39B7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tD7793C741F211C6000CA39B7 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7793C791F211C6000CA39B7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tD7793C7C1F211C6000CA39B7 /* FSNotes.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = FSNotes.entitlements; sourceTree = \"<group>\"; };\n\t\tD779C7BA1F415BE300FADEE1 /* PrefsWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsWindowController.swift; sourceTree = \"<group>\"; };\n\t\tD77A6F7E28B11496006A0353 /* PreferencesWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesWebViewController.swift; sourceTree = \"<group>\"; };\n\t\tD77AD7FB27F9D1C90077BD45 /* Data+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Data+.swift\"; sourceTree = \"<group>\"; };\n\t\tD77CC040216A608500582B97 /* EditorScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditorScrollView.swift; sourceTree = \"<group>\"; };\n\t\tD77E05282463124300AD7772 /* StorageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageType.swift; sourceTree = \"<group>\"; };\n\t\tD77F41B22A0D48F500E2B7A2 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = \"Launch Screen.storyboard\"; sourceTree = \"<group>\"; };\n\t\tD77F89DE28D38B5D00BECC87 /* ViewController+Web.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"ViewController+Web.swift\"; sourceTree = \"<group>\"; };\n\t\tD78115622153B36C004FA1CA /* Buttons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Buttons.swift; sourceTree = \"<group>\"; };\n\t\tD78115662153D4D9004FA1CA /* ProjectsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD781156A2153E05A004FA1CA /* ProjectSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectSettingsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD783B504208A1BFD00328A41 /* EditorSplitView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditorSplitView.swift; sourceTree = \"<group>\"; };\n\t\tD785805B27A3483B000C1BAF /* FolderPopoverActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderPopoverActions.swift; sourceTree = \"<group>\"; };\n\t\tD78678CA2093AE10001A6620 /* UndoData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UndoData.swift; sourceTree = \"<group>\"; };\n\t\tD78D20D41F934C05006DBBC3 /* FSNotes (CloudKit).entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = \"FSNotes (CloudKit).entitlements\"; sourceTree = \"<group>\"; };\n\t\tD792297421A845B4005F468F /* ProjectSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectSettingsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD792DD8127A6C980006ADC01 /* FSParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSParser.swift; sourceTree = \"<group>\"; };\n\t\tD792DD9527A6D71C006ADC01 /* String+Punycode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"String+Punycode.swift\"; sourceTree = \"<group>\"; };\n\t\tD794558D27C05743000C283F /* ProViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProViewController.swift; sourceTree = \"<group>\"; };\n\t\tD794559927C1B3F9000C283F /* ExternalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7958A3822ED512D00EDBDDC /* SandboxBookmark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SandboxBookmark.swift; sourceTree = \"<group>\"; };\n\t\tD79651B02517741400333AD4 /* ProgressState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressState.swift; sourceTree = \"<group>\"; };\n\t\tD796EB40251E127300CE5C80 /* Pasteboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pasteboard.swift; sourceTree = \"<group>\"; };\n\t\tD797004B1F3DD10700BAD94D /* EditTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditTextView.swift; sourceTree = \"<group>\"; };\n\t\tD79798A129C0FE6A00B9A878 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = \"<group>\"; };\n\t\tD79A13CC2A0E9C980037510B /* UIColor+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UIColor+.swift\"; sourceTree = \"<group>\"; };\n\t\tD79C26242872384C00CB70E6 /* EditorViewController+Sharing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditorViewController+Sharing.swift\"; sourceTree = \"<group>\"; };\n\t\tD79FE8A01F77D04A00113CFD /* Note.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Note.swift; sourceTree = \"<group>\"; };\n\t\tD7A415131F2FBDA00099B82C /* NotesTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesTableView.swift; sourceTree = \"<group>\"; };\n\t\tD7A549C224DD9D3400537544 /* SettingsEditorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEditorViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7A65C5820F11C38003E5ADC /* LanguageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageType.swift; sourceTree = \"<group>\"; };\n\t\tD7A9C1D52910784400905619 /* Project+Git.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Project+Git.swift\"; sourceTree = \"<group>\"; };\n\t\tD7ADFD102066CF9400B531F9 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.2.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; };\n\t\tD7B13DBC2C64F445008EBCAA /* Printer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Printer.swift; sourceTree = \"<group>\"; };\n\t\tD7B34F9625195D7E0007877E /* PreviewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreviewState.swift; sourceTree = \"<group>\"; };\n\t\tD7B4AC5D2471253100F3888A /* NoteMeta.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteMeta.swift; sourceTree = \"<group>\"; };\n\t\tD7B6E599207912E300FE0E20 /* Project.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Project.swift; sourceTree = \"<group>\"; };\n\t\tD7BAC62E249D11F8008D29AA /* SettingsFilesNaming.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsFilesNaming.swift; sourceTree = \"<group>\"; };\n\t\tD7BB2DFD29A0157700D5055A /* Storage+Git.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Storage+Git.swift\"; sourceTree = \"<group>\"; };\n\t\tD7BCF034296B0DAA00F72A4F /* AboutImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutImageView.swift; sourceTree = \"<group>\"; };\n\t\tD7BDFE66201F679B00897A58 /* FSNotes iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = \"FSNotes iOS.entitlements\"; sourceTree = \"<group>\"; };\n\t\tD7BDFE69201F68B700897A58 /* NotesTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesTableView.swift; sourceTree = \"<group>\"; };\n\t\tD7BDFE6B201F6DC200897A58 /* EditTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditTextView.swift; sourceTree = \"<group>\"; };\n\t\tD7BDFE6F201F788D00897A58 /* NoteCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteCellView.swift; sourceTree = \"<group>\"; };\n\t\tD7C1C999235606CB0021A32D /* SidebarHeaderCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarHeaderCellView.swift; sourceTree = \"<group>\"; };\n\t\tD7C33F6D29E09A690006C473 /* AppIconViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7C6DB5A25AA880600F8F76F /* ViewController+More.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"ViewController+More.swift\"; sourceTree = \"<group>\"; };\n\t\tD7C803ED2046DBBD005DA599 /* DefaultExtensionControllerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultExtensionControllerView.swift; sourceTree = \"<group>\"; };\n\t\tD7C9029123547A1E00A89BD8 /* FSTag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSTag.swift; sourceTree = \"<group>\"; };\n\t\tD7CA7FD3232652E300E9717A /* PreferencesGitViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesGitViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7CB9904207E5AE300037E91 /* SidebarTableRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarTableRowView.swift; sourceTree = \"<group>\"; };\n\t\tD7CBAFFD214D5A1C002ECD5A /* ShortcutIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutIdentifier.swift; sourceTree = \"<group>\"; };\n\t\tD7CC44C02A1E5E4F00743857 /* ViewController+WebApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"ViewController+WebApi.swift\"; sourceTree = \"<group>\"; };\n\t\tD7CC44C52A1E5F7600743857 /* ApiResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiResponse.swift; sourceTree = \"<group>\"; };\n\t\tD7CCEDB82C6BA2F300A3BB83 /* ClickableTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickableTextField.swift; sourceTree = \"<group>\"; };\n\t\tD7CD5CCA21820A380009D63B /* UserDefaultsManagement+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UserDefaultsManagement+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7CD5CDA21832C190009D63B /* UserDefaultsManagement+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"UserDefaultsManagement+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7CD5F661F508E6A006AA35D /* SourceCodePro-BoldIt.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"SourceCodePro-BoldIt.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7CD5F671F508E6A006AA35D /* SourceCodePro-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"SourceCodePro-Bold.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7CD5F6B1F51185F006AA35D /* NSFont+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSFont+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7CDE9DB2161767A00DC5978 /* AppearanceType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceType.swift; sourceTree = \"<group>\"; };\n\t\tD7CE196B1FA4BA5E004BF8EE /* PreviewTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewTextField.swift; sourceTree = \"<group>\"; };\n\t\tD7CF7EAA29E2093C00FEC0C5 /* SecurityViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7D01AFC2C65203A00F545D0 /* PrinterLegacy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrinterLegacy.swift; sourceTree = \"<group>\"; };\n\t\tD7D03BAE205C250500D96A6D /* FontViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7D1DE67216D05A800AC1845 /* NameTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NameTextField.swift; sourceTree = \"<group>\"; };\n\t\tD7D372F3207B5B0F00AFBD9F /* SidebarNotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarNotesView.swift; sourceTree = \"<group>\"; };\n\t\tD7D372F6207BB09500AFBD9F /* SidebarOutlineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarOutlineView.swift; sourceTree = \"<group>\"; };\n\t\tD7D79C27236798C300898A2D /* Welcome.bundle */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.plug-in\"; path = Welcome.bundle; sourceTree = \"<group>\"; };\n\t\tD7D7CD39232774BC0016AC15 /* ViewController+Git.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"ViewController+Git.swift\"; sourceTree = \"<group>\"; };\n\t\tD7D9503C209D806F001FB60B /* SidebarTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarTableView.swift; sourceTree = \"<group>\"; };\n\t\tD7D9503E209D846E001FB60B /* SidebarTableCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarTableCellView.swift; sourceTree = \"<group>\"; };\n\t\tD7D97F3B290437A200C651D4 /* NSWindowController+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSWindowController+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7DA9E1D21031901001CF0BE /* OutlineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutlineHeaderView.swift; sourceTree = \"<group>\"; };\n\t\tD7DA9E2021033489001CF0BE /* NSMutableAttributedString+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSMutableAttributedString+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7DB5ED520248D5500E7E1B6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tD7DD5A871F88D4EA00CE947E /* FileWatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileWatcher.swift; sourceTree = \"<group>\"; };\n\t\tD7DD5A891F88D50000CE947E /* FileWatcherEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileWatcherEvent.swift; sourceTree = \"<group>\"; };\n\t\tD7DD79551F4E606600D5724B /* SourceCodePro-It.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"SourceCodePro-It.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7DD79561F4E606600D5724B /* SourceCodePro-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"SourceCodePro-Black.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7DD795A1F4E611200D5724B /* SourceCodePro-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"SourceCodePro-Regular.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7E025071F3B6DDB00EDDA32 /* Storage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Storage.swift; sourceTree = \"<group>\"; };\n\t\tD7E32C2B28F8D0740048614B /* StaticSshKeyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticSshKeyDelegate.swift; sourceTree = \"<group>\"; };\n\t\tD7E51712220D814D00A9CAD9 /* UTI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UTI.swift; sourceTree = \"<group>\"; };\n\t\tD7E6ACE820832D40003599A2 /* AppDelegate+URLRoutes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"AppDelegate+URLRoutes.swift\"; sourceTree = \"<group>\"; };\n\t\tD7E7DB3227A9B16F00408725 /* DatePickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickerViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7E81C5A1F925B5F00416A91 /* FSNotes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSNotes.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD7EDEDFA219203C9000B8C1A /* NoteCellView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NoteCellView+.swift\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18721C503EF00E41811 /* AvenirNext-MediumItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-MediumItalic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18821C503EF00E41811 /* AvenirNext-UltraLight.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-UltraLight.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18921C503EF00E41811 /* AvenirNext-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Medium.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18A21C503EF00E41811 /* AvenirNext-Heavy.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Heavy.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18B21C503EF00E41811 /* AvenirNext-DemiItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-DemiItalic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18C21C503EF00E41811 /* AvenirNext-BoldItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-BoldItalic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18D21C503EF00E41811 /* AvenirNext-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Regular.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18E21C503EF00E41811 /* AvenirNext-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Light.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F18F21C503EF00E41811 /* AvenirNext-Demi.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Demi.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19021C503EF00E41811 /* AvenirNext-HeavyItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-HeavyItalic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19121C503F000E41811 /* AvenirNext-ThinItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-ThinItalic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19221C503F000E41811 /* AvenirNext-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Bold.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19321C503F000E41811 /* AvenirNext-Thin.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Thin.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19421C503F000E41811 /* AvenirNext-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-Italic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19521C503F000E41811 /* AvenirNext-LightItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-LightItalic.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F2F19621C503F000E41811 /* AvenirNext-UltraLightIt.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = \"AvenirNext-UltraLightIt.ttf\"; sourceTree = \"<group>\"; };\n\t\tD7F5C0EE223ED0570038F172 /* PreferencesGeneralViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesGeneralViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7F5C0F1223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesUserInterfaceViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7F5C0F4223ED5620038F172 /* PreferencesEditorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesEditorViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7F5C0F7223ED57D0038F172 /* PreferencesSecurityViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesSecurityViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7F5C0FA223ED58F0038F172 /* PreferencesAdvancedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesAdvancedViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7F6CFEF2056AC22008C584A /* LanguageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageViewController.swift; sourceTree = \"<group>\"; };\n\t\tD7F95F391FF2759300E2A447 /* NotesTextProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesTextProcessor.swift; sourceTree = \"<group>\"; };\n\t\tD7FB716B2BE7F66500808E56 /* EditorViewController+QuickLook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EditorViewController+QuickLook.swift\"; sourceTree = \"<group>\"; };\n\t\tD7FDA4F6236DBC6900C3B4AA /* Sidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sidebar.swift; sourceTree = \"<group>\"; };\n\t\tE73B6900CD2E14B0D5E51599 /* Pods-FSNotes iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes iOS.debug.xcconfig\"; path = \"Target Support Files/Pods-FSNotes iOS/Pods-FSNotes iOS.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEF024607824ECBF0AE378D65 /* Pods-FSNotes (iCloud).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-FSNotes (iCloud).release.xcconfig\"; path = \"Target Support Files/Pods-FSNotes (iCloud)/Pods-FSNotes (iCloud).release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF616385FF783029192B97DF6 /* Pods_FSNotes.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FSNotes.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tD75F3333205EC34800CC887E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t48BEA1E16CCED6900AD756F7 /* Pods_FSNotes_iOS_Share_Extension.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7679383201F21F5000F7BBF /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD7A9C1DB29107A0800905619 /* Git in Frameworks */,\n\t\t\t\tD7D2F2802B54BDD4003DCA47 /* Shout in Frameworks */,\n\t\t\t\tD7ADFD112066CF9400B531F9 /* CoreLocation.framework in Frameworks */,\n\t\t\t\tCE3427A778205E1713A014B9 /* Pods_FSNotes_iOS.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7793C6C1F211C6000CA39B7 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD7D2F2822B54BE59003DCA47 /* Shout in Frameworks */,\n\t\t\t\tD70F830628CE8596004818C5 /* Git in Frameworks */,\n\t\t\t\tD4DB932C9F51CAE71393A28B /* Pods_FSNotes.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7E81C471F925B5F00416A91 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD7D2F27E2B54BD42003DCA47 /* Shout in Frameworks */,\n\t\t\t\tD70F830428CE858E004818C5 /* Git in Frameworks */,\n\t\t\t\tBE957A4A1B908EC91BECB3D3 /* Pods_FSNotes__iCloud_.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t111013172EC9B46800B6CF1B /* SourceCodePro */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7DD79561F4E606600D5724B /* SourceCodePro-Black.ttf */,\n\t\t\t\tD7CD5F671F508E6A006AA35D /* SourceCodePro-Bold.ttf */,\n\t\t\t\tD7CD5F661F508E6A006AA35D /* SourceCodePro-BoldIt.ttf */,\n\t\t\t\tD7DD79551F4E606600D5724B /* SourceCodePro-It.ttf */,\n\t\t\t\tD7DD795A1F4E611200D5724B /* SourceCodePro-Regular.ttf */,\n\t\t\t);\n\t\t\tpath = SourceCodePro;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11598D9F2EDCB85F0036E387 /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7CBAFFD214D5A1C002ECD5A /* ShortcutIdentifier.swift */,\n\t\t\t\tD78115622153B36C004FA1CA /* Buttons.swift */,\n\t\t\t\tD7FDA4F6236DBC6900C3B4AA /* Sidebar.swift */,\n\t\t\t\tD785805B27A3483B000C1BAF /* FolderPopoverActions.swift */,\n\t\t\t\tD74B7B682137EFA9007F5331 /* SingleTouchDownGestureRecognizer.swift */,\n\t\t\t\tD70716DB2307E82900B44B0D /* SingleImageTouchDownGestureRecognizer.swift */,\n\t\t\t\tD73673A720D10CF2000BA61D /* CloudDriveManager.swift */,\n\t\t\t\tD7958A3822ED512D00EDBDDC /* SandboxBookmark.swift */,\n\t\t\t);\n\t\t\tpath = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1175E09E2EDCA60200B92794 /* Initial */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1175E0992EDCA60200B92794 /* FSNotes - Readme.md */,\n\t\t\t\t1175E09A2EDCA60200B92794 /* FSNotes 4.0 Change Log.textbundle */,\n\t\t\t\t1175E09B2EDCA60200B92794 /* FSNotes 4.0 for iOS.textbundle */,\n\t\t\t\t1175E09C2EDCA60200B92794 /* FSNotes 5.0 Change Log.textbundle */,\n\t\t\t\t1175E09D2EDCA60200B92794 /* Meet FSNotes 6.textbundle */,\n\t\t\t\t11F43F3A2F127C6900652350 /* Meet FSNotes 7.textbundle */,\n\t\t\t);\n\t\t\tpath = Initial;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11C23F022EDC486E0064C5B5 /* Icons */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A95B612EDC56DC0081ED29 /* modern.icon */,\n\t\t\t\t11BD71652EDC87B700541BF9 /* classic-2025.icon */,\n\t\t\t\t1175E0912EDC929400B92794 /* ny-2026.icon */,\n\t\t\t);\n\t\t\tpath = Icons;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11D943172E643ECF0010CC2B /* SwiftHighlighter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11D943252E643F520010CC2B /* Themes */,\n\t\t\t\t11D943182E643EE40010CC2B /* Languages */,\n\t\t\t\t116182862E62B046005B5EE0 /* SwiftHighlighter.swift */,\n\t\t\t\t11BD8FA52EDE0679000673A7 /* Theme.swift */,\n\t\t\t\t1136855B2EC7A69C0033767F /* Platform.swift */,\n\t\t\t);\n\t\t\tpath = SwiftHighlighter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11D943182E643EE40010CC2B /* Languages */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11F389552EEA108C0008EC18 /* Mermaid.swift */,\n\t\t\t\t110BE0242EE8C5AC00C5E456 /* Lisp.swift */,\n\t\t\t\t110BE0202EE8C53600C5E456 /* TypeScript.swift */,\n\t\t\t\t110BE01C2EE8C3BA00C5E456 /* Shell.swift */,\n\t\t\t\t110BE0182EE8C24B00C5E456 /* Css.swift */,\n\t\t\t\t110BE0142EE8C1C600C5E456 /* Html.swift */,\n\t\t\t\t110BE0102EE86B4600C5E456 /* Clojure.swift */,\n\t\t\t\t11BF067D2EE49689006C7336 /* Erlang.swift */,\n\t\t\t\t11BF06792EE495C0006C7336 /* Perl.swift */,\n\t\t\t\t11BF06752EE49542006C7336 /* Lua.swift */,\n\t\t\t\t11BF06712EE3325F006C7336 /* Haskell.swift */,\n\t\t\t\t11BF066D2EE331FE006C7336 /* Bash.swift */,\n\t\t\t\t11BF06692EE331B2006C7336 /* Scala.swift */,\n\t\t\t\t11D6C1062EE22EE8006017F0 /* ObjectiveC.swift */,\n\t\t\t\t11D6C1022EE22E8B006017F0 /* Groovy.swift */,\n\t\t\t\t11D6C0FE2EE22E48006017F0 /* Scratch.swift */,\n\t\t\t\t11D6C0FA2EE22DFC006017F0 /* Assembly.swift */,\n\t\t\t\t11D6C0F62EE22D73006017F0 /* Vb.swift */,\n\t\t\t\t11D6C0F22EE22D39006017F0 /* Dart.swift */,\n\t\t\t\t11D6C0EE2EE22CB8006017F0 /* Matlab.swift */,\n\t\t\t\t11D6C0EA2EE22C69006017F0 /* Ruby.swift */,\n\t\t\t\t11D6C0E62EE22C0F006017F0 /* R.swift */,\n\t\t\t\t11D6C0E22EE22BEE006017F0 /* Kotlin.swift */,\n\t\t\t\t11D6C0DE2EE22B74006017F0 /* Csharp.swift */,\n\t\t\t\t11D6C0DA2EE22B0D006017F0 /* Rust.swift */,\n\t\t\t\t11D6C0D62EE229E7006017F0 /* Go.swift */,\n\t\t\t\t11D6C0D22EE227F6006017F0 /* Java.swift */,\n\t\t\t\t11D6C0CE2EE22799006017F0 /* Cpp.swift */,\n\t\t\t\t11D6C0CA2EE225E1006017F0 /* C.swift */,\n\t\t\t\t11D6C0C62EE22567006017F0 /* Python.swift */,\n\t\t\t\t11AF633D2E898430004E7157 /* Sql.swift */,\n\t\t\t\t11D943212E643F3B0010CC2B /* Php.swift */,\n\t\t\t\t11D9431D2E643F1F0010CC2B /* Swift.swift */,\n\t\t\t\t11D943192E643EF20010CC2B /* JavaScript.swift */,\n\t\t\t);\n\t\t\tpath = Languages;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11D943252E643F520010CC2B /* Themes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11BD8FA12EDE023E000673A7 /* AtomOneDark.swift */,\n\t\t\t\t11BD8F9D2EDE022C000673A7 /* AtomOneLight.swift */,\n\t\t\t\t11BD8F992EDDF332000673A7 /* SolarizedDark.swift */,\n\t\t\t\t11BD8F952EDDF320000673A7 /* SolarizedLight.swift */,\n\t\t\t\t11BD8F912EDDEC33000673A7 /* GitHubDark.swift */,\n\t\t\t\t11D943262E643F5E0010CC2B /* GitHubLight.swift */,\n\t\t\t);\n\t\t\tpath = Themes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6F13BB2320FEDE230005E120 /* FSNotesCore */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7C52B8028C7A8C2001B2065 /* Git */,\n\t\t\t\t11D943172E643ECF0010CC2B /* SwiftHighlighter */,\n\t\t\t\tD7218944210211B800FE3AF2 /* Business */,\n\t\t\t\t6F13BB2720FEDE230005E120 /* Extensions */,\n\t\t\t\t1166D1F62E91BA7F00B061CA /* CodeBlockDetector.swift */,\n\t\t\t\tD7470D062170E890006B2A92 /* NSTextStorage++.swift */,\n\t\t\t\tD730BD26222BF30700E69C93 /* KeychainConfiguration.swift */,\n\t\t\t\tD730BD29222BF32A00E69C93 /* KeychainPasswordItem.swift */,\n\t\t\t\tD730BD3B222DB9FC00E69C93 /* NameHelper.swift */,\n\t\t\t\tD752D80723454750006842F9 /* NSTextAttachment+.swift */,\n\t\t\t\tD7EDEDFA219203C9000B8C1A /* NoteCellView+.swift */,\n\t\t\t\tD7B4AC5D2471253100F3888A /* NoteMeta.swift */,\n\t\t\t\tD792DD8127A6C980006ADC01 /* FSParser.swift */,\n\t\t\t\tD736DDAC27BAC7940012ED70 /* Note+History.swift */,\n\t\t\t\tD71B9D852868BF7F00D2F323 /* TextStorageProcessor.swift */,\n\t\t\t\tD7F95F391FF2759300E2A447 /* NotesTextProcessor.swift */,\n\t\t\t\tD777D7802009115C00D86B33 /* ImagesProcessor.swift */,\n\t\t\t\tD72682A929BE8E1F00F6E961 /* RepositoryAction.swift */,\n\t\t\t\tD7CC44C02A1E5E4F00743857 /* ViewController+WebApi.swift */,\n\t\t\t\t11D702AB2E5B8E02004DBAEC /* HtmlExtractor.swift */,\n\t\t\t\tD76447DB1F3A4F0700965F01 /* UserDefaultsManagement.swift */,\n\t\t\t\tD76025B1204EEF64000B9F59 /* TextFormatter.swift */,\n\t\t\t\tD730829123084340003185D1 /* MPreviewView.swift */,\n\t\t\t);\n\t\t\tpath = FSNotesCore;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6F13BB2720FEDE230005E120 /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t113685612EC869860033767F /* URL+Image.swift */,\n\t\t\t\t110E409D2EA0150000C62F49 /* NSTextCheckingResult+.swift */,\n\t\t\t\t110D09812E9C1525001555FA /* NSRange+.swift */,\n\t\t\t\t6F13BB2820FEDE230005E120 /* DateFormatter+.swift */,\n\t\t\t\t6F13BB2920FEDE230005E120 /* String+.swift */,\n\t\t\t\t6F13BB2A20FEDE230005E120 /* URL+.swift */,\n\t\t\t\tD7DA9E2021033489001CF0BE /* NSMutableAttributedString+.swift */,\n\t\t\t\tD76E10C0215A55CE0017F4A3 /* Date+.swift */,\n\t\t\t\tD7487FE82174E5CB00D09383 /* NSAttributedStringKey+.swift */,\n\t\t\t\tD7E51712220D814D00A9CAD9 /* UTI.swift */,\n\t\t\t\tD768D754245E854D0028F344 /* NSAttributedString+.swift */,\n\t\t\t\tD796EB40251E127300CE5C80 /* Pasteboard.swift */,\n\t\t\t\tD7680FB125D02B2C00810DA8 /* FileManager+.swift */,\n\t\t\t\tD792DD9527A6D71C006ADC01 /* String+Punycode.swift */,\n\t\t\t\tD77AD7FB27F9D1C90077BD45 /* Data+.swift */,\n\t\t\t\tD7A9C1D52910784400905619 /* Project+Git.swift */,\n\t\t\t\tD7BB2DFD29A0157700D5055A /* Storage+Git.swift */,\n\t\t\t);\n\t\t\tpath = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC5F4774EAA923C4003B182F8 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7ADFD102066CF9400B531F9 /* CoreLocation.framework */,\n\t\t\t\tD77671B71FACEDDE00DDF28D /* MASShortcut.framework */,\n\t\t\t\tD74922111FACE9B100C45108 /* Down.framework */,\n\t\t\t\tD72E05861F5220D300977D02 /* Down.framework */,\n\t\t\t\tF616385FF783029192B97DF6 /* Pods_FSNotes.framework */,\n\t\t\t\t15136766333878E10A6B0457 /* Pods_FSNotes__Notarized_.framework */,\n\t\t\t\t85B72F46887638CA9CC70D39 /* Pods_FSNotes_iOS.framework */,\n\t\t\t\t99068B82274CF88F23C4761D /* Pods_FSNotes_iOS_Share_Extension.framework */,\n\t\t\t\tB3A8E91DD978BBA557F778F9 /* Pods_FSNotesCore_macOS.framework */,\n\t\t\t\t6066605B9BAF43A4BF3B60C1 /* Pods_FSNotes__iCloud_.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD720240722A9410D000A7691 /* Icons */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD720240922A9412B000A7691 /* Markdown.icns */,\n\t\t\t\tD720240A22A9412B000A7691 /* Text.icns */,\n\t\t\t\tD720240B22A9412B000A7691 /* TextBundle.icns */,\n\t\t\t\tD720241822A941A3000A7691 /* EncryptedTextPack.icns */,\n\t\t\t);\n\t\t\tpath = Icons;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7218944210211B800FE3AF2 /* Business */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7B6E599207912E300FE0E20 /* Project.swift */,\n\t\t\t\t11F2D4F32F1042F4002E4E47 /* Project+Date.swift */,\n\t\t\t\tD79FE8A01F77D04A00113CFD /* Note.swift */,\n\t\t\t\t113A319F2EEE2D3A009B50B0 /* Note+Preview.swift */,\n\t\t\t\tD714749C279D7DBC001A8B29 /* SearchQuery.swift */,\n\t\t\t\tD7BAC62E249D11F8008D29AA /* SettingsFilesNaming.swift */,\n\t\t\t\tD7038E2520FB24E000A54E69 /* NoteAttachment.swift */,\n\t\t\t\tD74B7B642137D3A1007F5331 /* AttributedBox.swift */,\n\t\t\t\tD730BD2D222DABA100E69C93 /* NoteContainer.swift */,\n\t\t\t\tD730BD34222DB11E00E69C93 /* TextBundleInfo.swift */,\n\t\t\t\tD730BD59223BFEB200E69C93 /* RuntimeError.swift */,\n\t\t\t\tD7679375201F0BFD000F7BBF /* SortBy.swift */,\n\t\t\t\tD7104A63230BD8C500B6D8EE /* SortDirection.swift */,\n\t\t\t\tD7C9029123547A1E00A89BD8 /* FSTag.swift */,\n\t\t\t\tD77E05282463124300AD7772 /* StorageType.swift */,\n\t\t\t\tD7B34F9625195D7E0007877E /* PreviewState.swift */,\n\t\t\t\tD79651B02517741400333AD4 /* ProgressState.swift */,\n\t\t\t\tD75627CD26D1165A000AF6EA /* ImageFormat.swift */,\n\t\t\t\tD7CC44C52A1E5F7600743857 /* ApiResponse.swift */,\n\t\t\t\tD7E025071F3B6DDB00EDDA32 /* Storage.swift */,\n\t\t\t\tD75EE7FF2078E0C60055F159 /* SidebarItemType.swift */,\n\t\t\t\tD708AC662000EF5800A1760F /* NoteType.swift */,\n\t\t\t\tD78678CA2093AE10001A6620 /* UndoData.swift */,\n\t\t\t\tD7A65C5820F11C38003E5ADC /* LanguageType.swift */,\n\t\t\t\tD7CDE9DB2161767A00DC5978 /* AppearanceType.swift */,\n\t\t\t\tD72DAF0729B27D75001243BB /* ProjectSettings.swift */,\n\t\t\t\t8F7136ED23490CBF004DFA6E /* Markdown.swift */,\n\t\t\t\tD75EE7F62078B22D0055F159 /* SidebarItem.swift */,\n\t\t\t);\n\t\t\tpath = Business;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC5328EB5EBE008B3BBC /* commit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC5428EB5EBE008B3BBC /* Commit.swift */,\n\t\t\t);\n\t\t\tpath = commit;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC5528EB5EBE008B3BBC /* branch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC5628EB5EBE008B3BBC /* Branch.swift */,\n\t\t\t\tD73BCC5728EB5EBE008B3BBC /* Branches.swift */,\n\t\t\t\tD73BCC5828EB5EBE008B3BBC /* BranchesIterator.swift */,\n\t\t\t);\n\t\t\tpath = branch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC5928EB5EBE008B3BBC /* commons */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD771E96E28EDFBF600CD4871 /* Errors.swift */,\n\t\t\t\tD73BCC5A28EB5EBE008B3BBC /* Strings.swift */,\n\t\t\t\tD73BCC5B28EB5EBE008B3BBC /* ConfigManager.swift */,\n\t\t\t\tD73BCC5C28EB5EBE008B3BBC /* Error.swift */,\n\t\t\t\tD73BCC5D28EB5EBE008B3BBC /* Wrapper.swift */,\n\t\t\t\tD73BCC5E28EB5EBE008B3BBC /* Progress.swift */,\n\t\t\t\tD73BCC5F28EB5EBE008B3BBC /* Blob.swift */,\n\t\t\t\tD73BCC6028EB5EBF008B3BBC /* OID.swift */,\n\t\t\t\tD73BCC6128EB5EBF008B3BBC /* Signature.swift */,\n\t\t\t\tD73BCC6228EB5EBF008B3BBC /* Object.swift */,\n\t\t\t\tD7E32C2B28F8D0740048614B /* StaticSshKeyDelegate.swift */,\n\t\t\t);\n\t\t\tpath = commons;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC6328EB5EBF008B3BBC /* tag */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC6428EB5EBF008B3BBC /* TagIterator.swift */,\n\t\t\t\tD73BCC6528EB5EBF008B3BBC /* Tags.swift */,\n\t\t\t\tD73BCC6628EB5EBF008B3BBC /* Tag.swift */,\n\t\t\t);\n\t\t\tpath = tag;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC6728EB5EBF008B3BBC /* revision */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC6828EB5EBF008B3BBC /* RevisionIterator.swift */,\n\t\t\t\tD73BCC6928EB5EBF008B3BBC /* FileHistoryIterator.swift */,\n\t\t\t);\n\t\t\tpath = revision;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC6A28EB5EC0008B3BBC /* diff */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC6B28EB5EC0008B3BBC /* DiffEntry.swift */,\n\t\t\t\tD73BCC6C28EB5EC0008B3BBC /* Diff.swift */,\n\t\t\t);\n\t\t\tpath = diff;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC6D28EB5EC0008B3BBC /* authentication */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC6E28EB5EC0008B3BBC /* KeyAuthentication.swift */,\n\t\t\t\tD73BCC6F28EB5EC0008B3BBC /* Authentication.swift */,\n\t\t\t\tD73BCC7028EB5EC0008B3BBC /* PasswordAuthentication.swift */,\n\t\t\t);\n\t\t\tpath = authentication;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC7128EB5EC0008B3BBC /* remote */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC7228EB5EC0008B3BBC /* Remote.swift */,\n\t\t\t\tD73BCC7328EB5EC0008B3BBC /* Remotes.swift */,\n\t\t\t);\n\t\t\tpath = remote;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC7428EB5EC1008B3BBC /* status */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC7528EB5EC1008B3BBC /* Statuses.swift */,\n\t\t\t\tD73BCC7628EB5EC1008B3BBC /* Status.swift */,\n\t\t\t\tD73BCC7728EB5EC1008B3BBC /* StatusIterator.swift */,\n\t\t\t);\n\t\t\tpath = status;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC7828EB5EC1008B3BBC /* index */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC7928EB5EC1008B3BBC /* Index.swift */,\n\t\t\t\tD73BCC7A28EB5EC1008B3BBC /* Index+Commit.swift */,\n\t\t\t\tD73BCC7B28EB5EC1008B3BBC /* Index+Files.swift */,\n\t\t\t);\n\t\t\tpath = index;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC7C28EB5EC2008B3BBC /* head */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC7D28EB5EC2008B3BBC /* Head+Checkout.swift */,\n\t\t\t\tD73BCC7E28EB5EC2008B3BBC /* Head.swift */,\n\t\t\t\tD73BCC7F28EB5EC2008B3BBC /* Head+Merge.swift */,\n\t\t\t);\n\t\t\tpath = head;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC8028EB5EC2008B3BBC /* tree */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC8128EB5EC2008B3BBC /* TreeEntry.swift */,\n\t\t\t\tD73BCC8228EB5EC2008B3BBC /* Tree.swift */,\n\t\t\t);\n\t\t\tpath = tree;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC8328EB5EC3008B3BBC /* repository */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC8428EB5EC3008B3BBC /* RepositoryManager.swift */,\n\t\t\t\tD73BCC8528EB5EC3008B3BBC /* Repository.swift */,\n\t\t\t\tD73BCC8628EB5EC3008B3BBC /* Repository+Open.swift */,\n\t\t\t\tD73BCC8728EB5EC3008B3BBC /* Repository+Lookup.swift */,\n\t\t\t\tD73BCC8828EB5EC3008B3BBC /* Repository+Commit.swift */,\n\t\t\t);\n\t\t\tpath = repository;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD73BCC8928EB5EC3008B3BBC /* reference */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC8A28EB5EC3008B3BBC /* Reference.swift */,\n\t\t\t\tD73BCC8B28EB5EC3008B3BBC /* Reference+Target.swift */,\n\t\t\t);\n\t\t\tpath = reference;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD75C903C223EF727002A9CAD /* Preferences */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7F5C0EE223ED0570038F172 /* PreferencesGeneralViewController.swift */,\n\t\t\t\tD7F5C0F1223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift */,\n\t\t\t\tD7F5C0F4223ED5620038F172 /* PreferencesEditorViewController.swift */,\n\t\t\t\tD7F5C0F7223ED57D0038F172 /* PreferencesSecurityViewController.swift */,\n\t\t\t\tD7F5C0FA223ED58F0038F172 /* PreferencesAdvancedViewController.swift */,\n\t\t\t\tD738356C2242871400B260DD /* MasterPasswordViewController.swift */,\n\t\t\t\tD7CA7FD3232652E300E9717A /* PreferencesGitViewController.swift */,\n\t\t\t\tD77A6F7E28B11496006A0353 /* PreferencesWebViewController.swift */,\n\t\t\t\tD79798A129C0FE6A00B9A878 /* SettingsViewController.swift */,\n\t\t\t);\n\t\t\tpath = Preferences;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD75F3337205EC34800CC887E /* FSNotes iOS Share */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD75F3344205ECE8900CC887E /* FSNotes iOS Share.entitlements */,\n\t\t\t\tD75F3338205EC34800CC887E /* ShareViewController.swift */,\n\t\t\t\t113685592EC7A2130033767F /* NSMutableAttributedString+.swift */,\n\t\t\t\tD75F333D205EC34800CC887E /* Info.plist */,\n\t\t\t\tD7163D3324E81D9900B1FC05 /* MainInterface.storyboard */,\n\t\t\t\t42E001C92ADAC2930099E7AD /* Localizable.xcstrings */,\n\t\t\t);\n\t\t\tpath = \"FSNotes iOS Share\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7679387201F21F5000F7BBF /* FSNotes iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11C23F022EDC486E0064C5B5 /* Icons */,\n\t\t\t\tD7F6CFEE2056ABDB008C584A /* Preferences */,\n\t\t\t\tD7ED3FFC20CD0ADE001438EE /* Extensions */,\n\t\t\t\t11598D9F2EDCB85F0036E387 /* Helpers */,\n\t\t\t\tD7ED3FFB20CD0AA3001438EE /* View */,\n\t\t\t\tD7BDFE66201F679B00897A58 /* FSNotes iOS.entitlements */,\n\t\t\t\tD7679388201F21F5000F7BBF /* AppDelegate.swift */,\n\t\t\t\t113685672EC889DC0033767F /* SceneDelegate.swift */,\n\t\t\t\t111013142EC8F1B600B6CF1B /* ImagePreviewViewController.swift */,\n\t\t\t\tD7E7DB3227A9B16F00408725 /* DatePickerViewController.swift */,\n\t\t\t\tD71AA0212143A4A8004AFD2A /* MoveViewController.swift */,\n\t\t\t\tD736DDAA27BABFF80012ED70 /* RevisionsViewController.swift */,\n\t\t\t\tD714749A279CE8EE001A8B29 /* MainNavigationController.swift */,\n\t\t\t\tD767938A201F21F5000F7BBF /* ViewController.swift */,\n\t\t\t\tD7C6DB5A25AA880600F8F76F /* ViewController+More.swift */,\n\t\t\t\tD7063969202230BB00BC8446 /* EditorViewController.swift */,\n\t\t\t\t11B3F5952F182E4E00A3531D /* EditorViewController+Search.swift */,\n\t\t\t\tD7FB716B2BE7F66500808E56 /* EditorViewController+QuickLook.swift */,\n\t\t\t\tD7163D2E24E81B5C00B1FC05 /* Main.storyboard */,\n\t\t\t\tD77F41B22A0D48F500E2B7A2 /* Launch Screen.storyboard */,\n\t\t\t\tD7679397201F21F5000F7BBF /* Info.plist */,\n\t\t\t\t42E001CB2ADAC2930099E7AD /* InfoPlist.xcstrings */,\n\t\t\t\t42E001CE2ADAC2930099E7AD /* Localizable.xcstrings */,\n\t\t\t\tD7DB5ED520248D5500E7E1B6 /* Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"FSNotes iOS\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7793C661F211C6000CA39B7 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7D61FCC1F32EEA1004357C2 /* Resources */,\n\t\t\t\t6F13BB2320FEDE230005E120 /* FSNotesCore */,\n\t\t\t\tD7793C711F211C6000CA39B7 /* FSNotes */,\n\t\t\t\tD7679387201F21F5000F7BBF /* FSNotes iOS */,\n\t\t\t\tD75F3337205EC34800CC887E /* FSNotes iOS Share */,\n\t\t\t\tD7793C701F211C6000CA39B7 /* Products */,\n\t\t\t\tC5F4774EAA923C4003B182F8 /* Frameworks */,\n\t\t\t\tFA35FD3BB467B0413F2F0A8A /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7793C701F211C6000CA39B7 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7793C6F1F211C6000CA39B7 /* FSNotes.app */,\n\t\t\t\tD7E81C5A1F925B5F00416A91 /* FSNotes.app */,\n\t\t\t\tD7679386201F21F5000F7BBF /* FSNotes iOS.app */,\n\t\t\t\tD75F3336205EC34800CC887E /* FSNotes iOS Share Extension.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7793C711F211C6000CA39B7 /* FSNotes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD75C903C223EF727002A9CAD /* Preferences */,\n\t\t\t\tD7CD5F6A1F51184A006AA35D /* Extensions */,\n\t\t\t\tD7E6D9D520808652003ECAFC /* Helpers */,\n\t\t\t\tD7E6D9D2208085BB003ECAFC /* View */,\n\t\t\t\tD7793C721F211C6000CA39B7 /* AppDelegate.swift */,\n\t\t\t\t11D702A52E5ADDE2004DBAEC /* LayoutManager.swift */,\n\t\t\t\tD7E6ACE820832D40003599A2 /* AppDelegate+URLRoutes.swift */,\n\t\t\t\tD74112271FABA21B00AB619A /* MainWindow.swift */,\n\t\t\t\t275592961F3AE9B5006B8988 /* MainWindowController.swift */,\n\t\t\t\tD7793C741F211C6000CA39B7 /* ViewController.swift */,\n\t\t\t\tD772C8832217362C007E440B /* ViewController+Print.swift */,\n\t\t\t\tD7D7CD39232774BC0016AC15 /* ViewController+Git.swift */,\n\t\t\t\tD77F89DE28D38B5D00BECC87 /* ViewController+Web.swift */,\n\t\t\t\t11F177192EF1E92C00CC566F /* ViewController+Menu.swift */,\n\t\t\t\tD792297421A845B4005F468F /* ProjectSettingsViewController.swift */,\n\t\t\t\tD779C7BA1F415BE300FADEE1 /* PrefsWindowController.swift */,\n\t\t\t\tD7508FCD1F3438540047AB76 /* PrefsViewController.swift */,\n\t\t\t\tD7153DFC2285A93300A2C20F /* AboutWindowController.swift */,\n\t\t\t\tD7153E042285C09C00A2C20F /* AboutViewController.swift */,\n\t\t\t\tD71B9D792867027000D2F323 /* NoteViewController.swift */,\n\t\t\t\tD71B9D812868658100D2F323 /* EditorViewController.swift */,\n\t\t\t\t11AA4B1E2EF9A4680075A9E4 /* EditorViewController+ScrollPosition.swift */,\n\t\t\t\tD79C26242872384C00CB70E6 /* EditorViewController+Sharing.swift */,\n\t\t\t\tD7D97F3B290437A200C651D4 /* NSWindowController+.swift */,\n\t\t\t\t42E001C52ADAC2930099E7AD /* Localizable.xcstrings */,\n\t\t\t\tD7793C781F211C6000CA39B7 /* Main.storyboard */,\n\t\t\t\tD7465F27207F2CD600E46A52 /* Images.xcassets */,\n\t\t\t\tD7793C7C1F211C6000CA39B7 /* FSNotes.entitlements */,\n\t\t\t\t11F5D53A2EFDA17000A66466 /* modern.icon */,\n\t\t\t\tD78D20D41F934C05006DBBC3 /* FSNotes (CloudKit).entitlements */,\n\t\t\t);\n\t\t\tpath = FSNotes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7C52B8028C7A8C2001B2065 /* Git */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD73BCC6D28EB5EC0008B3BBC /* authentication */,\n\t\t\t\tD73BCC5528EB5EBE008B3BBC /* branch */,\n\t\t\t\tD73BCC5328EB5EBE008B3BBC /* commit */,\n\t\t\t\tD73BCC5928EB5EBE008B3BBC /* commons */,\n\t\t\t\tD73BCC6A28EB5EC0008B3BBC /* diff */,\n\t\t\t\tD73BCC7C28EB5EC2008B3BBC /* head */,\n\t\t\t\tD73BCC7828EB5EC1008B3BBC /* index */,\n\t\t\t\tD73BCC8928EB5EC3008B3BBC /* reference */,\n\t\t\t\tD73BCC7128EB5EC0008B3BBC /* remote */,\n\t\t\t\tD73BCC8328EB5EC3008B3BBC /* repository */,\n\t\t\t\tD73BCC6728EB5EBF008B3BBC /* revision */,\n\t\t\t\tD73BCC7428EB5EC1008B3BBC /* status */,\n\t\t\t\tD73BCC6328EB5EBF008B3BBC /* tag */,\n\t\t\t\tD73BCC8028EB5EC2008B3BBC /* tree */,\n\t\t\t);\n\t\t\tpath = Git;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7CD5F6A1F51184A006AA35D /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD726DE89287ACC1E00F8406C /* NSWindow+.swift */,\n\t\t\t\tD7013DFF26C3B116006F58E3 /* NSColor+.swift */,\n\t\t\t\tD7487FD5217389F800D09383 /* NSImage+.swift */,\n\t\t\t\tD7CD5F6B1F51185F006AA35D /* NSFont+.swift */,\n\t\t\t\tD7315ED4215ED95600AB49D4 /* NSAppearance+.swift */,\n\t\t\t\tD7CD5CCA21820A380009D63B /* UserDefaultsManagement+.swift */,\n\t\t\t);\n\t\t\tpath = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7D61FCC1F32EEA1004357C2 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD720240722A9410D000A7691 /* Icons */,\n\t\t\t\tD7F2F18521C5032D00E41811 /* Fonts */,\n\t\t\t\t1175E09E2EDCA60200B92794 /* Initial */,\n\t\t\t\tD71C4A4D1F520F0E00EBA30B /* MPreview.bundle */,\n\t\t\t\tD7D79C27236798C300898A2D /* Welcome.bundle */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7E6D9D2208085BB003ECAFC /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11F018B12EF8415200F07580 /* MPreviewContainerView.swift */,\n\t\t\t\t11F018AB2EF7E77B00F07580 /* MPreviewFindPanel.swift */,\n\t\t\t\t11ABE5E12EEEFCF700E7C9EB /* NotesCounterView.swift */,\n\t\t\t\tD797004B1F3DD10700BAD94D /* EditTextView.swift */,\n\t\t\t\t11A6A8FC2EF074D2005D000A /* EditTextView+Todo.swift */,\n\t\t\t\t117C0E4C2EEDB9B70086419C /* EditTextView+Clicked.swift */,\n\t\t\t\t1102DDB02EE4C277005029A6 /* EditTextView+Complete.swift */,\n\t\t\t\t110E40A32EA039AA00C62F49 /* EditTextView+DragOperation.swift */,\n\t\t\t\t11A6A8F92EF06B90005D000A /* EditTextView+MoveLines.swift */,\n\t\t\t\tD735E5BC1F2EF66000173215 /* NoteCellView.swift */,\n\t\t\t\tD735E5BE1F2F001500173215 /* NoteRowView.swift */,\n\t\t\t\tD7A415131F2FBDA00099B82C /* NotesTableView.swift */,\n\t\t\t\tD7CE196B1FA4BA5E004BF8EE /* PreviewTextField.swift */,\n\t\t\t\tD7508FC71F337E850047AB76 /* SearchTextField.swift */,\n\t\t\t\tD7D372F3207B5B0F00AFBD9F /* SidebarNotesView.swift */,\n\t\t\t\tD7D372F6207BB09500AFBD9F /* SidebarOutlineView.swift */,\n\t\t\t\tD7CB9904207E5AE300037E91 /* SidebarTableRowView.swift */,\n\t\t\t\tD75EE7FC2078C5460055F159 /* SidebarCellView.swift */,\n\t\t\t\tD7C1C999235606CB0021A32D /* SidebarHeaderCellView.swift */,\n\t\t\t\tD783B504208A1BFD00328A41 /* EditorSplitView.swift */,\n\t\t\t\tD7DA9E1D21031901001CF0BE /* OutlineHeaderView.swift */,\n\t\t\t\tD7315ED1215ED15500AB49D4 /* SidebarSplitView.swift */,\n\t\t\t\tD7315ECE215ECF3000AB49D4 /* EditorView.swift */,\n\t\t\t\tD77CC040216A608500582B97 /* EditorScrollView.swift */,\n\t\t\t\tD7D1DE67216D05A800AC1845 /* NameTextField.swift */,\n\t\t\t\t2799407B218484C900727B20 /* TitleBarView.swift */,\n\t\t\t\tD7153E082285EC6100A2C20F /* TitleTextField.swift */,\n\t\t\t\tD768D75B245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift */,\n\t\t\t\tD70B1FAA29213EDF003923DC /* HyperlinkTextField.swift */,\n\t\t\t\tD7BCF034296B0DAA00F72A4F /* AboutImageView.swift */,\n\t\t\t\tD7CCEDB82C6BA2F300A3BB83 /* ClickableTextField.swift */,\n\t\t\t);\n\t\t\tpath = View;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7E6D9D520808652003ECAFC /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7DD5A871F88D4EA00CE947E /* FileWatcher.swift */,\n\t\t\t\tD7DD5A891F88D50000CE947E /* FileWatcherEvent.swift */,\n\t\t\t\tD7170C1C20F8565B001DDB36 /* FileSystemEventManager.swift */,\n\t\t\t\tD773DE7F1F36F45900A39C9F /* SandboxBookmark.swift */,\n\t\t\t\tD7B13DBC2C64F445008EBCAA /* Printer.swift */,\n\t\t\t\tD7D01AFC2C65203A00F545D0 /* PrinterLegacy.swift */,\n\t\t\t\t6F13BB3820FEDE230005E120 /* UserDataService.swift */,\n\t\t\t\tD75EE7F92078B3C00055F159 /* Sidebar.swift */,\n\t\t\t\tD74D479E256DF2EB00D97647 /* FSNTextAttachmentCell.swift */,\n\t\t\t);\n\t\t\tpath = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7ED3FFB20CD0AA3001438EE /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7BDFE6B201F6DC200897A58 /* EditTextView.swift */,\n\t\t\t\tD7BDFE69201F68B700897A58 /* NotesTableView.swift */,\n\t\t\t\tD7D9503C209D806F001FB60B /* SidebarTableView.swift */,\n\t\t\t\tD7D9503E209D846E001FB60B /* SidebarTableCellView.swift */,\n\t\t\t\tD7BDFE6F201F788D00897A58 /* NoteCellView.swift */,\n\t\t\t\tD736DDA827B5DD370012ED70 /* EditorSelectionRect.swift */,\n\t\t\t\tD73794C023366F5200E75A28 /* ImageScrollView.swift */,\n\t\t\t);\n\t\t\tpath = View;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7ED3FFC20CD0ADE001438EE /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t113685692EC8AE260033767F /* UIBarButtonItem+.swift */,\n\t\t\t\tD7CD5CDA21832C190009D63B /* UserDefaultsManagement+.swift */,\n\t\t\t\tD714496120C72D3400D7AD46 /* UIImage+.swift */,\n\t\t\t\tD71FD2242101CFD0008BEFA1 /* UITextView+.swift */,\n\t\t\t\tD73FAE9E21553CAA0058BE61 /* UIApplication+.swift */,\n\t\t\t\tD79A13CC2A0E9C980037510B /* UIColor+.swift */,\n\t\t\t\t11598DA22EDCB8D40036E387 /* UIFont+.swift */,\n\t\t\t);\n\t\t\tpath = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7F2F18521C5032D00E41811 /* Fonts */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t111013172EC9B46800B6CF1B /* SourceCodePro */,\n\t\t\t\tD7F2F18621C5034100E41811 /* AvenirNext */,\n\t\t\t);\n\t\t\tpath = Fonts;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7F2F18621C5034100E41811 /* AvenirNext */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD7F2F19221C503F000E41811 /* AvenirNext-Bold.ttf */,\n\t\t\t\tD7F2F18C21C503EF00E41811 /* AvenirNext-BoldItalic.ttf */,\n\t\t\t\tD7F2F18F21C503EF00E41811 /* AvenirNext-Demi.ttf */,\n\t\t\t\tD7F2F18B21C503EF00E41811 /* AvenirNext-DemiItalic.ttf */,\n\t\t\t\tD7F2F18A21C503EF00E41811 /* AvenirNext-Heavy.ttf */,\n\t\t\t\tD7F2F19021C503EF00E41811 /* AvenirNext-HeavyItalic.ttf */,\n\t\t\t\tD7F2F19421C503F000E41811 /* AvenirNext-Italic.ttf */,\n\t\t\t\tD7F2F18E21C503EF00E41811 /* AvenirNext-Light.ttf */,\n\t\t\t\tD7F2F19521C503F000E41811 /* AvenirNext-LightItalic.ttf */,\n\t\t\t\tD7F2F18921C503EF00E41811 /* AvenirNext-Medium.ttf */,\n\t\t\t\tD7F2F18721C503EF00E41811 /* AvenirNext-MediumItalic.ttf */,\n\t\t\t\tD7F2F18D21C503EF00E41811 /* AvenirNext-Regular.ttf */,\n\t\t\t\tD7F2F19321C503F000E41811 /* AvenirNext-Thin.ttf */,\n\t\t\t\tD7F2F19121C503F000E41811 /* AvenirNext-ThinItalic.ttf */,\n\t\t\t\tD7F2F18821C503EF00E41811 /* AvenirNext-UltraLight.ttf */,\n\t\t\t\tD7F2F19621C503F000E41811 /* AvenirNext-UltraLightIt.ttf */,\n\t\t\t);\n\t\t\tpath = AvenirNext;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7F6CFEE2056ABDB008C584A /* Preferences */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD77015812C972B6D00CFF0E8 /* SettingsTableViewCell.swift */,\n\t\t\t\tD71354032042AFC800E3776F /* SettingsViewController.swift */,\n\t\t\t\tD7C803ED2046DBBD005DA599 /* DefaultExtensionControllerView.swift */,\n\t\t\t\tD7F6CFEF2056AC22008C584A /* LanguageViewController.swift */,\n\t\t\t\tD7D03BAE205C250500D96A6D /* FontViewController.swift */,\n\t\t\t\tD78115662153D4D9004FA1CA /* ProjectsViewController.swift */,\n\t\t\t\tD781156A2153E05A004FA1CA /* ProjectSettingsViewController.swift */,\n\t\t\t\tD7A549C224DD9D3400537544 /* SettingsEditorViewController.swift */,\n\t\t\t\tD794558D27C05743000C283F /* ProViewController.swift */,\n\t\t\t\tD794559927C1B3F9000C283F /* ExternalViewController.swift */,\n\t\t\t\tD75629B027D4DB7E00F55588 /* CodeFontViewController.swift */,\n\t\t\t\tD75629B227D4DE9F00F55588 /* CodeThemeViewController.swift */,\n\t\t\t\tD75629B427D5036D00F55588 /* SortByViewController.swift */,\n\t\t\t\tD75629B627D53EB100F55588 /* ThanksViewController.swift */,\n\t\t\t\tD75A34E427D7CD440085438F /* SidebarViewController.swift */,\n\t\t\t\tD73B3134298FBF4400F46144 /* GitViewController.swift */,\n\t\t\t\tD709C9E129AFD9E0006EF9A8 /* GitTableViewCell.swift */,\n\t\t\t\tD7C33F6D29E09A690006C473 /* AppIconViewController.swift */,\n\t\t\t\tD7CF7EAA29E2093C00FEC0C5 /* SecurityViewController.swift */,\n\t\t\t);\n\t\t\tpath = Preferences;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFA35FD3BB467B0413F2F0A8A /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t365935BA74CEA7B5CAFAB536 /* Pods-FSNotes.debug.xcconfig */,\n\t\t\t\t9EA62EEDB6BE9BF8727E66E0 /* Pods-FSNotes.release.xcconfig */,\n\t\t\t\t9381D32FA909CAB6102C4A5C /* Pods-FSNotes (Notarized).debug.xcconfig */,\n\t\t\t\tC1E2B9BF60C418804784CC3B /* Pods-FSNotes (Notarized).release.xcconfig */,\n\t\t\t\t747C0F2A42B8190F5AC0ECDB /* Pods-FSNotes (iCloud Documents).debug.xcconfig */,\n\t\t\t\tC8E92DD65B370BD263427B83 /* Pods-FSNotes (iCloud Documents).release.xcconfig */,\n\t\t\t\tE73B6900CD2E14B0D5E51599 /* Pods-FSNotes iOS.debug.xcconfig */,\n\t\t\t\t4796D64E77383E6A5A3F900B /* Pods-FSNotes iOS.release.xcconfig */,\n\t\t\t\t484D580095FCD450AE46554D /* Pods-FSNotes iOS Share Extension.debug.xcconfig */,\n\t\t\t\t781ADC8297B1AC61D8E278F6 /* Pods-FSNotes iOS Share Extension.release.xcconfig */,\n\t\t\t\t6ED8B562C4824136E3D33EDC /* Pods-FSNotesCore macOS.debug.xcconfig */,\n\t\t\t\tA0C1E679E6D0B408CAC6372D /* Pods-FSNotesCore macOS.release.xcconfig */,\n\t\t\t\t62E7ACC8B47FFD05898BD354 /* Pods-FSNotes (iCloud).debug.xcconfig */,\n\t\t\t\tEF024607824ECBF0AE378D65 /* Pods-FSNotes (iCloud).release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tD75F3335205EC34800CC887E /* FSNotes iOS Share Extension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D75F3341205EC34800CC887E /* Build configuration list for PBXNativeTarget \"FSNotes iOS Share Extension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF8CAD21668D14BDB8E66E536 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tD75F3332205EC34800CC887E /* Sources */,\n\t\t\t\tD75F3333205EC34800CC887E /* Frameworks */,\n\t\t\t\tD75F3334205EC34800CC887E /* 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 = \"FSNotes iOS Share Extension\";\n\t\t\tproductName = \"FSNotes iOS Share\";\n\t\t\tproductReference = D75F3336205EC34800CC887E /* FSNotes iOS Share Extension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\tD7679385201F21F5000F7BBF /* FSNotes iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D7679398201F21F5000F7BBF /* Build configuration list for PBXNativeTarget \"FSNotes iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD2B474F12776435E885D6144 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tD7679382201F21F5000F7BBF /* Sources */,\n\t\t\t\tD7679383201F21F5000F7BBF /* Frameworks */,\n\t\t\t\tD7679384201F21F5000F7BBF /* Resources */,\n\t\t\t\tD713542C2042D46E00E3776F /* Embed Watch Content */,\n\t\t\t\tD73E3DE0205D17360044FF84 /* Embed App Extensions */,\n\t\t\t\t6F13BB6620FEDE560005E120 /* Embed Frameworks */,\n\t\t\t\tB3D3D9AF57B99BB9F7A7F798 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD75F333F205EC34800CC887E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"FSNotes iOS\";\n\t\t\tpackageProductDependencies = (\n\t\t\t\tD7A9C1DA29107A0800905619 /* Git */,\n\t\t\t\tD7D2F27F2B54BDD4003DCA47 /* Shout */,\n\t\t\t);\n\t\t\tproductName = \"FSNotes iOS\";\n\t\t\tproductReference = D7679386201F21F5000F7BBF /* FSNotes iOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD7793C6E1F211C6000CA39B7 /* FSNotes */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D7793C951F211C6000CA39B7 /* Build configuration list for PBXNativeTarget \"FSNotes\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t17481D1DB565210A80E68547 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tD7793C6B1F211C6000CA39B7 /* Sources */,\n\t\t\t\tD7793C6C1F211C6000CA39B7 /* Frameworks */,\n\t\t\t\tD7793C6D1F211C6000CA39B7 /* Resources */,\n\t\t\t\t6F13BB1A20FEDDF50005E120 /* Embed Frameworks */,\n\t\t\t\tD7D7CD58232791810016AC15 /* CopyFiles */,\n\t\t\t\t064F52D71C0B9E9B54B4A092 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD70B1FA52920DA6A003923DC /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = FSNotes;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tD70F830528CE8596004818C5 /* Git */,\n\t\t\t\tD7D2F2812B54BE59003DCA47 /* Shout */,\n\t\t\t);\n\t\t\tproductName = FSNotes;\n\t\t\tproductReference = D7793C6F1F211C6000CA39B7 /* FSNotes.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tD7E81C2B1F925B5F00416A91 /* FSNotes (iCloud) */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D7E81C571F925B5F00416A91 /* Build configuration list for PBXNativeTarget \"FSNotes (iCloud)\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB7738C934BDFDCE4A24683FE /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tD7E81C2D1F925B5F00416A91 /* Sources */,\n\t\t\t\tD7E81C471F925B5F00416A91 /* Frameworks */,\n\t\t\t\tD7E81C491F925B5F00416A91 /* Resources */,\n\t\t\t\tD721893F21020D3300FE3AF2 /* Embed Frameworks */,\n\t\t\t\tD7D7CD56232791670016AC15 /* CopyFiles */,\n\t\t\t\t210B7CF3914C0A91C48CEFD3 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD70B1FA72920DA73003923DC /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"FSNotes (iCloud)\";\n\t\t\tpackageProductDependencies = (\n\t\t\t\tD70F830328CE858E004818C5 /* Git */,\n\t\t\t\tD7D2F27D2B54BD42003DCA47 /* Shout */,\n\t\t\t);\n\t\t\tproductName = FSNotes;\n\t\t\tproductReference = D7E81C5A1F925B5F00416A91 /* FSNotes.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tD7793C671F211C6000CA39B7 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1000;\n\t\t\t\tLastUpgradeCheck = 1020;\n\t\t\t\tORGANIZATIONNAME = \"Oleksandr Hlushchenko\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD75F3335205EC34800CC887E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.iCloud = {\n\t\t\t\t\t\t\t\tenabled = 0;\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\tD7679385201F21F5000F7BBF = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.BackgroundModes = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.DataProtection = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.iCloud = {\n\t\t\t\t\t\t\t\tenabled = 1;\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\tD7793C6E1F211C6000CA39B7 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.0;\n\t\t\t\t\t\tLastSwiftMigration = 0920;\n\t\t\t\t\t\tProvisioningStyle = Manual;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.Mac = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.HardenedRuntime = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Sandbox = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.iCloud = {\n\t\t\t\t\t\t\t\tenabled = 0;\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\tD7E81C2B1F925B5F00416A91 = {\n\t\t\t\t\t\tLastSwiftMigration = 1020;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Sandbox = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.iCloud = {\n\t\t\t\t\t\t\t\tenabled = 1;\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\tbuildConfigurationList = D7793C6A1F211C6000CA39B7 /* Build configuration list for PBXProject \"FSNotes\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t\tde,\n\t\t\t\tes,\n\t\t\t\t\"ar-IQ\",\n\t\t\t\t\"zh-Hans\",\n\t\t\t\tko,\n\t\t\t\tuk,\n\t\t\t\tfr,\n\t\t\t\t\"nl-NL\",\n\t\t\t\t\"pt-PT\",\n\t\t\t\tit,\n\t\t\t\the,\n\t\t\t\tja,\n\t\t\t\t\"pt-BR\",\n\t\t\t\tru,\n\t\t\t\tcs,\n\t\t\t\thi,\n\t\t\t\ttr,\n\t\t\t);\n\t\t\tmainGroup = D7793C661F211C6000CA39B7;\n\t\t\tpackageReferences = (\n\t\t\t\tD7B4CC5428C7B8860046A25F /* XCRemoteSwiftPackageReference \"swift-git\" */,\n\t\t\t\tD7D2F27C2B54BD42003DCA47 /* XCRemoteSwiftPackageReference \"Shout\" */,\n\t\t\t);\n\t\t\tproductRefGroup = D7793C701F211C6000CA39B7 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD7793C6E1F211C6000CA39B7 /* FSNotes */,\n\t\t\t\tD7E81C2B1F925B5F00416A91 /* FSNotes (iCloud) */,\n\t\t\t\tD7679385201F21F5000F7BBF /* FSNotes iOS */,\n\t\t\t\tD75F3335205EC34800CC887E /* FSNotes iOS Share Extension */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tD75F3334205EC34800CC887E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t42E001CA2ADAC2930099E7AD /* Localizable.xcstrings in Resources */,\n\t\t\t\tD7163D3424E81D9900B1FC05 /* MainInterface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7679384201F21F5000F7BBF /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11F43F3C2F127EE300652350 /* Meet FSNotes 7.textbundle in Resources */,\n\t\t\t\tD7F2F1AE21C503F000E41811 /* AvenirNext-Light.ttf in Resources */,\n\t\t\t\tD7F2F1B121C503F000E41811 /* AvenirNext-Demi.ttf in Resources */,\n\t\t\t\tD7F2F1AB21C503F000E41811 /* AvenirNext-Regular.ttf in Resources */,\n\t\t\t\tD7F2F19C21C503F000E41811 /* AvenirNext-UltraLight.ttf in Resources */,\n\t\t\t\tD75F1DF1206D660D00F70B28 /* MPreview.bundle in Resources */,\n\t\t\t\tD7FA916520555067002BB0AB /* SourceCodePro-Black.ttf in Resources */,\n\t\t\t\tD7FA916620555067002BB0AB /* SourceCodePro-Bold.ttf in Resources */,\n\t\t\t\tD7F2F1BD21C503F000E41811 /* AvenirNext-Thin.ttf in Resources */,\n\t\t\t\tD7FA916720555067002BB0AB /* SourceCodePro-BoldIt.ttf in Resources */,\n\t\t\t\t11A95B622EDC56DC0081ED29 /* modern.icon in Resources */,\n\t\t\t\t1175E0922EDC929400B92794 /* ny-2026.icon in Resources */,\n\t\t\t\tD7FA916820555067002BB0AB /* SourceCodePro-It.ttf in Resources */,\n\t\t\t\tD7F2F1B421C503F000E41811 /* AvenirNext-HeavyItalic.ttf in Resources */,\n\t\t\t\tD7FA916920555067002BB0AB /* SourceCodePro-Regular.ttf in Resources */,\n\t\t\t\tD7F2F19F21C503F000E41811 /* AvenirNext-Medium.ttf in Resources */,\n\t\t\t\tD7F2F1C621C503F000E41811 /* AvenirNext-UltraLightIt.ttf in Resources */,\n\t\t\t\tD7163D2F24E81B5C00B1FC05 /* Main.storyboard in Resources */,\n\t\t\t\t11BD71662EDC87B700541BF9 /* classic-2025.icon in Resources */,\n\t\t\t\tD7F2F1C321C503F000E41811 /* AvenirNext-LightItalic.ttf in Resources */,\n\t\t\t\tD7F2F1C021C503F000E41811 /* AvenirNext-Italic.ttf in Resources */,\n\t\t\t\tD7F2F1BA21C503F000E41811 /* AvenirNext-Bold.ttf in Resources */,\n\t\t\t\tD7F2F1B721C503F000E41811 /* AvenirNext-ThinItalic.ttf in Resources */,\n\t\t\t\t42E001CF2ADAC2930099E7AD /* Localizable.xcstrings in Resources */,\n\t\t\t\tD7ECE68A22B6B481006A14C6 /* TextBundle.icns in Resources */,\n\t\t\t\tD77F41B32A0D48F500E2B7A2 /* Launch Screen.storyboard in Resources */,\n\t\t\t\tD7F2F1A521C503F000E41811 /* AvenirNext-DemiItalic.ttf in Resources */,\n\t\t\t\tD7F2F19921C503F000E41811 /* AvenirNext-MediumItalic.ttf in Resources */,\n\t\t\t\tD7F2F1A821C503F000E41811 /* AvenirNext-BoldItalic.ttf in Resources */,\n\t\t\t\t42E001CC2ADAC2930099E7AD /* InfoPlist.xcstrings in Resources */,\n\t\t\t\t113EEBD72EDBA63D00A94F29 /* Assets.xcassets in Resources */,\n\t\t\t\tD7F2F1A221C503F000E41811 /* AvenirNext-Heavy.ttf in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7793C6D1F211C6000CA39B7 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD7F2F19A21C503F000E41811 /* AvenirNext-UltraLight.ttf in Resources */,\n\t\t\t\tD7F2F1BE21C503F000E41811 /* AvenirNext-Italic.ttf in Resources */,\n\t\t\t\tD7F2F1A021C503F000E41811 /* AvenirNext-Heavy.ttf in Resources */,\n\t\t\t\tD7F2F1A921C503F000E41811 /* AvenirNext-Regular.ttf in Resources */,\n\t\t\t\t11F5D53B2EFDA17000A66466 /* modern.icon in Resources */,\n\t\t\t\tD71C4A4E1F520F1B00EBA30B /* MPreview.bundle in Resources */,\n\t\t\t\tD7CD5F681F508E74006AA35D /* SourceCodePro-Bold.ttf in Resources */,\n\t\t\t\tD7F2F19D21C503F000E41811 /* AvenirNext-Medium.ttf in Resources */,\n\t\t\t\tD7F2F1B821C503F000E41811 /* AvenirNext-Bold.ttf in Resources */,\n\t\t\t\tD7CD5F691F508E74006AA35D /* SourceCodePro-BoldIt.ttf in Resources */,\n\t\t\t\tD720241522A9412B000A7691 /* TextBundle.icns in Resources */,\n\t\t\t\tD7F2F1A621C503F000E41811 /* AvenirNext-BoldItalic.ttf in Resources */,\n\t\t\t\tD7DD795B1F4E611D00D5724B /* SourceCodePro-Regular.ttf in Resources */,\n\t\t\t\tD7F2F1A321C503F000E41811 /* AvenirNext-DemiItalic.ttf in Resources */,\n\t\t\t\tD7F2F1AC21C503F000E41811 /* AvenirNext-Light.ttf in Resources */,\n\t\t\t\tD7465F28207F2CD600E46A52 /* Images.xcassets in Resources */,\n\t\t\t\tD7F2F1BB21C503F000E41811 /* AvenirNext-Thin.ttf in Resources */,\n\t\t\t\tD7D79C28236798C300898A2D /* Welcome.bundle in Resources */,\n\t\t\t\tD7DD79581F4E60D000D5724B /* SourceCodePro-Black.ttf in Resources */,\n\t\t\t\tD720241222A9412B000A7691 /* Text.icns in Resources */,\n\t\t\t\tD7F2F1B221C503F000E41811 /* AvenirNext-HeavyItalic.ttf in Resources */,\n\t\t\t\tD7F2F1B521C503F000E41811 /* AvenirNext-ThinItalic.ttf in Resources */,\n\t\t\t\tD720241922A941A3000A7691 /* EncryptedTextPack.icns in Resources */,\n\t\t\t\tD7F2F1AF21C503F000E41811 /* AvenirNext-Demi.ttf in Resources */,\n\t\t\t\tD720240F22A9412B000A7691 /* Markdown.icns in Resources */,\n\t\t\t\tD7DD79591F4E60D000D5724B /* SourceCodePro-It.ttf in Resources */,\n\t\t\t\t42E001C62ADAC2930099E7AD /* Localizable.xcstrings in Resources */,\n\t\t\t\tD7F2F1C121C503F000E41811 /* AvenirNext-LightItalic.ttf in Resources */,\n\t\t\t\tD7F2F1C421C503F000E41811 /* AvenirNext-UltraLightIt.ttf in Resources */,\n\t\t\t\tD7166F541F32F75E001A883F /* Main.storyboard in Resources */,\n\t\t\t\tD7F2F19721C503F000E41811 /* AvenirNext-MediumItalic.ttf in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7E81C491F925B5F00416A91 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD7F2F1BC21C503F000E41811 /* AvenirNext-Thin.ttf in Resources */,\n\t\t\t\tD73FABDA207F2EB600A98483 /* Images.xcassets in Resources */,\n\t\t\t\tD7E81C4B1F925B5F00416A91 /* MPreview.bundle in Resources */,\n\t\t\t\tD7E81C4C1F925B5F00416A91 /* SourceCodePro-Bold.ttf in Resources */,\n\t\t\t\t11F5D53C2EFDA17000A66466 /* modern.icon in Resources */,\n\t\t\t\tD7F2F1B921C503F000E41811 /* AvenirNext-Bold.ttf in Resources */,\n\t\t\t\tD7F2F1BF21C503F000E41811 /* AvenirNext-Italic.ttf in Resources */,\n\t\t\t\tD7E81C4D1F925B5F00416A91 /* SourceCodePro-BoldIt.ttf in Resources */,\n\t\t\t\tD720241622A9412B000A7691 /* TextBundle.icns in Resources */,\n\t\t\t\t42E001C72ADAC2930099E7AD /* Localizable.xcstrings in Resources */,\n\t\t\t\tD7F2F19E21C503F000E41811 /* AvenirNext-Medium.ttf in Resources */,\n\t\t\t\tD7F2F1B321C503F000E41811 /* AvenirNext-HeavyItalic.ttf in Resources */,\n\t\t\t\tD720241322A9412B000A7691 /* Text.icns in Resources */,\n\t\t\t\tD7E81C4E1F925B5F00416A91 /* SourceCodePro-Regular.ttf in Resources */,\n\t\t\t\tD7F2F1A121C503F000E41811 /* AvenirNext-Heavy.ttf in Resources */,\n\t\t\t\tD7F2F19821C503F000E41811 /* AvenirNext-MediumItalic.ttf in Resources */,\n\t\t\t\tD7F2F1A421C503F000E41811 /* AvenirNext-DemiItalic.ttf in Resources */,\n\t\t\t\tD7E81C4F1F925B5F00416A91 /* SourceCodePro-Black.ttf in Resources */,\n\t\t\t\tD720241022A9412B000A7691 /* Markdown.icns in Resources */,\n\t\t\t\tD7F2F19B21C503F000E41811 /* AvenirNext-UltraLight.ttf in Resources */,\n\t\t\t\tD7E81C501F925B5F00416A91 /* SourceCodePro-It.ttf in Resources */,\n\t\t\t\tD7F2F1B621C503F000E41811 /* AvenirNext-ThinItalic.ttf in Resources */,\n\t\t\t\tD7F2F1AD21C503F000E41811 /* AvenirNext-Light.ttf in Resources */,\n\t\t\t\tD7D79C29236798C300898A2D /* Welcome.bundle in Resources */,\n\t\t\t\tD7F2F1B021C503F000E41811 /* AvenirNext-Demi.ttf in Resources */,\n\t\t\t\tD7F2F1A721C503F000E41811 /* AvenirNext-BoldItalic.ttf in Resources */,\n\t\t\t\tD720241A22A941A3000A7691 /* EncryptedTextPack.icns in Resources */,\n\t\t\t\tD7E81C531F925B5F00416A91 /* Main.storyboard in Resources */,\n\t\t\t\tD7F2F1AA21C503F000E41811 /* AvenirNext-Regular.ttf in Resources */,\n\t\t\t\tD7F2F1C521C503F000E41811 /* AvenirNext-UltraLightIt.ttf in Resources */,\n\t\t\t\tD7F2F1C221C503F000E41811 /* AvenirNext-LightItalic.ttf in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t064F52D71C0B9E9B54B4A092 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-FSNotes/Pods-FSNotes-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/MASShortcut/MASShortcut.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Punycode-macOS/Punycode.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/RNCryptor-macOS/RNCryptor.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SSZipArchive-macOS/SSZipArchive.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/libcmark_gfm-macOS/libcmark_gfm.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MASShortcut.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Punycode.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNCryptor.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libcmark_gfm.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-FSNotes/Pods-FSNotes-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t17481D1DB565210A80E68547 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-FSNotes-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t210B7CF3914C0A91C48CEFD3 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-FSNotes (iCloud)/Pods-FSNotes (iCloud)-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/MASShortcut/MASShortcut.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Punycode-macOS/Punycode.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/RNCryptor-macOS/RNCryptor.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SSZipArchive-macOS/SSZipArchive.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/libcmark_gfm-macOS/libcmark_gfm.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MASShortcut.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Punycode.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNCryptor.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libcmark_gfm.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-FSNotes (iCloud)/Pods-FSNotes (iCloud)-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tB3D3D9AF57B99BB9F7A7F798 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-FSNotes iOS/Pods-FSNotes iOS-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Punycode-iOS/Punycode.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/RNCryptor-iOS/RNCryptor.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SSZipArchive-iOS/SSZipArchive.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/libcmark_gfm-iOS/libcmark_gfm.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/CropViewController/CropViewController.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/DropDown/DropDown.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SwipeCellKit/SwipeCellKit.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Punycode.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNCryptor.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libcmark_gfm.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CropViewController.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DropDown.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwipeCellKit.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-FSNotes iOS/Pods-FSNotes iOS-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tB7738C934BDFDCE4A24683FE /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-FSNotes (iCloud)-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tD2B474F12776435E885D6144 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-FSNotes iOS-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF8CAD21668D14BDB8E66E536 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-FSNotes iOS Share Extension-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tD75F3332205EC34800CC887E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11F2D4F72F104322002E4E47 /* Project+Date.swift in Sources */,\n\t\t\t\t11598DA42EDCB9B40036E387 /* UIFont+.swift in Sources */,\n\t\t\t\tD730BD38222DB11E00E69C93 /* TextBundleInfo.swift in Sources */,\n\t\t\t\tD792DD9427A6D6F5006ADC01 /* String+.swift in Sources */,\n\t\t\t\tD72DAF0C29B27D75001243BB /* ProjectSettings.swift in Sources */,\n\t\t\t\tD72682AE29BE8E2100F6E961 /* RepositoryAction.swift in Sources */,\n\t\t\t\tD79651B52517741400333AD4 /* ProgressState.swift in Sources */,\n\t\t\t\tD7680FB625D02B2C00810DA8 /* FileManager+.swift in Sources */,\n\t\t\t\tD7737394223D59D300154B9E /* KeychainPasswordItem.swift in Sources */,\n\t\t\t\tD7CD5CD121820CCD0009D63B /* Date+.swift in Sources */,\n\t\t\t\tD7CD5CC7218209BD0009D63B /* SortBy.swift in Sources */,\n\t\t\t\tD7B34F9B25195D7E0007877E /* PreviewState.swift in Sources */,\n\t\t\t\tD77E0539246312B400AD7772 /* StorageType.swift in Sources */,\n\t\t\t\tD7CD5CD521820D700009D63B /* ImagesProcessor.swift in Sources */,\n\t\t\t\t113685522EC795B80033767F /* Data+.swift in Sources */,\n\t\t\t\tD79A13CE2A0E9C980037510B /* UIColor+.swift in Sources */,\n\t\t\t\tD7E9FEBC2C4AA64B0025D8E3 /* SearchQuery.swift in Sources */,\n\t\t\t\t1136855F2EC7A6A50033767F /* Platform.swift in Sources */,\n\t\t\t\tD7B2B6EC245EEA790084B78D /* LanguageType.swift in Sources */,\n\t\t\t\tD7CD5CC9218209D80009D63B /* NoteType.swift in Sources */,\n\t\t\t\tD7CD5CC5218209820009D63B /* UserDefaultsManagement.swift in Sources */,\n\t\t\t\t1136855A2EC7A21F0033767F /* NSMutableAttributedString+.swift in Sources */,\n\t\t\t\tD75F3339205EC34800CC887E /* ShareViewController.swift in Sources */,\n\t\t\t\tD7104A68230BD8C500B6D8EE /* SortDirection.swift in Sources */,\n\t\t\t\t113685532EC796EF0033767F /* Note.swift in Sources */,\n\t\t\t\tD76F3682272563EC00D1FFB4 /* NSAttributedString+.swift in Sources */,\n\t\t\t\tD7CD5CD021820CBC0009D63B /* URL+.swift in Sources */,\n\t\t\t\tD7958A3A22ED512D00EDBDDC /* SandboxBookmark.swift in Sources */,\n\t\t\t\tD7CD5CCE21820C9D0009D63B /* DateFormatter+.swift in Sources */,\n\t\t\t\t113A31A02EEE2D47009B50B0 /* Note+Preview.swift in Sources */,\n\t\t\t\tD7B4AC622471253100F3888A /* NoteMeta.swift in Sources */,\n\t\t\t\tD75627D226D1165A000AF6EA /* ImageFormat.swift in Sources */,\n\t\t\t\tD7E9FEBA2C4AA59D0025D8E3 /* SidebarItemType.swift in Sources */,\n\t\t\t\t11BD8FAB2EDE1AF8000673A7 /* UserDataService.swift in Sources */,\n\t\t\t\tD7CD5CC42181F7530009D63B /* Storage.swift in Sources */,\n\t\t\t\t110E409F2EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */,\n\t\t\t\tD7CD5CC6218209960009D63B /* Project.swift in Sources */,\n\t\t\t\tD7CD5CD421820D640009D63B /* NSAttributedStringKey+.swift in Sources */,\n\t\t\t\tD792DD8627A6C980006ADC01 /* FSParser.swift in Sources */,\n\t\t\t\tD730BD3F222DB9FC00E69C93 /* NameHelper.swift in Sources */,\n\t\t\t\tD7737393223D59CF00154B9E /* KeychainConfiguration.swift in Sources */,\n\t\t\t\tD7CD5CDC21832C190009D63B /* UserDefaultsManagement+.swift in Sources */,\n\t\t\t\t113685642EC869950033767F /* URL+Image.swift in Sources */,\n\t\t\t\tD7BAC631249D1204008D29AA /* SettingsFilesNaming.swift in Sources */,\n\t\t\t\t110D09842E9C152B001555FA /* NSRange+.swift in Sources */,\n\t\t\t\tD730BD31222DABA100E69C93 /* NoteContainer.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7679382201F21F5000F7BBF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD70E9E012901AEB600A3C634 /* DiffEntry.swift in Sources */,\n\t\t\t\tD70E9DF42901AEA800A3C634 /* Commit.swift in Sources */,\n\t\t\t\tD70E9E172901AEF300A3C634 /* Tags.swift in Sources */,\n\t\t\t\tD73FAE9F21553CAA0058BE61 /* UIApplication+.swift in Sources */,\n\t\t\t\tD79651B42517741400333AD4 /* ProgressState.swift in Sources */,\n\t\t\t\tD70E9E0A2901AECF00A3C634 /* Remote.swift in Sources */,\n\t\t\t\t110BE0112EE86B4A00C5E456 /* Clojure.swift in Sources */,\n\t\t\t\tD70E9DF32901AEA100A3C634 /* PasswordAuthentication.swift in Sources */,\n\t\t\t\tD70E9E132901AEE600A3C634 /* Statuses.swift in Sources */,\n\t\t\t\tD792DD8527A6C980006ADC01 /* FSParser.swift in Sources */,\n\t\t\t\t110BE0152EE8C1C900C5E456 /* Html.swift in Sources */,\n\t\t\t\tD794559A27C1B3F9000C283F /* ExternalViewController.swift in Sources */,\n\t\t\t\t8F7136F023490CBF004DFA6E /* Markdown.swift in Sources */,\n\t\t\t\tD7DA9E2321033834001CF0BE /* NSMutableAttributedString+.swift in Sources */,\n\t\t\t\t11BD8F9B2EDDF336000673A7 /* SolarizedDark.swift in Sources */,\n\t\t\t\t11BD8F972EDDF32E000673A7 /* SolarizedLight.swift in Sources */,\n\t\t\t\tD70E9DF12901AE9B00A3C634 /* KeyAuthentication.swift in Sources */,\n\t\t\t\tD7A9C1DC29107B7600905619 /* Reference+Target.swift in Sources */,\n\t\t\t\t11BD8FAA2EDE1AF8000673A7 /* UserDataService.swift in Sources */,\n\t\t\t\tD71FD21F2101B2D5008BEFA1 /* NoteAttachment.swift in Sources */,\n\t\t\t\tD73290BA2099F0AB0003F647 /* UndoData.swift in Sources */,\n\t\t\t\tD70E9E122901AEE100A3C634 /* FileHistoryIterator.swift in Sources */,\n\t\t\t\tD74B7B692137EFA9007F5331 /* SingleTouchDownGestureRecognizer.swift in Sources */,\n\t\t\t\tD736DDAD27BAC7940012ED70 /* Note+History.swift in Sources */,\n\t\t\t\tD730BD45223510A700E69C93 /* KeychainPasswordItem.swift in Sources */,\n\t\t\t\tD7CBAFFE214D5A1C002ECD5A /* ShortcutIdentifier.swift in Sources */,\n\t\t\t\tD785805C27A3483B000C1BAF /* FolderPopoverActions.swift in Sources */,\n\t\t\t\tD70E9E0C2901AEDA00A3C634 /* Repository+Lookup.swift in Sources */,\n\t\t\t\tD7A549C324DD9D3400537544 /* SettingsEditorViewController.swift in Sources */,\n\t\t\t\tD70E9DF02901AE9700A3C634 /* BranchesIterator.swift in Sources */,\n\t\t\t\tD70E9DEF2901AE9400A3C634 /* Branches.swift in Sources */,\n\t\t\t\tD7958A3922ED512D00EDBDDC /* SandboxBookmark.swift in Sources */,\n\t\t\t\tD74B7B672137D3A1007F5331 /* AttributedBox.swift in Sources */,\n\t\t\t\t11D9431E2E643F250010CC2B /* Swift.swift in Sources */,\n\t\t\t\tD70E9DF52901AEAF00A3C634 /* Blob.swift in Sources */,\n\t\t\t\t11F2D4F42F104322002E4E47 /* Project+Date.swift in Sources */,\n\t\t\t\tD7E6D9D320808623003ECAFC /* SidebarItem.swift in Sources */,\n\t\t\t\tD7487FEB2174E62A00D09383 /* NSAttributedStringKey+.swift in Sources */,\n\t\t\t\tD70E9DFA2901AEAF00A3C634 /* Signature.swift in Sources */,\n\t\t\t\tD7CC44C92A1E5F7600743857 /* ApiResponse.swift in Sources */,\n\t\t\t\tD70E9E1A2901AEF900A3C634 /* Tree.swift in Sources */,\n\t\t\t\tD70E9DFB2901AEAF00A3C634 /* Object.swift in Sources */,\n\t\t\t\tD7104A67230BD8C500B6D8EE /* SortDirection.swift in Sources */,\n\t\t\t\tD75627D126D1165A000AF6EA /* ImageFormat.swift in Sources */,\n\t\t\t\tD736DDAB27BABFFB0012ED70 /* RevisionsViewController.swift in Sources */,\n\t\t\t\tD730BD37222DB11E00E69C93 /* TextBundleInfo.swift in Sources */,\n\t\t\t\tD7503460285F827800086424 /* DateFormatter+.swift in Sources */,\n\t\t\t\t113A31A12EEE2D47009B50B0 /* Note+Preview.swift in Sources */,\n\t\t\t\tD7D03BAF205C250500D96A6D /* FontViewController.swift in Sources */,\n\t\t\t\t1136856A2EC8AE2F0033767F /* UIBarButtonItem+.swift in Sources */,\n\t\t\t\t11BF066B2EE331B5006C7336 /* Scala.swift in Sources */,\n\t\t\t\tD75629B327D4DE9F00F55588 /* CodeThemeViewController.swift in Sources */,\n\t\t\t\tD7FDA4F7236DBC6900C3B4AA /* Sidebar.swift in Sources */,\n\t\t\t\t113685682EC889E20033767F /* SceneDelegate.swift in Sources */,\n\t\t\t\tD71FD2252101CFD0008BEFA1 /* UITextView+.swift in Sources */,\n\t\t\t\tD70E9E052901AEC400A3C634 /* Index+Files.swift in Sources */,\n\t\t\t\tD70E9DF82901AEAF00A3C634 /* Strings.swift in Sources */,\n\t\t\t\t11D6C0F12EE22CBC006017F0 /* Matlab.swift in Sources */,\n\t\t\t\t11BD8FA72EDE0683000673A7 /* Theme.swift in Sources */,\n\t\t\t\tD7194B872023863A0062F1E3 /* ImagesProcessor.swift in Sources */,\n\t\t\t\tD70E9E022901AEBF00A3C634 /* Head.swift in Sources */,\n\t\t\t\t11598DA32EDCB8D40036E387 /* UIFont+.swift in Sources */,\n\t\t\t\t11D9431C2E643EF40010CC2B /* JavaScript.swift in Sources */,\n\t\t\t\tD7BDFE68201F67DA00897A58 /* NotesTextProcessor.swift in Sources */,\n\t\t\t\t11D6C0F32EE22D3B006017F0 /* Dart.swift in Sources */,\n\t\t\t\tD730BD30222DABA100E69C93 /* NoteContainer.swift in Sources */,\n\t\t\t\tD7D9503F209D846E001FB60B /* SidebarTableCellView.swift in Sources */,\n\t\t\t\tD7C9029523547A1E00A89BD8 /* FSTag.swift in Sources */,\n\t\t\t\tD768D75A245E86690028F344 /* NSAttributedString+.swift in Sources */,\n\t\t\t\tD75A34E527D7CD440085438F /* SidebarViewController.swift in Sources */,\n\t\t\t\t110BE0212EE8C53C00C5E456 /* TypeScript.swift in Sources */,\n\t\t\t\tD714496220C72D3500D7AD46 /* UIImage+.swift in Sources */,\n\t\t\t\tD70E9DFF2901AEAF00A3C634 /* Errors.swift in Sources */,\n\t\t\t\tD7470D092170E890006B2A92 /* NSTextStorage++.swift in Sources */,\n\t\t\t\t113685632EC869950033767F /* URL+Image.swift in Sources */,\n\t\t\t\tD70E9DF72901AEAF00A3C634 /* ConfigManager.swift in Sources */,\n\t\t\t\t11D6C0E92EE22C11006017F0 /* R.swift in Sources */,\n\t\t\t\tD70E9E102901AEDA00A3C634 /* RepositoryManager.swift in Sources */,\n\t\t\t\t11D6C0CF2EE2279E006017F0 /* Cpp.swift in Sources */,\n\t\t\t\tD73794BF2336642500E75A28 /* (null) in Sources */,\n\t\t\t\tD70E9E062901AEC400A3C634 /* Index.swift in Sources */,\n\t\t\t\tD70E9DF92901AEAF00A3C634 /* Progress.swift in Sources */,\n\t\t\t\tD7C6DB5B25AA880600F8F76F /* ViewController+More.swift in Sources */,\n\t\t\t\t11AF63402E898435004E7157 /* Sql.swift in Sources */,\n\t\t\t\tD70E9E082901AEC900A3C634 /* Reference.swift in Sources */,\n\t\t\t\tD70E9DEE2901AE9100A3C634 /* Branch.swift in Sources */,\n\t\t\t\tD70E9E042901AEBF00A3C634 /* Head+Merge.swift in Sources */,\n\t\t\t\t1166D1F92E91BA8800B061CA /* CodeBlockDetector.swift in Sources */,\n\t\t\t\tD70E9E0D2901AEDA00A3C634 /* Repository+Commit.swift in Sources */,\n\t\t\t\tD70E9E192901AEF900A3C634 /* TreeEntry.swift in Sources */,\n\t\t\t\tD736DDA927B5DD370012ED70 /* EditorSelectionRect.swift in Sources */,\n\t\t\t\t110BE01A2EE8C25100C5E456 /* Css.swift in Sources */,\n\t\t\t\t11BF06772EE49546006C7336 /* Lua.swift in Sources */,\n\t\t\t\t11BD8F942EDDEC3D000673A7 /* GitHubDark.swift in Sources */,\n\t\t\t\t11D6C0E52EE22BF2006017F0 /* Kotlin.swift in Sources */,\n\t\t\t\tD750345F285F81F300086424 /* URL+.swift in Sources */,\n\t\t\t\tD7680FB525D02B2C00810DA8 /* FileManager+.swift in Sources */,\n\t\t\t\tD7BDFE6A201F68B700897A58 /* NotesTableView.swift in Sources */,\n\t\t\t\tD730BD3E222DB9FC00E69C93 /* NameHelper.swift in Sources */,\n\t\t\t\tD7CF7EAB29E2093C00FEC0C5 /* SecurityViewController.swift in Sources */,\n\t\t\t\tD7BDFE62201F678C00897A58 /* Note.swift in Sources */,\n\t\t\t\t11D943272E643F630010CC2B /* GitHubLight.swift in Sources */,\n\t\t\t\tD77015822C972B7500CFF0E8 /* SettingsTableViewCell.swift in Sources */,\n\t\t\t\tD71354042042AFC800E3776F /* SettingsViewController.swift in Sources */,\n\t\t\t\tD7FB716C2BE7F66500808E56 /* EditorViewController+QuickLook.swift in Sources */,\n\t\t\t\tD70716DC2307E82900B44B0D /* SingleImageTouchDownGestureRecognizer.swift in Sources */,\n\t\t\t\tD70E9E072901AEC400A3C634 /* Index+Commit.swift in Sources */,\n\t\t\t\tD75629B527D5036D00F55588 /* SortByViewController.swift in Sources */,\n\t\t\t\tD70E9DFC2901AEAF00A3C634 /* Wrapper.swift in Sources */,\n\t\t\t\tD75629B127D4DB7E00F55588 /* CodeFontViewController.swift in Sources */,\n\t\t\t\tD71AA0222143A4A8004AFD2A /* MoveViewController.swift in Sources */,\n\t\t\t\tD7F6CFF02056AC22008C584A /* LanguageViewController.swift in Sources */,\n\t\t\t\t11D6C0CB2EE225E7006017F0 /* C.swift in Sources */,\n\t\t\t\tD71760932826CAC4009794D8 /* MPreviewView.swift in Sources */,\n\t\t\t\tD7CDE9DE216178DE00DC5978 /* AppearanceType.swift in Sources */,\n\t\t\t\t110BE0272EE8C5B000C5E456 /* Lisp.swift in Sources */,\n\t\t\t\tD77AD7FF27F9D1C90077BD45 /* Data+.swift in Sources */,\n\t\t\t\t11BD8F9E2EDE0235000673A7 /* AtomOneLight.swift in Sources */,\n\t\t\t\t11D6C0DC2EE22B0F006017F0 /* Rust.swift in Sources */,\n\t\t\t\tD7BDFE5D201F677B00897A58 /* UserDefaultsManagement.swift in Sources */,\n\t\t\t\tD7E6D9D42080862F003ECAFC /* SidebarItemType.swift in Sources */,\n\t\t\t\tD7C803EE2046DBBD005DA599 /* DefaultExtensionControllerView.swift in Sources */,\n\t\t\t\tD76025B4204EEF64000B9F59 /* TextFormatter.swift in Sources */,\n\t\t\t\tD7CC44C42A1E5E4F00743857 /* ViewController+WebApi.swift in Sources */,\n\t\t\t\t11F389562EEA10930008EC18 /* Mermaid.swift in Sources */,\n\t\t\t\tD78115672153D4D9004FA1CA /* ProjectsViewController.swift in Sources */,\n\t\t\t\tD7BDFE60201F677B00897A58 /* NoteType.swift in Sources */,\n\t\t\t\tD792DD9927A6D71C006ADC01 /* String+Punycode.swift in Sources */,\n\t\t\t\tD709C9E229AFD9E0006EF9A8 /* GitTableViewCell.swift in Sources */,\n\t\t\t\t11D6C0D32EE227F9006017F0 /* Java.swift in Sources */,\n\t\t\t\tD70E9E032901AEBF00A3C634 /* Head+Checkout.swift in Sources */,\n\t\t\t\tD752D80B23454750006842F9 /* NSTextAttachment+.swift in Sources */,\n\t\t\t\tD714749B279CE8EE001A8B29 /* MainNavigationController.swift in Sources */,\n\t\t\t\t11D6C0EC2EE22C6B006017F0 /* Ruby.swift in Sources */,\n\t\t\t\tD750345E285F817D00086424 /* String+.swift in Sources */,\n\t\t\t\t11BF06702EE33201006C7336 /* Bash.swift in Sources */,\n\t\t\t\tD714749D279D7DBC001A8B29 /* SearchQuery.swift in Sources */,\n\t\t\t\tD706396A202230BB00BC8446 /* EditorViewController.swift in Sources */,\n\t\t\t\tD70E9DF22901AE9E00A3C634 /* Authentication.swift in Sources */,\n\t\t\t\tD7BDFE61201F677B00897A58 /* SortBy.swift in Sources */,\n\t\t\t\t11D6C0C92EE2256B006017F0 /* Python.swift in Sources */,\n\t\t\t\tD76E10C1215A55CE0017F4A3 /* Date+.swift in Sources */,\n\t\t\t\t11D6C1042EE22E8F006017F0 /* Groovy.swift in Sources */,\n\t\t\t\tD7BDFE59201F671900897A58 /* Storage.swift in Sources */,\n\t\t\t\t1136855E2EC7A6A50033767F /* Platform.swift in Sources */,\n\t\t\t\t11BF067A2EE495C2006C7336 /* Perl.swift in Sources */,\n\t\t\t\t110BE01F2EE8C3BE00C5E456 /* Shell.swift in Sources */,\n\t\t\t\tD70E9DF62901AEAF00A3C634 /* Error.swift in Sources */,\n\t\t\t\tD70E9E182901AEF300A3C634 /* Tag.swift in Sources */,\n\t\t\t\t11D6C1092EE22EED006017F0 /* ObjectiveC.swift in Sources */,\n\t\t\t\tD7BB2E0129A0157700D5055A /* Storage+Git.swift in Sources */,\n\t\t\t\tD70E9E002901AEB600A3C634 /* Diff.swift in Sources */,\n\t\t\t\tD7B4AC612471253100F3888A /* NoteMeta.swift in Sources */,\n\t\t\t\tD70E9DFD2901AEAF00A3C634 /* OID.swift in Sources */,\n\t\t\t\tD78115632153B36C004FA1CA /* Buttons.swift in Sources */,\n\t\t\t\tD70E9E162901AEF300A3C634 /* TagIterator.swift in Sources */,\n\t\t\t\t11BD8FA22EDE024D000673A7 /* AtomOneDark.swift in Sources */,\n\t\t\t\tD7A9C1D92910784400905619 /* Project+Git.swift in Sources */,\n\t\t\t\tD73673A820D10CF2000BA61D /* CloudDriveManager.swift in Sources */,\n\t\t\t\tD7EDEDFD21920402000B8C1A /* NoteCellView+.swift in Sources */,\n\t\t\t\tD767938B201F21F5000F7BBF /* ViewController.swift in Sources */,\n\t\t\t\tD781156B2153E05A004FA1CA /* ProjectSettingsViewController.swift in Sources */,\n\t\t\t\tD70E9E0E2901AEDA00A3C634 /* Repository+Open.swift in Sources */,\n\t\t\t\tD7BAC62F249D11F8008D29AA /* SettingsFilesNaming.swift in Sources */,\n\t\t\t\tD75629B727D53EB100F55588 /* ThanksViewController.swift in Sources */,\n\t\t\t\t11B3F5962F182E5900A3531D /* EditorViewController+Search.swift in Sources */,\n\t\t\t\tD77E0538246312B400AD7772 /* StorageType.swift in Sources */,\n\t\t\t\t11BF067E2EE4968C006C7336 /* Erlang.swift in Sources */,\n\t\t\t\tD7B34F9A25195D7E0007877E /* PreviewState.swift in Sources */,\n\t\t\t\tD72682AD29BE8E2000F6E961 /* RepositoryAction.swift in Sources */,\n\t\t\t\t110D09852E9C152B001555FA /* NSRange+.swift in Sources */,\n\t\t\t\t111013182ECA102200B6CF1B /* Pasteboard.swift in Sources */,\n\t\t\t\t110E40A12EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */,\n\t\t\t\t11D6C0FD2EE22E00006017F0 /* Assembly.swift in Sources */,\n\t\t\t\tD70E9E0F2901AEDA00A3C634 /* Repository.swift in Sources */,\n\t\t\t\tD70E9E152901AEEB00A3C634 /* Status.swift in Sources */,\n\t\t\t\t11D6C1002EE22E4A006017F0 /* Scratch.swift in Sources */,\n\t\t\t\t11D943222E643F410010CC2B /* Php.swift in Sources */,\n\t\t\t\t1161828F2E637E31005B5EE0 /* SwiftHighlighter.swift in Sources */,\n\t\t\t\tD7C33F6E29E09A690006C473 /* AppIconViewController.swift in Sources */,\n\t\t\t\t11BF06742EE33262006C7336 /* Haskell.swift in Sources */,\n\t\t\t\tD70E9DFE2901AEAF00A3C634 /* StaticSshKeyDelegate.swift in Sources */,\n\t\t\t\tD7E7DB3327A9B17000408725 /* DatePickerViewController.swift in Sources */,\n\t\t\t\tD71B9D892868BF7F00D2F323 /* TextStorageProcessor.swift in Sources */,\n\t\t\t\tD7CD5CDB21832C190009D63B /* UserDefaultsManagement+.swift in Sources */,\n\t\t\t\tD79A13CD2A0E9C980037510B /* UIColor+.swift in Sources */,\n\t\t\t\t11D6C0F82EE22D78006017F0 /* Vb.swift in Sources */,\n\t\t\t\tD72DAF0B29B27D75001243BB /* ProjectSettings.swift in Sources */,\n\t\t\t\tD7679389201F21F5000F7BBF /* AppDelegate.swift in Sources */,\n\t\t\t\tD730BD46223510A900E69C93 /* KeychainConfiguration.swift in Sources */,\n\t\t\t\t11D6C0E02EE22B77006017F0 /* Csharp.swift in Sources */,\n\t\t\t\tD7BDFE70201F788D00897A58 /* NoteCellView.swift in Sources */,\n\t\t\t\tD73794C123366F5200E75A28 /* ImageScrollView.swift in Sources */,\n\t\t\t\tD73B3135298FBF4400F46144 /* GitViewController.swift in Sources */,\n\t\t\t\tD730BD5C223BFEB200E69C93 /* RuntimeError.swift in Sources */,\n\t\t\t\tD7B2B6EA245EEA620084B78D /* LanguageType.swift in Sources */,\n\t\t\t\tD70E9E142901AEEB00A3C634 /* StatusIterator.swift in Sources */,\n\t\t\t\t111013152EC8F1B600B6CF1B /* ImagePreviewViewController.swift in Sources */,\n\t\t\t\t11D702AC2E5B8E0C004DBAEC /* HtmlExtractor.swift in Sources */,\n\t\t\t\t11D6C0D92EE229E9006017F0 /* Go.swift in Sources */,\n\t\t\t\tD794558E27C05743000C283F /* ProViewController.swift in Sources */,\n\t\t\t\tD7BDFE6C201F6DC200897A58 /* EditTextView.swift in Sources */,\n\t\t\t\tD70E9E0B2901AED400A3C634 /* Remotes.swift in Sources */,\n\t\t\t\tD7D9503D209D806F001FB60B /* SidebarTableView.swift in Sources */,\n\t\t\t\tD70E9E112901AEE100A3C634 /* RevisionIterator.swift in Sources */,\n\t\t\t\tD7B6E59D20794B8C00FE0E20 /* Project.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7793C6B1F211C6000CA39B7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD73BCCAA28EB5EC3008B3BBC /* OID.swift in Sources */,\n\t\t\t\tD7D97F3C290437A200C651D4 /* NSWindowController+.swift in Sources */,\n\t\t\t\tD7DA9E1E21031901001CF0BE /* OutlineHeaderView.swift in Sources */,\n\t\t\t\tD7D01AFD2C65203A00F545D0 /* PrinterLegacy.swift in Sources */,\n\t\t\t\t11D943292E643F630010CC2B /* GitHubLight.swift in Sources */,\n\t\t\t\tD7B3FE7121027A6D00764C39 /* UserDataService.swift in Sources */,\n\t\t\t\t11F3F4872EDB0E4400435CBF /* DateFormatter+.swift in Sources */,\n\t\t\t\tD7315ED2215ED15500AB49D4 /* SidebarSplitView.swift in Sources */,\n\t\t\t\t11D6C0E72EE22C11006017F0 /* R.swift in Sources */,\n\t\t\t\t11AF633E2E898435004E7157 /* Sql.swift in Sources */,\n\t\t\t\t117C0E4D2EEDB9C30086419C /* EditTextView+Clicked.swift in Sources */,\n\t\t\t\tD73BCCF228EB5EC4008B3BBC /* TreeEntry.swift in Sources */,\n\t\t\t\t11BF067B2EE495C2006C7336 /* Perl.swift in Sources */,\n\t\t\t\tD73BCD0428EB5EC4008B3BBC /* Repository+Commit.swift in Sources */,\n\t\t\t\tD7E6ACE920832D41003599A2 /* AppDelegate+URLRoutes.swift in Sources */,\n\t\t\t\t11D6C0CD2EE225E7006017F0 /* C.swift in Sources */,\n\t\t\t\t110BE0192EE8C25100C5E456 /* Css.swift in Sources */,\n\t\t\t\tD73BCCDA28EB5EC4008B3BBC /* Status.swift in Sources */,\n\t\t\t\tD771E96F28EDFBF600CD4871 /* Errors.swift in Sources */,\n\t\t\t\tD752D80823454750006842F9 /* NSTextAttachment+.swift in Sources */,\n\t\t\t\t11D6C1072EE22EED006017F0 /* ObjectiveC.swift in Sources */,\n\t\t\t\tD743FB5424CD72B1003A8913 /* SettingsFilesNaming.swift in Sources */,\n\t\t\t\tD7170C1D20F8565B001DDB36 /* FileSystemEventManager.swift in Sources */,\n\t\t\t\tD71B9D7A2867027000D2F323 /* NoteViewController.swift in Sources */,\n\t\t\t\tD73BCC9828EB5EC3008B3BBC /* Strings.swift in Sources */,\n\t\t\t\tD73BCCB028EB5EC3008B3BBC /* Object.swift in Sources */,\n\t\t\t\t1102DDB12EE4C280005029A6 /* EditTextView+Complete.swift in Sources */,\n\t\t\t\tD7B34F9725195D7E0007877E /* PreviewState.swift in Sources */,\n\t\t\t\tD779C7BB1F415C0300FADEE1 /* PrefsWindowController.swift in Sources */,\n\t\t\t\tD73BCCAD28EB5EC3008B3BBC /* Signature.swift in Sources */,\n\t\t\t\t110D09832E9C152B001555FA /* NSRange+.swift in Sources */,\n\t\t\t\tD7793C751F211C6000CA39B7 /* ViewController.swift in Sources */,\n\t\t\t\tD7B13DBD2C64F445008EBCAA /* Printer.swift in Sources */,\n\t\t\t\tD7DD5A881F88D4EA00CE947E /* FileWatcher.swift in Sources */,\n\t\t\t\tD77A12382C469AD0001B388B /* SearchQuery.swift in Sources */,\n\t\t\t\t11BF06722EE33262006C7336 /* Haskell.swift in Sources */,\n\t\t\t\t11D6C0E42EE22BF2006017F0 /* Kotlin.swift in Sources */,\n\t\t\t\tD7D3D2A427BEEA61001C1497 /* Note+History.swift in Sources */,\n\t\t\t\tD7F95F3A1FF2759300E2A447 /* NotesTextProcessor.swift in Sources */,\n\t\t\t\tD73BCCF528EB5EC4008B3BBC /* Tree.swift in Sources */,\n\t\t\t\tD792DD8227A6C980006ADC01 /* FSParser.swift in Sources */,\n\t\t\t\tD730BD5A223BFEB200E69C93 /* RuntimeError.swift in Sources */,\n\t\t\t\tD73BCCCB28EB5EC4008B3BBC /* Authentication.swift in Sources */,\n\t\t\t\tD73BCC9528EB5EC3008B3BBC /* BranchesIterator.swift in Sources */,\n\t\t\t\tD73BCD0728EB5EC4008B3BBC /* Reference.swift in Sources */,\n\t\t\t\tD7B6E59A207912E300FE0E20 /* Project.swift in Sources */,\n\t\t\t\tD777D7812009115C00D86B33 /* ImagesProcessor.swift in Sources */,\n\t\t\t\tD708AC672000EF5800A1760F /* NoteType.swift in Sources */,\n\t\t\t\tD73BCC9B28EB5EC3008B3BBC /* ConfigManager.swift in Sources */,\n\t\t\t\tD73BCCBF28EB5EC3008B3BBC /* FileHistoryIterator.swift in Sources */,\n\t\t\t\tD7508FCE1F3438540047AB76 /* PrefsViewController.swift in Sources */,\n\t\t\t\tD792297521A845B4005F468F /* ProjectSettingsViewController.swift in Sources */,\n\t\t\t\tD7315ED5215ED95600AB49D4 /* NSAppearance+.swift in Sources */,\n\t\t\t\tD7DA9E2121033489001CF0BE /* NSMutableAttributedString+.swift in Sources */,\n\t\t\t\tD73BCCE628EB5EC4008B3BBC /* Index+Files.swift in Sources */,\n\t\t\t\tD73BCCD428EB5EC4008B3BBC /* Remotes.swift in Sources */,\n\t\t\t\tD73BCCD128EB5EC4008B3BBC /* Remote.swift in Sources */,\n\t\t\t\tD76447DC1F3A4F0700965F01 /* UserDefaultsManagement.swift in Sources */,\n\t\t\t\t2799407C218484C900727B20 /* TitleBarView.swift in Sources */,\n\t\t\t\t11F3F4832EDB0E0B00435CBF /* URL+.swift in Sources */,\n\t\t\t\tD73BCC8C28EB5EC3008B3BBC /* Commit.swift in Sources */,\n\t\t\t\tD796EB41251E127300CE5C80 /* Pasteboard.swift in Sources */,\n\t\t\t\tD730BD2A222BF32A00E69C93 /* KeychainPasswordItem.swift in Sources */,\n\t\t\t\tD75EE7FD2078C5460055F159 /* SidebarCellView.swift in Sources */,\n\t\t\t\tD797004C1F3DD10700BAD94D /* EditTextView.swift in Sources */,\n\t\t\t\tD73BCCC228EB5EC3008B3BBC /* DiffEntry.swift in Sources */,\n\t\t\t\tD7BB2DFE29A0157700D5055A /* Storage+Git.swift in Sources */,\n\t\t\t\tD77E0537246312B300AD7772 /* StorageType.swift in Sources */,\n\t\t\t\t113A31A22EEE2D47009B50B0 /* Note+Preview.swift in Sources */,\n\t\t\t\tD7EDEDFB219203C9000B8C1A /* NoteCellView+.swift in Sources */,\n\t\t\t\tD7A65C5920F11C38003E5ADC /* LanguageType.swift in Sources */,\n\t\t\t\tD73BCCEF28EB5EC4008B3BBC /* Head+Merge.swift in Sources */,\n\t\t\t\tD7CB9905207E5AE300037E91 /* SidebarTableRowView.swift in Sources */,\n\t\t\t\tD7B4AC5E2471253100F3888A /* NoteMeta.swift in Sources */,\n\t\t\t\t11BD8F932EDDEC3D000673A7 /* GitHubDark.swift in Sources */,\n\t\t\t\t11D6C0C72EE2256B006017F0 /* Python.swift in Sources */,\n\t\t\t\tD730BD27222BF30700E69C93 /* KeychainConfiguration.swift in Sources */,\n\t\t\t\tD7487FD821738A1900D09383 /* NSImage+.swift in Sources */,\n\t\t\t\t11D9431A2E643EF40010CC2B /* JavaScript.swift in Sources */,\n\t\t\t\t110BE0262EE8C5B000C5E456 /* Lisp.swift in Sources */,\n\t\t\t\tD75EE7F72078B22D0055F159 /* SidebarItem.swift in Sources */,\n\t\t\t\tD783B505208A1BFD00328A41 /* EditorSplitView.swift in Sources */,\n\t\t\t\tD726DE8A287ACC1E00F8406C /* NSWindow+.swift in Sources */,\n\t\t\t\tD75EE8002078E0C60055F159 /* SidebarItemType.swift in Sources */,\n\t\t\t\tD7793C731F211C6000CA39B7 /* AppDelegate.swift in Sources */,\n\t\t\t\tD7F5C0F8223ED57D0038F172 /* PreferencesSecurityViewController.swift in Sources */,\n\t\t\t\t11F018B22EF8415600F07580 /* MPreviewContainerView.swift in Sources */,\n\t\t\t\tD73BCCC828EB5EC4008B3BBC /* KeyAuthentication.swift in Sources */,\n\t\t\t\t11D6C0FB2EE22E00006017F0 /* Assembly.swift in Sources */,\n\t\t\t\tD7680FB225D02B2C00810DA8 /* FileManager+.swift in Sources */,\n\t\t\t\tD73BCCE328EB5EC4008B3BBC /* Index+Commit.swift in Sources */,\n\t\t\t\tD79C26252872384C00CB70E6 /* EditorViewController+Sharing.swift in Sources */,\n\t\t\t\tD77F89DF28D38B5D00BECC87 /* ViewController+Web.swift in Sources */,\n\t\t\t\tD73BCD0128EB5EC4008B3BBC /* Repository+Lookup.swift in Sources */,\n\t\t\t\tD7E51713220D814D00A9CAD9 /* UTI.swift in Sources */,\n\t\t\t\t11BD8FA32EDE024D000673A7 /* AtomOneDark.swift in Sources */,\n\t\t\t\tD71B9D862868BF7F00D2F323 /* TextStorageProcessor.swift in Sources */,\n\t\t\t\tD730829223084340003185D1 /* MPreviewView.swift in Sources */,\n\t\t\t\tD75EE7FA2078B3C00055F159 /* Sidebar.swift in Sources */,\n\t\t\t\t11D6C0ED2EE22C6B006017F0 /* Ruby.swift in Sources */,\n\t\t\t\t11A6A8FD2EF074D8005D000A /* EditTextView+Todo.swift in Sources */,\n\t\t\t\tD70B1FAB29213EDF003923DC /* HyperlinkTextField.swift in Sources */,\n\t\t\t\t1166D1F72E91BA8800B061CA /* CodeBlockDetector.swift in Sources */,\n\t\t\t\t11D6C0D72EE229E9006017F0 /* Go.swift in Sources */,\n\t\t\t\t11BD8FA02EDE0235000673A7 /* AtomOneLight.swift in Sources */,\n\t\t\t\t11D702AD2E5B8E0C004DBAEC /* HtmlExtractor.swift in Sources */,\n\t\t\t\tD7D1DE68216D05A800AC1845 /* NameTextField.swift in Sources */,\n\t\t\t\tD735E5BF1F2F001500173215 /* NoteRowView.swift in Sources */,\n\t\t\t\tD7CA7FD4232652E300E9717A /* PreferencesGitViewController.swift in Sources */,\n\t\t\t\tD7CD5CCD21820B7B0009D63B /* UserDefaultsManagement+.swift in Sources */,\n\t\t\t\tD76025B2204EEF64000B9F59 /* TextFormatter.swift in Sources */,\n\t\t\t\t11D943242E643F410010CC2B /* Php.swift in Sources */,\n\t\t\t\tD7038E2620FB24E000A54E69 /* NoteAttachment.swift in Sources */,\n\t\t\t\tD73BCCE028EB5EC4008B3BBC /* Index.swift in Sources */,\n\t\t\t\tD74112281FABA21B00AB619A /* MainWindow.swift in Sources */,\n\t\t\t\tD7CDE9DC2161767A00DC5978 /* AppearanceType.swift in Sources */,\n\t\t\t\t11ABE5E22EEEFD0E00E7C9EB /* NotesCounterView.swift in Sources */,\n\t\t\t\tD7E025081F3B6DDB00EDDA32 /* Storage.swift in Sources */,\n\t\t\t\tD74DFBAD21661BA400F67D64 /* Date+.swift in Sources */,\n\t\t\t\t113685602EC7A6A50033767F /* Platform.swift in Sources */,\n\t\t\t\tD7F5C0EF223ED0570038F172 /* PreferencesGeneralViewController.swift in Sources */,\n\t\t\t\t11BD8F982EDDF32E000673A7 /* SolarizedLight.swift in Sources */,\n\t\t\t\tD7D372F7207BB09500AFBD9F /* SidebarOutlineView.swift in Sources */,\n\t\t\t\tD7CCEDB92C6BA2F300A3BB83 /* ClickableTextField.swift in Sources */,\n\t\t\t\tD72682AA29BE8E2000F6E961 /* RepositoryAction.swift in Sources */,\n\t\t\t\t11D702A72E5ADDED004DBAEC /* LayoutManager.swift in Sources */,\n\t\t\t\tD73BCCFB28EB5EC4008B3BBC /* Repository.swift in Sources */,\n\t\t\t\tD73BCCC528EB5EC4008B3BBC /* Diff.swift in Sources */,\n\t\t\t\tD73BCCB328EB5EC3008B3BBC /* TagIterator.swift in Sources */,\n\t\t\t\tD73BCCDD28EB5EC4008B3BBC /* StatusIterator.swift in Sources */,\n\t\t\t\tD73BCCA128EB5EC3008B3BBC /* Wrapper.swift in Sources */,\n\t\t\t\tD7470D072170E890006B2A92 /* NSTextStorage++.swift in Sources */,\n\t\t\t\t110E40A52EA039CE00C62F49 /* EditTextView+DragOperation.swift in Sources */,\n\t\t\t\tD772C8842217362C007E440B /* ViewController+Print.swift in Sources */,\n\t\t\t\tD7DD5A8A1F88D50000CE947E /* FileWatcherEvent.swift in Sources */,\n\t\t\t\tD73BCD0A28EB5EC4008B3BBC /* Reference+Target.swift in Sources */,\n\t\t\t\tD7CC44C62A1E5F7600743857 /* ApiResponse.swift in Sources */,\n\t\t\t\t11AA4B1F2EF9A47A0075A9E4 /* EditorViewController+ScrollPosition.swift in Sources */,\n\t\t\t\tD73BCC8F28EB5EC3008B3BBC /* Branch.swift in Sources */,\n\t\t\t\t110BE01E2EE8C3BE00C5E456 /* Shell.swift in Sources */,\n\t\t\t\tD73BCCBC28EB5EC3008B3BBC /* RevisionIterator.swift in Sources */,\n\t\t\t\t11D6C0D12EE2279E006017F0 /* Cpp.swift in Sources */,\n\t\t\t\t11D6C0D42EE227F9006017F0 /* Java.swift in Sources */,\n\t\t\t\tD7487FED2174E62B00D09383 /* NSAttributedStringKey+.swift in Sources */,\n\t\t\t\tD77AD7FC27F9D1C90077BD45 /* Data+.swift in Sources */,\n\t\t\t\t11BF06782EE49546006C7336 /* Lua.swift in Sources */,\n\t\t\t\tD7CE196C1FA4BA5E004BF8EE /* PreviewTextField.swift in Sources */,\n\t\t\t\tD73BCCE928EB5EC4008B3BBC /* Head+Checkout.swift in Sources */,\n\t\t\t\t11D6C1032EE22E8F006017F0 /* Groovy.swift in Sources */,\n\t\t\t\tD73BCCCE28EB5EC4008B3BBC /* PasswordAuthentication.swift in Sources */,\n\t\t\t\tD7679376201F0BFD000F7BBF /* SortBy.swift in Sources */,\n\t\t\t\tD7A415141F2FBDA00099B82C /* NotesTableView.swift in Sources */,\n\t\t\t\tD7D7CD3A232774BC0016AC15 /* ViewController+Git.swift in Sources */,\n\t\t\t\tD7BCF035296B0DAA00F72A4F /* AboutImageView.swift in Sources */,\n\t\t\t\tD7013E0026C3B116006F58E3 /* NSColor+.swift in Sources */,\n\t\t\t\tD7315ECF215ECF3000AB49D4 /* EditorView.swift in Sources */,\n\t\t\t\tD7A9C1D62910784400905619 /* Project+Git.swift in Sources */,\n\t\t\t\tD7153DFD2285A93300A2C20F /* AboutWindowController.swift in Sources */,\n\t\t\t\t11F2D4F62F104322002E4E47 /* Project+Date.swift in Sources */,\n\t\t\t\tD74D479F256DF2EB00D97647 /* FSNTextAttachmentCell.swift in Sources */,\n\t\t\t\t11BD8F9C2EDDF336000673A7 /* SolarizedDark.swift in Sources */,\n\t\t\t\tD77CC041216A608500582B97 /* EditorScrollView.swift in Sources */,\n\t\t\t\t110BE0232EE8C53C00C5E456 /* TypeScript.swift in Sources */,\n\t\t\t\t110BE0122EE86B4A00C5E456 /* Clojure.swift in Sources */,\n\t\t\t\t11A6A8FA2EF06B9D005D000A /* EditTextView+MoveLines.swift in Sources */,\n\t\t\t\t8F7136EE23490CBF004DFA6E /* Markdown.swift in Sources */,\n\t\t\t\tD773DE801F36F45900A39C9F /* SandboxBookmark.swift in Sources */,\n\t\t\t\tD7487F932173503C00D09383 /* AttributedBox.swift in Sources */,\n\t\t\t\tD730BD3C222DB9FC00E69C93 /* NameHelper.swift in Sources */,\n\t\t\t\tD7153E052285C09C00A2C20F /* AboutViewController.swift in Sources */,\n\t\t\t\tD73BCCB928EB5EC3008B3BBC /* Tag.swift in Sources */,\n\t\t\t\t11BF066A2EE331B5006C7336 /* Scala.swift in Sources */,\n\t\t\t\t11D6C0F52EE22D3B006017F0 /* Dart.swift in Sources */,\n\t\t\t\tD768D75C245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift in Sources */,\n\t\t\t\tD7F5C0FB223ED58F0038F172 /* PreferencesAdvancedViewController.swift in Sources */,\n\t\t\t\tD7CC44C12A1E5E4F00743857 /* ViewController+WebApi.swift in Sources */,\n\t\t\t\tD7CD5F6C1F51185F006AA35D /* NSFont+.swift in Sources */,\n\t\t\t\t110BE0172EE8C1C900C5E456 /* Html.swift in Sources */,\n\t\t\t\t11D6C0E12EE22B77006017F0 /* Csharp.swift in Sources */,\n\t\t\t\t11F389582EEA10930008EC18 /* Mermaid.swift in Sources */,\n\t\t\t\tD7508FC81F337E850047AB76 /* SearchTextField.swift in Sources */,\n\t\t\t\t11F018AC2EF7E78600F07580 /* MPreviewFindPanel.swift in Sources */,\n\t\t\t\tD7F5C0F2223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift in Sources */,\n\t\t\t\tD768D759245E86680028F344 /* NSAttributedString+.swift in Sources */,\n\t\t\t\tD73BCC9E28EB5EC3008B3BBC /* Error.swift in Sources */,\n\t\t\t\t275592971F3AE9B5006B8988 /* MainWindowController.swift in Sources */,\n\t\t\t\tD73BCCFE28EB5EC4008B3BBC /* Repository+Open.swift in Sources */,\n\t\t\t\tD73BCCF828EB5EC4008B3BBC /* RepositoryManager.swift in Sources */,\n\t\t\t\tD71B9D822868658100D2F323 /* EditorViewController.swift in Sources */,\n\t\t\t\tD77A6F7F28B11496006A0353 /* PreferencesWebViewController.swift in Sources */,\n\t\t\t\t11D6C0EF2EE22CBC006017F0 /* Matlab.swift in Sources */,\n\t\t\t\tD73BCCEC28EB5EC4008B3BBC /* Head.swift in Sources */,\n\t\t\t\tD73BCCD728EB5EC4008B3BBC /* Statuses.swift in Sources */,\n\t\t\t\tD72DAF0829B27D75001243BB /* ProjectSettings.swift in Sources */,\n\t\t\t\tD7F5C0F5223ED5620038F172 /* PreferencesEditorViewController.swift in Sources */,\n\t\t\t\tD738356D2242871400B260DD /* MasterPasswordViewController.swift in Sources */,\n\t\t\t\t113685652EC869950033767F /* URL+Image.swift in Sources */,\n\t\t\t\t11D9431F2E643F250010CC2B /* Swift.swift in Sources */,\n\t\t\t\t11BF067F2EE4968C006C7336 /* Erlang.swift in Sources */,\n\t\t\t\tD73BCCA428EB5EC3008B3BBC /* Progress.swift in Sources */,\n\t\t\t\tD73BCCB628EB5EC3008B3BBC /* Tags.swift in Sources */,\n\t\t\t\t11BF066E2EE33201006C7336 /* Bash.swift in Sources */,\n\t\t\t\tD7C1C99A235606CB0021A32D /* SidebarHeaderCellView.swift in Sources */,\n\t\t\t\tD7104A64230BD8C500B6D8EE /* SortDirection.swift in Sources */,\n\t\t\t\tD75627CE26D1165A000AF6EA /* ImageFormat.swift in Sources */,\n\t\t\t\t11BD8FA82EDE0683000673A7 /* Theme.swift in Sources */,\n\t\t\t\t11D6C0DD2EE22B0F006017F0 /* Rust.swift in Sources */,\n\t\t\t\tD735E5BD1F2EF66000173215 /* NoteCellView.swift in Sources */,\n\t\t\t\tD78678CB2093AE10001A6620 /* UndoData.swift in Sources */,\n\t\t\t\tD7E32C2C28F8D0740048614B /* StaticSshKeyDelegate.swift in Sources */,\n\t\t\t\t11F3F4852EDB0E2A00435CBF /* String+.swift in Sources */,\n\t\t\t\tD7C9029223547A1E00A89BD8 /* FSTag.swift in Sources */,\n\t\t\t\tD730BD2E222DABA100E69C93 /* NoteContainer.swift in Sources */,\n\t\t\t\tD730BD35222DB11E00E69C93 /* TextBundleInfo.swift in Sources */,\n\t\t\t\t11F1771A2EF1E93500CC566F /* ViewController+Menu.swift in Sources */,\n\t\t\t\tD79FE8A21F77D04A00113CFD /* Note.swift in Sources */,\n\t\t\t\tD73BCCA728EB5EC3008B3BBC /* Blob.swift in Sources */,\n\t\t\t\tD7153E092285EC6100A2C20F /* TitleTextField.swift in Sources */,\n\t\t\t\tD7D372F4207B5B0F00AFBD9F /* SidebarNotesView.swift in Sources */,\n\t\t\t\t1161828D2E637E31005B5EE0 /* SwiftHighlighter.swift in Sources */,\n\t\t\t\t110E40A02EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */,\n\t\t\t\t11D6C0FF2EE22E4A006017F0 /* Scratch.swift in Sources */,\n\t\t\t\tD73BCC9228EB5EC3008B3BBC /* Branches.swift in Sources */,\n\t\t\t\t11D6C0F92EE22D78006017F0 /* Vb.swift in Sources */,\n\t\t\t\tD79798A229C0FE6A00B9A878 /* SettingsViewController.swift in Sources */,\n\t\t\t\tD79651B12517741400333AD4 /* ProgressState.swift in Sources */,\n\t\t\t\tD792DD9627A6D71C006ADC01 /* String+Punycode.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7E81C2D1F925B5F00416A91 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD73BCCAB28EB5EC3008B3BBC /* OID.swift in Sources */,\n\t\t\t\tD7D97F3D290437A200C651D4 /* NSWindowController+.swift in Sources */,\n\t\t\t\tD7DA9E1F21031901001CF0BE /* OutlineHeaderView.swift in Sources */,\n\t\t\t\tD7D01AFE2C65208000F545D0 /* PrinterLegacy.swift in Sources */,\n\t\t\t\t11D943282E643F630010CC2B /* GitHubLight.swift in Sources */,\n\t\t\t\tD7B3FE7021027A5E00764C39 /* UserDataService.swift in Sources */,\n\t\t\t\t11F3F4882EDB0E4400435CBF /* DateFormatter+.swift in Sources */,\n\t\t\t\tD7315ED3215ED15500AB49D4 /* SidebarSplitView.swift in Sources */,\n\t\t\t\t11D6C0E82EE22C11006017F0 /* R.swift in Sources */,\n\t\t\t\t11AF633F2E898435004E7157 /* Sql.swift in Sources */,\n\t\t\t\t117C0E4E2EEDB9C40086419C /* EditTextView+Clicked.swift in Sources */,\n\t\t\t\tD73BCCF328EB5EC4008B3BBC /* TreeEntry.swift in Sources */,\n\t\t\t\t11BF067C2EE495C2006C7336 /* Perl.swift in Sources */,\n\t\t\t\tD73BCD0528EB5EC4008B3BBC /* Repository+Commit.swift in Sources */,\n\t\t\t\tD7E6ACEA20832D41003599A2 /* AppDelegate+URLRoutes.swift in Sources */,\n\t\t\t\t11D6C0CC2EE225E7006017F0 /* C.swift in Sources */,\n\t\t\t\t110BE01B2EE8C25100C5E456 /* Css.swift in Sources */,\n\t\t\t\tD73BCCDB28EB5EC4008B3BBC /* Status.swift in Sources */,\n\t\t\t\tD771E97028EDFBF600CD4871 /* Errors.swift in Sources */,\n\t\t\t\tD752D80923454750006842F9 /* NSTextAttachment+.swift in Sources */,\n\t\t\t\t11D6C1082EE22EED006017F0 /* ObjectiveC.swift in Sources */,\n\t\t\t\tD743FB5324CD72B0003A8913 /* SettingsFilesNaming.swift in Sources */,\n\t\t\t\tD7170C1E20F8565B001DDB36 /* FileSystemEventManager.swift in Sources */,\n\t\t\t\tD71B9D7B2867027000D2F323 /* NoteViewController.swift in Sources */,\n\t\t\t\tD73BCC9928EB5EC3008B3BBC /* Strings.swift in Sources */,\n\t\t\t\tD73BCCB128EB5EC3008B3BBC /* Object.swift in Sources */,\n\t\t\t\t1102DDB22EE4C280005029A6 /* EditTextView+Complete.swift in Sources */,\n\t\t\t\tD7B34F9825195D7E0007877E /* PreviewState.swift in Sources */,\n\t\t\t\tD777D782200912A400D86B33 /* ImagesProcessor.swift in Sources */,\n\t\t\t\tD73BCCAE28EB5EC3008B3BBC /* Signature.swift in Sources */,\n\t\t\t\t110D09862E9C152B001555FA /* NSRange+.swift in Sources */,\n\t\t\t\tD708AC682000F0E100A1760F /* NoteType.swift in Sources */,\n\t\t\t\tD7B13DBE2C64F445008EBCAA /* Printer.swift in Sources */,\n\t\t\t\tD7B6E59B207912E300FE0E20 /* Project.swift in Sources */,\n\t\t\t\tD77A12372C469ACF001B388B /* SearchQuery.swift in Sources */,\n\t\t\t\t11BF06732EE33262006C7336 /* Haskell.swift in Sources */,\n\t\t\t\t11D6C0E32EE22BF2006017F0 /* Kotlin.swift in Sources */,\n\t\t\t\tD7D3D2A527BEEA62001C1497 /* Note+History.swift in Sources */,\n\t\t\t\tD73BCCF628EB5EC4008B3BBC /* Tree.swift in Sources */,\n\t\t\t\tD730BD5B223BFEB200E69C93 /* RuntimeError.swift in Sources */,\n\t\t\t\tD792DD8327A6C980006ADC01 /* FSParser.swift in Sources */,\n\t\t\t\tD73BCCCC28EB5EC4008B3BBC /* Authentication.swift in Sources */,\n\t\t\t\tD73BCC9628EB5EC3008B3BBC /* BranchesIterator.swift in Sources */,\n\t\t\t\tD73BCD0828EB5EC4008B3BBC /* Reference.swift in Sources */,\n\t\t\t\tD7FFD09C1FF677ED0064CBA6 /* NotesTextProcessor.swift in Sources */,\n\t\t\t\tD75EE7FE2078C5460055F159 /* SidebarCellView.swift in Sources */,\n\t\t\t\tD73BCC9C28EB5EC3008B3BBC /* ConfigManager.swift in Sources */,\n\t\t\t\tD74112291FABA29100AB619A /* MainWindow.swift in Sources */,\n\t\t\t\tD73BCCC028EB5EC3008B3BBC /* FileHistoryIterator.swift in Sources */,\n\t\t\t\tD79F92121FA8B9E2008C297E /* PreviewTextField.swift in Sources */,\n\t\t\t\tD792297621A845B4005F468F /* ProjectSettingsViewController.swift in Sources */,\n\t\t\t\tD7315ED6215ED95600AB49D4 /* NSAppearance+.swift in Sources */,\n\t\t\t\tD7DA9E2221033489001CF0BE /* NSMutableAttributedString+.swift in Sources */,\n\t\t\t\tD73BCCE728EB5EC4008B3BBC /* Index+Files.swift in Sources */,\n\t\t\t\tD73BCCD528EB5EC4008B3BBC /* Remotes.swift in Sources */,\n\t\t\t\tD73BCCD228EB5EC4008B3BBC /* Remote.swift in Sources */,\n\t\t\t\tD7CB9906207E5AE300037E91 /* SidebarTableRowView.swift in Sources */,\n\t\t\t\tD73BCC8D28EB5EC3008B3BBC /* Commit.swift in Sources */,\n\t\t\t\tD7BA204D2186E3DD0064824B /* TitleBarView.swift in Sources */,\n\t\t\t\t11F3F4842EDB0E0B00435CBF /* URL+.swift in Sources */,\n\t\t\t\tD730BD2B222BF32A00E69C93 /* KeychainPasswordItem.swift in Sources */,\n\t\t\t\tD796EB42251E127300CE5C80 /* Pasteboard.swift in Sources */,\n\t\t\t\tD75EE7F82078B22D0055F159 /* SidebarItem.swift in Sources */,\n\t\t\t\tD73BCCC328EB5EC3008B3BBC /* DiffEntry.swift in Sources */,\n\t\t\t\tD7A65C5A20F11C38003E5ADC /* LanguageType.swift in Sources */,\n\t\t\t\tD77E0536246312B200AD7772 /* StorageType.swift in Sources */,\n\t\t\t\tD7BB2DFF29A0157700D5055A /* Storage+Git.swift in Sources */,\n\t\t\t\tD7EDEDFC219203C9000B8C1A /* NoteCellView+.swift in Sources */,\n\t\t\t\t113A31A32EEE2D47009B50B0 /* Note+Preview.swift in Sources */,\n\t\t\t\tD75EE8012078E0C60055F159 /* SidebarItemType.swift in Sources */,\n\t\t\t\tD73BCCF028EB5EC4008B3BBC /* Head+Merge.swift in Sources */,\n\t\t\t\tD7E81C2E1F925B5F00416A91 /* PrefsWindowController.swift in Sources */,\n\t\t\t\tD783B506208A1BFD00328A41 /* EditorSplitView.swift in Sources */,\n\t\t\t\tD7B4AC5F2471253100F3888A /* NoteMeta.swift in Sources */,\n\t\t\t\t11BD8F922EDDEC3D000673A7 /* GitHubDark.swift in Sources */,\n\t\t\t\t11D6C0C82EE2256B006017F0 /* Python.swift in Sources */,\n\t\t\t\tD730BD28222BF30700E69C93 /* KeychainConfiguration.swift in Sources */,\n\t\t\t\tD7487FD721738A1800D09383 /* NSImage+.swift in Sources */,\n\t\t\t\t11D9431B2E643EF40010CC2B /* JavaScript.swift in Sources */,\n\t\t\t\t110BE0252EE8C5B000C5E456 /* Lisp.swift in Sources */,\n\t\t\t\tD7E81C2F1F925B5F00416A91 /* ViewController.swift in Sources */,\n\t\t\t\tD75EE7FB2078B3C00055F159 /* Sidebar.swift in Sources */,\n\t\t\t\tD726DE8B287ACC1E00F8406C /* NSWindow+.swift in Sources */,\n\t\t\t\tD7E81C301F925B5F00416A91 /* FileWatcher.swift in Sources */,\n\t\t\t\tD73BCCC928EB5EC4008B3BBC /* KeyAuthentication.swift in Sources */,\n\t\t\t\tD7F5C0F9223ED57D0038F172 /* PreferencesSecurityViewController.swift in Sources */,\n\t\t\t\t11F018B32EF8415600F07580 /* MPreviewContainerView.swift in Sources */,\n\t\t\t\tD73BCCE428EB5EC4008B3BBC /* Index+Commit.swift in Sources */,\n\t\t\t\t11D6C0FC2EE22E00006017F0 /* Assembly.swift in Sources */,\n\t\t\t\tD7680FB325D02B2C00810DA8 /* FileManager+.swift in Sources */,\n\t\t\t\tD79C26262872384C00CB70E6 /* EditorViewController+Sharing.swift in Sources */,\n\t\t\t\tD77F89E028D38B5E00BECC87 /* ViewController+Web.swift in Sources */,\n\t\t\t\tD73BCD0228EB5EC4008B3BBC /* Repository+Lookup.swift in Sources */,\n\t\t\t\tD7E51714220D814D00A9CAD9 /* UTI.swift in Sources */,\n\t\t\t\tD71B9D872868BF7F00D2F323 /* TextStorageProcessor.swift in Sources */,\n\t\t\t\t11BD8FA42EDE024D000673A7 /* AtomOneDark.swift in Sources */,\n\t\t\t\tD730829323084340003185D1 /* MPreviewView.swift in Sources */,\n\t\t\t\tD7E81C321F925B5F00416A91 /* PrefsViewController.swift in Sources */,\n\t\t\t\tD70B1FAC29213EE0003923DC /* HyperlinkTextField.swift in Sources */,\n\t\t\t\t11D6C0EB2EE22C6B006017F0 /* Ruby.swift in Sources */,\n\t\t\t\t11A6A8FE2EF074D8005D000A /* EditTextView+Todo.swift in Sources */,\n\t\t\t\tD76025B3204EEF64000B9F59 /* TextFormatter.swift in Sources */,\n\t\t\t\t1166D1F82E91BA8800B061CA /* CodeBlockDetector.swift in Sources */,\n\t\t\t\t11D6C0D82EE229E9006017F0 /* Go.swift in Sources */,\n\t\t\t\t11BD8F9F2EDE0235000673A7 /* AtomOneLight.swift in Sources */,\n\t\t\t\t11D702AE2E5B8E0C004DBAEC /* HtmlExtractor.swift in Sources */,\n\t\t\t\tD7D1DE69216D05A800AC1845 /* NameTextField.swift in Sources */,\n\t\t\t\tD7038E2720FB24E000A54E69 /* NoteAttachment.swift in Sources */,\n\t\t\t\tD7CA7FD5232652E300E9717A /* PreferencesGitViewController.swift in Sources */,\n\t\t\t\tD7CD5CCC21820B7A0009D63B /* UserDefaultsManagement+.swift in Sources */,\n\t\t\t\tD7E81C331F925B5F00416A91 /* UserDefaultsManagement.swift in Sources */,\n\t\t\t\t11D943232E643F410010CC2B /* Php.swift in Sources */,\n\t\t\t\tD7E81C341F925B5F00416A91 /* EditTextView.swift in Sources */,\n\t\t\t\tD7E81C361F925B5F00416A91 /* AppDelegate.swift in Sources */,\n\t\t\t\tD73BCCE128EB5EC4008B3BBC /* Index.swift in Sources */,\n\t\t\t\tD7CDE9DD2161767B00DC5978 /* AppearanceType.swift in Sources */,\n\t\t\t\t11ABE5E32EEEFD0E00E7C9EB /* NotesCounterView.swift in Sources */,\n\t\t\t\tD7D372F8207BB09500AFBD9F /* SidebarOutlineView.swift in Sources */,\n\t\t\t\tD74DFBAC21661BA300F67D64 /* Date+.swift in Sources */,\n\t\t\t\t1136855C2EC7A6A50033767F /* Platform.swift in Sources */,\n\t\t\t\tD7F5C0F0223ED0570038F172 /* PreferencesGeneralViewController.swift in Sources */,\n\t\t\t\t11BD8F962EDDF32E000673A7 /* SolarizedLight.swift in Sources */,\n\t\t\t\tD7470D082170E890006B2A92 /* NSTextStorage++.swift in Sources */,\n\t\t\t\tD7CCEDBA2C6BA2F300A3BB83 /* ClickableTextField.swift in Sources */,\n\t\t\t\tD72682AB29BE8E2000F6E961 /* RepositoryAction.swift in Sources */,\n\t\t\t\t11D702A62E5ADDED004DBAEC /* LayoutManager.swift in Sources */,\n\t\t\t\tD73BCCFC28EB5EC4008B3BBC /* Repository.swift in Sources */,\n\t\t\t\tD73BCCC628EB5EC4008B3BBC /* Diff.swift in Sources */,\n\t\t\t\tD73BCCB428EB5EC3008B3BBC /* TagIterator.swift in Sources */,\n\t\t\t\tD73BCCDE28EB5EC4008B3BBC /* StatusIterator.swift in Sources */,\n\t\t\t\tD73BCCA228EB5EC3008B3BBC /* Wrapper.swift in Sources */,\n\t\t\t\tD7E81C371F925B5F00416A91 /* NoteRowView.swift in Sources */,\n\t\t\t\t110E40A42EA039CE00C62F49 /* EditTextView+DragOperation.swift in Sources */,\n\t\t\t\tD772C8852217362C007E440B /* ViewController+Print.swift in Sources */,\n\t\t\t\tD7E81C381F925B5F00416A91 /* Storage.swift in Sources */,\n\t\t\t\tD73BCD0B28EB5EC4008B3BBC /* Reference+Target.swift in Sources */,\n\t\t\t\tD7CC44C72A1E5F7600743857 /* ApiResponse.swift in Sources */,\n\t\t\t\t11AA4B202EF9A47A0075A9E4 /* EditorViewController+ScrollPosition.swift in Sources */,\n\t\t\t\tD73BCC9028EB5EC3008B3BBC /* Branch.swift in Sources */,\n\t\t\t\t110BE01D2EE8C3BE00C5E456 /* Shell.swift in Sources */,\n\t\t\t\tD73BCCBD28EB5EC3008B3BBC /* RevisionIterator.swift in Sources */,\n\t\t\t\t11D6C0D02EE2279E006017F0 /* Cpp.swift in Sources */,\n\t\t\t\t11D6C0D52EE227F9006017F0 /* Java.swift in Sources */,\n\t\t\t\tD7487FEC2174E62B00D09383 /* NSAttributedStringKey+.swift in Sources */,\n\t\t\t\tD77AD7FD27F9D1C90077BD45 /* Data+.swift in Sources */,\n\t\t\t\t11BF06762EE49546006C7336 /* Lua.swift in Sources */,\n\t\t\t\tD7679377201F0BFD000F7BBF /* SortBy.swift in Sources */,\n\t\t\t\tD7E81C391F925B5F00416A91 /* FileWatcherEvent.swift in Sources */,\n\t\t\t\t11D6C1052EE22E8F006017F0 /* Groovy.swift in Sources */,\n\t\t\t\tD73BCCEA28EB5EC4008B3BBC /* Head+Checkout.swift in Sources */,\n\t\t\t\tD73BCCCF28EB5EC4008B3BBC /* PasswordAuthentication.swift in Sources */,\n\t\t\t\tD7D7CD3B232774BC0016AC15 /* ViewController+Git.swift in Sources */,\n\t\t\t\tD7BCF036296B0DAA00F72A4F /* AboutImageView.swift in Sources */,\n\t\t\t\tD7013E0126C3B116006F58E3 /* NSColor+.swift in Sources */,\n\t\t\t\tD7315ED0215ECF3000AB49D4 /* EditorView.swift in Sources */,\n\t\t\t\tD7E81C3A1F925B5F00416A91 /* NotesTableView.swift in Sources */,\n\t\t\t\tD7A9C1D72910784400905619 /* Project+Git.swift in Sources */,\n\t\t\t\tD7153DFE2285A93300A2C20F /* AboutWindowController.swift in Sources */,\n\t\t\t\t11F2D4F52F104322002E4E47 /* Project+Date.swift in Sources */,\n\t\t\t\tD74D47A0256DF2EB00D97647 /* FSNTextAttachmentCell.swift in Sources */,\n\t\t\t\t11BD8F9A2EDDF336000673A7 /* SolarizedDark.swift in Sources */,\n\t\t\t\tD77CC042216A608500582B97 /* EditorScrollView.swift in Sources */,\n\t\t\t\t110BE0222EE8C53C00C5E456 /* TypeScript.swift in Sources */,\n\t\t\t\t110BE0132EE86B4A00C5E456 /* Clojure.swift in Sources */,\n\t\t\t\t11A6A8FB2EF06B9D005D000A /* EditTextView+MoveLines.swift in Sources */,\n\t\t\t\tD7767C7F234E47B9006A0716 /* Markdown.swift in Sources */,\n\t\t\t\tD7E81C3D1F925B5F00416A91 /* SandboxBookmark.swift in Sources */,\n\t\t\t\tD7487F922173503C00D09383 /* AttributedBox.swift in Sources */,\n\t\t\t\tD730BD3D222DB9FC00E69C93 /* NameHelper.swift in Sources */,\n\t\t\t\tD7153E062285C09C00A2C20F /* AboutViewController.swift in Sources */,\n\t\t\t\tD73BCCBA28EB5EC3008B3BBC /* Tag.swift in Sources */,\n\t\t\t\t11BF066C2EE331B5006C7336 /* Scala.swift in Sources */,\n\t\t\t\t11D6C0F42EE22D3B006017F0 /* Dart.swift in Sources */,\n\t\t\t\tD768D75D245ED6470028F344 /* VerticallyAlignedTextFieldCell.swift in Sources */,\n\t\t\t\tD7F5C0FC223ED58F0038F172 /* PreferencesAdvancedViewController.swift in Sources */,\n\t\t\t\tD7CC44C22A1E5E4F00743857 /* ViewController+WebApi.swift in Sources */,\n\t\t\t\tD7E81C3F1F925B5F00416A91 /* NSFont+.swift in Sources */,\n\t\t\t\t110BE0162EE8C1C900C5E456 /* Html.swift in Sources */,\n\t\t\t\t11D6C0DF2EE22B77006017F0 /* Csharp.swift in Sources */,\n\t\t\t\t11F389572EEA10930008EC18 /* Mermaid.swift in Sources */,\n\t\t\t\tD7E81C411F925B5F00416A91 /* SearchTextField.swift in Sources */,\n\t\t\t\t11F018AD2EF7E78600F07580 /* MPreviewFindPanel.swift in Sources */,\n\t\t\t\tD7F5C0F3223ED0C00038F172 /* PreferencesUserInterfaceViewController.swift in Sources */,\n\t\t\t\tD73BCC9F28EB5EC3008B3BBC /* Error.swift in Sources */,\n\t\t\t\tD768D758245E86670028F344 /* NSAttributedString+.swift in Sources */,\n\t\t\t\tD73BCCFF28EB5EC4008B3BBC /* Repository+Open.swift in Sources */,\n\t\t\t\tD73BCCF928EB5EC4008B3BBC /* RepositoryManager.swift in Sources */,\n\t\t\t\tD7E81C421F925B5F00416A91 /* MainWindowController.swift in Sources */,\n\t\t\t\tD71B9D832868658100D2F323 /* EditorViewController.swift in Sources */,\n\t\t\t\tD73BCCED28EB5EC4008B3BBC /* Head.swift in Sources */,\n\t\t\t\t11D6C0F02EE22CBC006017F0 /* Matlab.swift in Sources */,\n\t\t\t\tD73BCCD828EB5EC4008B3BBC /* Statuses.swift in Sources */,\n\t\t\t\tD77A6F8028B11496006A0353 /* PreferencesWebViewController.swift in Sources */,\n\t\t\t\tD72DAF0929B27D75001243BB /* ProjectSettings.swift in Sources */,\n\t\t\t\tD7F5C0F6223ED5620038F172 /* PreferencesEditorViewController.swift in Sources */,\n\t\t\t\tD73BCCA528EB5EC3008B3BBC /* Progress.swift in Sources */,\n\t\t\t\t113685622EC869950033767F /* URL+Image.swift in Sources */,\n\t\t\t\t11D943202E643F250010CC2B /* Swift.swift in Sources */,\n\t\t\t\t11BF06802EE4968C006C7336 /* Erlang.swift in Sources */,\n\t\t\t\tD73BCCB728EB5EC3008B3BBC /* Tags.swift in Sources */,\n\t\t\t\tD738356E2242871400B260DD /* MasterPasswordViewController.swift in Sources */,\n\t\t\t\t11BF066F2EE33201006C7336 /* Bash.swift in Sources */,\n\t\t\t\tD7C1C99B235606CB0021A32D /* SidebarHeaderCellView.swift in Sources */,\n\t\t\t\tD7104A65230BD8C500B6D8EE /* SortDirection.swift in Sources */,\n\t\t\t\tD75627CF26D1165A000AF6EA /* ImageFormat.swift in Sources */,\n\t\t\t\t11BD8FA62EDE0683000673A7 /* Theme.swift in Sources */,\n\t\t\t\t11D6C0DB2EE22B0F006017F0 /* Rust.swift in Sources */,\n\t\t\t\tD7E81C441F925B5F00416A91 /* NoteCellView.swift in Sources */,\n\t\t\t\tD78678CC2093AE10001A6620 /* UndoData.swift in Sources */,\n\t\t\t\tD7E32C2D28F8D0750048614B /* StaticSshKeyDelegate.swift in Sources */,\n\t\t\t\t11F3F4862EDB0E2A00435CBF /* String+.swift in Sources */,\n\t\t\t\tD7C9029323547A1E00A89BD8 /* FSTag.swift in Sources */,\n\t\t\t\tD730BD2F222DABA100E69C93 /* NoteContainer.swift in Sources */,\n\t\t\t\tD730BD36222DB11E00E69C93 /* TextBundleInfo.swift in Sources */,\n\t\t\t\t11F1771B2EF1E93500CC566F /* ViewController+Menu.swift in Sources */,\n\t\t\t\tD7E81C461F925B5F00416A91 /* Note.swift in Sources */,\n\t\t\t\tD73BCCA828EB5EC3008B3BBC /* Blob.swift in Sources */,\n\t\t\t\tD7153E0A2285EC6100A2C20F /* TitleTextField.swift in Sources */,\n\t\t\t\tD7D372F5207B5B0F00AFBD9F /* SidebarNotesView.swift in Sources */,\n\t\t\t\t1161828E2E637E31005B5EE0 /* SwiftHighlighter.swift in Sources */,\n\t\t\t\t110E40A22EA0150300C62F49 /* NSTextCheckingResult+.swift in Sources */,\n\t\t\t\t11D6C1012EE22E4A006017F0 /* Scratch.swift in Sources */,\n\t\t\t\tD73BCC9328EB5EC3008B3BBC /* Branches.swift in Sources */,\n\t\t\t\t11D6C0F72EE22D78006017F0 /* Vb.swift in Sources */,\n\t\t\t\tD79798A329C0FE6A00B9A878 /* SettingsViewController.swift in Sources */,\n\t\t\t\tD79651B22517741400333AD4 /* ProgressState.swift in Sources */,\n\t\t\t\tD792DD9727A6D71C006ADC01 /* String+Punycode.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tD70B1FA52920DA6A003923DC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = D70B1FA42920DA6A003923DC /* SoulverCore */;\n\t\t};\n\t\tD70B1FA72920DA73003923DC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tproductRef = D70B1FA62920DA73003923DC /* SoulverCore */;\n\t\t};\n\t\tD75F333F205EC34800CC887E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = D75F3335205EC34800CC887E /* FSNotes iOS Share Extension */;\n\t\t\ttargetProxy = D75F333E205EC34800CC887E /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tD7793C781F211C6000CA39B7 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tD7793C791F211C6000CA39B7 /* Base */,\n\t\t\t\t42E001CD2ADAC2930099E7AD /* mul */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tD75F3342205EC34800CC887E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 484D580095FCD450AE46554D /* Pods-FSNotes iOS Share Extension.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"FSNotes iOS Share/FSNotes iOS Share.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 332;\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tINFOPLIST_FILE = \"FSNotes iOS Share/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 18.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\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 7.1.2;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"co.fluder.mobile.FSNotes-iOS.FSNotes-iOS-Share\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = SHARE_EXT;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD75F3343205EC34800CC887E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 781ADC8297B1AC61D8E278F6 /* Pods-FSNotes iOS Share Extension.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"FSNotes iOS Share/FSNotes iOS Share.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 332;\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tINFOPLIST_FILE = \"FSNotes iOS Share/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 18.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\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 7.1.2;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"co.fluder.mobile.FSNotes-iOS.FSNotes-iOS-Share\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = SHARE_EXT;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD7679399201F21F5000F7BBF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E73B6900CD2E14B0D5E51599 /* Pods-FSNotes iOS.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = \"\";\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = modern;\n\t\t\t\tASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"FSNotes iOS/FSNotes iOS.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 332;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tINFOPLIST_FILE = \"FSNotes iOS/Info.plist\";\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.productivity\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 18.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\tMARKETING_VERSION = 7.1.2;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"co.fluder.mobile.FSNotes-iOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"CLOUD_RELATED_BLOCK IOS_APP\";\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_ENABLE_BATCH_MODE = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD767939A201F21F5000F7BBF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4796D64E77383E6A5A3F900B /* Pods-FSNotes iOS.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = \"\";\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = modern;\n\t\t\t\tASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;\n\t\t\t\tCFNETWORK_DIAGNOSTICS = 1;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"FSNotes iOS/FSNotes iOS.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 332;\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tINFOPLIST_FILE = \"FSNotes iOS/Info.plist\";\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.productivity\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 18.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\tMARKETING_VERSION = 7.1.2;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"co.fluder.mobile.FSNotes-iOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"CLOUD_RELATED_BLOCK IOS_APP\";\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_ENABLE_BATCH_MODE = NO;\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\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD7793C931F211C6000CA39B7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_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_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"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_DEPRECATED_FUNCTIONS = 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 = 12.0;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD7793C941F211C6000CA39B7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_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_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = YES;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\t\"GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]\" = \"\";\n\t\t\t\t\"GCC_PREPROCESSOR_DEFINITIONS[sdk=macosx*]\" = \"\";\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = 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 = 12.0;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD7793C961F211C6000CA39B7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 365935BA74CEA7B5CAFAB536 /* Pods-FSNotes.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = FSNotes/FSNotes.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tEMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_ON_DEMAND_RESOURCES = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = FSNotes/Info.plist;\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\tMACOSX_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = co.fluder.FSNotes;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD7793C971F211C6000CA39B7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9EA62EEDB6BE9BF8727E66E0 /* Pods-FSNotes.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = FSNotes/FSNotes.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"3rd Party Mac Developer Application\";\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEPLOYMENT_LOCATION = NO;\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tEMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;\n\t\t\t\tENABLE_ON_DEMAND_RESOURCES = NO;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = FSNotes/Info.plist;\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\tMACOSX_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = co.fluder.FSNotes;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"MAS Distribution\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD7E81C581F925B5F00416A91 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 62E7ACC8B47FFD05898BD354 /* Pods-FSNotes (iCloud).debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = modern;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"FSNotes/FSNotes (CloudKit).entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 706;\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tEMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_ON_DEMAND_RESOURCES = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = FSNotes/Info.plist;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.productivity\";\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\tMACOSX_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tMARKETING_VERSION = 7.1.1;\n\t\t\t\tOTHER_SWIFT_FLAGS = \"$(inherited)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = co.fluder.FSNotes;\n\t\t\t\tPRODUCT_NAME = FSNotes;\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = CLOUD_RELATED_BLOCK;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD7E81C591F925B5F00416A91 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = EF024607824ECBF0AE378D65 /* Pods-FSNotes (iCloud).release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = modern;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"FSNotes/FSNotes (CloudKit).entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 706;\n\t\t\t\tDEPLOYMENT_LOCATION = NO;\n\t\t\t\tDEVELOPMENT_TEAM = 866P6MTE92;\n\t\t\t\tEMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_ON_DEMAND_RESOURCES = NO;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = FSNotes/Info.plist;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.productivity\";\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\tMACOSX_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tMARKETING_VERSION = 7.1.1;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = co.fluder.FSNotes;\n\t\t\t\tPRODUCT_NAME = FSNotes;\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = CLOUD_RELATED_BLOCK;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\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\tD75F3341205EC34800CC887E /* Build configuration list for PBXNativeTarget \"FSNotes iOS Share Extension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD75F3342205EC34800CC887E /* Debug */,\n\t\t\t\tD75F3343205EC34800CC887E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD7679398201F21F5000F7BBF /* Build configuration list for PBXNativeTarget \"FSNotes iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD7679399201F21F5000F7BBF /* Debug */,\n\t\t\t\tD767939A201F21F5000F7BBF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD7793C6A1F211C6000CA39B7 /* Build configuration list for PBXProject \"FSNotes\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD7793C931F211C6000CA39B7 /* Debug */,\n\t\t\t\tD7793C941F211C6000CA39B7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD7793C951F211C6000CA39B7 /* Build configuration list for PBXNativeTarget \"FSNotes\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD7793C961F211C6000CA39B7 /* Debug */,\n\t\t\t\tD7793C971F211C6000CA39B7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD7E81C571F925B5F00416A91 /* Build configuration list for PBXNativeTarget \"FSNotes (iCloud)\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD7E81C581F925B5F00416A91 /* Debug */,\n\t\t\t\tD7E81C591F925B5F00416A91 /* 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 XCRemoteSwiftPackageReference section */\n\t\tD70B1FA12920D91A003923DC /* XCRemoteSwiftPackageReference \"SoulverCore\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/soulverteam/SoulverCore\";\n\t\t\trequirement = {\n\t\t\t\tkind = upToNextMinorVersion;\n\t\t\t\tminimumVersion = 2.2.0;\n\t\t\t};\n\t\t};\n\t\tD7B4CC5428C7B8860046A25F /* XCRemoteSwiftPackageReference \"swift-git\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/glushchenko/swift-git\";\n\t\t\trequirement = {\n\t\t\t\tkind = revision;\n\t\t\t\trevision = 7b2f3af96c6947308b4f0b4ae02302fd47a5eff2;\n\t\t\t};\n\t\t};\n\t\tD7D2F27C2B54BD42003DCA47 /* XCRemoteSwiftPackageReference \"Shout\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/glushchenko/Shout\";\n\t\t\trequirement = {\n\t\t\t\tbranch = master;\n\t\t\t\tkind = branch;\n\t\t\t};\n\t\t};\n/* End XCRemoteSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\tD70B1FA42920DA6A003923DC /* SoulverCore */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D70B1FA12920D91A003923DC /* XCRemoteSwiftPackageReference \"SoulverCore\" */;\n\t\t\tproductName = SoulverCore;\n\t\t};\n\t\tD70B1FA62920DA73003923DC /* SoulverCore */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D70B1FA12920D91A003923DC /* XCRemoteSwiftPackageReference \"SoulverCore\" */;\n\t\t\tproductName = SoulverCore;\n\t\t};\n\t\tD70F830328CE858E004818C5 /* Git */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D7B4CC5428C7B8860046A25F /* XCRemoteSwiftPackageReference \"swift-git\" */;\n\t\t\tproductName = Git;\n\t\t};\n\t\tD70F830528CE8596004818C5 /* Git */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D7B4CC5428C7B8860046A25F /* XCRemoteSwiftPackageReference \"swift-git\" */;\n\t\t\tproductName = Git;\n\t\t};\n\t\tD7A9C1DA29107A0800905619 /* Git */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D7B4CC5428C7B8860046A25F /* XCRemoteSwiftPackageReference \"swift-git\" */;\n\t\t\tproductName = Git;\n\t\t};\n\t\tD7D2F27D2B54BD42003DCA47 /* Shout */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D7D2F27C2B54BD42003DCA47 /* XCRemoteSwiftPackageReference \"Shout\" */;\n\t\t\tproductName = Shout;\n\t\t};\n\t\tD7D2F27F2B54BDD4003DCA47 /* Shout */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D7D2F27C2B54BD42003DCA47 /* XCRemoteSwiftPackageReference \"Shout\" */;\n\t\t\tproductName = Shout;\n\t\t};\n\t\tD7D2F2812B54BE59003DCA47 /* Shout */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D7D2F27C2B54BD42003DCA47 /* XCRemoteSwiftPackageReference \"Shout\" */;\n\t\t\tproductName = Shout;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\t};\n\trootObject = D7793C671F211C6000CA39B7 /* Project object */;\n}\n"
  },
  {
    "path": "FSNotes.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:FSNotes.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSNotes.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": "FSNotes.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>BuildSystemType</key>\n\t<string>Original</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSNotes.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved",
    "content": "{\n  \"originHash\" : \"2d1aa1f63d518360e031de3fb441c9f901a838fdc4472b5c997db08bea05709c\",\n  \"pins\" : [\n    {\n      \"identity\" : \"bluesocket\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/IBM-Swift/BlueSocket\",\n      \"state\" : {\n        \"revision\" : \"7b23a867008e0027bfd6f4d398d44720707bc8ca\",\n        \"version\" : \"2.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"libssh2prebuild\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/glushchenko/Libssh2Prebuild.git\",\n      \"state\" : {\n        \"revision\" : \"024c2cf73e0b47deeea92a1176998f48f98ff4df\",\n        \"version\" : \"1.11.0-OpenSSL-1-1-1u\"\n      }\n    },\n    {\n      \"identity\" : \"shout\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/glushchenko/Shout\",\n      \"state\" : {\n        \"branch\" : \"master\",\n        \"revision\" : \"d733c3e6d3c3d7d44e08489e2dc21eff50a61a0e\"\n      }\n    },\n    {\n      \"identity\" : \"swift-cgit2\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/glushchenko/swift-cgit2\",\n      \"state\" : {\n        \"revision\" : \"ab1a18d82002b185c1c73b0daaa4174bb6b4f29c\",\n        \"version\" : \"1.2.2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-git\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/glushchenko/swift-git\",\n      \"state\" : {\n        \"revision\" : \"7b2f3af96c6947308b4f0b4ae02302fd47a5eff2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-system\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-system\",\n      \"state\" : {\n        \"revision\" : \"39774ef16a6d91dee6f666b940e00ea202710cf7\",\n        \"version\" : \"0.0.3\"\n      }\n    }\n  ],\n  \"version\" : 3\n}\n"
  },
  {
    "path": "FSNotes.xcodeproj/xcshareddata/xcschemes/FSNotes (iCloud).xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D7E81C2B1F925B5F00416A91\"\n               BuildableName = \"FSNotes.app\"\n               BlueprintName = \"FSNotes (iCloud)\"\n               ReferencedContainer = \"container:FSNotes.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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D7E81C2B1F925B5F00416A91\"\n            BuildableName = \"FSNotes.app\"\n            BlueprintName = \"FSNotes (iCloud)\"\n            ReferencedContainer = \"container:FSNotes.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      enableAddressSanitizer = \"YES\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      enableGPUValidationMode = \"1\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D7E81C2B1F925B5F00416A91\"\n            BuildableName = \"FSNotes.app\"\n            BlueprintName = \"FSNotes (iCloud)\"\n            ReferencedContainer = \"container:FSNotes.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"CG_CONTEXT_SHOW_BACKTRACE\"\n            value = \"YES\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n         <EnvironmentVariable\n            key = \"IDELogRedirectionPolicy\"\n            value = \"oslogToStdio\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\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 = \"D7E81C2B1F925B5F00416A91\"\n            BuildableName = \"FSNotes.app\"\n            BlueprintName = \"FSNotes (iCloud)\"\n            ReferencedContainer = \"container:FSNotes.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": "FSNotes.xcodeproj/xcshareddata/xcschemes/FSNotes iOS Share Extension.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1140\"\n   wasCreatedForAppExtension = \"YES\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D75F3335205EC34800CC887E\"\n               BuildableName = \"FSNotes iOS Share Extension.appex\"\n               BlueprintName = \"FSNotes iOS Share Extension\"\n               ReferencedContainer = \"container:FSNotes.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D7679385201F21F5000F7BBF\"\n               BuildableName = \"FSNotes iOS.app\"\n               BlueprintName = \"FSNotes iOS\"\n               ReferencedContainer = \"container:FSNotes.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      askForAppToLaunch = \"Yes\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D7679385201F21F5000F7BBF\"\n            BuildableName = \"FSNotes iOS.app\"\n            BlueprintName = \"FSNotes iOS\"\n            ReferencedContainer = \"container:FSNotes.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D7679385201F21F5000F7BBF\"\n            BuildableName = \"FSNotes iOS.app\"\n            BlueprintName = \"FSNotes iOS\"\n            ReferencedContainer = \"container:FSNotes.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": "FSNotes.xcodeproj/xcshareddata/xcschemes/FSNotes iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1140\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D7679385201F21F5000F7BBF\"\n               BuildableName = \"FSNotes iOS.app\"\n               BlueprintName = \"FSNotes iOS\"\n               ReferencedContainer = \"container:FSNotes.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      disablePerformanceAntipatternChecker = \"YES\"\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 = \"D7679385201F21F5000F7BBF\"\n            BuildableName = \"FSNotes iOS.app\"\n            BlueprintName = \"FSNotes iOS\"\n            ReferencedContainer = \"container:FSNotes.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"DYLD_PRINT_STATISTICS\"\n            value = \"1\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n         <EnvironmentVariable\n            key = \"IDEPreferLogStreaming\"\n            value = \"NO\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\n      <LocationScenarioReference\n         identifier = \"com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier\"\n         referenceType = \"1\">\n      </LocationScenarioReference>\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 = \"D7679385201F21F5000F7BBF\"\n            BuildableName = \"FSNotes iOS.app\"\n            BlueprintName = \"FSNotes iOS\"\n            ReferencedContainer = \"container:FSNotes.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": "FSNotes.xcodeproj/xcshareddata/xcschemes/FSNotes.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D7793C6E1F211C6000CA39B7\"\n               BuildableName = \"FSNotes.app\"\n               BlueprintName = \"FSNotes\"\n               ReferencedContainer = \"container:FSNotes.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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D7793C6E1F211C6000CA39B7\"\n            BuildableName = \"FSNotes.app\"\n            BlueprintName = \"FSNotes\"\n            ReferencedContainer = \"container:FSNotes.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\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 = \"D7793C6E1F211C6000CA39B7\"\n            BuildableName = \"FSNotes.app\"\n            BlueprintName = \"FSNotes\"\n            ReferencedContainer = \"container:FSNotes.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <EnvironmentVariables>\n         <EnvironmentVariable\n            key = \"IDELogRedirectionPolicy\"\n            value = \"oslogToStdio\"\n            isEnabled = \"YES\">\n         </EnvironmentVariable>\n      </EnvironmentVariables>\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 = \"D7793C6E1F211C6000CA39B7\"\n            BuildableName = \"FSNotes.app\"\n            BlueprintName = \"FSNotes\"\n            ReferencedContainer = \"container:FSNotes.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": "FSNotes.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:FSNotes.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSNotesCore/Business/ApiResponse.swift",
    "content": "//\n//  ApiResponse.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 24.05.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nstruct APIResponse: Codable {\n    var id: String?\n    var error: String?\n}\n"
  },
  {
    "path": "FSNotesCore/Business/AppearanceType.swift",
    "content": "//\n//  AppearanceType.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/1/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic enum AppearanceType: Int {\n    case System = 0x00\n    case Light = 0x01\n    case Dark = 0x02\n}\n"
  },
  {
    "path": "FSNotesCore/Business/AttributedBox.swift",
    "content": "//\n//  AttributedBox.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/30/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(iOS)\n    import UIKit\n#else\n    import Cocoa\n#endif\n\nclass AttributedBox {\n    public static func getChecked(clean: Bool = false) -> NSMutableAttributedString? {\n        let checkboxText = getCleanChecked()\n        if clean {\n            return checkboxText\n        }\n        \n        checkboxText.append(NSAttributedString(string: \" \"))\n\n        return checkboxText\n    }\n\n    public static func getUnChecked(clean: Bool = false) -> NSMutableAttributedString? {\n        let checkboxText = getCleanUnchecked()\n        if clean {\n            return checkboxText\n        }\n        \n        checkboxText.append(NSAttributedString(string: \" \"))\n\n        return checkboxText\n    }\n\n    public static func getCleanUnchecked() -> NSMutableAttributedString {\n        let font = NotesTextProcessor.font\n        let size = font.pointSize + 3\n        let image = getImage(name: \"checkbox_empty\")\n        let attachment = NSTextAttachment()\n        attachment.image = image\n        attachment.bounds = CGRect(x: CGFloat(0), y: (font.capHeight - size) / 2, width: size, height: size)\n\n        let checkboxText = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))\n\n        checkboxText.addAttribute(.todo, value: 0, range: NSRange(0..<1))\n\n        if #available(OSX 10.13, iOS 10.0, *) {\n        } else {\n            let offset = (font.capHeight - size) / 2\n            checkboxText.addAttribute(.baselineOffset, value: offset, range: NSRange(0..<1))\n        }\n\n        let parStyle = NSMutableParagraphStyle()\n        parStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        checkboxText.addAttribute(.paragraphStyle, value: parStyle, range: NSRange(0..<1))\n\n        return checkboxText\n    }\n\n    public static func getCleanChecked() -> NSMutableAttributedString {\n        let font = NotesTextProcessor.font\n        let size = font.pointSize + 3\n        let attachment = NSTextAttachment()\n        let image = getImage(name: \"checkbox\")\n        attachment.image = image\n        attachment.bounds = CGRect(x: CGFloat(0), y: (font.capHeight - size) / 2, width: size, height: size)\n\n        let checkboxText = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))\n\n        checkboxText.addAttribute(.todo, value: 1, range: NSRange(0..<1))\n\n        if #available(OSX 10.13, iOS 10.0, *) {\n        } else {\n            let offset = (font.capHeight - size) / 2\n            checkboxText.addAttribute(.baselineOffset, value: offset, range: NSRange(0..<1))\n        }\n\n        let parStyle = NSMutableParagraphStyle()\n        parStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        checkboxText.addAttribute(.paragraphStyle, value: parStyle, range: NSRange(0..<1))\n\n        return checkboxText\n    }\n\n    public static func getImage(name: String) -> Image {\n        var name = name\n\n        #if os(OSX)\n            if name == \"checkbox\" {\n                if #available(OSX 10.15, *) {\n                    name = \"checkbox_new\"\n                } else {\n                    name = \"checkbox_flipped\"\n                }\n            }\n            return NSImage(named: name)!\n        #else\n            return UIImage(named: name)!\n        #endif\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/FSTag.swift",
    "content": "//\n//  Tag.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 14.10.2019.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass FSTag {\n    public var name: String\n    public var parent: FSTag?\n\n    public var child = [FSTag]()\n\n    init(name: String, parent: FSTag? = nil) {\n        self.name = name\n        self.parent = parent\n\n        let tags = name.components(separatedBy: \"/\")\n        if tags.count > 1, let parent = tags.first {\n            addChild(name: tags.dropFirst().joined(separator: \"/\"), completion: {(_, _, _) in })\n            self.name = parent\n            return\n        }\n    }\n\n    public func load(name: String) {\n        self.name = name\n\n        let tags = name.components(separatedBy: \"/\")\n        if tags.count > 1, let parent = tags.first {\n            addChild(name: tags.dropFirst().joined(separator: \"/\"), completion: {(_, _, _) in })\n            self.name = parent\n            return\n        }\n    }\n\n    public func isExpandable() -> Bool {\n        return child.count > 0\n    }\n\n    public func addChild(name: String, completion: (_ tag: FSTag, _ isExist: Bool, _ position: Int) -> Void) {\n        let tags = name.components(separatedBy: \"/\")\n\n        if let index = child.firstIndex(where: { $0.name == tags.first }) {\n            completion(child[index], true, index)\n        } else {\n            let newTag = FSTag(name: name, parent: self)\n\n            let index = getChildPosition(for: newTag)\n            child.insert(newTag, at: index)\n            completion(newTag, false, index)\n        }\n    }\n\n    public func getChildPosition(for tag: FSTag) -> Int {\n        var tags = child\n        tags.append(tag)\n\n        let sorted = tags.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })\n        if let index = sorted.firstIndex(where: { $0 === tag }) {\n            return index\n        }\n\n        return 0\n    }\n\n    public func indexOf(child tag: FSTag) -> Int? {\n        return child.firstIndex(where: { $0 === tag })\n    }\n\n    public func remove(by index: Int) {\n        child.remove(at: index)\n    }\n\n    public func removeChild(tag: FSTag) {\n        child.removeAll(where: { $0 === tag })\n    }\n\n    public func removeParent() {\n        parent = nil\n    }\n\n    public func get(name: String) -> FSTag? {\n        var name = name\n        let tags = name.components(separatedBy: \"/\")\n\n        if tags.count > 1, let parent = tags.first {\n            name = parent\n        }\n\n        return child.first(where: { $0.name == name })\n\n    }\n\n    public func getName() -> String {\n        return name\n    }\n\n    public func getFullName() -> String {\n        if let parentTag = parent?.getFullName(), parentTag != \"\" {\n            return \"\\(parentTag)/\\(name)\"\n        }\n\n        if name == NSLocalizedString(\"Tags\", comment: \"Sidebar label\") {\n            return String()\n        }\n\n        return \"\\(name)\"\n    }\n\n    public func find(name: String) -> FSTag? {\n        let tags = name.components(separatedBy: \"/\")\n        let trimmed = tags.dropFirst().joined(separator: \"/\")\n\n        if let child = get(name: trimmed) {\n            if child.name == trimmed {\n                return child\n            }\n\n            return child.find(name: trimmed)\n        }\n\n        return nil\n    }\n\n    public func isAlone() -> Bool {\n        guard let parent = parent else { return false }\n\n        if parent.child.count == 1 {\n            return true\n        }\n\n        return false\n    }\n\n    public func getParent() -> FSTag? {\n        return parent\n    }\n\n    public func hasOneChild() -> Bool {\n        return child.count < 2\n    }\n\n    public func removeAllChild() {\n        if child.count < 2 {\n            child.removeAll()\n        }\n    }\n\n    public func getAllChild() -> [String] {\n        var tags = [String]()\n        tags.append(getFullName())\n\n        var queue = [FSTag]()\n        queue.append(contentsOf: child)\n\n        while queue.count > 0 {\n            for item in queue {\n                tags.append(item.getFullName())\n                if item.child.count > 0 {\n                    queue.append(contentsOf: item.child)\n                }\n                queue.removeAll(where: { $0 === item })\n            }\n\n            if queue.count == 0 {\n                break\n            }\n        }\n\n        return tags\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/ImageFormat.swift",
    "content": "//\n//  ImageFormat.swift\n//\n//  Created by Олександр Глущенко on 08.06.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nenum ImageFormat: String {\n    case png, jpg, gif, tiff, webp, heic, unknown\n}\n\nextension ImageFormat {\n    static func get(from data: Data) -> ImageFormat {\n        switch data[0] {\n        case 0x89:\n            return .png\n        case 0xFF:\n            return .jpg\n        case 0x47:\n            return .gif\n        case 0x49, 0x4D:\n            return .tiff\n        case 0x52 where data.count >= 12:\n            let subdata = data[0...11]\n\n            if let dataString = String(data: subdata, encoding: .ascii),\n                dataString.hasPrefix(\"RIFF\"),\n                dataString.hasSuffix(\"WEBP\")\n            {\n                return .webp\n            }\n\n        case 0x00 where data.count >= 12 :\n            let subdata = data[8...11]\n\n            if let dataString = String(data: subdata, encoding: .ascii),\n                Set([\"heic\", \"heix\", \"hevc\", \"hevx\"]).contains(dataString)\n                ///OLD: \"ftypheic\", \"ftypheix\", \"ftyphevc\", \"ftyphevx\"\n            {\n                return .heic\n            }\n        default:\n            break\n        }\n        return .unknown\n    }\n\n    var contentType: String {\n        return \"image/\\(rawValue)\"\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/LanguageType.swift",
    "content": "//\n//  LanguageType.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\n//\n//  NoteFileType.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 1/6/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nenum LanguageType: Int {\n    case English = 0x00\n    case Russian = 0x01\n    case Ukrainian = 0x02\n    case Deutsch = 0x03\n    case Spanish = 0x04\n    case Arabic = 0x05\n    case Chinese = 0x06\n    case Korean = 0x07\n    case French = 0x08\n    case Dutch = 0x09\n    case Portuguese = 10\n    case Italian = 11\n    case Hebrew = 12\n    case Japanese = 13\n    case PtBr = 14\n    case Czech = 15\n    case Hindi = 16\n    case Turkish = 17\n    case ChineseTraditional\n\n    var description: String {\n        switch rawValue {\n        case 0x00: return \"English\"\n        case 0x01: return \"Русский\"\n        case 0x02: return \"Українська\"\n        case 0x03: return \"Deutsch\"\n        case 0x04: return \"Spanish\"\n        case 0x05: return \"Arabic\"\n        case 0x06: return \"Chinese (Simplified)\"\n        case 0x07: return \"Korean\"\n        case 0x08: return \"French\"\n        case 0x09: return \"Dutch\"\n        case 10: return \"Portuguese (Portugal)\"\n        case 11: return \"Italian\"\n        case 12: return \"Hebrew\"\n        case 13: return \"Japanese\"\n        case 14: return \"Portuguese (Brazilian)\"\n        case 15: return \"Czech\"\n        case 16: return \"Hindi\"\n        case 17: return \"Turkish\"\n        case 18: return \"Chinese (Traditional)\"\n        default: return \"\"\n        }\n    }\n\n    var code: String {\n        switch rawValue {\n        case 0x00: return \"en\"\n        case 0x01: return \"ru\"\n        case 0x02: return \"uk\"\n        case 0x03: return \"de\"\n        case 0x04: return \"es\"\n        case 0x05: return \"ar\"\n        case 0x06: return \"zh-Hans\"\n        case 0x07: return \"ko\"\n        case 0x08: return \"fr\"\n        case 0x09: return \"nl-NL\"\n        case 10: return \"pt-PT\"\n        case 11: return \"it\"\n        case 12: return \"he\"\n        case 13: return \"ja\"\n        case 14: return \"pt-BR\"\n        case 15: return \"cs\"\n        case 16: return \"hi\"\n        case 17: return \"tr\"\n        case 18: return \"zh-Hant\"\n        default: return \"en\"\n        }\n    }\n\n    static func withName(rawValue: String) -> LanguageType {\n        switch rawValue {\n        case \"English\": return LanguageType.English\n        case \"Русский\": return LanguageType.Russian\n        case \"Українська\": return LanguageType.Ukrainian\n        case \"Deutsch\": return LanguageType.Deutsch\n        case \"Spanish\": return LanguageType.Spanish\n        case \"Arabic\": return LanguageType.Arabic\n        case \"Chinese (Simplified)\": return LanguageType.Chinese\n        case \"Chinese (Traditional)\": return LanguageType.ChineseTraditional\n        case \"Korean\": return LanguageType.Korean\n        case \"French\": return LanguageType.French\n        case \"Dutch\": return LanguageType.Dutch\n        case \"Portuguese (Portugal)\": return LanguageType.Portuguese\n        case \"Italian\": return LanguageType.Italian\n        case \"Hebrew\": return LanguageType.Hebrew\n        case \"Japanese\": return LanguageType.Japanese\n        case \"Portuguese (Brazilian)\": return LanguageType.PtBr\n        case \"Czech\": return LanguageType.Czech\n        case \"Hindi\": return LanguageType.Hindi\n        case \"Turkish\": return LanguageType.Turkish\n        default: return LanguageType.English\n        }\n    }\n\n    static func withCode(rawValue: String) -> Int {\n        switch rawValue {\n        case \"en\": return 0x00\n        case \"ru\": return 0x01\n        case \"uk\": return 0x02\n        case \"de\": return 0x03\n        case \"es\": return 0x04\n        case \"ar\": return 0x05\n        case \"zh-Hans\": return 0x06\n        case \"zh-Hant\": return 18\n        case \"ko\": return 0x07\n        case \"fr\": return 0x08\n        case \"nl-NL\": return 0x09\n        case \"pt-PT\": return 10\n        case \"it\": return 11\n        case \"he\": return 12\n        case \"ja\": return 13\n        case \"pr-BR\": return 14\n        case \"cs\": return 15\n        case \"hi\": return 16\n        case \"tr\": return 17\n        default: return 0x00\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/Markdown.swift",
    "content": "//\n//  Markdown.swift\n//  FSNotes\n//\n//  Created by Wonsup Yoon on 05/10/2019.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport libcmark_gfm\n\nfunc renderMarkdownHTML(markdown: String) -> String? {\n    let markdown = markdown.replacingOccurrences(of: \"{{TOC}}\", with: \"<div id=\\\"toc\\\"></div>\")\n        \n    cmark_gfm_core_extensions_ensure_registered()\n    \n    guard let parser = cmark_parser_new(CMARK_OPT_FOOTNOTES) else { return nil }\n    defer { cmark_parser_free(parser) }\n\n    if let ext = cmark_find_syntax_extension(\"table\") {\n        cmark_parser_attach_syntax_extension(parser, ext)\n    }\n\n    if let ext = cmark_find_syntax_extension(\"autolink\") {\n        cmark_parser_attach_syntax_extension(parser, ext)\n    }\n\n    if let ext = cmark_find_syntax_extension(\"strikethrough\") {\n        cmark_parser_attach_syntax_extension(parser, ext)\n    }\n    \n    if let ext = cmark_find_syntax_extension(\"tasklist\") {\n        cmark_parser_attach_syntax_extension(parser, ext)\n    }\n\n    cmark_parser_feed(parser, markdown, markdown.utf8.count)\n    guard let node = cmark_parser_finish(parser) else { return nil }\n    return String(cString: cmark_render_html(node, CMARK_OPT_HARDBREAKS | CMARK_OPT_UNSAFE, nil))\n}\n\nfunc generateAlphabeticalString(length: Int) -> String {\n    let alphabet = \"abcdefghijklmnopqrstuvwxyz\"\n    var result = \"@\"\n    let length = length - 2\n\n    for _ in 0..<length {\n        let randomIndex = Int.random(in: 0..<alphabet.count)\n        let randomChar = alphabet[alphabet.index(alphabet.startIndex, offsetBy: randomIndex)]\n        result.append(randomChar)\n    }\n\n    result.append(\"@\")\n\n    return result\n}\n"
  },
  {
    "path": "FSNotesCore/Business/Note+Preview.swift",
    "content": "//\n//  Note+Preview.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension Note {\n    func parseYAMLBlock() -> Bool {\n        let nsText = content.string as NSString\n        var success = false\n        \n        FSParser.yamlBlockRegex.matches(nsText as String, range: NSRange(location: 0, length: nsText.length)) { match in\n            guard let yamlRange = match?.range(at: 1), yamlRange.location == 0 else { return }\n            \n            let yamlText = nsText.substring(with: yamlRange)\n            \n            if let (title, preview) = self.loadYaml(components: yamlText.components(separatedBy: .newlines)) {\n                self.title = title\n                self.preview = preview\n                success = true\n            }\n        }\n        \n        return success\n    }\n\n    func prepareComponents(from text: String) -> [String] {\n        let trimmed = (text as NSString).trimmingCharacters(in: .whitespacesAndNewlines)\n        \n        return trimmed\n            .components(separatedBy: .newlines)\n            .compactMap { line -> String? in\n                let cleaned = line.replacingOccurrences(of: \"^#+\", with: \"\", options: .regularExpression)\n                return cleaned.isEmpty ? nil : cleaned\n            }\n    }\n    \n    func getNonEmptyLines() -> [String] {\n        let nsText = content.string as NSString\n        let length = nsText.length\n        var lines: [String] = []\n        lines.reserveCapacity(10)\n        \n        var location = 0\n        \n        while lines.count < 10 && location < length {\n            let remainingRange = NSRange(location: location, length: length - location)\n            let range = nsText.rangeOfCharacter(from: .newlines, range: remainingRange)\n            \n            if range.location != NSNotFound {\n                let lineLength = range.location - location\n                \n                if lineLength > 0 {\n                    var line = nsText.substring(with: NSRange(location: location, length: lineLength))\n\n                    if location == 0 {\n                        line = line.trimMDSyntax()\n                    }\n                    \n                    if !line.isEmpty {\n                        lines.append(line)\n                    }\n                }\n                \n                location = range.location + range.length\n            } else {\n                let line = nsText.substring(from: location)\n                if !line.isEmpty {\n                    lines.append(line)\n                }\n                break\n            }\n        }\n        \n        return lines\n    }\n    \n    func loadYaml(components: [String]) -> (String, String)? {\n        var tripleMinus = 0\n        var previewFragments = [String]()\n\n        var titleRow = String()\n        var previewRow = String()\n\n        if components.first == \"---\", components.count > 1 {\n            for string in components {\n                if string == \"---\" {\n                    tripleMinus += 1\n                }\n\n                let res = string.matchingStrings(regex: \"^title: ([\\\"\\'”“]?)([^\\n]+)\\\\1$\")\n\n                if res.count > 0 {\n                    titleRow = res[0][2].trim()\n                }\n\n                if tripleMinus > 1 {\n                    previewFragments.append(string)\n                }\n            }\n        }\n\n        if previewFragments.count > 0 {\n            let previewString = previewFragments\n                .joined(separator: \" \")\n                .replacingOccurrences(of: \"---\", with: \"\")\n\n            previewRow = getPreviewLabel(with: previewString)\n        }\n\n        if titleRow.count > 0 {\n            return (titleRow, previewRow)\n        }\n\n        return nil\n    }\n\n    func loadTitleFromFileName() {\n        let fileName = url.deletingPathExtension().pathComponents.last!\n            .replacingOccurrences(of: \":\", with: \"\")\n            .replacingOccurrences(of: \"/\", with: \"\")\n\n        self.title = fileName\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/Note.swift",
    "content": "//\n//  NoteMO+CoreDataClass.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 9/24/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n//\n\nimport Foundation\nimport RNCryptor\nimport SSZipArchive\nimport LocalAuthentication\n\npublic class Note: NSObject  {\n    @objc var title: String = \"\"\n    var project: Project\n    var container: NoteContainer = .none\n    var type: NoteType = .Markdown\n    var url: URL\n\n    var content: NSMutableAttributedString = NSMutableAttributedString()\n    var creationDate: Date? = Date()\n\n    let dateFormatter = DateFormatter()\n    let undoManager = UndoManager()\n\n    public var tags = [String]()\n    public var originalExtension: String?\n    \n    public var isBlocked: Bool = false\n\n    /*\n     Filename with extension ie \"example.textbundle\"\n     */\n    public var name = String()\n\n    /*\n     Filename \"example\"\n     */\n    public var fileName = String()\n    public var preview: String = \"\"\n\n    public var isPinned: Bool = false\n    public var modifiedLocalAt = Date()\n\n    public var imageUrl: [URL]?\n    public var attachments: [URL]?\n    public var isParsed = false\n\n    private var decryptedTemporarySrc: URL?\n\n    public var isLoaded = false\n    public var isLoadedFromCache = false\n\n    public var password: String?\n\n    public var cacheLock: Bool = false\n    public var cacheHash: UInt64?\n    \n    public var uploadPath: String?\n    public var apiId: String?\n    \n    public var previewState: Bool = false\n\n    private var selectedRange: NSRange?\n    \n    public var contentOffset = CGPoint()\n    public var contentOffsetWeb = CGPoint()\n    \n    public var scrollPosition: Int?\n    public var scrollOffset: CGFloat?\n\n    public var codeBlockRangesCache: [NSRange]?\n\n    // Load exist\n    \n    init(url: URL, with project: Project, modified: Date? = nil, created: Date? = nil) {\n        if let modified = modified {\n            modifiedLocalAt = modified\n        }\n        \n        if let created = created {\n            creationDate = created\n        }\n\n        self.url = url.standardized\n        self.project = project\n        super.init()\n\n        self.parseURL(loadProject: false)\n    }\n    \n    // Make new\n    \n    init(name: String? = nil, project: Project? = nil, type: NoteType? = nil, cont: NoteContainer? = nil) {\n        let project = project ?? Storage.shared().getDefault()!\n        \n        let name = name ?? String()\n\n        self.project = project\n        self.name = name\n        \n        self.container = cont ?? UserDefaultsManagement.fileContainer\n        self.type = type ?? UserDefaultsManagement.fileFormat\n        \n        let ext = container == .none\n            ? self.type.getExtension(for: container)\n            : \"textbundle\"\n                \n        url = NameHelper.getUniqueFileName(name: name, project: project, ext: ext)\n\n        super.init()\n\n        self.parseURL()\n    }\n\n    init(meta: NoteMeta, project: Project) {\n        isLoadedFromCache = true\n        \n        if meta.title.count > 0 || (meta.imageUrl != nil && meta.imageUrl!.count > 0) {\n            isParsed = true\n        }\n        \n        url = meta.url\n        attachments = meta.attachments\n        imageUrl = meta.imageUrl\n        title = meta.title\n        preview = meta.preview\n        modifiedLocalAt = meta.modificationDate\n        creationDate = meta.creationDate\n        isPinned = meta.pinned\n        tags = meta.tags\n        selectedRange = meta.selectedRange\n        self.project = project\n\n        super.init()\n\n        parseURL(loadProject: false)\n    }\n    \n    public func fileSize(atPath path: String) -> Int64? {\n        do {\n            let attributes = try FileManager.default.attributesOfItem(atPath: path)\n            if let fileSize = attributes[.size] as? Int64 {\n                return fileSize\n            }\n        } catch {\n            print(\"Error retrieving file size: \\(error.localizedDescription)\")\n        }\n        return nil\n    }\n    \n    public func isValidForCaching() -> Bool {\n        return isLoaded || title.count > 0 || isEncrypted() || imageUrl != nil\n    }\n\n    func getMeta() -> NoteMeta {\n        let date = creationDate ?? Date()\n        return NoteMeta(\n            url: url,\n            attachments: attachments,\n            imageUrl: imageUrl,\n            title: title,\n            preview: preview,\n            modificationDate: modifiedLocalAt,\n            creationDate: date,\n            pinned: isPinned,\n            tags: tags, \n            selectedRange: selectedRange\n        )\n    }\n\n    /// Important for decrypted temporary containers\n    public func getURL() -> URL {\n        if let url = self.decryptedTemporarySrc {\n            return url\n        }\n\n        return self.url\n    }\n    \n    public func loadProject() {\n        let sharedStorage = Storage.shared()\n        \n        if let project = sharedStorage.getProjectByNote(url: url) {\n            self.project = project\n        }\n    }\n\n    public func forceLoad(skipCreateDate: Bool = false, loadTags: Bool = true) {\n        invalidateCache()\n        load(tags: loadTags)\n\n        if !skipCreateDate {\n            loadCreationDate()\n        }\n        \n        loadModifiedLocalAt()\n    }\n\n    public func setCreationDate(string: String) -> Bool {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n\n        let userDate = formatter.date(from: string)\n        let attributes = [FileAttributeKey.creationDate: userDate]\n\n        do {\n            try FileManager.default.setAttributes(attributes as [FileAttributeKey : Any], ofItemAtPath: url.path)\n\n            creationDate = userDate\n            \n            if isTextBundle() {\n                writeTextBundleInfo(url: getURL())\n            }\n            return true\n        } catch {\n            print(error)\n            return false\n        }\n    }\n\n    public func setCreationDate(date: Date) -> Bool {\n        let attributes = [FileAttributeKey.creationDate: date]\n\n        do {\n            try FileManager.default.setAttributes(attributes as [FileAttributeKey : Any], ofItemAtPath: url.path)\n\n            creationDate = date\n            \n            if isTextBundle() {\n                writeTextBundleInfo(url: getURL())\n            }\n            \n            return true\n        } catch {\n            return false\n        }\n    }\n    \n    private func readTitleAndPreview() -> (String?, String?) {\n        guard let fileHandle = FileHandle(forReadingAtPath: url.path) else {\n            print(\"Can not open the file.\")\n            return (nil, nil)\n        }\n        defer { fileHandle.closeFile() }\n        \n        var saveChars = false\n        var title = String()\n        var preview = String()\n        \n        while let char = String(data: fileHandle.readData(ofLength: 1), encoding: .utf8) {\n            if char == \"\\n\" {\n                if saveChars {\n                    preview += \" \"\n                } else {\n                    saveChars = true\n                }\n                continue\n            }\n            \n            if saveChars {\n                preview += char\n                if preview.count >= 100 {\n                    break\n                }\n            } else {\n                title += char\n            }\n        }\n        \n        preview = preview.trimmingCharacters(in: .whitespacesAndNewlines)\n        title = title.trimmingCharacters(in: .whitespacesAndNewlines)\n        \n        return (title, preview)\n    }\n\n\n    public func uiLoad() {\n        if let size = fileSize(atPath: self.url.path), size > 100000 {\n            loadFileName()\n            \n            let data = readTitleAndPreview()\n            if let title = data.0 {\n                self.title = title.trimMDSyntax()\n            }\n            \n            if let preview = data.1 {\n                self.preview = preview.trimMDSyntax()\n            }\n            \n            return\n        }\n        \n        load(tags: true)\n    }\n    \n    func load(tags: Bool = true) {\n        #if SHARE_EXT\n            return\n        #endif\n\n        if let attributedString = getContent() {\n            cacheHash = nil\n            content = attributedString.loadAttachments(self)\n        }\n\n        loadFileName()\n        loadPreviewInfo()\n        \n        if !isTrash() && tags {\n            loadTags()\n        }\n\n        isLoaded = true\n    }\n\n    func reload() -> Bool {\n        guard let modifiedAt = getFileModifiedDate() else { return false }\n                        \n        if (modifiedAt != modifiedLocalAt) {\n            if let attributedString = getContent() {\n                cacheHash = nil\n                content = attributedString.loadAttachments(self)\n                cacheCodeBlocks()\n            }\n\n            loadModifiedLocalAt()\n            return true\n        }\n        \n        return false\n    }\n\n    public func forceReload() {\n        if container != .encryptedTextPack, let attributedString = getContent() {\n            cacheHash = nil\n            content = attributedString.loadAttachments(self)\n        }\n    }\n    \n    public func loadModifiedLocalAt() {\n        modifiedLocalAt = getFileModifiedDate() ?? Date.distantPast\n    }\n\n    public func loadCreationDate() {\n        creationDate = getFileCreationDate() ?? Date.distantPast\n    }\n    \n    public func isTextBundle() -> Bool {\n        return (container == .textBundle || container == .textBundleV2)\n    }\n\n    public func isFullLoadedTextBundle() -> Bool {\n        return getContentFileURL() != nil\n    }\n    \n    public func getExtensionForContainer() -> String {\n        return type.getExtension(for: container)\n    }\n\n    public func getFileModifiedDate() -> Date? {\n        let url = getURL()\n\n        if isUnlocked() {\n            do {\n                let attr = try FileManager.default.attributesOfItem(atPath: self.url.path)\n                return attr[FileAttributeKey.modificationDate] as? Date\n            } catch {/*_*/}\n        }\n\n        if UserDefaultsManagement.useTextBundleMetaToStoreDates && isTextBundle() {\n            let textBundleURL = url\n            let json = textBundleURL.appendingPathComponent(\"info.json\")\n\n            if let jsonData = try? Data(contentsOf: json),\n               let info = try? JSONDecoder().decode(TextBundleInfo.self, from: jsonData),\n               let modified = info.modified {\n\n                return Date(timeIntervalSince1970: TimeInterval(modified))\n            }\n        }\n\n        if let contentUrl = getContentFileURL() {\n            do {\n                let attr = try FileManager.default.attributesOfItem(atPath: contentUrl.path)\n\n                return attr[FileAttributeKey.modificationDate] as? Date\n            } catch {\n                NSLog(\"Note modification date load error: \\(error.localizedDescription)\")\n            }\n        }\n\n        return\n            (try? url.resourceValues(forKeys: [.contentModificationDateKey]))?\n                .contentModificationDate\n    }\n\n    public func getFileCreationDate() -> Date? {\n        let url = getURL()\n\n        if isUnlocked() {\n            do {\n                let attr = try FileManager.default.attributesOfItem(atPath: self.url.path)\n                return attr[FileAttributeKey.creationDate] as? Date\n            } catch {/*_*/}\n        }\n\n        if UserDefaultsManagement.useTextBundleMetaToStoreDates && isTextBundle() {\n            let textBundleURL = url\n            let json = textBundleURL.appendingPathComponent(\"info.json\")\n\n            if let jsonData = try? Data(contentsOf: json),\n               let info = try? JSONDecoder().decode(TextBundleInfo.self, from: jsonData),\n               let created = info.created {\n                \n                return Date(timeIntervalSince1970: TimeInterval(created))\n            }\n        }\n\n        if let contentUrl = getContentFileURL() {\n            do {\n                let attr = try FileManager.default.attributesOfItem(atPath: contentUrl.path)\n\n                return attr[FileAttributeKey.creationDate] as? Date\n            } catch {\n                NSLog(\"Note creation date load error: \\(error.localizedDescription)\")\n            }\n        }\n\n        return\n            (try? url.resourceValues(forKeys: [.creationDateKey]))?\n                .creationDate\n    }\n    \n    func move(to: URL, project: Project? = nil, forceRewrite: Bool = false) -> Bool {\n        let sharedStorage = Storage.shared()\n\n        do {\n            var destination = to\n\n            if FileManager.default.fileExists(atPath: to.path) && !forceRewrite {\n                guard let project = project ?? sharedStorage.getProjectByNote(url: to) else { return false }\n\n                let ext = url.pathExtension\n                destination = NameHelper.getUniqueFileName(name: title, project: project, ext: ext)\n            }\n\n            try FileManager.default.moveItem(at: url, to: destination)\n            removeCacheForPreviewImages()\n\n            #if os(OSX)\n                let restorePin = isPinned\n                if isPinned {\n                    removePin()\n                }\n\n                overwrite(url: destination)\n\n                if restorePin {\n                    addPin()\n                }\n            #endif\n\n            NSLog(\"File moved from \\\"\\(url.deletingPathExtension().lastPathComponent)\\\" to \\\"\\(destination.deletingPathExtension().lastPathComponent)\\\"\")\n        } catch {\n            Swift.print(error)\n            return false\n        }\n\n        return true\n    }\n    \n    func getNewURL(name: String) -> URL {\n        let escapedName = name\n            .replacingOccurrences(of: \":\", with: \"\")\n            .replacingOccurrences(of: \"/\", with: \"\")\n        \n        var newUrl = url.deletingLastPathComponent()\n        newUrl.appendPathComponent(escapedName + \".\" + url.pathExtension)\n        return newUrl\n    }\n\n    public func remove() {\n        if !isTrash() && !isEmpty() {\n            let src = url\n            if let trashURLs = removeFile() {\n                let dst = trashURLs[0]\n                self.url = dst\n                parseURL()\n\n                #if IOS_APP\n                    moveHistory(src: src, dst: dst)\n                #endif\n            }\n        } else {\n            _ = removeFile()\n\n            if self.isPinned {\n                removePin()\n            }\n\n            #if IOS_APP\n                dropRevisions()\n            #endif\n        }\n    }\n\n    public func isEmpty() -> Bool {\n        return content.length == 0 && !isEncrypted()\n    }\n\n    #if os(iOS)\n    // Return URL moved in\n    func removeFile(completely: Bool = false) -> Array<URL>? {\n        if FileManager.default.fileExists(atPath: url.path) {\n            if isTrash() || completely || isEmpty() {\n                try? FileManager.default.removeItem(at: url)\n\n                if type == .Markdown && container == .none {\n                    let urls = content.getImagesAndFiles()\n                    for url in urls {\n                        try? FileManager.default.removeItem(at: url.url)\n                    }\n                }\n\n                return nil\n            }\n\n            guard let trashUrl = getDefaultTrashURL() else {\n                print(\"Trash not found\")\n\n                var resultingItemUrl: NSURL?\n                if #available(iOS 11.0, *) {\n                    if let trash = Storage.shared().getDefaultTrash() {\n                        moveImages(to: trash)\n                    }\n\n                    try? FileManager.default.trashItem(at: url, resultingItemURL: &resultingItemUrl)\n\n                    if let result = resultingItemUrl, let path = result.path {\n                        return [URL(fileURLWithPath: path), url]\n                    }\n                }\n\n                return nil\n            }\n\n            var trashUrlTo = trashUrl.appendingPathComponent(name)\n\n            if FileManager.default.fileExists(atPath: trashUrlTo.path) {\n                let reserveName = \"\\(Int(Date().timeIntervalSince1970)) \\(name)\"\n                trashUrlTo = trashUrl.appendingPathComponent(reserveName)\n            }\n\n            print(\"Note moved in custom Trash folder\")\n\n            if let trash = Storage.shared().getDefaultTrash() {\n                moveImages(to: trash)\n            }\n            \n            try? FileManager.default.moveItem(at: url, to: trashUrlTo)\n\n            return [trashUrlTo, url]\n        }\n        \n        return nil\n    }\n    #endif\n\n    #if os(OSX)\n    func removeFile(completely: Bool = false) -> Array<URL>? {\n        guard FileManager.default.fileExists(atPath: url.path) else { return nil }\n\n        if isTrash() || completely {\n            do {\n                try FileManager.default.removeItem(at: url)\n            } catch let error as NSError {\n                Swift.print(\"Remove file error: \\(error.localizedDescription)\")\n                Swift.print(\"Error details: \\(error.userInfo)\")\n            }\n\n            if type == .Markdown && container == .none {\n                let urls = content.getImagesAndFiles()\n                for url in urls {\n                    try? FileManager.default.removeItem(at: url.url)\n                }\n            }\n\n            return nil\n        }\n\n        do {\n            guard let dst = Storage.shared().trashItem(url: url) else {\n                var resultingItemUrl: NSURL?\n                try FileManager.default.trashItem(at: url, resultingItemURL: &resultingItemUrl)\n\n                guard let dst = resultingItemUrl else { return nil }\n\n                let originalURL = url\n\n                overwrite(url: dst as URL)\n\n                return [self.url, originalURL]\n            }\n\n            if let trash = Storage.shared().getDefaultTrash() {\n                moveImages(to: trash)\n            }\n\n            try FileManager.default.moveItem(at: url, to: dst)\n\n            let originalURL = url\n            overwrite(url: dst)\n            return [self.url, originalURL]\n\n        } catch {\n            print(\"Trash error: \\(error)\")\n        }\n\n        return nil\n    }\n    #endif\n\n    public func getAttachPrefix(url: URL? = nil) -> String {\n        if let url = url, !url.isImage {\n            return \"files/\"\n        }\n\n        return \"i/\"\n    }\n\n    public func move(from imageURL: URL, imagePath: String, to project: Project, copy: Bool = false) {\n        let dstPrefix = getAttachPrefix(url: imageURL)\n        let dest = project.url.appendingPathComponent(dstPrefix, isDirectory: true)\n\n        if !FileManager.default.fileExists(atPath: dest.path) {\n            try? FileManager.default.createDirectory(at: dest, withIntermediateDirectories: false, attributes: nil)\n\n            if let data = \"true\".data(using: .utf8) {\n                try? dest.setExtendedAttribute(data: data, forName: \"es.fsnot.hidden.dir\")\n            }\n        }\n\n        do {\n            if copy {\n                try FileManager.default.copyItem(at: imageURL, to: dest)\n            } else {\n                try FileManager.default.moveItem(at: imageURL, to: dest)\n            }\n        } catch {\n            if let fileName = ImagesProcessor.getFileName(from: imageURL, to: dest, ext: imageURL.pathExtension) {\n                let dest = dest.appendingPathComponent(fileName)\n\n                if copy {\n                    try? FileManager.default.copyItem(at: imageURL, to: dest)\n                } else {\n                    try? FileManager.default.moveItem(at: imageURL, to: dest)\n                }\n\n                let prefix = \"](\"\n                let postfix = \")\"\n                \n                let imagePath = imagePath.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? imagePath\n\n                let find = prefix + imagePath + postfix\n                let replace = prefix + dstPrefix + fileName + postfix\n\n                guard find != replace else { return }\n\n                while content.mutableString.contains(find) {\n                    let range = content.mutableString.range(of: find)\n                    content.replaceCharacters(in: range, with: replace)\n                }\n            }\n        }\n    }\n\n    public func moveImages(to project: Project) {\n        if type == .Markdown && container == .none {\n            let imagesMeta = content.getImagesAndFiles()\n            for imageMeta in imagesMeta {\n                let imagePath = project.url.appendingPathComponent(imageMeta.path).path\n                project.storage.hideImages(directory: imagePath, srcPath: imagePath)\n\n                // Copy if image used more then one time on project\n                let copy = self.project.countNotes(contains: imageMeta.url) > 0\n                move(from: imageMeta.url, imagePath: imageMeta.path, to: project, copy: copy)\n            }\n\n            if imagesMeta.count > 0 {\n                if save() {\n                    Storage.shared().add(self)\n                }\n            }\n        }\n    }\n    \n    private func getDefaultTrashURL() -> URL? {\n        if let url = Storage.shared().getDefaultTrash()?.url {\n            return url\n        }\n\n        return nil\n    }\n        \n    public func getPreviewLabel(with text: String? = nil) -> String {\n        var preview: String = \"\"\n        let content = text ?? self.content.string\n        let length = text?.count ?? self.content.string.count\n\n        if length > 250 {\n            if text == nil {\n                let startIndex = content.index((content.startIndex), offsetBy: 0)\n                let endIndex = content.index((content.startIndex), offsetBy: 250)\n                preview = String(content[startIndex...endIndex])\n            } else {\n                preview = String(content.prefix(250))\n            }\n        } else {\n            preview = content\n        }\n        \n        preview = preview.replacingOccurrences(of: \"\\n\", with: \" \")\n        if (\n            UserDefaultsManagement.horizontalOrientation\n                && content.hasPrefix(\" – \") == false\n            ) {\n            preview = \" – \" + preview\n        }\n\n        preview = preview.condenseWhitespace()\n\n        if preview.starts(with: \"![\") {\n            return \"\"\n        }\n\n        return preview\n    }\n    \n    @objc func getDateForLabel() -> String {\n        guard !UserDefaultsManagement.hideDate else { return String() }\n\n        let date = self.project.storage.getSortByState() == .creationDate\n            ? creationDate\n            : modifiedLocalAt\n\n        guard let date = date else { return String() }\n\n        if NSCalendar.current.isDateInToday(date) {\n            return dateFormatter.formatTimeForDisplay(date)\n        } else {\n            return dateFormatter.formatDateForDisplay(date)\n        }\n    }\n\n    @objc func getCreationDateForLabel() -> String? {\n        guard let creationDate = self.creationDate else { return nil }\n        guard !UserDefaultsManagement.hideDate else { return nil }\n\n        let calendar = NSCalendar.current\n        if calendar.isDateInToday(creationDate) {\n            return dateFormatter.formatTimeForDisplay(creationDate)\n        }\n        else {\n            return dateFormatter.formatDateForDisplay(creationDate)\n        }\n    }\n    \n    func getContent() -> NSMutableAttributedString? {\n        guard container != .encryptedTextPack, let url = getContentFileURL() else { return nil }\n\n        do {\n            return try NSMutableAttributedString(url: url, options: [\n                .documentType : NSAttributedString.DocumentType.plain,\n                .characterEncoding : NSNumber(value: String.Encoding.utf8.rawValue)\n            ], documentAttributes: nil)\n        } catch {\n            if let data = try? Data(contentsOf: url) {\n                let encoding = NSString.stringEncoding(for: data, encodingOptions: nil, convertedString: nil, usedLossyConversion: nil)\n\n                return try? NSMutableAttributedString(url: url, options: [\n                    .documentType : NSAttributedString.DocumentType.plain,\n                    .characterEncoding : NSNumber(value: encoding)\n                ], documentAttributes: nil)\n            }\n        }\n        \n        return nil\n    }\n    \n    func isMarkdown() -> Bool {\n        return type == .Markdown\n    }\n    \n    func addPin(cloudSave: Bool = true) {\n        isPinned = true\n        \n        if cloudSave {\n            Storage.shared().saveCloudPins()\n        }\n    }\n\n    func removePin(cloudSave: Bool = true) {\n        if isPinned {\n            isPinned = false\n            \n            if cloudSave {\n                Storage.shared().saveCloudPins()\n            }\n        }\n    }\n    \n    func togglePin() {\n        if !isPinned {\n            addPin()\n        } else {\n            removePin()\n        }\n    }\n    \n    func cleanMetaData(content: String) -> String {\n        var extractedTitle = String()\n        var author = String()\n        var date = String()\n        \n        if (content.hasPrefix(\"---\\n\")) {\n            var list = content.components(separatedBy: \"---\")\n            \n            if (list.count > 2) {\n                let headerList = list[1].components(separatedBy: \"\\n\")\n                for header in headerList {\n                    if header.hasPrefix(\"title:\") {\n                        extractedTitle = header.replacingOccurrences(of: \"title:\", with: \"\").trim()\n                        \n                        if extractedTitle.hasPrefix(\"\\\"\") && extractedTitle.hasSuffix(\"\\\"\"){\n                            extractedTitle = String(extractedTitle.dropFirst(1))\n                            extractedTitle = String(extractedTitle.dropLast(1))\n                        }\n                    }\n                    \n                    if header.hasPrefix(\"author:\") {\n                        author = header.replacingOccurrences(of: \"author:\", with: \"\").trim()\n                        \n                        if author.hasPrefix(\"\\\"\") && author.hasSuffix(\"\\\"\"){\n                            author = String(author.dropFirst(1))\n                            author = String(author.dropLast(1))\n                        }\n                    }\n                    \n                    if header.hasPrefix(\"date:\") {\n                        date = header.replacingOccurrences(of: \"date:\", with: \"\").trim()\n                        \n                        if date.hasPrefix(\"\\\"\") && date.hasSuffix(\"\\\"\"){\n                            date = String(date.dropFirst(1))\n                            date = String(date.dropLast(1))\n                        }\n                    }\n                }\n                \n                list.removeSubrange(Range(0...1))\n                \n                var result = String()\n                \n                if (extractedTitle.count > 0) {\n                    result = \"<h1 class=\\\"no-border\\\">\" + extractedTitle + \"</h1>\\n\\n\"\n                }\n                \n                if (author.count > 0) {\n                    result += \"_\" + author + \"_\\n\\n\"\n                }\n                \n                if (date.count > 0) {\n                    result += \"_\" + date + \"_\\n\\n\"\n                }\n                \n                if result.count > 0 {\n                    result += \"<hr>\\n\\n\"\n                }\n                \n                result += list.joined()\n                \n                return result\n            }\n        }\n        \n        return content\n    }\n    \n    func getPrettifiedContent() -> String {\n        #if IOS_APP || os(OSX)\n            let mutable = NotesTextProcessor.convertAppTags(in: self.content.unloadAttachments(), codeBlockRanges: codeBlockRangesCache)\n        let content = NotesTextProcessor.convertAppLinks(in: mutable, codeBlockRanges: codeBlockRangesCache)\n            let result = cleanMetaData(content: content.string)\n                .replacingOccurrences(of: \"\\n---\\n\", with: \"\\n<hr>\\n\")\n        \n            return result\n        #else\n            return cleanMetaData(content: self.content.string)\n        #endif\n    }\n\n    public func overwrite(url: URL) {\n        self.url = url\n\n        parseURL()\n    }\n\n    func parseURL(loadProject: Bool = true) {\n        if (url.pathComponents.count > 0) {\n            container = .withExt(rawValue: url.pathExtension)\n            name = url.lastPathComponent\n            \n            if isTextBundle() {\n                type = .Markdown\n                container = .textBundle\n\n                let infoUrl = url.appendingPathComponent(\"info.json\")\n\n                if FileManager.default.fileExists(atPath: infoUrl.path) {\n                    do {\n                        let jsonData = try Data(contentsOf: infoUrl)\n                        let info = try JSONDecoder().decode(TextBundleInfo.self, from: jsonData)\n\n                        if info.version == 0x02 {\n                            type = NoteType.withUTI(rawValue: info.type)\n                            container = .textBundleV2\n                            originalExtension = info.flatExtension\n\n                            if UserDefaultsManagement.useTextBundleMetaToStoreDates {\n                                if let created = info.created {\n                                    creationDate = Date(timeIntervalSince1970: TimeInterval(created))\n                                }\n\n                                if let modified = info.modified {\n                                    modifiedLocalAt = Date(timeIntervalSince1970: TimeInterval(modified))\n                                }\n                            }\n                        }\n                    } catch {\n                        print(\"TB loading error \\(error)\")\n                    }\n                }\n            }\n            \n            if container == .none {\n                type = .withExt(rawValue: url.pathExtension)\n            }\n            \n            loadTitle()\n            loadFileName()\n        }\n\n        if loadProject {\n            self.loadProject()\n        }\n    }\n\n    private func loadTitle() {\n        if !project.settings.isFirstLineAsTitle() {\n            title = url\n                .deletingPathExtension()\n                .pathComponents\n                .last!\n                .replacingOccurrences(of: \":\", with: \"\")\n                .replacingOccurrences(of: \"/\", with: \"\")\n        }\n    }\n\n    private func loadFileName() {\n        fileName = url.deletingPathExtension().lastPathComponent\n            .replacingOccurrences(of: \":\", with: \"\")\n            .replacingOccurrences(of: \"/\", with: \"\")\n    }\n\n    public func getFileName() -> String {\n        return fileName\n    }\n\n    public func save(attributed: NSAttributedString) {\n        if container == .encryptedTextPack { return }\n        \n        guard let copy = attributed.copy() as? NSAttributedString else {\n            return\n        }\n        \n        modifiedLocalAt = Date()\n        \n        let operation = BlockOperation()\n        operation.addExecutionBlock { [weak self] in\n            guard let self = self else {\n                return\n            }\n            \n            if operation.isCancelled {\n                return\n            }\n            \n            let mutable = NSMutableAttributedString(attributedString: copy)\n            self.save(content: mutable)\n            usleep(1000000)\n            \n            if !operation.isCancelled {\n                self.isBlocked = false\n            }\n        }\n        \n        Storage.shared().plainWriter.cancelAllOperations()\n        Storage.shared().plainWriter.addOperation(operation)\n    }\n\n    public func save(content: NSMutableAttributedString) {\n        self.content = content\n\n        let copy = content.unloadAttachments()\n        modifiedLocalAt = Date()\n\n        if write(attributedString: copy) {\n            Storage.shared().add(self)\n        }\n    }\n\n    public func replace(tag: String, with string: String) {\n        content.replaceTag(name: tag, with: string)\n        _ = save()\n    }\n\n    public func delete(tag: String) {\n        content.replaceTag(name: tag, with: \"\")\n        _ = save()\n    }\n        \n    public func save() -> Bool {\n        let attributedString = self.content.unloadAttachments()\n\n        return write(attributedString: attributedString)\n    }\n\n    private func write(attributedString: NSAttributedString) -> Bool {\n        let url = getURL()\n        let attributes = getFileAttributes()\n        \n        do {\n            let fileWrapper = getFileWrapper(attributedString: attributedString)\n\n            if isTextBundle() {\n                let jsonUrl = url.appendingPathComponent(\"info.json\")\n                let fileExist = FileManager.default.fileExists(atPath: jsonUrl.path)\n\n                if !fileExist {\n                    try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: false, attributes: nil)\n                }\n\n                if UserDefaultsManagement.useTextBundleMetaToStoreDates || !fileExist {\n                    self.writeTextBundleInfo(url: url)\n                }\n            }\n\n            let contentSrc: URL? = getContentFileURL()\n            let dst = contentSrc ?? getContentSaveURL()\n\n            var originalContentsURL: URL? = nil\n            if let contentSrc = contentSrc {\n                originalContentsURL = contentSrc\n            }\n\n            try fileWrapper.write(to: dst, options: .atomic, originalContentsURL: originalContentsURL)\n            try FileManager.default.setAttributes(attributes, ofItemAtPath: dst.path)\n\n            if decryptedTemporarySrc != nil {\n                Storage.shared().ciphertextWriter.cancelAllOperations()\n                Storage.shared().ciphertextWriter.addOperation {\n                    guard Storage.shared().ciphertextWriter.operationCount == 1 else { return }\n                    self.writeEncrypted()\n                }\n            }\n        } catch {\n            NSLog(\"Write error \\(error)\")\n            return false\n        }\n\n        return true\n    }\n\n    private func getContentSaveURL() -> URL {\n        let url = getURL()\n\n        if isTextBundle() {\n            let ext = getExtensionForContainer()\n            return url.appendingPathComponent(\"text.\\(ext)\")\n        }\n\n        return url\n    }\n\n    public func getContentFileURL() -> URL? {\n        var url = getURL()\n\n        if isTextBundle() {\n            let ext = getExtensionForContainer()\n            url = url.appendingPathComponent(\"text.\\(ext)\")\n\n            if !FileManager.default.fileExists(atPath: url.path) {\n                url = url.deletingLastPathComponent()\n\n                if let dirList = try? FileManager.default.contentsOfDirectory(atPath: url.path),\n                    let first = dirList.first(where: { $0.starts(with: \"text.\") })\n                {\n                    url = url.appendingPathComponent(first)\n\n                    return url\n                }\n\n                return nil\n            }\n\n            return url\n        }\n\n        if FileManager.default.fileExists(atPath: url.path) {\n            return url\n        }\n\n        return nil\n    }\n    \n    private func getTextBundleJsonInfo() -> String {\n        var data = [\n            \"transient\": \"true\",\n            \"type\": \"\\\"\\(type.uti)\\\"\",\n            \"creatorIdentifier\": \"\\\"co.fluder.fsnotes\\\"\",\n            \"version\": \"2\"\n        ]\n\n        if let originalExtension = originalExtension {\n            data[\"flatExtension\"] = \"\\\"\\(originalExtension)\\\"\"\n        }\n\n        if UserDefaultsManagement.useTextBundleMetaToStoreDates {\n            let creationDate = self.creationDate ?? Date()\n            let modificationDate = self.modifiedLocalAt\n\n            data[\"created\"] = \"\\(Int(creationDate.timeIntervalSince1970))\"\n            data[\"modified\"] = \"\\(Int(modificationDate.timeIntervalSince1970))\"\n        }\n\n        var result = [String]()\n\n        for key in [\n            \"transient\",\n            \"type\",\n            \"creatorIdentifier\",\n            \"version\",\n            \"flatExtension\",\n            \"created\",\n            \"modified\"\n        ] {\n            if let value = data[key] {\n                result.append(\"    \\\"\\(key)\\\" : \\(value)\")\n            }\n        }\n\n        return \"{\\n\" + result.joined(separator: \",\\n\") + \"\\n}\"\n    }\n\n    private func getAssetsFileWrapper() -> FileWrapper {\n        let wrapper = FileWrapper.init(directoryWithFileWrappers: [:])\n        wrapper.preferredFilename = \"assets\"\n\n        do {\n            let assets = url.appendingPathComponent(\"assets\")\n\n            var isDir = ObjCBool(false)\n            if FileManager.default.fileExists(atPath: assets.path, isDirectory: &isDir) && isDir.boolValue {\n                let files = try FileManager.default.contentsOfDirectory(atPath: assets.path)\n                for file in files {\n                    let fileData = try Data(contentsOf: assets.appendingPathComponent(file))\n                    wrapper.addRegularFile(withContents: fileData, preferredFilename: file)\n                }\n            }\n        } catch {\n            print(error)\n        }\n\n        return wrapper\n    }\n    \n    private func writeTextBundleInfo(url: URL) {\n        let url = url.appendingPathComponent(\"info.json\")\n        let info = getTextBundleJsonInfo()\n\n        try? info.write(to: url, atomically: true, encoding: String.Encoding.utf8)\n    }\n        \n    func getFileAttributes() -> [FileAttributeKey: Any] {\n        let url = getContentFileURL() ?? url\n        var attributes: [FileAttributeKey: Any] = [:]\n        \n        do {\n            attributes = try FileManager.default.attributesOfItem(atPath: url.path)\n        } catch {}\n\n        attributes[.modificationDate] = modifiedLocalAt\n        return attributes\n    }\n    \n    func getFileWrapper(attributedString: NSAttributedString, forcePlain: Bool = false) -> FileWrapper {\n        do {\n            let range = NSRange(location: 0, length: attributedString.length)\n\n            return try attributedString.fileWrapper(from: range, documentAttributes: [\n                .documentType : NSAttributedString.DocumentType.plain,\n                .characterEncoding : NSNumber(value: String.Encoding.utf8.rawValue)\n            ])\n        } catch {\n            return FileWrapper()\n        }\n    }\n        \n    func getTitleWithoutLabel() -> String {\n        let title = url.deletingPathExtension().pathComponents.last!\n            .replacingOccurrences(of: \":\", with: \"\")\n            .replacingOccurrences(of: \"/\", with: \"\")\n\n        if title.isValidUUID {\n            return \"\"\n        }\n\n        return title\n    }\n    \n    func isTrash() -> Bool {\n        return project.isTrash\n    }\n    \n    public func contains<S: StringProtocol>(terms: [S]) -> Bool {\n        return name.localizedStandardContains(terms) || content.string.localizedStandardContains(terms)\n    }\n\n    public func loadTags() {\n        if UserDefaultsManagement.inlineTags {\n            _ = scanContentTags()\n        }\n    }\n    \n    public func scanContentTags() -> ([String], [String]) {\n        var added = [String]()\n        var removed = [String]()\n\n        let matchingOptions = NSRegularExpression.MatchingOptions(rawValue: 0)\n        let options: NSRegularExpression.Options = [\n            .allowCommentsAndWhitespace,\n            .anchorsMatchLines\n        ]\n\n        var tags = [String]()\n        \n        do {\n            let range = NSRange(location: 0, length: content.string.count)\n            let re = try NSRegularExpression(pattern: FSParser.tagsPattern, options: options)\n            \n            re.enumerateMatches(\n                in: content.string,\n                options: matchingOptions,\n                range: range,\n                using: { (result, flags, stop) -> Void in\n                    \n                    guard var range = result?.range(at: 1) else { return }\n                    let cleanTag = content.mutableString.substring(with: range)\n                    \n                    range = NSRange(location: range.location - 1, length: range.length + 1)\n\n                    if let codeBlockRangesCache = codeBlockRangesCache {\n                        for codeRange in codeBlockRangesCache {\n                            if NSIntersectionRange(codeRange, range).length > 0 {\n                                return\n                            }\n                        }\n                    }\n\n                    let spanBlock = FSParser.getSpanCodeBlockRange(content: content, range: range)\n                    \n                    if spanBlock == nil && isValid(tag: cleanTag) {\n                        \n                        let parRange = content.mutableString.paragraphRange(for: range)\n                        let par = content.mutableString.substring(with: parRange)\n                        if par.starts(with: \"    \") || par.starts(with: \"\\t\") {\n                            return\n                        }\n                        \n                        if cleanTag.last == \"/\" {\n                            tags.append(String(cleanTag.dropLast()))\n                        } else {\n                            tags.append(cleanTag)\n                        }\n                    }\n                }\n            )\n        } catch {\n            print(\"Tags parsing: \\(error)\")\n        }\n\n        if tags.contains(\"notags\") {\n            removed = self.tags\n\n            self.tags.removeAll()\n            return (added, removed)\n        }\n\n        for noteTag in self.tags {\n            if !tags.contains(noteTag) {\n                removed.append(noteTag)\n            }\n        }\n        \n        for tag in tags {\n            if !self.tags.contains(tag) {\n                added.append(tag)\n            }\n        }\n\n        self.tags = tags\n\n        return (added, removed)\n    }\n\n    private var excludeRanges = [NSRange]()\n\n    public func isValid(tag: String) -> Bool {\n        if tag.isNumber {\n            return false\n        }\n\n        if tag.isHexColor() {\n            return false\n        }\n\n        return true\n    }\n    \n    public func getAttachmentFileUrl(name: String) -> URL? {\n        if name.count == 0 {\n            return nil\n        }\n\n        if name.starts(with: \"http://\") || name.starts(with: \"https://\") {\n            return URL(string: name)\n        }\n\n        if isEncrypted() && (\n            name.starts(with: \"/i/\") || name.starts(with: \"i/\")\n        ) {\n            return project.url.appendingPathComponent(name)\n        }\n        \n        if isTextBundle() {\n            return getURL().appendingPathComponent(name)\n        }\n\n        return project.url.appendingPathComponent(name)\n    }\n\n    #if os(OSX)\n    public func getDupeName() -> String? {\n        var url = self.url\n        let ext = url.pathExtension\n        url.deletePathExtension()\n\n        var name = url.lastPathComponent\n        url.deleteLastPathComponent()\n\n        let regex = try? NSRegularExpression(pattern: \"(.+)\\\\sCopy\\\\s(\\\\d)+$\", options: .caseInsensitive)\n        if let result = regex?.firstMatch(in: name, range: NSRange(0..<name.count)) {\n            if let range = Range(result.range(at: 1), in: name) {\n                name = String(name[range])\n            }\n        }\n\n        var endName = name\n        if !endName.hasSuffix(\" Copy\") {\n            endName += \" Copy\"\n        }\n\n        let dstUrl = NameHelper.getUniqueFileName(name: endName, project: project, ext: ext)\n\n        return dstUrl.deletingPathExtension().lastPathComponent\n    }\n    #endif\n\n    public func loadPreviewInfo() {\n        guard !isParsed || title.isEmpty && (imageUrl?.isEmpty ?? true) else { return }\n        \n        defer {\n            imageUrl = getImagesFromContent()\n            isParsed = true\n        }\n        \n        if content.string.hasPrefix(\"---\") {\n            if parseYAMLBlock() {\n                return\n            }\n        }\n        \n        if project.settings.isFirstLineAsTitle() {\n            let lines = getNonEmptyLines()\n            if !lines.isEmpty {\n                title = lines.first!.trim()\n                \n                let result = lines.dropFirst()\n                preview =\n                    result.joined(separator: \" \")\n                        .trimMDSyntax()\n                        .condenseWhitespace()\n                \n                return\n            }\n        }\n        \n        loadTitleFromFileName()\n        preview = getPreviewLabel()\n    }\n\n    public func getImagesFromContent() -> [URL] {\n        var urls = [URL]()\n\n        let range = NSRange(location: 0, length: content.length)\n        content.enumerateAttribute(.attachment, in: range) { (value, vRange, _) in\n            guard let meta = content.getMeta(at: vRange.location) else { return }\n\n            if meta.url.isMedia {\n                urls.append(meta.url)\n            }\n        }\n\n        return urls\n    }\n\n    public func invalidateCache() {\n        self.imageUrl = nil\n        self.preview = String()\n        self.title = String()\n        self.isParsed = false\n    }\n\n    public func isEqualURL(url: URL) -> Bool {\n        return url.path == self.url.path\n    }\n\n    public func append(string: NSMutableAttributedString) {\n        content.append(string)\n    }\n\n    public func append(image data: Data, url: URL? = nil) {\n        guard let path = ImagesProcessor.writeFile(data: data, url: url, note: self) else { return }\n\n        var prefix = \"\\n\\n\"\n        if content.length == 0 {\n            prefix = String()\n        }\n\n        let markdown = NSMutableAttributedString(string: \"\\(prefix)![](\\(path))\")\n        append(string: markdown)\n    }\n\n    @objc public func getName() -> String {\n        if title.isValidUUID {\n            return \"Untitled Note\"\n        }\n\n        return title\n    }\n\n    public func getCacheForPreviewImage(at url: URL) -> URL? {\n        var temporary = URL(fileURLWithPath: NSTemporaryDirectory())\n            temporary.appendPathComponent(\"Preview\")\n\n        if let filePath = url.absoluteString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {\n\n            return temporary.appendingPathComponent(filePath)\n        }\n\n        return nil\n    }\n\n    public func removeCacheForPreviewImages() {\n        loadPreviewInfo()\n\n        guard let imageURLs = imageUrl else { return }\n\n        for url in imageURLs {\n            if let imageURL = getCacheForPreviewImage(at: url) {\n                if FileManager.default.fileExists(atPath: imageURL.path) {\n                    try? FileManager.default.removeItem(at: imageURL)\n                }\n            }\n        }\n    }\n\n    private func convertFlatToTextBundle() -> URL {\n        let temporary = URL(fileURLWithPath: NSTemporaryDirectory())\n        let temporaryProject = Project(storage: project.storage, url: temporary)\n\n        let currentName = url.deletingPathExtension().lastPathComponent\n        let note = Note(name: currentName, project: temporaryProject, type: type, cont: .textBundleV2)\n\n        note.originalExtension = url.pathExtension\n        note.content = content\n\n        let imagesMeta = content.getImagesAndFiles()\n        let mutableContent = content.unloadAttachments()\n\n        // write textbundle body\n        guard note.write(attributedString: mutableContent) else { return note.url }\n\n        for imageMeta in imagesMeta {\n            moveFilesFlatToAssets(attributedString: mutableContent, from: imageMeta.url, imagePath: imageMeta.path, to: note.url)\n        }\n\n        // write updated image pathes\n        guard note.write(attributedString: mutableContent) else {\n            return note.url\n        }\n\n        return note.url\n    }\n\n    private func convertTextBundleToFlat(name: String) {\n        let textBundleURL = url\n        let json = textBundleURL.appendingPathComponent(\"info.json\")\n\n        if let jsonData = try? Data(contentsOf: json),\n            let info = try? JSONDecoder().decode(TextBundleInfo.self, from: jsonData) {\n                        \n            let ext = NoteType.withUTI(rawValue: info.type).getExtension(for: .textBundleV2)\n            let flatExtension = info.flatExtension ?? ext\n            \n            let fileName = \"text.\\(ext)\"\n\n            let uniqueURL = NameHelper.getUniqueFileName(name: name, project: project, ext: flatExtension)\n            let flatURL = url.appendingPathComponent(fileName)\n\n            url = uniqueURL\n            type = .withExt(rawValue: flatExtension)\n            container = .none\n\n            try? FileManager.default.moveItem(at: flatURL, to: uniqueURL)\n\n            moveFilesAssetsToFlat(src: textBundleURL, project: project)\n\n            try? FileManager.default.removeItem(at: textBundleURL)\n        }\n    }\n\n    private func moveFilesFlatToAssets(attributedString: NSMutableAttributedString, from imageURL: URL, imagePath: String, to dest: URL) {\n        let dest = dest.appendingPathComponent(\"assets\")\n\n        guard let fileName = imageURL.lastPathComponent.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else { return }\n\n        if !FileManager.default.fileExists(atPath: dest.path) {\n            try? FileManager.default.createDirectory(at: dest, withIntermediateDirectories: false, attributes: nil)\n        }\n\n        do {\n            try FileManager.default.moveItem(at: imageURL, to: dest.appendingPathComponent(fileName))\n\n            let prefix = \"](\"\n            let postfix = \")\"\n\n            let find = prefix + imagePath + postfix\n            let replace = prefix + \"assets/\" + imageURL.lastPathComponent + postfix\n\n            guard find != replace else { return }\n\n            while attributedString.mutableString.contains(find) {\n                let range = attributedString.mutableString.range(of: find)\n                attributedString.replaceCharacters(in: range, with: replace)\n            }\n        } catch {\n            print(\"Enc error: \\(error)\")\n        }\n    }\n\n    private func moveFilesAssetsToFlat(src: URL, project: Project) {\n        let mutableContent =\n            NSMutableAttributedString(attributedString: content).unloadAttachments()\n\n        let imagesMeta = content.getImagesAndFiles()\n        for imageMeta in imagesMeta {\n            let fileName = imageMeta.url.lastPathComponent\n            var dst: URL?\n            var prefix = \"files/\"\n\n            if imageMeta.url.isImage {\n                prefix = \"i/\"\n            }\n\n            dst = project.url.appendingPathComponent(prefix + fileName)\n\n            guard let moveTo = dst else { continue }\n\n            let dstDir = project.url.appendingPathComponent(prefix)\n            let moveFrom = src.appendingPathComponent(\"assets/\" + fileName)\n\n            do {\n                if !FileManager.default.fileExists(atPath: dstDir.path) {\n                    try? FileManager.default.createDirectory(at: dstDir, withIntermediateDirectories: false, attributes: nil)\n                }\n\n                try FileManager.default.moveItem(at: moveFrom, to: moveTo)\n\n            } catch {\n                if let fileName = ImagesProcessor.getFileName(from: moveTo, to: dstDir, ext: moveTo.pathExtension) {\n\n                    let moveTo = dstDir.appendingPathComponent(fileName)\n                    try? FileManager.default.moveItem(at: moveFrom, to: moveTo)\n                }\n            }\n\n            guard let escapedFileName = fileName.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else { continue }\n\n            let find = \"](assets/\" + escapedFileName + \")\"\n            let replace = \"](\" + prefix + escapedFileName + \")\"\n\n            guard find != replace else { return }\n\n            while mutableContent.mutableString.contains(find) {\n                let range = mutableContent.mutableString.range(of: find)\n                mutableContent.replaceCharacters(in: range, with: replace)\n            }\n        }\n\n        content = mutableContent.loadAttachments(self)\n        _ = save()\n    }\n\n    private func loadTextBundle() -> Bool {\n        do {\n            let url = getURL()\n            let json = url.appendingPathComponent(\"info.json\")\n            let jsonData = try Data(contentsOf: json)\n            let info = try JSONDecoder().decode(TextBundleInfo.self, from: jsonData)\n\n            type = .withUTI(rawValue: info.type)\n\n            if info.version == 1 {\n                container = .textBundle\n                return true\n            }\n\n            container = .textBundleV2\n            return true\n        } catch {\n            print(\"Can not load TextBundle: \\(error)\")\n        }\n\n        return false\n    }\n\n    private func writeEncrypted() {\n        guard let baseTextPack = self.decryptedTemporarySrc else { return }\n\n        let textPackURL = baseTextPack.appendingPathExtension(\"textpack\")\n        var password = self.password\n\n        SSZipArchive.createZipFile(atPath: textPackURL.path, withContentsOfDirectory: baseTextPack.path)\n\n        do {\n            if password == nil {\n                let item = KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: \"Master Password\")\n                password = try item.readPassword()\n            }\n\n            guard let unwrappedPassword = password else { return }\n\n            let data = try Data(contentsOf: textPackURL)\n            let encryptedData = RNCryptor.encrypt(data: data, withPassword: unwrappedPassword)\n            try encryptedData.write(to: self.url)\n\n            let attributes = getFileAttributes()\n            try FileManager.default.setAttributes(attributes, ofItemAtPath: url.path)\n\n            print(\"FSNotes successfully writed encrypted data for: \\(title)\")\n\n            try FileManager.default.removeItem(at: textPackURL)\n        } catch {\n            return\n        }\n    }\n\n    public func unLock(password: String) -> Bool {\n        let sharedStorage = Storage.shared()\n\n        do {\n            let name = url.deletingPathExtension().lastPathComponent\n            let data = try Data(contentsOf: url)\n\n            guard let temporary = sharedStorage.makeTempEncryptionDirectory()?.appendingPathComponent(name) else { return false }\n\n            let temporaryTextPack = temporary.appendingPathExtension(\"textpack\")\n            let temporaryTextBundle = temporary.appendingPathExtension(\"textbundle\")\n\n            let decryptedData = try RNCryptor.decrypt(data: data, withPassword: password)\n            try decryptedData.write(to: temporaryTextPack)\n\n            let successUnZip = SSZipArchive.unzipFile(atPath: temporaryTextPack.path, toDestination: temporaryTextBundle.path)\n\n            try FileManager.default.removeItem(at: temporaryTextPack)\n            guard successUnZip else { return false }\n\n            self.decryptedTemporarySrc = temporaryTextBundle\n\n            guard loadTextBundle() else {\n                container = .encryptedTextPack\n                return false\n            }\n\n            invalidateCache()\n            load(tags: false)\n            loadTitle()\n            \n            self.password = password\n\n            return true\n        } catch {\n            print(\"Decryption error: \\(error)\")\n            return false\n        }\n    }\n\n    public func unEncrypt(password: String) -> Bool {\n        let originalSrc = url\n\n        do {\n            let name = url.deletingPathExtension().lastPathComponent\n            let data = try Data(contentsOf: url)\n\n            let decryptedData = try RNCryptor.decrypt(data: data, withPassword: password)\n            let textPackURL = getTempTextPackURL()\n            try decryptedData.write(to: textPackURL)\n\n            let newURL = project.url.appendingPathComponent(name + \".textbundle\", isDirectory: false)\n            url = newURL\n            container = .textBundleV2\n\n            let successUnZip = SSZipArchive.unzipFile(atPath: textPackURL.path, toDestination: newURL.path)\n\n            guard successUnZip else {\n                url = originalSrc\n                container = .encryptedTextPack\n                return false\n            }\n\n            try FileManager.default.removeItem(at: textPackURL)\n            try FileManager.default.removeItem(at: originalSrc)\n\n            self.decryptedTemporarySrc = nil\n            self.password = nil\n\n            invalidateCache()\n            load()\n            parseURL()\n\n            return true\n\n        } catch {\n            print(\"Decryption error: \\(error)\")\n\n            return false\n        }\n    }\n\n    public func unEncryptUnlocked() -> Bool {\n        guard let decSrcUrl = decryptedTemporarySrc else { return false }\n\n        let originalSrc = url\n\n        do {\n            let name = url.deletingPathExtension().lastPathComponent\n            let newURL = project.url.appendingPathComponent(name).appendingPathExtension(\"textbundle\")\n\n            url = newURL\n            container = .textBundleV2\n\n            try FileManager.default.removeItem(at: originalSrc)\n            try FileManager.default.moveItem(at: decSrcUrl, to: newURL)\n\n            self.decryptedTemporarySrc = nil\n\n            load()\n            parseURL()\n            \n            return true\n\n        } catch {\n            print(\"Encryption removing error: \\(error)\")\n\n            return false\n        }\n    }\n\n    public func encrypt(password: String) -> Bool {\n        if container == .encryptedTextPack {\n            return false\n        }\n        \n        var temporaryFlatSrc: URL?\n        let isContainer = isTextBundle()\n\n        if !isContainer {\n            temporaryFlatSrc = convertFlatToTextBundle()\n        }\n\n        let originalSrc = url\n        let fileName = url.deletingPathExtension().lastPathComponent\n\n        let baseTextPack = temporaryFlatSrc ?? url\n        let textPackURL = getTempTextPackURL()\n\n        SSZipArchive.createZipFile(atPath: textPackURL.path, withContentsOfDirectory: baseTextPack.path)\n\n        do {\n            if let tempURL = temporaryFlatSrc {\n                try FileManager.default.removeItem(at: tempURL)\n            }\n\n            let encryptedURL = \n                self.project.url\n                .appendingPathComponent(fileName)\n                .appendingPathExtension(\"etp\")\n\n            let data = try Data(contentsOf: textPackURL)\n            let encrypted = RNCryptor.encrypt(data: data, withPassword: password)\n\n            url = encryptedURL\n            container = .encryptedTextPack\n            parseURL()\n\n            try encrypted.write(to: encryptedURL)\n\n            try FileManager.default.removeItem(at: originalSrc)\n            try FileManager.default.removeItem(at: textPackURL)\n\n            cleanOut()\n            removeTempContainer()\n            invalidateCache()\n\n            return true\n        } catch {\n            url = originalSrc\n            parseURL()\n\n            print(\"Encyption error: \\(error) \\(error.localizedDescription)\")\n\n            return false\n        }\n    }\n\n    public func getTempTextPackURL() -> URL {\n        let fileName = url.deletingPathExtension().lastPathComponent\n\n        let textPackURL =\n            URL(fileURLWithPath: NSTemporaryDirectory())\n                .appendingPathComponent(fileName, isDirectory: false)\n                .appendingPathExtension(\"textpack\")\n\n        return textPackURL\n    }\n\n    public func encryptAndUnlock(password: String) {\n        if encrypt(password: password) {\n            _ = unLock(password: password)\n        }\n    }\n\n    public func cleanOut() {\n        isParsed = false\n        imageUrl = nil\n        cacheHash = nil\n        content = NSMutableAttributedString(string: String())\n        preview = String()\n        title = String()\n    }\n\n    private func removeTempContainer() {\n        if let url = decryptedTemporarySrc {\n            try? FileManager.default.removeItem(at: url)\n        }\n    }\n\n    public func isUnlocked() -> Bool {\n        return (decryptedTemporarySrc != nil)\n    }\n\n    public func isEncrypted() -> Bool {\n        return (container == .encryptedTextPack || isUnlocked())\n    }\n\n    public func isEncryptedAndLocked() -> Bool {\n        return container == .encryptedTextPack && decryptedTemporarySrc == nil\n    }\n\n    public func lock() -> Bool {\n        guard let temporaryURL = self.decryptedTemporarySrc else { return false }\n\n        while true {\n            if Storage.shared().ciphertextWriter.operationCount == 0 {\n                print(\"Note \\\"\\(title)\\\" successfully locked.\")\n\n                container = .encryptedTextPack\n                cleanOut()\n                parseURL()\n\n                try? FileManager.default.removeItem(at: temporaryURL)\n                self.decryptedTemporarySrc = nil\n                self.password = nil\n\n                return true\n            }\n\n            usleep(100000)\n        }\n    }\n\n    public func showIconInList() -> Bool {\n        return (isPinned || isEncrypted() || isPublished())\n    }\n\n    public func getShortTitle() -> String {\n        let fileName = getFileName()\n\n        if fileName.isValidUUID {\n            return \"▽\"\n        }\n\n        return fileName\n    }\n\n    public func getTitle() -> String? {\n        if isEncrypted() && !isUnlocked() {\n            return getFileName()\n        }\n\n        #if os(iOS)\n        if !project.settings.isFirstLineAsTitle() {\n            return getFileName()\n        }\n        #endif\n\n        if title.count > 0 {\n            if title.isValidUUID && project.settings.isFirstLineAsTitle() {\n                return nil\n            }\n\n            if title.starts(with: \"![\") {\n                return nil;\n            }\n            \n            return title\n        }\n\n        if getFileName().isValidUUID {\n            let previewCharsQty = preview.count\n            if previewCharsQty > 0 {\n                return \"Untitled Note\"\n            }\n        }\n\n        return nil\n    }\n\n    public func rename(to name: String) {\n        var name = name\n        var i = 1\n\n        while project.fileExist(fileName: name, ext: url.pathExtension) {\n\n            // disables renaming loop\n            if fileName.startsWith(string: name) {\n                return\n            }\n\n            let items = name.split(separator: \" \")\n\n            if let last = items.last, let position = Int(last) {\n                let full = items.dropLast()\n\n                name = full.joined(separator: \" \") + \" \" + String(position + 1)\n\n                i = position + 1\n            } else {\n                name = name + \" \" + String(i)\n\n                i += 1\n            }\n        }\n\n        let isPinned = self.isPinned\n        let dst = getNewURL(name: name)\n\n        removePin()\n\n        if isEncrypted() {\n            _ = lock()\n        }\n\n        if move(to: dst) {\n            url = dst\n            parseURL()\n        }\n\n        if isPinned {\n            addPin()\n        }\n    }\n\n    public func getCursorPosition() -> Int? {\n        var position: Int?\n\n        if let data = try? url.extendedAttribute(forName: \"co.fluder.fsnotes.cursor\") {\n            position = data.withUnsafeBytes { (ptr: UnsafeRawBufferPointer) -> Int in\n                ptr.load(as: Int.self)\n            }\n\n            return position\n        }\n\n        return nil\n    }\n\n    public func addTag(_ name: String) {\n        guard !tags.contains(name) else { return }\n\n        let lastParRange = content.mutableString.paragraphRange(for: NSRange(location: content.length, length: 0))\n        let string = content.attributedSubstring(from: lastParRange).string.trim()\n\n        if string.count != 0 && (\n            !string.starts(with: \"#\") || string.starts(with: \"# \")\n        ) {\n            let newLine = NSAttributedString(string: \"\\n\\n\")\n            content.append(newLine)\n        }\n\n        var prefix = String()\n        if string.starts(with: \"#\") {\n            prefix += \" \"\n        }\n\n        content.append(NSAttributedString(string: prefix + \"#\" + name))\n        if save() {\n            Storage.shared().add(self)\n        }\n    }\n\n    public func resetAttributesCache() {\n        cacheHash = nil\n    }\n    \n    public func getLatinName() -> String {\n        let name = (self.fileName as NSString)\n            .applyingTransform(.toLatin, reverse: false)?\n            .applyingTransform(.stripDiacritics, reverse: false) ?? self.fileName\n        \n        return name.replacingOccurrences(of: \" \", with: \"_\")\n    }\n    \n    public func isPublished() -> Bool {\n        return apiId != nil || uploadPath != nil\n    }\n    \n    public func convertContainer(to: NoteContainer) {\n        if to == .textBundleV2 {\n            let tempUrl = convertFlatToTextBundle()\n            \n            let name = url.deletingPathExtension().lastPathComponent\n            let uniqueURL = NameHelper.getUniqueFileName(name: name, project: project, ext: \"textbundle\")\n\n            do {\n                let oldUrl = url\n                url = uniqueURL\n                try FileManager.default.moveItem(at: tempUrl, to: uniqueURL)\n                try FileManager.default.removeItem(at: oldUrl)\n            } catch {/*_*/}\n        } else {\n            let name = url.deletingPathExtension().lastPathComponent\n            \n            convertTextBundleToFlat(name: name)\n        }\n        \n        invalidateCache()\n        load()\n        parseURL()\n    }\n\n    public func getAutoRenameTitle() -> String? {\n        if UserDefaultsManagement.naming != .autoRename && UserDefaultsManagement.naming != .autoRenameNew {\n            return nil\n        }\n        \n        if UserDefaultsManagement.naming == .autoRenameNew && isOlderThan30Seconds(from: creationDate) {\n            return nil\n        }\n        \n        if content.string.startsWith(string: \"---\") {\n            loadPreviewInfo()\n        }\n\n        let title = title.trunc(length: 64)\n\n        if fileName == title || title.count == 0 || isEncrypted() {\n            return nil\n        }\n\n        if project.fileExist(fileName: title, ext: url.pathExtension) {\n            return nil\n        }\n\n        return title\n    }\n\n    public func setSelectedRange(range: NSRange? = nil) {\n        selectedRange = range\n    }\n\n    public func getSelectedRange() -> NSRange? {\n        return selectedRange\n    }\n\n    public func setContentOffset(contentOffset: CGPoint) {\n        self.contentOffset = contentOffset\n    }\n\n    public func getContentOffset() -> CGPoint {\n        return contentOffset\n    }\n\n    public func getRelatedPath() -> String {\n        return project.getNestedPath() + \"/\" + name\n    }\n    \n\n    func isOlderThan30Seconds(from date: Date? = nil) -> Bool {\n        guard let date = date else { return false }\n\n        let thirtySecondsAgo = Date().addingTimeInterval(-30)\n        return date < thirtySecondsAgo //Returns false if date is not older than 30 seconds\n    }\n    \n    public func loadPreviewState() {\n        previewState = project.settings.notesPreview.contains(name)\n    }\n\n    public func cacheCodeBlocks() {\n    #if !SHARE_EXT\n        let ranges = CodeBlockDetector.shared.findCodeBlocks(in: content)\n        codeBlockRangesCache = ranges\n    #endif\n    }\n\n    public func isInCodeBlockRange(range: NSRange) -> Bool {\n        guard let codeBlockRangesCache = codeBlockRangesCache else { return false }\n\n        for codeRange in codeBlockRangesCache {\n            if NSIntersectionRange(range, codeRange).length > 0 {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    public func save(data: Data, preferredName: String? = nil) -> (String, URL)? {\n        // Get attach dir\n        let attachDir = getAttachDirectory(data: data)\n\n        // Create if not exist\n        if !FileManager.default.fileExists(atPath: attachDir.path, isDirectory: nil) {\n            try? FileManager.default.createDirectory(at: attachDir, withIntermediateDirectories: true, attributes: nil)\n        }\n\n        guard let fileName = getFileName(dst: attachDir, preferredName: preferredName) else { return nil }\n\n        let fileUrl = attachDir.appendingPathComponent(fileName)\n\n        do {\n            try data.write(to: fileUrl, options: .atomic)\n        } catch {\n            print(\"Attachment error: \\(error)\")\n            return nil\n        }\n\n        let lastTwo = fileUrl.deletingLastPathComponent().lastPathComponent + \"/\" + fileUrl.lastPathComponent\n\n        return (lastTwo, fileUrl)\n    }\n\n    public func getAttachDirectory(data: Data) -> URL {\n        if isTextBundle() {\n            return getURL().appendingPathComponent(\"assets\", isDirectory: true)\n        }\n\n        let prefix = data.getFileType() != .unknown ? \"i\" : \"files\"\n\n        return project.url.appendingPathComponent(prefix, isDirectory: true)\n    }\n\n    public func getFileName(dst: URL, preferredName: String? = nil) -> String? {\n        var name = preferredName ?? UUID().uuidString.lowercased()\n        let ext = (name as NSString).pathExtension\n\n        while true {\n            let destination = dst.appendingPathComponent(name)\n            let icloud = destination.appendingPathExtension(\"icloud\")\n\n            if FileManager.default.fileExists(atPath: destination.path) || FileManager.default.fileExists(atPath: icloud.path) {\n                let newBase = UUID().uuidString.lowercased()\n                if ext.isEmpty {\n                    name = newBase\n                } else {\n                    name = \"\\(newBase).\\(ext)\"\n                }\n                continue\n            }\n\n            return name\n        }\n    }\n\n    public func saveSimple() -> Bool {\n        return write(attributedString: content)\n    }\n\n    #if os(macOS)\n    public func cache() {\n        if cacheLock { return }\n\n        let hash = content.string.fnv1a\n        cacheLock = true\n\n        if let copy = content.mutableCopy() as? NSMutableAttributedString {\n            NotesTextProcessor.highlight(attributedString: copy)\n            cacheCodeBlocks()\n\n            if content.string.fnv1a == copy.string.fnv1a {\n                content = copy\n                cacheHash = hash\n            }\n        }\n\n        cacheLock = false\n    }\n    #endif\n}\n"
  },
  {
    "path": "FSNotesCore/Business/NoteAttachment.swift",
    "content": "//\n//  ImageAttachment.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/15/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AVKit\n\n#if os(OSX)\n    import Cocoa\n    typealias PlatformImage = NSImage\n#else\n    import UIKit\n    typealias PlatformImage = UIImage\n#endif\n\n// MARK: - NoteAttachment\n\nclass NoteAttachment {\n\n    // MARK: - Properties\n\n    public let url: URL\n    public var imageCache: URL?\n\n    // MARK: - Constants\n\n    private enum Constants {\n        static let previewPrefix = \"Preview\"\n        static let thumbnailPrefixMacOS = \"ThumbnailsBig\"\n        static let thumbnailPrefixIOS = \"ThumbnailsBigInline\"\n        static let fontFamily = \"Avenir Next\"\n        static let fontNameIOS = \"AvenirNext-BoldItalic\"\n        static let defaultFontSize: CGFloat = 14.0\n        static let fileSizeThreshold = 10000\n        static let bytesInMB: Double = 1_000_000\n\n        #if os(iOS)\n        static let thumbnailPrefix = thumbnailPrefixIOS\n        #else\n        static let thumbnailPrefix = thumbnailPrefixMacOS\n        #endif\n    }\n\n    // MARK: - Initialization\n\n    init(url: URL) {\n        self.url = url\n    }\n\n    // MARK: - Public Methods\n\n    public func getImageText() -> String {\n        let fileSize = url.fileSize\n        let sizeTitle = formatFileSize(Int(fileSize))\n        return \" \\(url.lastPathComponent) – \\(sizeTitle) 📎 \"\n    }\n\n    public func getImageWidth(text: String) -> Double {\n        let font = getAttachmentFont()\n        return (text as NSString).size(withAttributes: [.font: font]).width\n    }\n\n    public func getAttachmentImage() -> PlatformImage? {\n        let height = UserDefaultsManagement.noteFont.getAttachmentHeight()\n        let text = getImageText()\n        let width = getImageWidth(text: text)\n        let imageSize = CGSize(width: width, height: height)\n\n        return imageFromText(text: text, imageSize: imageSize)\n    }\n\n    // MARK: - Private Methods\n\n    private func formatFileSize(_ size: Int) -> String {\n        if size > Constants.fileSizeThreshold {\n            let sizeInMB = Double(size) / Constants.bytesInMB\n            return String(format: \"%.2f MB\", sizeInMB)\n        }\n        return \"\\(size) bytes\"\n    }\n\n    private func getAttachmentFont() -> PlatformFont {\n        #if os(OSX)\n        let traits = NSFontTraitMask(rawValue: NSFontTraitMask.RawValue(\n            NSFontBoldTrait | NSFontItalicTrait\n        ))\n\n        return NSFontManager().font(\n            withFamily: Constants.fontFamily,\n            traits: traits,\n            weight: 1,\n            size: CGFloat(UserDefaultsManagement.fontSize)\n        ) ?? PlatformFont.systemFont(ofSize: Constants.defaultFontSize)\n        #else\n        return PlatformFont(name: Constants.fontNameIOS, size: CGFloat(UserDefaultsManagement.fontSize))\n            ?? PlatformFont.systemFont(ofSize: Constants.defaultFontSize)\n        #endif\n    }\n\n    public func imageFromText(text: String, imageSize: CGSize) -> PlatformImage? {\n        let font = getAttachmentFont()\n        let attributes = createTextAttributes(font: font)\n        let textSize = text.size(withAttributes: attributes)\n\n        #if os(OSX)\n        return createImageMacOS(text: text, imageSize: imageSize, attributes: attributes, textSize: textSize)\n        #else\n        return createImageIOS(text: text, imageSize: imageSize, attributes: attributes, textSize: textSize)\n        #endif\n    }\n\n    private func createTextAttributes(font: PlatformFont) -> [NSAttributedString.Key: Any] {\n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.alignment = .center\n\n        #if os(OSX)\n        let isDark = UserDataService.instance.isDark\n        let textColor: PlatformColor = isDark ? .white : .black\n        let backgroundColor: PlatformColor = isDark ?\n            NSColor(red: 0.16, green: 0.17, blue: 0.18, alpha: 1.00) : .white\n        #else\n        let textColor = NotesTextProcessor.fontColor\n        let backgroundColor = UIColor.dropDownColor\n        #endif\n\n        return [\n            .font: font,\n            .foregroundColor: textColor,\n            .backgroundColor: backgroundColor,\n            .paragraphStyle: paragraphStyle\n        ]\n    }\n\n    private func calculateCenteredRect(textSize: CGSize, containerSize: CGSize) -> CGRect {\n        return CGRect(\n            x: (containerSize.width - textSize.width) / 2.0,\n            y: (containerSize.height - textSize.height) / 2.0,\n            width: textSize.width,\n            height: textSize.height\n        )\n    }\n}\n\n// MARK: - Static Utility Methods (Platform-Independent)\n\nextension NoteAttachment {\n    public static func getCacheUrl(from url: URL, prefix: String = Constants.previewPrefix) -> URL? {\n        var temporary = URL(fileURLWithPath: NSTemporaryDirectory())\n        temporary.appendPathComponent(prefix)\n\n        let filename = url.absoluteString.md5 + \".\" + url.pathExtension\n        return temporary.appendingPathComponent(filename)\n    }\n\n    public static func savePreviewImage(url: URL, image: PlatformImage, prefix: String = Constants.previewPrefix) {\n        var temporary = URL(fileURLWithPath: NSTemporaryDirectory())\n        temporary.appendPathComponent(prefix)\n\n        createDirectoryIfNeeded(at: temporary)\n\n        guard let cacheUrl = getCacheUrl(from: url, prefix: prefix),\n              let data = image.jpgData else {\n            return\n        }\n\n        try? data.write(to: cacheUrl)\n    }\n\n    private static func createDirectoryIfNeeded(at url: URL) {\n        if !FileManager.default.fileExists(atPath: url.path) {\n            try? FileManager.default.createDirectory(\n                at: url,\n                withIntermediateDirectories: true,\n                attributes: nil\n            )\n        }\n    }\n\n    public static func getImage(url: URL, size: CGSize) -> PlatformImage? {\n        guard let image = loadImage(from: url, size: size) else {\n            return nil\n        }\n\n        return getCachedOrResizedImage(original: image, url: url, size: size)\n    }\n\n    private static func loadImage(from url: URL, size: CGSize) -> PlatformImage? {\n        if url.isVideo {\n            return generateVideoThumbnail(from: url, size: size)\n        }\n\n        guard let imageData = try? Data(contentsOf: url) else {\n            return nil\n        }\n\n        #if os(OSX)\n        return NSImage(data: imageData)\n        #else\n        return UIImage(data: imageData)\n        #endif\n    }\n\n    private static func generateVideoThumbnail(from url: URL, size: CGSize) -> PlatformImage? {\n        let asset = AVURLAsset(url: url, options: nil)\n        let generator = AVAssetImageGenerator(asset: asset)\n\n        guard let cgImage = try? generator.copyCGImage(\n            at: CMTimeMake(value: 0, timescale: 1),\n            actualTime: nil\n        ) else {\n            return nil\n        }\n\n        #if os(OSX)\n        return NSImage(cgImage: cgImage, size: size)\n        #else\n        return UIImage(cgImage: cgImage)\n        #endif\n    }\n\n    private static func getCachedOrResizedImage(\n        original: PlatformImage,\n        url: URL,\n        size: CGSize\n    ) -> PlatformImage? {\n        let cacheURL = getCacheUrl(from: url, prefix: Constants.thumbnailPrefix)\n\n        if let cacheURL = cacheURL,\n           FileManager.default.fileExists(atPath: cacheURL.path) {\n            #if os(OSX)\n            if let cached = NSImage(contentsOfFile: cacheURL.path) {\n                return cached\n            }\n            #else\n            if let cached = UIImage(contentsOfFile: cacheURL.path) {\n                return cached\n            }\n            #endif\n        }\n\n        guard let resized = original.resized(to: size) else {\n            return original\n        }\n\n        savePreviewImage(url: url, image: resized, prefix: Constants.thumbnailPrefix)\n        return resized\n    }\n\n    private static func resizeImage(_ image: PlatformImage, to size: CGSize) -> PlatformImage? {\n        return image\n    }\n}\n\n// MARK: - macOS Specific Methods\n\n#if os(OSX)\nextension NoteAttachment {\n    private func createImageMacOS(\n        text: String,\n        imageSize: CGSize,\n        attributes: [NSAttributedString.Key: Any],\n        textSize: CGSize\n    ) -> NSImage? {\n        let imageRect = NSRect(origin: .zero, size: imageSize)\n        let image = NSImage(size: imageRect.size)\n\n        image.lockFocus()\n        defer { image.unlockFocus() }\n\n        // Fill background\n        (attributes[.backgroundColor] as? NSColor)?.setFill()\n        imageRect.fill()\n\n        // Draw centered text\n        let textRect = calculateCenteredRect(textSize: textSize, containerSize: imageSize)\n        text.draw(in: textRect, withAttributes: attributes)\n\n        return image\n    }\n}\n#endif\n\n// MARK: - iOS Specific Methods\n\n#if os(iOS)\nextension NoteAttachment {\n    private func createImageIOS(\n        text: String,\n        imageSize: CGSize,\n        attributes: [NSAttributedString.Key: Any],\n        textSize: CGSize\n    ) -> UIImage? {\n        let imageRect = CGRect(origin: .zero, size: imageSize)\n\n        UIGraphicsBeginImageContextWithOptions(imageRect.size, false, 0.0)\n        defer { UIGraphicsEndImageContext() }\n\n        guard let context = UIGraphicsGetCurrentContext() else {\n            return nil\n        }\n\n        // Fill background\n        (attributes[.backgroundColor] as? UIColor)?.setFill()\n        context.fill(imageRect)\n\n        // Draw centered text\n        let textRect = calculateCenteredRect(textSize: textSize, containerSize: imageSize)\n        text.draw(in: textRect, withAttributes: attributes)\n\n        return UIGraphicsGetImageFromCurrentImageContext()\n    }\n}\n#endif\n"
  },
  {
    "path": "FSNotesCore/Business/NoteContainer.swift",
    "content": "//\n//  NoteContainer.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/4/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\npublic enum NoteContainer: Int {\n    case none = 0x01\n    case textBundle = 0x02\n    case textBundleV2 = 0x03\n    case encryptedTextPack = 0x04\n\n    static func withExt(rawValue: String) -> NoteContainer {\n        switch rawValue {\n        case \"textbundle\": return .textBundleV2\n        case \"etp\": return .encryptedTextPack\n        default: return .none\n        }\n    }\n\n    public var uti: String {\n        switch self {\n        case .textBundle: return \"com.apple.package\"\n        case .textBundleV2: return \"com.apple.package\"\n        case .encryptedTextPack: return \"es.fsnot.etp.package\"\n        case .none: return \"\"\n        }\n    }\n\n    public var tag: Int {\n        switch self {\n        case .textBundle: return 0x02\n        case .textBundleV2: return 0x03\n        case .encryptedTextPack: return 0x04\n        case .none: return 0x01\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/NoteType.swift",
    "content": "//\n//  NoteFileType.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 1/6/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic enum NoteType: String {\n    case Markdown = \"md\"\n\n    static func withExt(rawValue: String) -> NoteType {\n        switch rawValue {\n            case \"markdown\", \"md\", \"mkd\", \"txt\": return NoteType.Markdown\n            default: return NoteType.Markdown\n        }\n    }\n    \n    static func withTag(rawValue: Int) -> NoteType {\n        switch rawValue {\n        case 1: return .Markdown\n        default: return .Markdown\n        }\n    }\n    \n    static func withUTI(rawValue: String) -> NoteType {\n        switch rawValue {\n        case \"net.daringfireball.markdown\": return .Markdown\n        default: return .Markdown\n        }\n    }\n        \n    public var tag: Int {\n        get {\n            switch self {\n            case .Markdown: return 1\n            }\n        }\n    }\n    \n    public var uti: String {\n        get {\n            switch self {\n            case .Markdown: return \"net.daringfireball.markdown\"\n            }\n        }\n    }\n    \n    public func getExtension(for container: NoteContainer) -> String {\n        return UserDefaultsManagement.noteExtension\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/PreviewState.swift",
    "content": "//\n//  PreviewStateswift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 20.09.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\npublic enum PreviewState: String {\n    case on\n    case off\n}\n"
  },
  {
    "path": "FSNotesCore/Business/ProgressState.swift",
    "content": "//\n//  ActionState.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 20.09.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\npublic enum ProgressState: String {\n    case none\n    case incomplete\n    case done\n}\n"
  },
  {
    "path": "FSNotesCore/Business/Project+Date.swift",
    "content": "//\n//  Proect.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 08.01.2026.\n//  Copyright © 2026 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension Project {\n    public func saveModificationTime() {\n        let dbUrl = url.appendingPathComponent(\".mtime\")\n        var content = String()\n        \n        guard let projects = getAllChild() else { return }\n        for project in projects {\n            let notes = project.getNotes()\n            for note in notes {\n                content += note.modifiedLocalAt.ISO8601Format() + \" \" +  note.getRelatedPath() + \"\\n\"\n            }\n        }\n        \n        try? FileManager.default.removeItem(at: dbUrl)\n        try? content.write(to: dbUrl, atomically: true, encoding: .utf8)\n    }\n\n    public func saveCreationTime() {\n        let dbUrl = url.appendingPathComponent(\".ctime\")\n        var content = String()\n        \n        guard let projects = getAllChild() else { return }\n        for project in projects {\n            let notes = project.getNotes()\n            for note in notes {\n                if let date = note.creationDate {\n                    content += date.ISO8601Format() + \" \" +  note.getRelatedPath() + \"\\n\"\n                }\n            }\n        }\n        \n        try? FileManager.default.removeItem(at: dbUrl)\n        try? content.write(to: dbUrl, atomically: true, encoding: .utf8)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/Project.swift",
    "content": "//\n//  Project.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport CoreServices\n\npublic class Project: NSObject {\n    var storage: Storage\n\n    var url: URL\n\n    public var label: String\n    var isTrash: Bool\n    var isCloudDrive: Bool = false\n    public var parent: Project?\n    var isDefault: Bool\n\n    public var isVirtual = false\n    public var isBookmark: Bool = false\n\n    public var settings = ProjectSettings()\n\n    // all notes loaded with cache diff comparsion\n    public var isReadyForCacheSaving = false\n\n    // if notes loaded from cache validation with fs needed\n    public var isNeededCacheValidation = false\n\n    public var child = [Project]()\n    public var isExpanded = false\n    \n    public var isEncrypted = false\n    public var password: String?\n\n    public var settingsKey = String()\n    public var commitsCache = [String: [String]]()\n\n    public var isCleanGit = false\n    public var gitStatus: String?\n    public var isActiveGit = false\n\n    init(storage: Storage,\n         url: URL,\n         label: String? = nil,\n         isTrash: Bool = false,\n         parent: Project? = nil,\n         isDefault: Bool = false,\n         isBookmark: Bool = false,\n         isVirtual: Bool = false\n    ) {\n        self.storage = storage\n        self.url = url.standardized\n        self.isTrash = isTrash\n        self.parent = parent\n        self.isDefault = isDefault\n        self.isBookmark = isBookmark\n        self.isVirtual = isVirtual\n        self.label = String()\n\n        super.init()\n\n        self.settingsKey = getSettingsKey()\n        self.loadLabel(label)\n        self.isCloudDrive = isCloudDriveFolder(url: url)\n\n        if isDefault {\n            #if os(iOS)\n            settings.showInSidebar = false\n            #endif\n        }\n\n        if let settings = getSettings() {\n            self.settings = settings\n        }\n                \n        if isTrash {\n            settings.showInCommon = false\n        }\n        \n        // Backward compatibility\n        if settings.gitOrigin == nil, self.isDefault, let origin = UserDefaultsManagement.gitOrigin {\n            settings.setOrigin(origin)\n        }\n    }\n\n    public override func isEqual(_ object: Any?) -> Bool {\n            guard let other = object as? Project else { return false }\n            return self.url == other.url\n        }\n\n    public override var hash: Int {\n        return url.hashValue\n    }\n\n    public func getLongSettingsKey() -> String {\n        return \"es.fsnot.project-settings\\(settingsKey)\"\n    }\n    \n    public func saveSettings() {\n        do {\n            NSKeyedArchiver.setClassName(\"ProjectSettings\", for: ProjectSettings.self)\n            let data = try NSKeyedArchiver.archivedData(withRootObject: settings, requiringSecureCoding: true)\n            let key = getLongSettingsKey()\n            \n            #if CLOUD_RELATED_BLOCK\n            let keyStore = NSUbiquitousKeyValueStore.default\n                keyStore.set(data, forKey: key)\n                keyStore.synchronize()\n            #else\n                if let documentDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first {\n                    let url = documentDir.appendingPathComponent(key)\n                    try? data.write(to: url)\n                }\n            #endif\n        } catch {\n            print(\"Settings arc error: \\(error.localizedDescription)\")\n        }\n    }\n        \n    public func getSettings() -> ProjectSettings? {\n        let key = getLongSettingsKey()\n        var data: Data?\n                \n        #if CLOUD_RELATED_BLOCK\n        let keyStore = NSUbiquitousKeyValueStore.default\n            data = keyStore.data(forKey: key)\n        #else\n            if let documentDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first {\n                let url = documentDir.appendingPathComponent(key)\n                data = try? Data(contentsOf: url)\n            }\n        #endif\n        \n        NSKeyedUnarchiver.setClass(ProjectSettings.self, forClassName: \"ProjectSettings\")\n        if let data = data, let settings = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ProjectSettings.self, from: data) {\n            return settings\n        }\n        \n        return nil\n    }\n    \n    public func reloadSettings() {\n        if let settings = getSettings() {\n            self.settings = settings\n\n            loadNotesPreview()\n        }\n    }\n\n    public func getSettingsKey() -> String {\n        var prefix = String()\n        \n        // iCloud Documents\n        if let path = getCloudDriveRelativePath() {\n            prefix = \"i\\(path)\"\n            \n        // Local documents\n        } else if let path = getLocalDocumentsRelativePath() {\n            prefix = \"l\\(path)\"\n            \n        // External\n        } else {\n            prefix = \"e\\(url.path)\"\n        }\n                \n        return prefix.md5\n    }\n\n    public static func == (lhs: Project, rhs: Project) -> Bool {\n        return lhs.url == rhs.url\n    }\n\n    public func loadLabel(_ label: String? = nil) {\n        if let l = label {\n            self.label = l\n        } else {\n            self.label = url.lastPathComponent\n        }\n\n        var localizedName: AnyObject?\n        try? (url as NSURL).getResourceValue(&localizedName, forKey: URLResourceKey.localizedNameKey)\n        if let name = localizedName as? String, name.count > 0 {\n            self.label = name\n        }\n        \n        isEncrypted = getEncryptionStatus()\n        \n        if settings.sortBy == .none, self.label == \"Welcome\" {\n            settings.sortBy = .title\n            settings.sortDirection = .asc\n            settings.showInCommon = false\n        }\n    }\n\n    public func getCacheURL() -> URL? {\n        guard let cacheDir = storage.getCacheDir() else { return nil }\n\n        let key = self.url.path.md5\n        let cacheFile = cacheDir.appendingPathComponent(key + \".cache\")\n\n        return cacheFile\n    }\n\n    public func saveCache() {\n        guard isReadyForCacheSaving, let cacheURL = getCacheURL() else { return }\n\n        var notes = storage.noteList.filter({ $0.project == self })\n\n        for note in notes {\n            if note.isEncrypted() {\n                _ = note.lock()\n            }\n        }\n        \n        // Deduplicate\n        let deduplicatedNotes = notes.reduce(into: [String: Note]()) { result, object in\n            result[object.url.path] = object\n        }.values\n        \n        notes = Array(deduplicatedNotes)\n\n        let meta = notes.filter({ $0.isValidForCaching() }).map({ $0.getMeta() })\n        let jsonEncoder = JSONEncoder()\n\n        do {\n            let data = try jsonEncoder.encode(meta)\n            try data.write(to: cacheURL)\n\n            print(\"Cache saved for: \\(self.label)\")\n        } catch {\n            print(\"Serialization error.\")\n        }\n    }\n\n    public func removeCache() {\n        guard let cacheURL = getCacheURL() else { return }\n\n        do {\n            if FileManager.default.fileExists(atPath: cacheURL.path) {\n                try FileManager.default.removeItem(at: cacheURL)\n\n                print(\"Cache removed successfully at: \\(cacheURL.path)\")\n            }\n        } catch {\n            print(\"Cache removing error: \\(error)\")\n        }\n    }\n\n    public func loadCache() -> [NoteMeta]? {\n        guard let cacheURL = getCacheURL() else { return nil }\n\n        if let data = try? Data(contentsOf: cacheURL) {\n            let decoder = JSONDecoder()\n\n            do {\n                return try decoder.decode(Array<NoteMeta>.self, from: data)\n            } catch {\n                print(error)\n            }\n        }\n\n        return nil\n    }\n\n    public func fetchNotes() -> [Note] {\n        var notes = [Note]()\n        let documents = fetchAllDocuments(at: url)\n\n        for document in documents {\n            let url = (document.0 as URL).standardized\n            let modified = document.1\n            let created = document.2\n\n            if (url.absoluteString.isEmpty) {\n                continue\n            }\n\n            let note = Note(url: url, with: self, modified: modified, created: created)\n\n            if note.isTextBundle() && !note.isFullLoadedTextBundle() {\n                continue\n            }\n\n            notes.append(note)\n        }\n\n        return notes\n    }\n\n    public func loadNotes(cacheOnly: Bool = false) -> [Note] {\n        var notes = [Note]()\n\n        if let metas = loadCache() {\n            for noteMeta in metas {\n                let note = Note(meta: noteMeta, project: self)\n                notes.append(note)\n            }\n\n            print(\"From cache: \\(notes.count)\")\n            \n            isNeededCacheValidation = true\n        } else if !cacheOnly {\n            notes = fetchNotes()\n            \n            print(\"From disk: \\(notes.count), lbl: \\(label)\")\n        }\n\n        loadPins(for: notes)\n\n        for note in notes {\n            storage.add(note)\n        }\n\n        loadNotesPreview()\n        _ = loadWebAPI()\n\n        return notes\n    }\n\n    public func fetchAllDocuments(at url: URL) -> [(URL, Date, Date)] {\n        let url = url.standardized\n\n        var directoryFiles = [URL]()\n        if let enumerator = FileManager.default.enumerator(at: url, includingPropertiesForKeys: nil, options: .skipsSubdirectoryDescendants) {\n            while let file = enumerator.nextObject() as? URL {\n                if storage.isValidNote(url: file) {\n                    directoryFiles.append(file)\n                }\n            }\n        }\n\n        let results = directoryFiles.map {\n            url in (\n                url,\n                (try? url.resourceValues(forKeys: [.contentModificationDateKey])\n                    )?.contentModificationDate ?? Date.distantPast,\n                (try? url.resourceValues(forKeys: [.creationDateKey])\n                    )?.creationDate ?? Date.distantPast\n            )\n        }\n\n        return results.map {\n            if $0.0.pathExtension == \"textbundle\" {\n                return (\n                    URL(fileURLWithPath: $0.0.path, isDirectory: false),\n                    $0.1,\n                    $0.2\n                )\n            }\n\n            return $0\n        }\n    }\n\n    public func loadPins(for notes: [Note]) {\n    #if CLOUD_RELATED_BLOCK\n        for note in notes {\n            note.isPinned = false\n        }\n        \n        let store = NSUbiquitousKeyValueStore.default\n        let names = store.array(forKey: \"co.fluder.fsnotes.pins.shared\") as? [String] ?? []\n        let pinned = Set(names)\n        \n        for note in notes {\n            note.isPinned = pinned.contains(note.getRelatedPath())\n        }\n    #endif\n    }\n    \n    func fileExist(fileName: String, ext: String) -> Bool {        \n        let fileURL = url.appendingPathComponent(fileName + \".\" + ext)\n\n        return FileManager.default.fileExists(atPath: fileURL.path)\n    }\n\n    func fileExistCaseInsensitive(fileName: String, ext: String) -> Bool {\n        let fileURL = url.appendingPathComponent(fileName + \".\" + ext)\n\n        if let note = storage.getBy(url: fileURL) {\n            return FileManager.default.fileExists(atPath: note.url.path)\n        }\n\n        return FileManager.default.fileExists(atPath: fileURL.path)\n    }\n\n    private func isCloudDriveFolder(url: URL) -> Bool {\n        if let iCloudDocumentsURL =\n            FileManager.default.url(forUbiquityContainerIdentifier: nil)?\n                .appendingPathComponent(\"Documents\", isDirectory: true)\n                .standardized\n        {\n            \n            if FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil), url.path.contains(iCloudDocumentsURL.path) {\n                return true\n            }\n        }\n        \n        return false\n    }\n   \n    private func getCloudDriveRelativePath() -> String? {\n        if let iCloudDir =\n            FileManager.default.url(forUbiquityContainerIdentifier: nil)?\n                .appendingPathComponent(\"Documents\", isDirectory: true)\n                .standardized,\n           \n            url.path.contains(iCloudDir.path) {\n            \n            return url.path.replacingOccurrences(of: iCloudDir.path, with: \"\")\n        }\n        \n        return nil\n    }\n    \n    private func getLocalDocumentsRelativePath() -> String? {\n        if let documentDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first,\n            url.path.contains(documentDir.path) {\n            \n            return url.path.replacingOccurrences(of: documentDir.path, with: \"\")\n        }\n        \n        return nil\n    }\n    \n    public func getParent() -> Project {\n        if isDefault || isBookmark {\n            return self\n        }\n        \n        if let parent = self.parent {\n            return parent.getParent()\n        }\n        \n        return self\n    }\n    \n    public func isVisibleInCommon() -> Bool {\n        if !settings.showInCommon {\n            return false\n        }\n        \n        var parent = self.parent\n                \n        while parent != nil {\n            if let unwrapped = parent?.parent {\n                if !unwrapped.settings.showInCommon {\n                    return false\n                }\n                \n                parent = unwrapped\n                continue\n            }\n            \n            return parent?.settings.showInCommon == true\n        }\n        \n        return settings.showInCommon\n    }\n\n    public func getNestedLabel() -> String {\n        var project: Project? = self\n        var result = String()\n\n        while project != nil {\n            if let unwrappedProject = project {\n                if result.count > 0 {\n                    result = unwrappedProject.label + \" › \" + result\n                } else {\n                    result = unwrappedProject.label\n                }\n                \n                project = unwrappedProject.parent\n            } else {\n                project = nil\n            }\n        }\n\n        return result\n    }\n\n    public func getFullLabel() -> String {\n        if isDefault || isBookmark {\n            if isBookmark {\n                return \"External › \" + label\n            }\n            \n            return label\n        }\n\n        if isTrash {\n            return \"Trash\"\n        }\n        \n        return \"FSNotes › \\(label)\"\n    }\n\n    public func getRelativePath() -> String? {\n        if let iCloudRoot =  FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent(\"Documents\").standardized {\n\n            let path = url.path.replacingOccurrences(of: iCloudRoot.path, with: \"\")\n            return path.md5\n        }\n\n        return nil\n    }\n    \n    public func getPathChecksum() -> String {\n        if !UserDefaultsManagement.iCloudDrive, let documentDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {\n            var path = url.path.replacingOccurrences(of: documentDir.path, with: \"\")\n            \n            if path == \"\" {\n                path = \"Local\"\n            }\n            \n            return path.md5\n        } else {\n            return url.path.md5\n        }\n    }\n\n    public func getMd5CheckSum() -> String {\n        return url.path.md5\n    }\n\n    public func remove() {\n        do {\n            try FileManager.default.removeItem(at: url)\n        } catch {\n            print(error)\n        }\n    }\n\n    public func create() {\n        do {\n            try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)\n        } catch {\n            print(error)\n        }\n    }\n\n    public func getAllTags() -> [String] {\n        let notes = Storage.shared().noteList.filter({ $0.project == self })\n\n        var tags: Set<String> = []\n        for note in notes {\n            for tag in note.tags {\n                if !tags.contains(tag) {\n                    tags.insert(tag)\n                }\n            }\n        }\n\n        return Array(tags)\n    }\n\n    public func checkFSAndMemoryDiff() -> ([Note], [Note], [Note]) {\n        var foundRemoved = [Note]()\n        var foundAdded = [Note]()\n        var foundChanged = [Note]()\n\n        let memoryNotes = Storage.shared().noteList.filter({ $0.project == self })\n        let fileSystemNotes = fetchNotes()\n\n        let cachedNotes = Set(memoryNotes.map({ $0.url }))\n        let currentNotes = Set(fileSystemNotes.map({ $0.url }))\n\n        let removed = cachedNotes.subtracting(currentNotes)\n        let added = currentNotes.subtracting(cachedNotes)\n\n        for removeURL in removed {\n            if let note = memoryNotes.first(where: { $0.url == removeURL }) {\n                foundRemoved.append(note)\n                storage.noteList.removeAll(where: { $0 == note })\n            }\n        }\n\n        for addURL in added {\n            if let note = fileSystemNotes.first(where: { $0.url == addURL }) {\n                note.load()\n                foundAdded.append(note)\n                storage.noteList.append(note)\n            }\n        }\n\n        for memoryNote in memoryNotes {\n            if let note = fileSystemNotes.first(where: { $0.url == memoryNote.url }) {\n                if memoryNote.modifiedLocalAt != note.modifiedLocalAt {\n                    memoryNote.forceLoad()\n                    foundChanged.append(memoryNote)\n                }\n            }\n        }\n\n        isReadyForCacheSaving = true\n        return (foundRemoved, foundAdded, foundChanged)\n    }\n\n    public func isExpandable() -> Bool {\n        return child.count > 0\n    }\n\n    public func getAllChild() -> [Project]? {\n        var projects = [Project]()\n        projects.append(self)\n\n        for item in child {\n            if item.child.count > 0 {\n                if let sub = item.getAllChild() {\n                    projects.append(contentsOf: sub)\n                }\n            } else {\n                projects.append(item)\n            }\n        }\n\n        return projects\n    }\n    \n    public func getChildProjects() -> [Project]? {\n        var projects = [Project]()\n\n        for item in child {\n            if item.child.count > 0 {\n                if let sub = item.getAllChild() {\n                    projects.append(contentsOf: sub)\n                }\n            } else {\n                projects.append(item)\n            }\n        }\n\n        return projects\n    }\n    \n    public func getChildProjectsByURL() -> [Project] {\n        return storage\n            .projects\n            .filter({ $0.url.path.startsWith(string: url.path) && $0.url.path != url.path })\n            .sorted(by: {\n                $0.url.path.components(separatedBy: \"/\").count < $1.url.path.components(separatedBy: \"/\").count\n            })\n    }\n\n    public func getHistoryURL() -> URL? {\n        let url = storage.getRevisionsHistoryDocumentsSupport()\n\n        return url.appendingPathComponent(getMd5CheckSum())\n    }\n    \n    public func getNotes() -> [Note] {\n        return storage.noteList.filter({ $0.project.url.path == self.url.path })\n    }\n    \n    public func countNotes(contains image: URL) -> Int {\n        let notes = getNotes()\n        var qty = 0\n        for note in notes {\n            if let images = note.imageUrl {\n                if images.contains(where: { $0.path == image.path }) {\n                    qty += 1\n                }\n            }\n        }\n        return qty\n    }\n    \n    public func getEncryptionStatusFilePath() -> URL {\n        return url.appendingPathComponent(\".encrypt\", isDirectory: false)\n    }\n    \n    public func getEncryptionStatus() -> Bool {\n        let encFolder = getEncryptionStatusFilePath()\n        if FileManager.default.fileExists(atPath: encFolder.path) {\n            return true\n        }\n        return false\n    }\n    \n    public func isLocked() -> Bool {\n        return password == nil && isEncrypted\n    }\n    \n    public func encrypt(password: String) -> [Note] {\n        if isEncrypted {\n            return [Note]()\n        }\n        \n        let encFolder = getEncryptionStatusFilePath()\n        FileManager.default.createFile(atPath: encFolder.path, contents: nil)\n        \n        isEncrypted = true\n\n        let notes = storage.getNotesBy(project: self)\n        var encrypted = [Note]()\n        \n        for note in notes {\n            if note.encrypt(password: password) {\n                encrypted.append(note)\n            }\n        }\n\n        self.password = nil\n\n        return encrypted\n    }\n    \n    public func decrypt(password: String) -> [Note] {\n        if !isEncrypted {\n            return [Note]()\n        }\n                \n        let notes = storage.getNotesBy(project: self)\n        var decrypted = [Note]()\n        \n        var qty = 0\n        for note in notes {\n            if note.unEncrypt(password: password) {\n                qty += 1\n                decrypted.append(note)\n            }\n        }\n        \n        guard qty > 0 || notes.count == 0 else { return [Note]() }\n        \n        let encFolder = getEncryptionStatusFilePath()\n        try? FileManager.default.removeItem(at: encFolder)\n        \n        isEncrypted = false\n        \n        return decrypted\n    }\n\n    public func unlock(password: String) -> ([Note], [Note]) {\n        let notes = self.storage.getNotesBy(project: self)\n        var unlocked = [Note]()\n\n        if notes.count == 0 {\n            self.password = password\n            return (notes, unlocked)\n        }\n\n        for note in notes {\n            if note.unLock(password: password) {\n                self.password = password\n                unlocked.append(note)\n            }\n        }\n\n        return (notes, unlocked)\n    }\n\n    public func lock() -> [Note] {\n        var locked = [Note]()\n        let notes = self.storage.getNotesBy(project: self)\n\n        for note in notes {\n            if note.lock() {\n                locked.append(note)\n            }\n        }\n\n        password = nil\n\n        return locked\n    }\n    \n    public func checkNotesCacheDiff(isGit: Bool = false) -> ([Note], [Note], [Note]) {\n        // if not cached – load all results for cache\n        // (not loaded instantly because is resource consumption operation, loaded later in background)\n        guard isNeededCacheValidation || isGit else {\n\n            _ = storage.noteList\n                .filter({ $0.project == self })\n                .map({ $0.load() })\n\n            isReadyForCacheSaving = true\n            return ([], [], [])\n        }\n\n        let results = checkFSAndMemoryDiff()\n\n        print(\"Cache diff found: removed - \\(results.0.count), added - \\(results.1.count), modified - \\(results.2.count), lbl: \\(label)\")\n        \n        return results\n    }\n    \n    public func getProjectsFSAndMemoryDiff() -> ([Project], [Project]) {\n        var foundRemoved = [Project]()\n        var foundAdded = [Project]()\n\n        var memoryProjects = [Project]()\n        var fileSystemURLs = [URL]()\n        \n        if let child = getChildProjects() {\n            memoryProjects = child\n        }\n        \n        if let fsURLs = fetchAllDirectories() {\n            fileSystemURLs = fsURLs\n        }\n\n        let cachedProjects = Set(memoryProjects.compactMap({ $0.url }))\n        let currentProjects = Set(fileSystemURLs)\n\n        let removed = cachedProjects.subtracting(currentProjects)\n        let added = currentProjects.subtracting(cachedProjects)\n\n        for removeURL in removed {\n            if let project = memoryProjects.first(where: { $0.url == removeURL }) {\n                foundRemoved.append(project)\n            }\n        }\n\n        for addURL in added {\n            let project = Project(storage: storage, url: addURL)\n            foundAdded.append(project)\n        }\n        \n        foundAdded = foundAdded.sorted(by: {\n            $0.url.path.components(separatedBy: \"/\").count < $1.url.path.components(separatedBy: \"/\").count\n        })\n                \n        foundRemoved = foundRemoved.sorted(by: {\n            $0.url.path.components(separatedBy: \"/\").count > $1.url.path.components(separatedBy: \"/\").count\n        })\n                        \n        return (foundRemoved, foundAdded)\n    }\n    \n    private func fetchAllDirectories() -> [URL]? {\n        let maxDirs = UserDefaultsManagement.maxChildDirs\n\n        guard let fileEnumerator =\n            FileManager.default.enumerator(\n                at: url, includingPropertiesForKeys: nil,\n                options: FileManager.DirectoryEnumerationOptions()\n            )\n        else { return nil }\n\n        let extensions = [\"md\", \"markdown\", \"txt\", \"fountain\", \"textbundle\", \"etp\", \"jpg\", \"png\", \"gif\", \"jpeg\", \"json\", \"JPG\", \"PNG\", \".icloud\", \".cache\", \".Trash\", \"i\"]\n\n        let urls = fileEnumerator.allObjects.compactMap({ $0 as? URL })\n            .filter({\n                !extensions.contains($0.pathExtension)\n                && !extensions.contains($0.lastPathComponent)\n                && !$0.path.contains(\"/assets\")\n                && !$0.path.contains(\"/.cache\")\n                && !$0.path.contains(\"/files\")\n                && !$0.path.contains(\"/.Trash\")\n                && !$0.path.contains(\"/Trash\")\n                && !$0.path.contains(\".textbundle\")\n                && !$0.path.contains(\".revisions\")\n                && !$0.path.contains(\"/.\")\n                && $0 != UserDefaultsManagement.trashURL\n            })\n\n        var fin = [URL]()\n        var i = 0\n\n        for url in urls {\n            do {\n                var isDirectoryResourceValue: AnyObject?\n                try (url as NSURL).getResourceValue(&isDirectoryResourceValue, forKey: URLResourceKey.isDirectoryKey)\n\n                var isPackageResourceValue: AnyObject?\n                try (url as NSURL).getResourceValue(&isPackageResourceValue, forKey: URLResourceKey.isPackageKey)\n\n                if isDirectoryResourceValue as? Bool == true,\n                    isPackageResourceValue as? Bool == false,\n                    url.isHidden() == false {\n                    \n                    i = i + 1\n                    fin.append(url)\n                }\n            }\n            catch let error as NSError {\n                print(\"Error: \", error.localizedDescription)\n            }\n\n            if i > maxDirs {\n                break\n            }\n        }\n\n        return fin\n    }\n    \n    public func loadNotesContent() {\n        let notes = getNotes()\n        for note in notes {\n            note.load()\n        }\n    }\n\n    public func getNestedPath() -> String {\n        var project: Project? = self\n        var result = String()\n\n        while project != nil {\n            if project?.parent == nil {\n                return result\n            }\n\n            if let unwrappedProject = project {\n                if result.count > 0 {\n                    result = unwrappedProject.label + \"/\" + result\n                } else {\n                    result = unwrappedProject.label\n                }\n\n                project = unwrappedProject.parent\n            } else {\n                project = nil\n            }\n        }\n\n        return result\n    }\n\n    public func saveNotesPreview() {\n        let notes = getNotes()\n        var result = [String]()\n        for note in notes {\n            if note.previewState {\n                result.append(note.name)\n            }\n        }\n        settings.notesPreview = result\n        saveSettings()\n    }\n\n    public func loadNotesPreview() {\n        let names = settings.notesPreview\n        let notes = storage.getNotesBy(project: self)\n        for note in notes {\n            note.previewState = names.contains(note.name)\n        }\n    }\n\n    public func saveWebAPI() {\n        let notes = getNotes()\n        var result = [String: String]()\n        for note in notes {\n            if let apiId = note.apiId {\n                result[note.name] = apiId\n            }\n        }\n        settings.notesAPI = result\n        saveSettings()\n    }\n\n    public func loadWebAPI() -> ([Note], [Note])? {\n        guard let items = settings.notesAPI else { return nil }\n\n        var keys = [String]()\n        for (key, _) in items {\n            keys.append(key)\n        }\n\n        let notes = storage.getNotesBy(project: self)\n\n        var added = [Note]()\n        var removed = [Note]()\n\n        for note in notes {\n            if note.apiId != nil && !keys.contains(note.name) {\n                removed.append(note)\n                note.apiId = nil\n            } else if note.apiId == nil && keys.contains(note.name) {\n                added.append(note)\n                note.apiId = items[note.name]\n            }\n        }\n\n        return (added, removed)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/ProjectSettings.swift",
    "content": "//\n//  ProjectSettings.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 03.03.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic class ProjectSettings: NSObject, NSSecureCoding {\n    public static var supportsSecureCoding: Bool { return true }\n \n    public var sortBy: SortBy = .none\n    public var sortDirection: SortDirection = .desc\n    public var showInCommon: Bool = true\n    public var showInSidebar: Bool = true\n    public var showNestedFoldersContent: Bool = true\n    public var firstLineAsTitle: Bool?\n    public var priority: Int = 0\n    public var gitAutoPull: Bool = false\n    public var gitOrigin: String?\n    public var gitPrivateKey: Data?\n    public var gitPublicKey: Data?\n    public var gitPrivateKeyPassphrase: String?\n    public var notesPreview = [String]()\n    public var notesAPI: [String: String]?\n\n    public override init() {/*_*/}\n    \n    public required init(coder aDecoder: NSCoder) {\n        if let value = aDecoder.decodeObject(of: NSString.self, forKey: \"sortBy\") as? String, let sort = SortBy(rawValue: value) {\n            sortBy = sort\n        }\n\n        if let value =  aDecoder.decodeObject(of: NSString.self, forKey: \"sortDirection\") as? String, let direction = SortDirection(rawValue: value) {\n            sortDirection = direction\n        }\n        \n        showInCommon =  aDecoder.decodeBool(forKey: \"showInCommon\")\n        showInSidebar = aDecoder.decodeBool(forKey: \"showInSidebar\")\n        showNestedFoldersContent = aDecoder.decodeBool(forKey: \"showNestedFoldersContent\")\n\n        if aDecoder.containsValue(forKey: \"firstLineAsTitle\") {\n            firstLineAsTitle = aDecoder.decodeBool(forKey: \"firstLineAsTitle\")\n        }\n\n        priority = aDecoder.decodeInteger(forKey: \"priority\")\n        gitAutoPull =  aDecoder.decodeBool(forKey: \"gitAutoPull\")\n\n        if let value = aDecoder.decodeObject(of: NSString.self, forKey: \"gitOrigin\") as? String {\n            gitOrigin = value\n        }\n\n        if let value = aDecoder.decodeObject(of: NSData.self, forKey: \"gitPrivateKey\") as? Data {\n            gitPrivateKey = value\n        }\n\n        if let value = aDecoder.decodeObject(of: NSData.self, forKey: \"gitPublicKey\") as? Data {\n            gitPublicKey = value\n        }\n\n        if let value = aDecoder.decodeObject(of: NSString.self, forKey: \"gitPrivateKeyPassphrase\") as? String {\n            gitPrivateKeyPassphrase = value\n        }\n\n        if let value = aDecoder.decodeObject(of: [NSArray.self, NSString.self], forKey: \"notesPreview\") as? [String] {\n            notesPreview = value\n        }\n\n        if let value = aDecoder.decodeObject(of: [NSDictionary.self, NSString.self], forKey: \"notesAPI\") as? [String: String] {\n            notesAPI = value\n        }\n    }\n\n    public func encode(with aCoder: NSCoder) {\n        aCoder.encode(sortBy.rawValue, forKey: \"sortBy\")\n        aCoder.encode(sortDirection.rawValue, forKey: \"sortDirection\")\n        aCoder.encode(showInCommon, forKey: \"showInCommon\")\n        aCoder.encode(showInSidebar, forKey: \"showInSidebar\")\n        aCoder.encode(showNestedFoldersContent, forKey: \"showNestedFoldersContent\")\n\n        if let firstLineAsTitle = firstLineAsTitle {\n            aCoder.encode(firstLineAsTitle, forKey: \"firstLineAsTitle\")\n        }\n\n        aCoder.encode(priority, forKey: \"priority\")\n        aCoder.encode(gitAutoPull, forKey: \"gitAutoPull\")\n\n        if let gitOrigin = gitOrigin {\n            aCoder.encode(gitOrigin, forKey: \"gitOrigin\")\n        }\n        \n        if let gitPrivateKey = gitPrivateKey {\n            aCoder.encode(gitPrivateKey, forKey: \"gitPrivateKey\")\n        }\n\n        if let gitPublicKey = gitPublicKey {\n            aCoder.encode(gitPublicKey, forKey: \"gitPublicKey\")\n        }\n        \n        if let gitPrivateKeyPassphrase = gitPrivateKeyPassphrase {\n            aCoder.encode(gitPrivateKeyPassphrase, forKey: \"gitPrivateKeyPassphrase\")\n        }\n\n        aCoder.encode(notesPreview, forKey: \"notesPreview\")\n\n        if let notesAPI = self.notesAPI {\n            aCoder.encode(notesAPI, forKey: \"notesAPI\")\n        }\n    }\n\n    public func setOrigin(_ origin: String?) {\n        if let origin = origin, origin.count > 0 {\n            gitOrigin = origin\n            return\n        }\n\n        gitOrigin = nil\n    }\n\n    public func isFirstLineAsTitle() -> Bool {\n        if let firstLineAsTitle = firstLineAsTitle {\n            return firstLineAsTitle\n        }\n\n        return UserDefaultsManagement.firstLineAsTitle\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/RuntimeError.swift",
    "content": "//\n//  File.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/15/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nstruct RuntimeError: Error {\n    let message: String\n\n    init(_ message: String) {\n        self.message = message\n    }\n\n    public var localizedDescription: String {\n        return message\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/SearchQuery.swift",
    "content": "//\n//  SearchQuery.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 23.01.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nclass SearchQuery {\n    var type: SidebarItemType? = nil\n    var projects = [Project]()\n    var tags = [String]()\n    var terms: [Substring]? = nil\n    var tagsAnd: Bool = false\n    public var filter = String()\n\n    init() {}\n    \n    public func tagsModifierAnd(_ value: Bool = false) {\n        tagsAnd = value\n    }\n\n    public func setType(_ type: SidebarItemType) {\n        self.type = type\n    }\n\n    public func setFilter(_ filter: String) {\n        if filter.hasPrefix(\"\\\"\") && filter.hasSuffix(\"\\\"\") {\n            let clean = String(filter.dropFirst().dropLast())\n            if clean.count > 0 {\n                self.filter = clean\n                self.terms = [Substring(clean)]\n                return\n            }\n        }\n        \n        self.filter = filter\n        \n        terms = filter.split(separator: \" \")\n    }\n\n    public func isFit(note: Note) -> Bool {\n        return !note.name.isEmpty\n            && (\n                self.filter.isEmpty\n                || self.terms != nil && self.isMatched(note: note, terms: self.terms!)\n            ) && (\n                self.type == .All && note.project.isVisibleInCommon()\n                || self.type == .Inbox && note.project.isDefault\n                || self.type == .Trash\n                || self.type == .Untagged && note.tags.count == 0\n                || self.type == .Todo && note.project.settings.showInCommon\n                || !UserDefaultsManagement.inlineTags && self.tags.count > 0\n                || self.type != .Inbox && self.projects.contains(note.project)\n            ) && (\n                self.type == .Trash && note.isTrash()\n                || self.type != .Trash && !note.isTrash()\n            ) && (\n                self.tags.count == 0\n                || UserDefaultsManagement.inlineTags\n                    && self.tags.count > 0\n                    && (\n                        !tagsAnd && note.tags.filter(\n                            { self.contains(tag: $0, in: self.tags) }\n                        ).count > 0\n                        || tagsAnd && Set(self.tags).isSubset(of: Set(note.tags))\n                        \n                    )\n            ) && !(\n                note.project.isEncrypted &&\n                note.project.isLocked()\n            ) && (\n                self.type != .Todo\n                || self.type == .Todo && note.content.hasTodoAttribute()\n            )\n    }\n\n    public func contains(tag name: String, in tags: [String]) -> Bool {\n        var found = false\n        for tag in tags {\n            if name == tag || name.starts(with: tag + \"/\") {\n                found = true\n                break\n            }\n        }\n        return found\n    }\n\n    private func isMatched(note: Note, terms: [Substring]) -> Bool {\n        for term in terms {\n            if note.name.range(of: term, options: [.caseInsensitive, .diacriticInsensitive], range: nil, locale: nil) != nil ||\n                note.content.string.range(of: term, options: [.caseInsensitive, .diacriticInsensitive], range: nil, locale: nil) != nil {\n                continue\n            }\n\n            return false\n        }\n\n        return true\n    }\n\n    public func dropFilter() {\n        self.terms = nil\n        self.filter = String()\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/SettingsFilesNaming.swift",
    "content": "//\n//  SettingsFilesNaming.swift\n//  FSNotes iOS\n//\n//  Created by Олександр Глущенко on 19.06.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nenum SettingsFilesNaming: Int {\n    case uuid\n    case autoRename\n    case untitledNote\n    case date\n    case altDate\n    case autoRenameNew\n\n    public var tag: Int {\n        switch self {\n        case .uuid: return 0x00\n        case .autoRename: return 0x01\n        case .untitledNote: return 0x02\n        case .date: return 0x03\n        case .altDate: return 0x04\n        case .autoRenameNew: return 0x05\n        }\n    }\n\n    public func getName() -> String {\n        switch self {\n        case .uuid, .autoRename, .autoRenameNew:\n            return UUID().uuidString\n        case .untitledNote:\n            return \"Untitled Note\"\n        case .date:\n            let formatter = DateFormatter()\n            formatter.dateFormat = \"yyyyMMddHHmmss\"\n            return formatter.string(from: Date())\n        case .altDate:\n            let dateFromatter = DateFormatter()\n            dateFromatter.amSymbol = \"AM\"\n            dateFromatter.pmSymbol = \"PM\"\n\n            dateFromatter.dateFormat = \"yyyy-MM-dd hh.mm.ss a\"\n            let date = dateFromatter.string(from: Date())\n            return date\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/SidebarItem.swift",
    "content": "//\n//  SidebarItem.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(OSX)\n    import Cocoa\n#else\n    import UIKit\n#endif\n\nclass SidebarItem {\n    var name: String\n    var project: Project?\n    var type: SidebarItemType\n    public var icon: Image?\n    public var tag: FSTag?\n    \n    init(name: String, project: Project? = nil, type: SidebarItemType, icon: Image? = nil, tag: FSTag? = nil) {\n        self.name = name\n        self.project = project\n        self.type = type\n        self.icon = icon\n        self.tag = tag\n\n    #if os(iOS)\n        if let icon = type.icon {\n            self.icon = getIcon(name: icon)\n        }\n\n        guard let project = project, type == .Project else { return }\n\n        if project.isEncrypted {\n            if project.isLocked() {\n                self.type = .ProjectEncryptedLocked\n            } else {\n                self.type = .ProjectEncryptedUnlocked\n            }\n        } else {\n            self.type = .Project\n        }\n\n        if let icon = self.type.icon {\n            self.icon = getIcon(name: icon)\n        }\n    #endif\n    }\n\n    public func setType(type: SidebarItemType) {\n        self.type = type\n\n        if let icon = self.type.icon {\n            self.icon = getIcon(name: icon)\n        }\n    }\n\n    public func getName() -> String {\n        return name\n    }\n        \n    public func isSelectable() -> Bool {\n        if type == .Header && project == nil {\n            return false\n        }\n\n        if type == .Separator {\n            return false\n        }\n        \n        return true\n    }\n    \n    public func isTrash() -> Bool {\n        return (type == .Trash)\n    }\n    \n    public func isGroupItem() -> Bool {\n        let notesLabel = NSLocalizedString(\"Notes\", comment: \"Sidebar label\")\n        let trashLabel = NSLocalizedString(\"Trash\", comment: \"Sidebar label\")\n        if project == nil && [notesLabel, trashLabel].contains(name) {\n            return true\n        }\n        \n        return false\n    }\n\n    public func isSystem() -> Bool {\n        let system: [SidebarItemType] = [.All, .Trash, .Todo, .Untagged, .Inbox]\n\n        return system.contains(type)\n    }\n\n    public func load(type: SidebarItemType) {\n        self.type = type\n\n        if let icon = type.icon {\n            self.icon = getIcon(name: icon)\n        }\n    }\n\n#if os(OSX)\n    public func getIcon(name: String, white: Bool = false) -> NSImage? {\n        let image = NSImage(named: name)\n        image?.isTemplate = true\n\n        if UserDefaults.standard.value(forKey: \"AppleAccentColor\") != nil {\n            return image?.tint(color: NSColor.controlAccentColor)\n        } else if white && !NSAppearance.current.isDark {\n            return image?.tint(color: .white)\n        } else {\n            return image?.tint(color: NSColor(red: 0.08, green: 0.60, blue: 0.85, alpha: 1.00))\n        }\n    }\n#else\n    public func getIcon(name: String) -> UIImage? {\n        guard let image = UIImage(named: name) else { return nil }\n\n        return image.imageWithColor(color1: UIColor.mainTheme)\n    }\n#endif\n}\n"
  },
  {
    "path": "FSNotesCore/Business/SidebarItemType.swift",
    "content": "//\n//  SidebarItemType.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/7/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nenum SidebarItemType: Int {\n    case Label = 0x00\n    case All = 0x01\n    case Trash = 0x02    \n    case Todo = 0x06\n    case Inbox = 0x07\n    case Tag = 0x08\n    case Project = 0x09\n    case Header = 0x10\n    case Untagged = 0x11\n    case ProjectEncryptedLocked = 12\n    case ProjectEncryptedUnlocked = 13\n    case Separator = 14\n\n    public var icon: String? {\n        switch self {\n        case .Label: return nil\n        case .All: return \"sidebar_notes\"\n        case .Trash: return \"sidebar_trash\"\n        case .Todo: return \"sidebar_todo\"\n        case .Inbox: return \"sidebar_inbox\"\n        case .Tag: return \"sidebar_tag\"\n        case .Project: return \"sidebar_project\"\n        case .Header: return \"sidebar_icloud_drive\"\n        case .Untagged: return \"sidebar_untagged\"\n        case .ProjectEncryptedLocked: return \"sidebar_project_encrypted_locked\"\n        case .ProjectEncryptedUnlocked: return \"sidebar_project_encrypted_unlocked\"\n        case .Separator: return nil\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Business/SortBy.swift",
    "content": "//\n//  SortBy.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 1/29/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic enum SortBy: String {\n    case none\n    case modificationDate\n    case creationDate\n    case title\n}\n"
  },
  {
    "path": "FSNotesCore/Business/SortDirection.swift",
    "content": "//\n//  SortDirection.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 8/20/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic enum SortDirection: String {\n    case asc\n    case desc\n}\n"
  },
  {
    "path": "FSNotesCore/Business/Storage.swift",
    "content": "//\n//  NotesCollection.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/9/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport CoreServices\n\n#if os(OSX)\nimport Cocoa\n#else\nimport UIKit\n#endif\n\nclass Storage {\n    public static var instance: Storage? = nil\n\n    public var noteList = [Note]()\n    public var projects = [Project]()\n    private var imageFolders = [URL]()\n    public var tags = [String]()\n\n    var notesDict: [String: Note] = [:]\n\n    public var allowedExtensions = [\n        \"md\",\n        \"markdown\",\n        \"txt\",\n        \"fountain\",\n        \"textbundle\",\n        \"etp\" // Encrypted Text Pack\n    ]\n\n    public var shouldMovePrompt = false\n\n    private var trashURL = URL(string: String())\n\n    private let lastNewsDate = \"2026-01-10\"\n    public var isCrashedLastTime = false\n\n    private var relativeInlineImagePaths = [String]()\n\n    public var plainWriter = OperationQueue.init()\n    public var ciphertextWriter = OperationQueue.init()\n\n    public var searchQuery: SearchQuery = SearchQuery()\n\n    private var sortByState: SortBy = .modificationDate\n    private var sortDirectionState: SortDirection = .asc\n\n    // Virtual projects\n    public var allNotesProject: Project?\n    public var todoProject: Project?\n    public var untaggedProject: Project?\n    \n    public var welcomeProject: Project?\n    public var welcomeNote: Note?\n\n    init() {\n\n#if CLOUD_RELATED_BLOCK\n        // Sync pins and related stuff\n        \n        NSUbiquitousKeyValueStore.default.synchronize()\n#endif\n\n        // Load root\n\n        print(\"A. Bookmarks loading is started\")\n        let bookmarksManager = SandboxBookmark.sharedInstance()\n        bookmarksManager.load()\n\n        let storageType = UserDefaultsManagement.storageType\n        guard let url = getRoot() else { return }\n\n        removeCachesIfCrashed()\n\n#if os(OSX)\n        if storageType == .local && UserDefaultsManagement.storageType == .iCloudDrive {\n            shouldMovePrompt = true\n        }\n#endif\n\n        let name = getDefaultName(url: url)\n        let project =\n        Project(\n            storage: self,\n            url: url,\n            label: name,\n            isDefault: true\n        )\n\n        insertProject(project: project)\n\n        assignTrash(by: project.url)\n        assignBookmarks()\n    }\n\n    public func loadInboxAndTrash() {\n        // Inbox\n        _ = getDefault()?.loadNotes()\n\n        // Trash\n        _ = getDefaultTrash()?.loadNotes()\n\n        // Bookmarks\n        for project in projects {\n            if project.isBookmark {\n                _ = project.loadNotes()\n            }\n        }\n\n        // Cached\n        if let urls = getCachedTree() {\n            for url in urls {\n                _ = insert(url: url, cacheOnly: true)\n            }\n        }\n\n        loadProjectRelations()\n        \n        plainWriter.maxConcurrentOperationCount = 1\n        plainWriter.qualityOfService = .userInteractive\n\n        ciphertextWriter.maxConcurrentOperationCount = 1\n        ciphertextWriter.qualityOfService = .userInteractive\n\n    #if os(iOS)\n        checkWelcome()\n        \n        let revHistory = getRevisionsHistory()\n        let revHistoryDS = getRevisionsHistoryDocumentsSupport()\n\n        if FileManager.default.directoryExists(atUrl: revHistory) {\n            try? FileManager.default.moveItem(at: revHistory, to: revHistoryDS)\n        }\n\n        if !FileManager.default.directoryExists(atUrl: revHistoryDS) {\n            try? FileManager.default.createDirectory(at: revHistoryDS, withIntermediateDirectories: true, attributes: nil)\n        }\n    #endif\n\n    #if os(macOS)\n        self.restoreUploadPaths()\n    #endif\n    }\n\n    public func insertProject(project: Project) {\n        if projectExist(url: project.url) {\n            print(\"Project exist: \\(project.label)\")\n            return\n        }\n        \n        projects.append(project)\n    }\n    \n    public static func shared() -> Storage {\n        guard let storage = self.instance else {\n            self.instance = Storage()\n            return self.instance!\n        }\n        return storage\n    }\n    \n    private func getDefaultName(url: URL) -> String {\n        var name = url.lastPathComponent\n        if let iCloudURL = getCloudDrive(), iCloudURL == url {\n            name = \"iCloud Drive\"\n        }\n        return name\n    }\n\n    public func getRoot() -> URL? {\n        #if targetEnvironment(simulator) || os(OSX)\n                return UserDefaultsManagement.storageUrl\n        #else\n            guard UserDefaultsManagement.iCloudDrive, let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?\n                .appendingPathComponent(\"Documents\")\n                .standardized\n            else { return getLocalDocuments() }\n\n            if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) {\n                do {\n                    try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil)\n\n                    return iCloudDocumentsURL.standardized\n                } catch {\n                    print(\"Home directory creation: \\(error)\")\n                }\n                return nil\n            } else {\n                return iCloudDocumentsURL.standardized\n            }\n        #endif\n    }\n\n    public func getLocalDocuments() -> URL? {\n        let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.standardized\n\n        return url\n    }\n\n    // removes all caches after crash\n\n    private func removeCachesIfCrashed() {\n        if UserDefaultsManagement.crashedLastTime {\n            \n            removeCachedTree()\n            \n            if let cache = getCacheDir() {\n                if let files = try? FileManager.default.contentsOfDirectory(atPath: cache.path) {\n                    for file in files {\n                        let url = cache.appendingPathComponent(file)\n                        try? FileManager.default.removeItem(at: url)\n                    }\n                }\n            }\n        }\n\n        isCrashedLastTime = UserDefaultsManagement.crashedLastTime\n\n        UserDefaultsManagement.crashedLastTime = true\n    }\n\n    public func getCacheDir() -> URL? {\n        guard let cacheDir = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first, let url = URL(string: \"file://\" + cacheDir)\n        else { return nil }\n\n        return url\n    }\n\n    public func makeTempEncryptionDirectory() -> URL? {\n        let url = URL(fileURLWithPath: NSTemporaryDirectory())\n            .appendingPathComponent(\"Encryption\")\n            .appendingPathComponent(UUID().uuidString)\n\n        do {\n            try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)\n            return url\n        } catch {\n            return nil\n        }\n    }\n\n    public func getChildProjects(project: Project) -> [Project] {\n        return projects.filter({ $0.parent == project }).sorted(by: { $0.label.lowercased() < $1.label.lowercased() })\n    }\n    \n    public func getDefault() -> Project? {\n        return projects.first(where: { $0.isDefault })\n    }\n    \n    public func getSidebarProjects() -> [Project] {\n        return projects\n            .filter({ $0.isBookmark || $0.parent?.isDefault == true })\n            .sorted(by: { $0.label.lowercased() < $1.label.lowercased() })\n            .sorted(by: { $0.settings.priority < $1.settings.priority })\n    }\n\n    public func getDefaultTrash() -> Project? {\n        return projects.first(where: { $0.isTrash })\n    }\n        \n    public func insert(url: URL, bookmark: Bool = false, cacheOnly: Bool = false) -> [Project]? {\n        if projectExist(url: url)\n            || url.lastPathComponent == \"i\"\n            || url.lastPathComponent == \"files\"\n            || url.lastPathComponent == \"assets\"\n            || url.lastPathComponent == \".icloud\"\n            || url.path.contains(\".git\")\n            || url.path.contains(\".revisions\")\n            || url.path.contains(\".Trash\")\n            || url.path.contains(\".cache\")\n            || url.path.contains(\"Trash\")\n            || url.path.contains(\"/.\")\n            || url.path.contains(\".textbundle\") {\n            \n            return nil\n        }\n        \n        let project = Project(storage: self, url: url, isBookmark: bookmark)\n        var insert = [project]\n        \n        let results = project.getProjectsFSAndMemoryDiff()\n        insert.append(contentsOf: results.1)\n                \n        for item in insert {\n            if !projectExist(url: item.url) {\n                insertProject(project: item)\n                \n                _ = item.loadNotes(cacheOnly: cacheOnly)\n            }\n        }\n        \n        return insert\n    }\n\n    private func assignTrash(by url: URL) {\n        var trashURL = url.appendingPathComponent(\"Trash\", isDirectory: true)\n        \n    #if os(OSX)\n        if let trash = UserDefaultsManagement.trashURL {\n            trashURL = trash\n        }\n    #endif\n        \n        do {\n            try FileManager.default.contentsOfDirectory(atPath: trashURL.path)\n        } catch {\n            var isDir = ObjCBool(false)\n            if !FileManager.default.fileExists(atPath: trashURL.path, isDirectory: &isDir) && !isDir.boolValue {\n                do {\n                    try FileManager.default.createDirectory(at: trashURL, withIntermediateDirectories: false, attributes: nil)\n\n                    print(\"New trash created: \\(trashURL)\")\n                } catch {\n                    print(\"Trash dir error: \\(error)\")\n                }\n            }\n        }\n\n        guard !projectExist(url: trashURL) else { return }\n\n        let project = Project(storage: self, url: trashURL, isTrash: true)\n        insertProject(project: project)\n\n        self.trashURL = trashURL\n    }\n    \n    private func getCloudDrive() -> URL? {\n        if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent(\"Documents\").standardized {\n            \n            var isDirectory = ObjCBool(true)\n            if FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: &isDirectory), isDirectory.boolValue {\n                return iCloudDocumentsURL\n            }\n        }\n        \n        return nil\n    }\n            \n    func projectExist(url: URL) -> Bool {\n        return projects.contains(where: {$0.url == url})\n    }\n    \n    public func removeBy(project: Project) {\n        self.noteList.removeAll(where: { $0.project.url ==\n            project.url })\n        \n        projects.removeAll(where: { $0.url == project.url })\n    }\n\n    public func loadNotesContent() {\n        for note in noteList {\n            note.load()\n        }\n    }\n\n    public func assignBookmarks() {\n        let bookmarksManager = SandboxBookmark.sharedInstance()\n        let bookmarks = bookmarksManager.getRestoredUrls()\n        \n        for url in bookmarks {\n            if url.pathExtension == \"css\" \n                || projectExist(url: url)\n                || UserDefaultsManagement.gitStorage == url {\n                continue\n            }\n            \n\n            let project = Project(storage: self, url: url, isBookmark: true)\n            insertProject(project: project)\n        }\n    }\n    \n    func getTrash(url: URL) -> URL? {\n        return try? FileManager.default.url(for: .trashDirectory, in: .allDomainsMask, appropriateFor: url, create: false)\n    }\n    \n    public func resetCacheAttributes() {\n        for note in self.noteList {\n            note.cacheHash = nil\n        }\n    }\n    \n    public func getProjects() -> [Project] {\n        return projects\n    }\n\n    public func getProjectBy(element: Int) -> Project? {\n        if projects.indices.contains(element) {\n            return projects[element]\n        }\n\n        return nil\n    }\n\n    public func findAllProjectsExceptDefault() -> [Project] {\n        return projects.filter({ !$0.isDefault  })\n    }\n\n    public func getNonSystemProjects() -> [Project] {\n        return projects.filter({\n            !$0.isDefault\n            && !$0.isTrash\n        })\n    }\n\n    public func getAvailableProjects() -> [Project] {\n        return projects.filter({\n            !$0.isDefault\n            && !$0.isTrash\n            && $0.settings.showInSidebar\n        })\n    }\n        \n    public func getProjectPaths() -> [String] {\n        var pathList: [String] = []\n        let projects = getProjects()\n        \n        for project in projects {\n            pathList.append(NSString(string: project.url.path).expandingTildeInPath)\n        }\n        \n        return pathList\n    }\n    \n    public func getProjectByNote(url: URL) -> Project? {\n        let projectURL = url.deletingLastPathComponent()\n        \n        return\n            projects.first(where: {\n                return (\n                    $0.url == projectURL\n                )\n            })\n    }\n\n    public func getProjectBy(url: URL) -> Project? {\n        return\n            projects.first(where: {\n                return (\n                    $0.url == url\n                )\n            })\n    }\n        \n    public func sortNotes(noteList: [Note], operation: BlockOperation? = nil) -> [Note] {\n        var noteList = noteList\n        \n        // Pre sort by creation and modified date, title\n        if !searchQuery.filter.isEmpty {\n            noteList = noteList.sorted(by: {\n                if let operation = operation, operation.isCancelled {\n                    return false\n                }\n                \n                return sortQuery(note: $0, next: $1)\n            })\n        }\n        \n        return noteList.sorted(by: {\n            if let operation = operation, operation.isCancelled {\n                return false\n            }\n\n            if !searchQuery.filter.isEmpty {\n                if ($0.title == searchQuery.filter && $1.title != searchQuery.filter) {\n                    return true\n                }\n\n                if ($0.fileName == searchQuery.filter && $1.fileName != searchQuery.filter) {\n                    return true\n                }\n\n                if (\n                    $0.title.startsWith(string: searchQuery.filter)\n                        || $0.fileName.startsWith(string: searchQuery.filter)\n                ) && (\n                    !$1.title.startsWith(string: searchQuery.filter)\n                        && !$1.fileName.startsWith(string: searchQuery.filter)\n                ) {\n                    return true\n                }\n                \n                return false\n            }\n            \n            return sortQuery(note: $0, next: $1)\n        })\n    }\n    \n    private func sortQuery(note: Note, next: Note) -> Bool {\n        if note.isPinned == next.isPinned {\n            switch self.sortByState {\n            case .creationDate:\n                if let prevDate = note.creationDate, let nextDate = next.creationDate {\n                    return self.sortDirectionState == .asc && prevDate < nextDate || self.sortDirectionState == .desc && prevDate > nextDate\n                }\n            case .modificationDate, .none:\n                return self.sortDirectionState == .asc && note.modifiedLocalAt < next.modifiedLocalAt || self.sortDirectionState == .desc && note.modifiedLocalAt > next.modifiedLocalAt\n            case .title:\n                var title = note.title\n                var nextTitle = next.title\n                if note.isEncryptedAndLocked() {\n                    title = note.fileName\n                }\n                if next.isEncryptedAndLocked() {\n                    nextTitle = next.fileName\n                }\n                \n                let comparisonResult = title.localizedStandardCompare(nextTitle)\n                \n                return self.sortDirectionState == .asc\n                    ? comparisonResult == .orderedAscending\n                    : comparisonResult == .orderedDescending\n            }\n        }\n        \n        return note.isPinned && !next.isPinned\n    }\n\n    public func isValidNote(url: URL) -> Bool {\n        if allowedExtensions.contains(url.pathExtension) || isValidUTI(url: url) {\n            \n            // disallow parent dir with dot at start – https://github.com/glushchenko/fsnotes/issues/1653\n            let qty = url.pathComponents.count\n            if qty > 1 {\n                return !url.pathComponents[qty-2].startsWith(string: \".\")\n            }\n            \n            return true\n        }\n        \n        return false\n    }\n    \n    public func isValidUTI(url: URL) -> Bool {\n        guard url.fileSize < 100000000 else { return false }\n\n        guard let typeIdentifier = (try? url.resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier else { return false }\n\n        let type = typeIdentifier as CFString\n        if type == kUTTypeFolder {\n            return false\n        }\n\n        return UTTypeConformsTo(type, kUTTypeText)\n    }\n    \n    func add(_ note: Note) {\n        if !noteList.contains(where: { $0.name == note.name && $0.project == note.project }) {\n           noteList.append(note)\n        } else {\n            print(\"Note already exists: \\(note.name) (\\(note.url))\")\n        }\n    }\n\n    public func contains(note: Note) -> Bool {\n        if noteList.contains(where: { $0.name == note.name && $0.project == note.project }) {\n           return true\n        }\n\n        return false\n    }\n    \n    func removeBy(note: Note) {\n        if let i = noteList.firstIndex(where: {$0 === note}) {\n            noteList.remove(at: i)\n        }\n    }\n    \n    func getNextId() -> Int {\n        return noteList.count\n    }\n    \n    func getBy(url: URL, caseSensitive: Bool = false) -> Note? {\n        let standardized = url.standardized\n\n        if caseSensitive {\n            return\n                noteList.first(where: {\n                    return (\n                        $0.url.path == standardized.path\n                    )\n                })\n        }\n\n        return\n            noteList.first(where: {\n                return (\n                    $0.url.path.lowercased() == standardized.path.lowercased()\n                )\n            })\n    }\n        \n    func getBy(name: String) -> Note? {\n        return\n            noteList.first(where: {\n                return (\n                    $0.name == name\n                )\n            })\n    }\n    \n    func getBy(title: String, exclude: Note? = nil) -> Note? {\n        return\n            noteList.first(where: {\n                return (\n                    $0.title.lowercased() == title.lowercased()\n                    && !$0.isTrash()\n                    && (exclude == nil || $0 != exclude)\n                )\n            })\n    }\n\n    func getBy(fileName: String, exclude: Note? = nil) -> Note? {\n        return\n            noteList.first(where: {\n                return (\n                    $0.fileName.lowercased() == fileName.lowercased()\n                        && !$0.isTrash()\n                        && (exclude == nil || $0 != exclude)\n                )\n            })\n    }\n    \n    func getBy(titleOrName: String) -> Note? {\n        return getBy(fileName: titleOrName) ?? getBy(title: titleOrName)\n    }\n    \n    func getBy(startWith: String) -> [Note]? {\n        return\n            noteList.filter{\n                $0.title.lowercased().starts(with: startWith.lowercased())\n            }\n    }\n\n    func getByUrl(endsWith: String) -> Note? {\n        for note in noteList {\n            if note.url.path.hasSuffix(endsWith) {\n                return note\n            }\n        }\n\n        return nil\n    }\n\n    func getBy(contains: String) -> [Note]? {\n        return\n            noteList.filter{\n                !$0.project.isTrash\n                && $0.title.localizedCaseInsensitiveContains(contains)\n            }\n    }\n\n    public func getTitles(by word: String? = nil) -> [String]? {\n        var notes = noteList\n        if let word = word {\n            notes = notes\n                .filter{\n                    $0.title.range(of: word, options: .caseInsensitive) != nil && $0.project.settings.isFirstLineAsTitle()\n                    || $0.fileName.range(of: word, options: .caseInsensitive) != nil && !$0.project.settings.isFirstLineAsTitle()\n                }\n                .filter({ !$0.isTrash() })\n            \n            guard notes.count > 0 else { return nil }\n            var titles = notes.map{ String($0.project.settings.isFirstLineAsTitle() ? $0.title : $0.fileName) }\n            \n            titles = Array(Set(titles))\n            titles = titles\n                .filter({ !$0.starts(with: \"![](\") && !$0.starts(with: \"[[\") })\n                .sorted { (first, second) -> Bool in\n                    let firstStarts = first.range(of: word, options: [.caseInsensitive, .anchored]) != nil\n                    let secondStarts = second.range(of: word, options: [.caseInsensitive, .anchored]) != nil\n                    \n                    if firstStarts && secondStarts || !firstStarts && !secondStarts {\n                        return first.localizedCaseInsensitiveCompare(second) == .orderedAscending\n                    }\n                    \n                    return firstStarts && !secondStarts\n                }\n            \n            if titles.count > 100 {\n                return Array(titles[0..<100])\n            }\n            \n            return titles\n        }\n        \n        guard notes.count > 0 else { return nil }\n        notes = notes.sorted { first, second in\n            return first.modifiedLocalAt > second.modifiedLocalAt\n        }\n        \n        let titles = notes\n            .filter({ !$0.isTrash() })\n            .map{ String($0.project.settings.isFirstLineAsTitle() ? $0.title : $0.fileName ) }\n            .filter({ $0.count > 0 })\n            .filter({ !$0.starts(with: \"![](\") })\n            .prefix(100)\n        \n        return Array(titles)\n    }\n    \n    func getDemoSubdirURL() -> URL? {\n#if os(OSX)\n        if let project = projects.first {\n            return project.url\n        }\n        \n        return nil\n#else\n        if let icloud = UserDefaultsManagement.iCloudDocumentsContainer {\n            return icloud\n        }\n\n        return UserDefaultsManagement.storageUrl\n#endif\n    }\n    \n    func removeNotes(notes: [Note], fsRemove: Bool = true, completely: Bool = false, completion: @escaping ([URL: URL]?) -> ()) {\n    #if !SHARE_EXT\n        guard notes.count > 0 else {\n            completion(nil)\n            return\n        }\n        \n        for note in notes {\n            note.removeCacheForPreviewImages()\n            removeBy(note: note)\n        }\n        \n        var removed = [URL: URL]()\n        \n        if fsRemove {\n            for note in notes {\n                if let trashURLs = note.removeFile(completely: completely) {\n                    removed[trashURLs[0]] = trashURLs[1]\n                }\n            }\n        }\n        \n        if removed.count > 0 {\n            completion(removed)\n        } else {\n            completion(nil)\n        }\n    #endif\n    }\n\n    private func fetchAllDirectories(url: URL) -> [URL]? {\n        let maxDirs = UserDefaultsManagement.maxChildDirs\n\n        guard let fileEnumerator =\n            FileManager.default.enumerator(\n                at: url, includingPropertiesForKeys: nil,\n                options: FileManager.DirectoryEnumerationOptions()\n            )\n        else { return nil }\n\n        var extensions = self.allowedExtensions\n        extensions.append(contentsOf: [\n            \"jpg\", \"png\", \"gif\", \"jpeg\", \"json\", \"JPG\",\n            \"PNG\", \".icloud\", \".cache\", \".Trash\", \"i\"\n        ])\n\n        let urls = fileEnumerator.allObjects.compactMap({ $0 as? URL })\n            .filter({\n                !extensions.contains($0.pathExtension)\n                && !extensions.contains($0.lastPathComponent)\n                && !$0.path.contains(\"/assets\")\n                && !$0.path.contains(\"/.cache\")\n                && !$0.path.contains(\"/files\")\n                && !$0.path.contains(\"/.Trash\")\n                && !$0.path.contains(\"/Trash\")\n                && !$0.path.contains(\".textbundle\")\n                && !$0.path.contains(\".revisions\")\n                && !$0.path.contains(\"/.git\")\n            })\n\n        var fin = [URL]()\n        var i = 0\n\n        for url in urls {\n            do {\n                var isDirectoryResourceValue: AnyObject?\n                try (url as NSURL).getResourceValue(&isDirectoryResourceValue, forKey: URLResourceKey.isDirectoryKey)\n\n                var isPackageResourceValue: AnyObject?\n                try (url as NSURL).getResourceValue(&isPackageResourceValue, forKey: URLResourceKey.isPackageKey)\n\n                if isDirectoryResourceValue as? Bool == true,\n                    isPackageResourceValue as? Bool == false {\n                    \n                    i = i + 1\n                    fin.append(url)\n                }\n            }\n            catch let error as NSError {\n                print(\"Error: \", error.localizedDescription)\n            }\n\n            if i > maxDirs {\n                break\n            }\n        }\n\n        return fin\n    }\n    \n    public func getCurrentProject() -> Project? {\n        return projects.first\n    }\n\n    public func getAllTrash() -> [Note] {\n        return\n            noteList.filter {\n                $0.isTrash()\n            }\n    }\n\n    private func cleanTrash() {\n        if #available(iOS 11.0, *) {\n            guard let trash = try? FileManager.default.url(for: .trashDirectory, in: .allDomainsMask, appropriateFor: UserDefaultsManagement.storageUrl, create: false) else { return }\n\n            do {\n                let fileURLs = try FileManager.default.contentsOfDirectory(at: trash, includingPropertiesForKeys: nil, options: [])\n\n                for fileURL in fileURLs {\n                    try FileManager.default.removeItem(at: fileURL)\n                }\n            } catch  { print(error) }\n        }\n    }\n\n    public func saveCloudPins() {\n        #if CLOUD_RELATED_BLOCK\n        if let pinned = getPinned() {\n            var names = [String]()\n            for note in pinned {\n                names.append(note.getRelatedPath())\n            }\n\n            let keyStore = NSUbiquitousKeyValueStore.default\n            keyStore.set(names, forKey: \"co.fluder.fsnotes.pins.shared\")\n            keyStore.synchronize()\n        \n            print(\"Pins successfully saved: \\(names)\")\n        }\n        #endif\n    }\n\n    public func loadPins(notes: [Note]) {\n        #if CLOUD_RELATED_BLOCK\n        let keyStore = NSUbiquitousKeyValueStore.default\n        keyStore.synchronize()\n\n        guard let names = keyStore.array(forKey: \"co.fluder.fsnotes.pins.shared\") as? [String]\n            else { return }\n\n        for note in notes {\n            if names.contains(note.getRelatedPath()) {\n                note.addPin(cloudSave: false)\n            }\n        }\n        #endif\n    }\n\n    public func restoreCloudPins() -> (removed: [Note]?, added: [Note]?) {\n        var added = [Note]()\n        var removed = [Note]()\n\n        #if CLOUD_RELATED_BLOCK\n        let keyStore = NSUbiquitousKeyValueStore.default\n        keyStore.synchronize()\n        \n        if let names = keyStore.array(forKey: \"co.fluder.fsnotes.pins.shared\") as? [String] {\n            if let pinned = getPinned() {\n                for note in pinned {\n                    if !names.contains(note.getRelatedPath()) {\n                        note.removePin(cloudSave: false)\n                        removed.append(note)\n                    }\n                }\n            }\n\n            for note in noteList {\n                if !note.isPinned, names.contains(note.getRelatedPath()) {\n                    note.addPin(cloudSave: false)\n                    added.append(note)\n                }\n            }\n        }\n        #endif\n\n        return (removed, added)\n    }\n    \n    public func getPinned() -> [Note]? {\n        return noteList.filter({ $0.isPinned })\n    }\n\n    public func remove(project: Project) {\n        if let index = projects.firstIndex(of: project) {\n            projects.remove(at: index)\n            \n            cleanCachedTree(url: project.url)\n        }\n        \n        removeBy(project: project)\n    }\n\n    public func getNotesBy(project: Project) -> [Note] {\n        return noteList.filter({ $0.project == project })\n    }\n\n    public func loadProjects(from urls: [URL]) {\n        var result = [URL]()\n        for url in urls {\n            do {\n                _ = try FileManager.default.contentsOfDirectory(atPath: url.path)\n                result.append(url)\n            } catch {\n                print(error)\n            }\n        }\n\n        let projects =\n            result.compactMap({ Project(storage: self, url: $0)})\n\n        guard projects.count > 0 else {\n            return\n        }\n\n        self.projects.removeAll()\n\n        for project in projects {\n            if project == projects.first {\n                project.isDefault = true\n                project.label = NSLocalizedString(\"Inbox\", comment: \"\") \n            }\n\n            insertProject(project: project)\n        }\n    }\n\n    public func trashItem(url: URL) -> URL? {\n        guard let trashURL = Storage.shared().getDefaultTrash()?.url else { return nil }\n\n        let fileName = url.deletingPathExtension().lastPathComponent\n        let fileExtension = url.pathExtension\n\n        var destination = trashURL.appendingPathComponent(url.lastPathComponent)\n\n        var i = 0\n\n        while FileManager.default.fileExists(atPath: destination.path) {\n            let nextName = \"\\(fileName)_\\(i).\\(fileExtension)\"\n            destination = trashURL.appendingPathComponent(nextName)\n            i += 1\n        }\n\n        return destination\n    }\n\n    public func getCache(key: String) -> Data? {\n        guard let cacheDir =\n            NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first else { return nil }\n\n        guard let url = URL(string: \"file://\" + cacheDir) else { return nil }\n\n        let cacheURL = url.appendingPathComponent(key + \".cache\")\n        \n        return try? Data(contentsOf: cacheURL)\n    }\n\n    public func saveProjectsCache() {\n        for project in projects {\n            project.saveCache()\n        }\n        \n        saveCachedTree()\n    }\n\n    public func checkWelcome() {\n        #if os(OSX)\n            guard let storageUrl = getDefault()?.url else { return }\n            guard UserDefaultsManagement.showWelcome else { return }\n            guard let bundlePath = Bundle.main.path(forResource: \"Welcome\", ofType: \".bundle\") else { return }\n\n            let bundle = URL(fileURLWithPath: bundlePath)\n            let url = storageUrl.appendingPathComponent(\"Welcome\", isDirectory: true)\n        \n            if FileManager.default.fileExists(atPath: url.path) {\n                return\n            }\n\n            try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)\n\n            do {\n                var files = try FileManager.default.contentsOfDirectory(atPath: bundle.path)\n                files = files.sorted(by: { $0.localizedStandardCompare($1) == .orderedDescending })\n                \n                var i = 0\n                for file in files {\n                    i += 1\n                    \n                    let dstPath = \"\\(url.path)/\\(file)\"\n                    try? FileManager.default.copyItem(atPath: \"\\(bundle.path)/\\(file)\", toPath: dstPath)\n                    \n                    // Adds sorting for global sort by .creationDate\n                    let mdPath = \"\\(url.path)/\\(file)/text.markdown\"\n                    if let attributes = try? FileManager.default.attributesOfItem(atPath: mdPath),\n                       let creationDate = attributes[.creationDate] as? Date\n                    {\n                        let newDate = creationDate.addingTimeInterval(TimeInterval(i))\n                        try? FileManager.default.setAttributes([.creationDate: newDate], ofItemAtPath: mdPath)\n                    }\n                }\n            } catch {\n                print(\"Initial copy error: \\(error)\")\n            }\n        \n            let project = Project(storage: self, url: url, label: \"Welcome\")\n            insertProject(project: project)\n            \n            let notes = project.loadNotes()\n            _ = notes.compactMap({ $0.load() })\n        \n            welcomeProject = project\n            welcomeNote = notes.first(where: { $0.fileName == \"1. Introduction\"})\n        \n        #else\n            guard UserDefaultsManagement.showWelcome else { return }\n            guard noteList.isEmpty else { return }\n\n            let welcomeFileName = \"Meet FSNotes 7.textbundle\"\n\n            guard let src = Bundle.main.resourceURL?.appendingPathComponent(welcomeFileName) else { return }\n            guard let dst = getDefault()?.url.appendingPathComponent(welcomeFileName) else { return }\n\n            do {\n                if !FileManager.default.fileExists(atPath: dst.path) {\n                    try FileManager.default.copyItem(atPath: src.path, toPath: dst.path)\n\n                    if let project = getDefault() {\n                        let note = Note(url: dst, with: project)\n                        add(note)\n                    }\n                }\n            } catch {\n                print(\"Initial copy error: \\(error)\")\n            }\n\n            UserDefaultsManagement.showWelcome = false\n        #endif\n    }\n\n    public func getNewsDate() -> Date? {\n        let dateFormatter = DateFormatter()\n        dateFormatter.dateFormat = \"yyyy-MM-dd\"\n        if let date = dateFormatter.date(from: lastNewsDate) {\n            return date\n        }\n        return nil\n    }\n\n    public func isReadedNewsOutdated() -> Bool {\n        guard let date = UserDefaultsManagement.lastNews, let newsDate = getNewsDate() else {\n            return true\n        }\n\n        if newsDate > date {\n            return true\n        }\n\n        return false\n    }\n\n    public func getNews() -> URL? {\n        return Bundle.main.resourceURL?.appendingPathComponent(\"Meet FSNotes 7.textbundle\")\n    }\n\n    public func loadNonSystemProject() {\n        guard let main = getDefault() else { return }\n        \n        let projectURLs = getAllSubUrls(for: main.url)\n        for projectURL in projectURLs {\n            let project = Project(storage: self, url: projectURL)\n            insertProject(project: project)\n        }\n        \n        let bookmarkURLs = fetchBookmarkUrls()\n        for url in bookmarkURLs {\n            if !projectURLs.contains(url) {\n                let project = Project(storage: self, url: url)\n                insertProject(project: project)\n            }\n        }\n    }\n    \n    public func fetchBookmarkUrls() -> [URL] {\n        guard let main = getDefault()?.url else { return [URL]() }\n        \n        var projectURLs = [URL]()\n        let bookmarkUrls = SandboxBookmark.sharedInstance().getRestoredUrls()\n        \n        for url in bookmarkUrls {\n            if !projectURLs.contains(url)\n                && url != main\n                && url != self.trashURL {\n\n                projectURLs.append(url)\n                \n                if let subUrls = fetchAllDirectories(url: url) {\n                    for sUrl in subUrls {\n                        if !projectURLs.contains(sUrl) {\n                            projectURLs.append(sUrl)\n                        }\n                    }\n                }\n            }\n        }\n\n        return projectURLs\n    }\n    \n    private func getAllSubUrls(for rootUrl: URL) -> [URL] {\n        let trash = trashURL\n        \n        var projectURLs = [URL]()\n        if let urls = fetchAllDirectories(url: rootUrl) {\n            for url in urls {\n                let standardizedURL = (url as URL).standardized\n                if standardizedURL == trash\n                    || standardizedURL == rootUrl {\n                    continue\n                }\n                projectURLs.append(standardizedURL)\n            }\n        }\n        \n        return projectURLs\n    }\n    \n    public func getProjectDiffs() -> ([Project], [Project], [Note], [Note]) {\n        var insert = [Project]()\n        var remove = [Project]()\n        \n        if let defaultProject = getDefault() {\n            let defaultResults = defaultProject.getProjectsFSAndMemoryDiff()\n            remove.append(contentsOf: defaultResults.0)\n            insert.append(contentsOf: defaultResults.1)\n        }\n        \n        let externalProjects = projects.filter({ $0.isBookmark })\n        for project in externalProjects {\n            let results = project.getProjectsFSAndMemoryDiff()\n            remove.append(contentsOf: results.0)\n            insert.append(contentsOf: results.1)\n        }\n        \n        for insertItem in insert {\n            insertProject(project: insertItem)\n        }\n        \n        loadProjectRelations()\n        saveCachedTree()\n        \n        var insertNotes = [Note]()\n        for insertItem in insert {\n            let append = insertItem.loadNotes()\n            insertNotes.append(contentsOf: append)\n        }\n\n        var removeNotes = [Note]()\n        for removeItem in remove {\n            let append = getNotesBy(project: removeItem)\n            removeNotes.append(contentsOf: append)\n        }\n\n\n        return (remove, insert, removeNotes, insertNotes)\n    }\n\n    public func importNote(url: URL) -> Note? {\n        if !FileManager.default.fileExists(atPath: url.path) {\n            return nil\n        }\n\n        guard getBy(url: url) == nil,\n            let project = self.getProjectByNote(url: url)\n        else { return nil }\n        \n        let note = Note(url: url, with: project)\n        \n        if note.isTextBundle() && !note.isFullLoadedTextBundle() {\n            return nil\n        }\n        \n        note.load()\n        note.loadModifiedLocalAt()\n        note.loadCreationDate()\n        \n        loadPins(notes: [note])\n        add(note)\n        \n        print(\"FSWatcher import note: \\\"\\(note.name)\\\"\")\n        \n        return note\n    }\n\n    public func hideImages(directory: String, srcPath: String) {\n        if !relativeInlineImagePaths.contains(directory) {\n            let url = URL(fileURLWithPath: directory, isDirectory: true)\n\n            relativeInlineImagePaths.append(directory)\n\n            if !url.isHidden(),\n               FileManager.default.directoryExists(atUrl: url),\n               srcPath.contains(\"/\"),\n               !srcPath.contains(\"..\")\n            {\n                if let contentList = try? FileManager.default.contentsOfDirectory(atPath: url.path), containsTextFiles(contentList) {\n                    return\n                }\n\n                if let data = \"true\".data(using: .utf8) {\n                    try? url.setExtendedAttribute(data: data, forName: \"es.fsnot.hidden.dir\")\n                }\n            }\n        }\n    }\n\n    private func containsTextFiles(_ list: [String]) -> Bool {\n        for item in list {\n            let ext = (item as NSString).pathExtension.lowercased()\n            if allowedExtensions.contains(ext) {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    public func findParent(url: URL) -> Project? {\n        let parentURL = url.deletingLastPathComponent()\n\n        if let foundParent = projects.first(where: { $0.url == parentURL}) {\n            return foundParent\n        }\n\n        return nil\n    }\n\n    #if os(OSX)\n    public func saveProjectsExpandState() {\n        var urls = [URL]()\n        for project in projects {\n            if project.isExpanded {\n                urls.append(project.url)\n            }\n        }\n\n        if var documentDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {\n            documentDir.appendPathComponent(\"projects.state\")\n\n            if let data = try? NSKeyedArchiver.archivedData(withRootObject: urls, requiringSecureCoding: true) {\n                try? data.write(to: documentDir)\n            }\n        }\n    }\n\n    public func restoreProjectsExpandState() {\n        guard var documentDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }\n\n        documentDir.appendPathComponent(\"projects.state\")\n\n        guard let data = FileManager.default.contents(atPath: documentDir.path) else {\n            return\n        }\n\n        guard let urls = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSURL.self], from: data) as? [URL] else {\n            return\n        }\n\n        for project in projects {\n            if urls.contains(project.url) {\n                project.isExpanded = true\n            }\n        }\n    }\n    #endif\n\n    public func getRevisionsHistory() -> URL {\n        let documentDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first ?? URL(fileURLWithPath: NSTemporaryDirectory())\n        let revisionsUrl = documentDir.appendingPathComponent(\".revisions\")\n\n        return revisionsUrl\n    }\n\n    public func getRevisionsHistoryDocumentsSupport() -> URL {\n        let documentDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first ?? URL(fileURLWithPath: NSTemporaryDirectory())\n        let revisionsUrl = documentDir.appendingPathComponent(\".revisions\")\n\n        return revisionsUrl\n    }\n    \n    public func saveUploadPaths() {\n        let notes = noteList.filter({ $0.uploadPath != nil })\n        \n        var bookmarks = [URL: String]()\n        for note in notes {\n            if let path = note.uploadPath, path.count > 1 {\n                bookmarks[note.url] = path\n            }\n        }\n        \n        if let data = try? NSKeyedArchiver.archivedData(withRootObject: bookmarks, requiringSecureCoding: true) {\n            UserDefaultsManagement.sftpUploadBookmarksData = data\n        }\n    }\n    \n    public func restoreUploadPaths() {\n        guard let data = UserDefaultsManagement.sftpUploadBookmarksData,\n              let uploadBookmarks = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSString.self], from: data) as? [URL: String] else { return }\n\n        for bookmark in uploadBookmarks {\n            if let note = getBy(url: bookmark.key) {\n                note.uploadPath = bookmark.value\n            }\n        }\n    }\n\n    public func getGitKeysDir() -> URL? {\n        guard let url = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)\n            .first?\n            .appendingPathComponent(\"Keys\", isDirectory: true) else { return nil }\n        \n        if !FileManager.default.fileExists(atPath: url.path) {\n            try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true)\n        }\n        \n        return url\n    }\n    \n    public func getProjectBy(settingsKey: String) -> Project? {\n        return\n            projects.first(where: {\n                return (\n                    $0.settingsKey == settingsKey\n                )\n            })\n    }\n\n    public func hasOrigins() -> Bool {\n        return projects.first(where: {\n            return (\n                $0.settings.gitOrigin != nil && $0.settings.gitOrigin!.count > 0\n            )\n        }) != nil\n    }\n\n    public func getGitProjects() -> [Project]? {\n        return projects.filter({\n            return (\n                $0.settings.gitOrigin != nil && $0.settings.gitOrigin!.count > 0\n            )\n        })\n    }\n\n    public func loadProjectRelations() {\n        for project in projects {\n            if let parent = getProjectBy(url: project.url.deletingLastPathComponent()) {\n                if project.isTrash { continue }\n                \n                project.parent = parent\n                \n                if parent.child.filter({ $0.url == project.url }).count == 0 {\n                    parent.child.append(project)\n                }\n                \n                parent.child = parent.child.sorted(by: { $0.settings.priority < $1.settings.priority })\n            }\n        }\n    }\n    \n    public func saveCachedTree() {\n        guard let cacheDir = getCacheDir() else { return }\n        \n        var urls =\n            getNonSystemProjects()\n            .sorted(by: {\n                $0.url.path.components(separatedBy: \"/\").count < $1.url.path.components(separatedBy: \"/\").count\n            })\n            .compactMap({ $0.url })\n        \n        // Deduplicate\n        let deduplicatedUrls = urls.reduce(into: [String: URL]()) { result, object in\n            result[object.path] = object\n        }.values\n        \n        urls = Array(deduplicatedUrls)\n        \n        if let data = try? NSKeyedArchiver.archivedData(withRootObject: urls, requiringSecureCoding: true) {\n            let url = cacheDir.appendingPathComponent(\"sidebarTree\")\n            \n            do {\n                try data.write(to: url)\n                print(\"B. Sidebar tree caching is finished\")\n            } catch {\n                print(\"Sidebar caching error\")\n            }\n        }\n    }\n    \n    public func getCachedTree() -> [URL]? {\n        guard let cacheDir = getCacheDir() else { return nil }\n        let url = cacheDir.appendingPathComponent(\"sidebarTree\")\n        \n        if let data = try? Data(contentsOf: url), let urls = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSURL.self], from: data) as? [URL] {\n            return urls\n        }\n        \n        return nil\n    }\n    \n    public func removeCachedTree() {\n        guard let cacheDir = getCacheDir() else { return }\n        let url = cacheDir.appendingPathComponent(\"sidebarTree\")\n        \n        try? FileManager.default.removeItem(at: url)\n    }\n    \n    public func cleanCachedTree(url: URL) {\n        guard let urls = getCachedTree() else { return }\n        let cleanList = urls.filter({ !$0.path.startsWith(string: url.path) })\n        \n        if let data = try? NSKeyedArchiver.archivedData(withRootObject: cleanList, requiringSecureCoding: false) {\n            if let cacheDir = getCacheDir() {\n                let url = cacheDir.appendingPathComponent(\"sidebarTree\")\n                \n                do {\n                    try data.write(to: url)\n                } catch {\n                    print(\"Sidebar caching error\")\n                }\n            }\n        }\n    }\n    \n    public func getSortedProjects() -> [Project] {\n        return self.projects.sorted(by: {$0.url.path < $1.url.path})\n    }\n\n    public func setSearchQuery(value: SearchQuery) {\n        self.searchQuery = value\n\n        buildSortBy()\n    }\n\n    public func getSortByState() -> SortBy {\n        return self.sortByState\n    }\n\n    public func getSortDirectionState() -> SortDirection {\n        return self.sortDirectionState\n    }\n\n    public func buildSortBy() {\n        if let project = self.searchQuery.projects.first, project.settings.sortBy != .none {\n            self.sortByState = project.settings.sortBy\n            self.sortDirectionState = project.settings.sortDirection\n            return\n        }\n\n        if self.searchQuery.projects.count == 0 {\n            var project: Project?\n\n            switch self.searchQuery.type {\n            case .All:\n                project = self.allNotesProject\n            case .Untagged:\n                project = self.untaggedProject\n            case .Todo:\n                project = self.todoProject\n            default:\n                project = self.allNotesProject\n            }\n\n            if let project = project, project.settings.sortBy != .none {\n                self.sortByState =  project.settings.sortBy\n                self.sortDirectionState = project.settings.sortDirection\n                return\n            }\n        }\n\n        self.sortByState = UserDefaultsManagement.sort\n        self.sortDirectionState = UserDefaultsManagement.sortDirection ? .desc : .asc\n    }\n\n    public func migrationAPIIds() {\n        guard let key = UserDefaultsManagement.deprecatedUploadKey else {\n            return\n        }\n\n        UserDefaultsManagement.uploadKey = key\n        UserDefaultsManagement.deprecatedUploadKey = nil\n\n         guard let data = UserDefaultsManagement.apiBookmarksData,\n               let uploadBookmarks = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSURL.self, NSString.self], from: data) as? [URL: String] else { return }\n\n         for bookmark in uploadBookmarks {\n             if let note = getBy(url: bookmark.key) {\n                 if note.apiId == nil {\n                     note.apiId = bookmark.value\n                     note.project.saveWebAPI()\n                 }\n             }\n         }\n\n        UserDefaultsManagement.apiBookmarksData = nil\n    }\n    \n    public func addNote(url: URL) -> Note {\n        let projectURL = url.deletingLastPathComponent()\n        var project: Project?\n        \n        if let unwrappedProject = getProjectBy(url: projectURL) {\n            project = unwrappedProject\n        } else {\n            project = Project(storage: self, url: projectURL)\n            insertProject(project: project!)\n        }\n        \n        let note = Note(url: url, with: project!)\n        add(note)\n        \n        return note\n    }\n}\n\nextension String: Error {}\n"
  },
  {
    "path": "FSNotesCore/Business/StorageType.swift",
    "content": "//\n//  StorageType.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 06.05.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic enum StorageType: Int {\n    case none        = 0x00\n    case local       = 0x01\n    case iCloudDrive = 0x02\n    case custom      = 0x03\n}\n"
  },
  {
    "path": "FSNotesCore/Business/TextBundleInfo.swift",
    "content": "//\n//  TextBundleInfo.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/4/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nstruct TextBundleInfo: Decodable {\n    let version: Int\n    let type: String\n    let flatExtension: String?\n    let created: Int?\n    let modified: Int?\n}\n"
  },
  {
    "path": "FSNotesCore/Business/UndoData.swift",
    "content": "//\n//  UndoData.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 4/27/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass UndoData: NSObject {\n    let string: NSAttributedString\n    let range: NSRange\n    \n    init(string: NSAttributedString, range: NSRange) {\n        self.string = string\n        self.range = range\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/CodeBlockDetector.swift",
    "content": "//\n//  CodeBlockDetector.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.10.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(OSX)\nimport Cocoa\n#endif\n\nclass CodeBlockDetector {\n\n    static let shared = CodeBlockDetector()\n\n    private let pattern: String\n    private let regex: NSRegularExpression\n    private var previousRanges: [NSRange] = []\n\n    init() {\n        self.pattern = \"(?<=\\\\n|\\\\A)```[a-zA-Z0-9]*\\\\n([\\\\s\\\\S]*?)\\\\n```(?=\\\\n|\\\\Z)\"\n\n        do {\n            self.regex = try NSRegularExpression(pattern: pattern, options: [])\n        } catch {\n            fatalError(\"Invalid regex pattern: \\(error)\")\n        }\n    }\n\n    public func findCodeBlocks(in textStorage: NSAttributedString, range searchRange: NSRange? = nil) -> [NSRange] {\n        guard UserDefaultsManagement.codeBlockHighlight else { return [] }\n\n        let rangeToSearch = searchRange ?? NSRange(location: 0, length: textStorage.length)\n        return regex.matches(in: textStorage.string, options: [], range: rangeToSearch)\n                    .map { $0.range }\n    }\n\n    public func codeBlocks(textStorage: NSMutableAttributedString, editedRange: NSRange, delta: Int, newRanges: [NSRange]?) -> CodeBlockRanges {\n        let newRanges = newRanges ?? []\n        let adjustedPreviousRanges = adjustPreviousRanges(for: editedRange, delta: delta)\n\n        previousRanges = newRanges\n\n        let completelyNewBlocks = findCompletelyNewBlocks(\n            new: newRanges,\n            adjusted: adjustedPreviousRanges\n        )\n\n        let blocksFromSplit = findBlocksFromSplit(\n            new: newRanges,\n            adjusted: adjustedPreviousRanges\n        )\n\n        let blocksFromMerge = findBlocksFromMerge(\n            new: newRanges,\n            adjusted: adjustedPreviousRanges\n        )\n\n        let expandedBlocks = findExpandedBlocks(\n            new: newRanges,\n            adjusted: adjustedPreviousRanges,\n            excluding: completelyNewBlocks + blocksFromSplit + blocksFromMerge\n        )\n\n        let (editedBlock, editedParagraph) = findEditedBlock(\n            in: newRanges,\n            editedRange: editedRange,\n            textStorage: textStorage,\n            excluding: completelyNewBlocks + blocksFromSplit + blocksFromMerge\n        )\n\n        let addedBlocks = completelyNewBlocks + blocksFromSplit + blocksFromMerge + expandedBlocks\n\n        let markdownRanges = findRangesBecameMarkdown(\n            adjusted: adjustedPreviousRanges,\n            new: newRanges\n        )\n\n        return CodeBlockRanges(\n            code: addedBlocks,\n            md: markdownRanges,\n            edited: editedBlock,\n            editedParagraph: editedParagraph\n        )\n    }\n\n    // MARK: - Helper Methods\n\n    private func adjustPreviousRanges(for editedRange: NSRange, delta: Int) -> [NSRange] {\n        return previousRanges.compactMap { range -> NSRange? in\n            let adjustedRange: NSRange\n\n            if range.location >= editedRange.location {\n                adjustedRange = NSRange(location: range.location + delta, length: range.length)\n            } else if NSMaxRange(range) <= editedRange.location {\n                adjustedRange = range\n            } else {\n                let newLength = range.length + delta\n                adjustedRange = NSRange(location: range.location, length: max(0, newLength))\n            }\n\n            return adjustedRange.length > 0 ? adjustedRange : nil\n        }\n    }\n\n    private func findCompletelyNewBlocks(\n        new: [NSRange],\n        adjusted: [NSRange]\n    ) -> [NSRange] {\n        return new.filter { newRange in\n            !adjusted.contains { oldRange in\n                NSIntersectionRange(oldRange, newRange).length > 0\n            }\n        }\n    }\n\n    private func findBlocksFromSplit(\n        new: [NSRange],\n        adjusted: [NSRange]\n    ) -> [NSRange] {\n        var result: [NSRange] = []\n\n        for oldRange in adjusted {\n            let overlappingBlocks = new.filter { newRange in\n                NSIntersectionRange(oldRange, newRange).length > 0\n            }\n\n            if overlappingBlocks.count >= 2 {\n                result.append(contentsOf: overlappingBlocks)\n            }\n        }\n\n        return result\n    }\n\n    private func findBlocksFromMerge(\n        new: [NSRange],\n        adjusted: [NSRange]\n    ) -> [NSRange] {\n        return new.filter { newRange in\n            let overlappingOldBlocks = adjusted.filter { oldRange in\n                NSIntersectionRange(oldRange, newRange).length > 0\n            }\n            return overlappingOldBlocks.count >= 2\n        }\n    }\n\n    private func findExpandedBlocks(\n        new: [NSRange],\n        adjusted: [NSRange],\n        excluding: [NSRange]\n    ) -> [NSRange] {\n        return new.compactMap { newRange -> NSRange? in\n            guard !excluding.contains(where: { NSEqualRanges($0, newRange) }) else {\n                return nil\n            }\n\n            let containedOldBlocks = adjusted.filter { oldRange in\n                NSLocationInRange(oldRange.location, newRange) &&\n                NSLocationInRange(NSMaxRange(oldRange) - 1, newRange) &&\n                !NSEqualRanges(oldRange, newRange)\n            }\n\n            guard containedOldBlocks.count == 1,\n                  let oldBlock = containedOldBlocks.first,\n                  newRange.length > oldBlock.length else {\n                return nil\n            }\n\n            return newRange\n        }\n    }\n\n    private func findEditedBlock(\n        in ranges: [NSRange],\n        editedRange: NSRange,\n        textStorage: NSMutableAttributedString,\n        excluding: [NSRange]\n    ) -> (block: NSRange?, paragraph: NSRange?) {\n        for range in ranges {\n            guard !excluding.contains(where: { NSEqualRanges($0, range) }) else {\n                continue\n            }\n\n            // Проверяем, что editedRange находится внутри блока\n            let isInside = editedRange.length == 0\n                ? NSLocationInRange(editedRange.location, range) || editedRange.location == NSMaxRange(range)\n                : NSIntersectionRange(range, editedRange).length > 0\n\n            guard isInside else {\n                continue\n            }\n\n            let paragraphRange = (textStorage.string as NSString).paragraphRange(for: editedRange)\n            let editedParagraph = NSIntersectionRange(paragraphRange, range)\n\n            return (block: range, paragraph: editedParagraph)\n        }\n\n        return (block: nil, paragraph: nil)\n    }\n\n    private func findRangesBecameMarkdown(\n        adjusted: [NSRange],\n        new: [NSRange]\n    ) -> [NSRange] {\n        var result: [NSRange] = []\n\n        for oldRange in adjusted {\n            var uncoveredRanges: [NSRange] = [oldRange]\n\n            for newRange in new {\n                uncoveredRanges = uncoveredRanges.flatMap { uncovered -> [NSRange] in\n                    let intersection = NSIntersectionRange(uncovered, newRange)\n\n                    guard intersection.length > 0 else {\n                        return [uncovered]\n                    }\n\n                    var fragments: [NSRange] = []\n\n                    // Левый фрагмент\n                    if intersection.location > uncovered.location {\n                        fragments.append(NSRange(\n                            location: uncovered.location,\n                            length: intersection.location - uncovered.location\n                        ))\n                    }\n\n                    // Правый фрагмент\n                    if NSMaxRange(intersection) < NSMaxRange(uncovered) {\n                        fragments.append(NSRange(\n                            location: NSMaxRange(intersection),\n                            length: NSMaxRange(uncovered) - NSMaxRange(intersection)\n                        ))\n                    }\n\n                    return fragments\n                }\n            }\n\n            result.append(contentsOf: uncoveredRanges)\n        }\n\n        return result\n    }\n}\n\nstruct CodeBlockRanges {\n    var new: [NSRange]?\n    var code: [NSRange]?\n    var md: [NSRange]?\n    var edited: NSRange?\n    var editedParagraph: NSRange?\n}\n"
  },
  {
    "path": "FSNotesCore/Core macOS/zh-Hans-CN.lproj/InfoPlist.strings",
    "content": "/* Bundle name */\n\"CFBundleName\" = \"FSNotesCore_macOS\";\n\n/* Copyright (human-readable) */\n\"NSHumanReadableCopyright\" = \"Copyright © 2018 Oleksandr Glushchenko. Alle Rechte vorbehalten\";\n\n"
  },
  {
    "path": "FSNotesCore/Extensions/Data+.swift",
    "content": "//\n//  Data+.swift\n//  FSNotes\n//\n//  Created by Александр on 03.04.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension Data {\n    var isPDF: Bool {\n        guard self.count >= 1024 else { return false }\n        let pdfHeader = Data(bytes: \"%PDF\", count: 4)\n        return self.range(of: pdfHeader, options: [], in: Range(NSRange(location: 0, length: 1024))) != nil\n    }\n\n    mutating func append(_ string: String, using encoding: String.Encoding = .utf8) {\n        if let data = string.data(using: encoding) {\n            append(data)\n        }\n    }\n\n    func getFileType() -> ImageFormat {\n        switch self[0] {\n        case 0x89:\n            return .png\n        case 0xFF:\n            return .jpg\n        case 0x47:\n            return .gif\n        case 0x49, 0x4D:\n            return .tiff\n        case 0x52 where self.count >= 12:\n            let subdata = self[0...11]\n\n            if let dataString = String(data: subdata, encoding: .ascii),\n                dataString.hasPrefix(\"RIFF\"),\n                dataString.hasSuffix(\"WEBP\")\n            {\n                return .webp\n            }\n\n        case 0x00 where self.count >= 12 :\n            let subdata = self[8...11]\n\n            if let dataString = String(data: subdata, encoding: .ascii),\n                Set([\"heic\", \"heix\", \"hevc\", \"hevx\"]).contains(dataString)\n                ///OLD: \"ftypheic\", \"ftypheix\", \"ftyphevc\", \"ftyphevx\"\n            {\n                return .heic\n            }\n        default:\n            break\n        }\n\n        return .unknown\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/Date+.swift",
    "content": "//\n//  Date+.swift\n//  FSNotes iOS\n//\n//  Created by Oleksandr Glushchenko on 9/25/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension Date {\n    func toMillis() -> Int64! {\n        return Int64(self.timeIntervalSince1970 * 1000)\n    }\n\n    static func getCurrentFormattedDate() -> String {\n        let dateFormatter = DateFormatter()\n        dateFormatter.dateFormat = \"yyyy-MM-dd HH.mm.ss.SSS\"\n\n        return dateFormatter.string(from: Date())\n    }\n\n    func string(format: String) -> String {\n        let formatter = DateFormatter()\n        formatter.dateFormat = format\n        return formatter.string(from: self)\n    }\n\n    func removeNanoseconds() -> Date? {\n        let calendar = Calendar.current\n\n        let components: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute, .second]\n        return calendar.date(from: calendar.dateComponents(components, from: self))\n    }\n\n    func isGreaterThan(_ date: Date) -> Bool {\n        guard let selfWithoutNanoseconds = self.removeNanoseconds(),\n              let dateWithoutNanoseconds = date.removeNanoseconds() else {\n            return false\n        }\n        return selfWithoutNanoseconds > dateWithoutNanoseconds\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/DateFormatter+.swift",
    "content": "//\n//  DateFormatter+.swift\n//  FSNotes\n//\n//  Created by Jeff Hanbury on 25/03/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic extension DateFormatter {\n    func formatDateForDisplay(_ date: Date) -> String {\n        dateStyle = .short\n        timeStyle = .none\n        locale = NSLocale.autoupdatingCurrent\n        return string(from: date)\n    }\n\n    func formatTimeForDisplay(_ date: Date) -> String {\n        dateStyle = .none\n        timeStyle = .short\n        locale = NSLocale.autoupdatingCurrent\n        return string(from: date)\n    }\n\n    func formatForDuplicate(_ date: Date) -> String {\n        dateFormat = \"yyyyMMddhhmmss\"\n        return string(from: date)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/FileManager+.swift",
    "content": "//\n//  FileManager+.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 07.02.2021.\n//  Copyright © 2021 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension FileManager {\n    func directoryExists(atUrl url: URL) -> Bool {\n        var isDirectory: ObjCBool = false\n        let exists = self.fileExists(atPath: url.path, isDirectory: &isDirectory)\n        return exists && isDirectory.boolValue\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/NSAttributedString+.swift",
    "content": "//\n//  NSAttributedString+.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 03.05.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension NSAttributedString {\n    public func hasTodoAttribute() -> Bool {\n        var found = false\n        enumerateAttribute(.todo, in: NSRange(0..<length), options: .init()) { value, _, stop in\n            if value != nil {\n                found = true\n                stop.pointee = true\n            }\n        }\n        return found\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/NSAttributedStringKey+.swift",
    "content": "//\n//  NSAttributedStringKey+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/15/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic extension NSAttributedString.Key {\n    static var attachmentSave: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.attachment.save\")\n    }\n\n    static var attachmentUrl: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.attachment.url\")\n    }\n\n    static var attachmentPath: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.attachment.path\")\n    }\n\n    static var attachmentTitle: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.attachment.title\")\n    }\n\n    static var todo: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.todo\")\n    }\n\n    static var tag: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.tag\")\n    }\n\n    static var yamlBlock: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.yaml\")\n    }\n\n    static var highlight: NSAttributedString.Key {\n        return NSAttributedString.Key(rawValue: \"es.fsnot.highlight\")\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/NSMutableAttributedString+.swift",
    "content": "//\n//  NSMutableAttributedString+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 7/21/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(OSX)\nimport AppKit\n#else\nimport UIKit\n#endif\n\nextension NSMutableAttributedString {\n\n    convenience init(url: URL, title: String = \"\", path: String) {\n        let attachment = NSTextAttachment()\n        let attributedAttachment = NSMutableAttributedString(attachment: attachment)\n\n        let range = NSRange(location: 0, length: 1)\n\n        // Only one way to store metadata in iOS\n        attributedAttachment.addAttribute(.attachmentUrl, value: url, range: range)\n        attributedAttachment.addAttribute(.attachmentPath, value: path, range: range)\n        attributedAttachment.addAttribute(.attachmentTitle, value: title, range: range)\n\n        self.init(attributedString: attributedAttachment)\n    }\n\n    public func unloadImagesAndFiles() -> NSMutableAttributedString {\n        let result = NSMutableAttributedString(attributedString: self)\n        let fullRange = NSRange(location: 0, length: result.length)\n\n        enumerateAttribute(.attachment, in: fullRange, options: .reverse) { _, range, _ in\n            guard let meta = getMeta(at: range.location) else { return }\n\n            let path = meta.path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? meta.path\n            let title = meta.title.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? meta.title\n\n            let replacement = \"![\\(title)](\\(path))\"\n            result.removeAttribute(.attachment, range: range)\n            result.replaceCharacters(in: range, with: replacement)\n        }\n\n        return result\n    }\n\n    public func loadImagesAndFiles(note: Note) {\n        let fullRange = NSRange(location: 0, length: length)\n        var offset = 0\n\n        var images: [URL] = []\n        var attachments: [URL] = []\n\n        FSParser.imageInlineRegex.matches(string, range: fullRange) { result in\n            guard let result = result else { return }\n\n            var range = result.range\n            range.location -= offset\n\n            let title = result.optionalRange(at: 2).flatMap {\n                self.mutableString.substring(with: NSRange(location: $0.location - offset, length: $0.length))\n            } ?? \"\"\n\n            let path = result.optionalRange(at: 3).flatMap {\n                self.mutableString.substring(with: NSRange(location: $0.location - offset, length: $0.length))\n            } ?? \"\"\n\n            guard\n                let cleanPath = path.removingPercentEncoding,\n                let fileURL = note.getAttachmentFileUrl(name: cleanPath)\n            else { return }\n\n            if fileURL.isRemote() {\n                return\n\n            } else if FileManager.default.fileExists(atPath: fileURL.path),\n                      fileURL.isImage || fileURL.isVideo {\n                images.append(fileURL)\n            } else {\n                attachments.append(fileURL)\n            }\n\n            let attributedAttachment = NSMutableAttributedString(url: fileURL, title: title, path: cleanPath)\n            self.replaceCharacters(in: range, with: attributedAttachment)\n            offset += range.length - 1\n        }\n\n        note.imageUrl = images\n        note.attachments = attachments\n    }\n\n    public func unloadTasks() -> NSMutableAttributedString {\n        let result = NSMutableAttributedString(attributedString: self)\n        var offset = 0\n        let fullRange = NSRange(location: 0, length: length)\n\n        enumerateAttribute(.attachment, in: fullRange) { value, range, _ in\n            guard\n                value != nil,\n                range.length == 1,\n                let todoValue = self.attribute(.todo, at: range.location, effectiveRange: nil) as? Int\n            else {\n                return\n            }\n\n            let gfm = todoValue == 1 ? \"- [x]\" : \"- [ ]\"\n            let adjustedRange = NSRange(location: range.location + offset, length: range.length)\n\n            result.replaceCharacters(in: adjustedRange, with: gfm)\n            offset += gfm.count - range.length\n        }\n\n        return result\n    }\n\n    public func loadTasks() {\n        while mutableString.contains(\"- [ ] \") {\n            let range = mutableString.range(of: \"- [ ] \")\n            if length >= range.upperBound, let unChecked = AttributedBox.getUnChecked() {\n                replaceCharacters(in: range, with: unChecked)\n            }\n        }\n\n        while mutableString.contains(\"- [x] \") {\n            let range = mutableString.range(of: \"- [x] \")\n            let parRange = mutableString.paragraphRange(for: range)\n\n            if length >= range.upperBound, let checked = AttributedBox.getChecked() {\n                #if os(macOS)\n                let color = UserDataService.instance.isDark ? NSColor.white : NSColor.black\n                addAttribute(.strikethroughColor, value: color, range: parRange)\n                addAttribute(.strikethroughStyle, value: 1, range: parRange)\n                #else\n                addAttribute(.strikethroughColor, value: UIColor.blackWhite, range: parRange)\n                #endif\n\n                replaceCharacters(in: range, with: checked)\n            }\n        }\n    }\n    \n    public func loadFont() {\n        addAttribute(.font, value: UserDefaultsManagement.noteFont, range: NSRange(location: 0, length: length))\n    }\n\n    public func unloadAttachments() -> NSMutableAttributedString {\n        return\n            unloadTasks()\n            .unloadImagesAndFiles()\n    }\n\n    public func loadAttachments(_ note: Note) -> NSMutableAttributedString {\n        loadImagesAndFiles(note: note)\n        loadTasks()\n        return self\n    }\n\n    public func replaceTag(name: String, with replaceString: String) {\n        let escapedName = NSRegularExpression.escapedPattern(for: name)\n        let pattern = \"(?<=^|\\\\s)\\(escapedName)(?=$|\\\\s|/)\"\n\n        guard let regex = try? NSRegularExpression(pattern: pattern, options: [.caseInsensitive]) else {\n            return\n        }\n\n        let fullRange = NSRange(location: 0, length: mutableString.length)\n        let matches = regex.matches(in: mutableString as String, options: [], range: fullRange)\n\n        for match in matches.reversed() {\n            if replaceString.isEmpty {\n                mutableString.replaceCharacters(in: match.range, with: \"\")\n            } else {\n                mutableString.replaceCharacters(in: match.range, with: replaceString)\n            }\n        }\n    }\n\n    public func getImagesAndFiles() -> [(url: URL, title: String, path: String)] {\n        var res = [(url: URL, title: String, path: String)]()\n\n        let fullRange = NSRange(location: 0, length: length)\n        enumerateAttribute(.attachment, in: fullRange) { _, range, _ in\n            guard let meta = getMeta(at: range.location) else { return }\n            res.append(meta)\n        }\n\n        return res\n    }\n\n    public func getMeta(at location: Int) -> (url: URL, title: String, path: String)? {\n        guard location >= 0 && location < self.length else { return nil }\n\n        guard let url = attribute(.attachmentUrl, at: location, effectiveRange: nil) as? URL,\n              let path = attribute(.attachmentPath, at: location, effectiveRange: nil) as? String else { return nil }\n\n        let title = attribute(.attachmentTitle, at: location, effectiveRange: nil) as? String ?? String()\n\n        return (url: url, title: title, path: path)\n    }\n\n    public func getData(at location: Int) -> Data? {\n        guard location >= 0 && location < self.length else { return nil }\n\n        var range = NSRange()\n        if let data = attribute(.attachmentSave, at: location, effectiveRange: &range) as? Data {\n            removeAttribute(.attachmentSave, range: range)\n\n            return data\n        }\n\n        return nil\n    }\n\n    public func saveData() {\n        let range = NSRange(location: 0, length: length)\n        enumerateAttribute(.attachmentUrl, in: range) { (value, range, _) in\n            guard let url = value as? URL,\n                  let data = try? Data(contentsOf: url) else { return }\n\n            addAttribute(.attachmentSave, value: data, range: range)\n        }\n    }\n\n    public static func build(data: Data, preferredName: String? = nil) -> NSMutableAttributedString? {\n        var preferredName = preferredName\n\n        if preferredName == nil {\n            let ext = data.getFileType().rawValue\n            preferredName = UUID().uuidString + \".\" + ext\n        }\n\n        let attachment = NSTextAttachment()\n        let mutable = NSMutableAttributedString(attachment: attachment)\n        mutable.addAttributes([\n            .attachmentSave: data,\n            .attachmentUrl: URL(fileURLWithPath: \"/tmp/\" + preferredName!),\n            .attachmentPath: String()\n        ], range: NSRange(location: 0, length: 1))\n\n        mutable.append(NSAttributedString(string: \"\\n\\n\"))\n\n        return mutable\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/NSRange+.swift",
    "content": "//\n//  NSRange+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 12.10.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension NSRange {\n    var upperBound: Int { location + length }\n    func intersects(_ other: NSRange) -> Bool {\n        return NSIntersectionRange(self, other).length > 0\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/NSTextCheckingResult+.swift",
    "content": "//\n//  NSTextCheckingResult+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.10.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension NSTextCheckingResult {\n    func optionalRange(at idx: Int) -> NSRange? {\n        let range = self.range(at: idx)\n        return range.location != NSNotFound ? range : nil\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/Pasteboard.swift",
    "content": "//\n//  NSPasteboard+.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 25.09.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(macOS)\nimport Cocoa\n\nextension NSPasteboard {\n    public static var note: NSPasteboard.PasteboardType {\n        .init(\"es.fsnot.pasteboard.note\")\n    }\n\n    public static var project: NSPasteboard.PasteboardType {\n        .init(\"es.fsnot.pasteboard.project\")\n    }\n\n    public static var attributed: NSPasteboard.PasteboardType {\n        .init(\"es.fsnot.pasteboard.attributed\")\n    }\n}\n\n#elseif os(iOS)\nimport UIKit\n\nextension UIPasteboard {\n    public static var attributed: String {\n        \"es.fsnot.pasteboard.attributed\"\n    }\n}\n#endif\n"
  },
  {
    "path": "FSNotesCore/Extensions/Project+Git.swift",
    "content": "//\n//  Project+Git.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 31.10.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension Project {\n    public func getGitOrigin() -> String? {\n        if let origin = settings.gitOrigin, origin.count > 0 {\n            return origin\n        }\n\n        return nil\n    }\n\n#if os(OSX)\n    public func getRepositoryUrl() -> URL {\n        if UserDefaultsManagement.separateRepo && !isCloudProject() {\n            return url.appendingPathComponent(\".git\", isDirectory: true)\n        }\n\n        let key = String(url.path.md5.prefix(4))\n        let repoURL = UserDefaultsManagement.gitStorage!.appendingPathComponent(key + \" - \" + label + \".git\")\n\n        return repoURL\n    }\n#else\n    public func getRepositoryUrl() -> URL {\n        if !UserDefaultsManagement.iCloudDrive {\n            return url.appendingPathComponent(\".git\")\n        }\n\n        let key = settingsKey.md5.prefix(6)\n        let repoURL = UserDefaultsManagement.gitStorage!.appendingPathComponent(key + \" - \" + label + \".git\")\n\n        return repoURL\n    }\n#endif\n\n    public func hasRepository() -> Bool {\n        let url = getRepositoryUrl()\n\n        return FileManager.default.fileExists(atPath: url.path)\n    }\n\n    public func getGitProject() -> Project? {\n        if hasRepository() {\n            return self\n        }\n\n        if let parent = parent, let root = parent.getGitProject() {\n            return root\n        }\n\n        return nil\n    }\n\n    public func initBareRepository() throws {\n        let repositoryManager = RepositoryManager()\n        let repoURL = getRepositoryUrl()\n\n        // Prepare temporary dir\n        let tempURL = UserDefaultsManagement.gitStorage!.appendingPathComponent(\"tmp\")\n\n        try? FileManager.default.removeItem(at: tempURL)\n        try? FileManager.default.createDirectory(at: tempURL, withIntermediateDirectories: true)\n\n        // Init\n        let signature = Signature(name: \"FSNotes App\", email: \"support@fsnot.es\")\n        let repository = try repositoryManager.initRepository(at: tempURL, signature: signature)\n\n        if isUseWorkTree() {\n            repository.setWorkTree(path: url.path)\n        }\n\n        let dotGit = tempURL.appendingPathComponent(\".git\")\n\n        if FileManager.default.directoryExists(atUrl: dotGit) {\n            try? FileManager.default.moveItem(at: dotGit, to: repoURL)\n        }\n    }\n\n    public func cloneRepository() throws -> Repository? {\n        let repositoryManager = RepositoryManager()\n        let repoURL = getRepositoryUrl()\n\n        // Prepare temporary dir\n        guard let tempURL = UserDefaultsManagement.gitStorage?.appendingPathComponent(\"tmp\") else { return nil }\n\n        try? FileManager.default.removeItem(at: tempURL)\n        try? FileManager.default.createDirectory(at: tempURL, withIntermediateDirectories: true)\n\n        // Clone\n        if let originString = getGitOrigin(), let origin = URL(string: originString) {\n            let repository = try repositoryManager.cloneRepository(from: origin, at: tempURL, authentication: getAuthHandler())\n\n            if isUseWorkTree() {\n                repository.setWorkTree(path: url.path)\n            }\n\n            let dotGit = tempURL.appendingPathComponent(\".git\")\n\n            if FileManager.default.directoryExists(atUrl: dotGit) {\n                try? FileManager.default.moveItem(at: dotGit, to: repoURL)\n\n                return try repositoryManager.openRepository(at: repoURL)\n            }\n\n            return nil\n        }\n\n        return nil\n    }\n\n    public func getRepository() throws -> Repository {\n        let repositoryManager = RepositoryManager()\n        let repoURL = getRepositoryUrl()\n\n        return try repositoryManager.openRepository(at: repoURL)\n    }\n\n    public func useSeparateRepo() -> Bool {\n        return UserDefaultsManagement.separateRepo && !isCloudProject()\n    }\n\n    public func isCloudProject() -> Bool {\n        guard let storagePath = UserDefaultsManagement.storagePath,\n              let documentsProject = UserDefaultsManagement.iCloudDocumentsContainer else { return false }\n\n        if storagePath == documentsProject.path, url.path.contains(storagePath) {\n            return true\n        }\n\n        return false\n    }\n\n    public func getAuthHandler() -> SshKeyHandler? {\n        var rsa: URL?\n\n        if let rsaURL = installSSHKey() {\n            rsa = rsaURL\n        }\n\n        guard let rsaURL = rsa else { return nil }\n\n        let passphrase = settings.gitPrivateKeyPassphrase ?? \"\"\n        let sshKeyDelegate = StaticSshKeyDelegate(privateUrl: rsaURL, passphrase: passphrase)\n        let handler = SshKeyHandler(sshKeyDelegate: sshKeyDelegate)\n\n        return handler\n    }\n\n    public func getSSHKeyUrl() -> URL? {\n        let keyName = getSettingsKey()\n\n        return storage\n            .getGitKeysDir()?\n            .appendingPathComponent(keyName)\n    }\n\n    public func removeSSHKey() {\n        guard let url = getSSHKeyUrl() else { return }\n\n        try? FileManager.default.removeItem(at: url)\n        try? FileManager.default.removeItem(at: url.appendingPathExtension(\"pub\"))\n    }\n\n    public func installSSHKey() -> URL? {\n        guard let url = getSSHKeyUrl() else { return nil }\n\n        if let key = settings.gitPrivateKey {\n            do {\n                try key.write(to: url)\n\n                if let publicKey = settings.gitPublicKey {\n                    let publicKeyUrl = url.appendingPathExtension(\"pub\")\n                    try publicKey.write(to: publicKeyUrl)\n                }\n\n                return url\n            } catch {/*_*/}\n        }\n\n        return nil\n    }\n\n    public func getSign() -> Signature {\n        return Signature(name: \"FSNotes App\", email: \"support@fsnot.es\")\n    }\n\n    public func commit(message: String? = nil, progress: GitProgress? = nil) throws {\n        let repository = try getRepository()\n        let lastCommit = try? repository.head().targetCommit()\n\n        // Add all and save index\n        let head = try repository.head().index()\n        if let progress = progress {\n            progress.log(message: \"git add .\")\n        }\n\n        let success = head.add(path: \".\")\n\n        // No commits yet or added files was found\n        if success || lastCommit == nil {\n            try head.save()\n\n            do {\n                progress?.log(message: \"git commit\")\n\n                let sign = getSign()\n                if lastCommit == nil {\n                    let commitMessage = message ?? \"FSNotes Init\"\n                    _ = try head.createInitialCommit(msg: commitMessage, signature: sign)\n                } else {\n                    let commitMessage = message ?? \"Usual commit\"\n                    _ = try head.createCommit(msg: commitMessage, signature: sign)\n                }\n\n                progress?.log(message: \"git commit done 🤟\")\n\n                cacheHistory(progress: progress)\n            } catch {\n                progress?.log(message: \"commit error: \\(error)\")\n            }\n        } else {\n            progress?.log(message: \"git add: no new data\")\n\n            throw GitError.noAddedFiles\n        }\n    }\n\n    public func checkGitState() throws -> Bool {\n        let repository = try getRepository()\n        let statuses = Statuses(repository: repository)\n\n        isCleanGit = statuses.workingDirectoryClean\n        return isCleanGit\n    }\n\n    public func getLocalBranch(repository: Repository) -> Branch? {\n        do {\n            let names = try Branches(repository: repository).names(type: .local)\n\n            guard names.count > 0 else { return nil }\n            guard let branchName = names.first?.components(separatedBy: \"/\").last else { return nil }\n\n            let localMaster = try repository.branches.get(name: branchName)\n            return localMaster\n        } catch {/**/}\n\n        return nil\n    }\n\n    public func push(progress: GitProgress? = nil) throws {\n        guard let origin = getGitOrigin() else { return }\n\n        let repository = try getRepository()\n        repository.addRemoteOrigin(path: origin)\n\n        let handler = getAuthHandler()\n\n        let names = try Branches(repository: repository).names(type: .local)\n        guard names.count > 0 else { return }\n        guard let branchName = names.first?.components(separatedBy: \"/\").last else { return }\n\n        let localMaster = try repository.branches.get(name: branchName)\n        try repository.remotes.get(remoteName: \"origin\").push(local: localMaster, authentication: handler)\n\n        if let progress = progress {\n            progress.log(message: \"\\(label) – successful push 👌\")\n        }\n    }\n\n    public func pull(progress: GitProgress? = nil) throws {\n        guard let origin = getGitOrigin() else { return }\n\n        let repository = try getRepository()\n        repository.addRemoteOrigin(path: origin)\n\n        if isUseWorkTree() {\n            repository.setWorkTree(path: url.path)\n        }\n\n        let authHandler = getAuthHandler()\n        let sign = getSign()\n\n        let remote = repository.remotes\n        let remoteBranch = try remote.get(remoteName: \"origin\")\n\n        do {\n            try remoteBranch.pull(signature: sign, authentication: authHandler, project: self)\n        } catch GitError.uncommittedConflict {\n            try commit()\n            try remoteBranch.pull(signature: sign, authentication: authHandler, project: self)\n            try push()\n        }\n\n        if let progress = progress {\n            progress.log(message: \"\\(label) – successful git pull 👌\")\n        }\n    }\n\n    public func isUseWorkTree() -> Bool {\n    #if os(iOS)\n        return UserDefaultsManagement.iCloudDrive\n    #else\n        return !UserDefaultsManagement.separateRepo || isCloudProject()\n    #endif\n    }\n\n    public func isGitOriginExist() -> Bool {\n        if let origin = settings.gitOrigin, origin.count > 0 {\n            return true\n        }\n\n        return false\n    }\n\n    public func removeRepository(progress: GitProgress? = nil) {\n        let repoURL = getRepositoryUrl()\n\n        if FileManager.default.fileExists(atPath: repoURL.path) {\n            try? FileManager.default.removeItem(at: repoURL)\n        }\n\n        removeCommitsCache()\n\n        progress?.log(message: \"git repository has been deleted\")\n    }\n\n    public func removeCommitsCache() {\n        if let url = getCommitsDiffsCache() {\n            try? FileManager.default.removeItem(at: url)\n        }\n    }\n\n    public func loadCommitsCache() {\n        if !commitsCache.isEmpty {\n            return\n        }\n\n        if let commitsDiffCache = getCommitsDiffsCache(),\n            let data = try? Data(contentsOf: commitsDiffCache),\n            let result = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSDictionary.self, NSArray.self, NSString.self], from: data) as? [String: [String]] {\n            commitsCache = result\n        }\n    }\n\n    public func cacheHistory(progress: GitProgress? = nil) {\n        progress?.log(message: \"git history caching ...\")\n\n        guard let repository = try? getRepository() else { return }\n\n        do {\n            let fileRevLog = try FileHistoryIterator(repository: repository, path: \"Test\", project: self)\n            fileRevLog.walkCacheDiff()\n\n            let cacheData = try? NSKeyedArchiver.archivedData(withRootObject: commitsCache, requiringSecureCoding: true)\n            if let data = cacheData, let writeTo = getCommitsDiffsCache() {\n                do {\n                    try data.write(to: writeTo)\n                } catch {\n                    print(\"Caching error: \" + error.localizedDescription)\n                }\n            }\n        } catch {\n            print(error)\n        }\n\n        progress?.log(message: \"git history caching done 🤟\")\n    }\n\n    public func getCommitsDiffsCache() -> URL? {\n        guard let documentDir = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first else { return nil }\n        let fileName = \"commitsDiff-\\(settingsKey).cache\"\n        return documentDir.appendingPathComponent(fileName, isDirectory: false)\n    }\n\n    public func hasCommitsDiffsCache() -> Bool {\n        guard let project = getGitProject() else { return false }\n\n        if let url = project.getCommitsDiffsCache() {\n            return FileManager.default.fileExists(atPath: url.path)\n        }\n\n        return false\n    }\n\n    public func getRepositoryState() -> RepositoryAction {\n        if hasRepository() {\n            if settings.gitOrigin != nil {\n                return .pullPush\n            } else {\n                return .commit\n            }\n        } else {\n            if settings.gitOrigin != nil {\n                return .clonePush\n            } else {\n                return .initCommit\n            }\n        }\n    }\n\n    public func gitDo(_ action: RepositoryAction, progress: GitProgress? = nil) -> String? {\n        var message: String?\n\n        do {\n            switch action {\n            case .initCommit:\n                try initBareRepository()\n                try commit(message: nil, progress: progress)\n            case .clonePush:\n                removeCommitsCache()\n                message = clonePush(progress: progress)\n            case .commit:\n                try commit(message: nil, progress: progress)\n            case .pullPush:\n                do {\n                    try pull(progress: progress)\n                    try push(progress: progress)\n                } catch GitError.notFound(let ref) {\n                    progress?.log(message: \"\\(ref) not found, push trying ...\")\n\n                    try push(progress: progress)\n                }\n            }\n        } catch {\n            if let error = error as? GitError {\n                message = error.associatedValue()\n            } else {\n                message = error.localizedDescription\n            }\n        }\n\n        return message\n    }\n\n    private func clonePush(progress: GitProgress? = nil) -> String? {\n        var message: String?\n\n        do {\n            if let repo = try cloneRepository(), let local = getLocalBranch(repository: repo) {\n                try repo.head().checkout(branch: local, type: .force)\n                cacheHistory(progress: progress)\n            } else {\n                do {\n                    try commit(message: nil, progress: progress)\n                    try push(progress: progress)\n                } catch {\n                    message = error.localizedDescription\n                }\n            }\n        } catch GitError.unknownError(let errorMessage, _, let desc) {\n            message = errorMessage + \" – \" + desc\n        } catch GitError.notFound(let ref) {\n\n            // Empty repository – commit and push\n            if ref == \"refs/heads/master\" {\n                do {\n                    try commit(message: nil, progress: progress)\n                    try push(progress: progress)\n                } catch {\n                    message = error.localizedDescription\n                }\n            }\n        } catch {\n            message = error.localizedDescription\n        }\n\n        return message\n    }\n\n    public func saveRevision(commitMessage: String? = nil) throws {\n        try commit(message: commitMessage)\n        \n        // No hands – no mults\n        guard getGitOrigin() != nil else { return }\n        \n        try pull()\n        try push()\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/Storage+Git.swift",
    "content": "//\n//  File.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 17.02.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nextension Storage {\n    public func pullAll(force: Bool = false) {\n        guard let projects = getGitProjects() else { return }\n        for project in projects {\n        #if os(iOS)\n            if !force && !project.settings.gitAutoPull {\n                continue\n            }\n        #endif\n\n            var status: String?\n\n            do {\n                try project.pull()\n\n                let currentDate = Date()\n                let dateFormatter = DateFormatter()\n                dateFormatter.dateFormat = \"yyyy-MM-dd HH:mm\"\n                let dateString = dateFormatter.string(from: currentDate)\n\n                status = \"Successfull auto pull – \\(dateString)\"\n                project.gitStatus = status\n            } catch {\n                if let error = error as? GitError {\n                    status = error.associatedValue()\n\n                }\n            }\n\n            #if os(iOS)\n                if let status = status {\n                    print(status)\n                    project.gitStatus = status\n\n                    if let viewController = AppDelegate.getGitVCOptional(for: project) {\n                        viewController.setProgress(message: status)\n                    }\n                }\n            #endif\n        }\n    }\n\n    public func checkGitState() {\n        guard let projects = getGitProjects() else { return }\n        for project in projects {\n            do {\n                _ = try project.checkGitState()\n            } catch {\n                if let error = error as? GitError {\n                    project.gitStatus = error.associatedValue()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/String+.swift",
    "content": "//\n//  String+.swift\n//  FSNotes\n//\n//  Created by Jeff Hanbury on 29/08/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport CommonCrypto\n\n#if os(OSX)\nimport Cocoa\n#else\nimport UIKit\n#endif\n\npublic extension String {\n    #if os(OSX)\n    typealias Font = NSFont\n    #else\n    typealias Font = UIFont\n    #endif\n\n    func condenseWhitespace() -> String {\n        let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)\n        return components.filter { !$0.isEmpty }.joined(separator: \" \")\n    }\n\n    // Search the string for the existence of any of the terms in the provided array of terms.\n    // Inspired by magic from https://stackoverflow.com/a/41902740/2778502\n    func localizedStandardContains<S: StringProtocol>(_ terms: [S]) -> Bool {\n        return terms.first(where: { self.localizedStandardContains($0) }) != nil\n    }\n\n    func trim() -> String {\n        return self.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)\n    }\n    \n    func trimSpaces() -> String {\n        return self.trimmingCharacters(in: NSCharacterSet.whitespaces)\n    }\n\n    func trimMDSyntax() -> String {\n        return self\n            .replacingOccurrences(of: \"###### \", with: \" \")\n            .replacingOccurrences(of: \"##### \", with: \" \")\n            .replacingOccurrences(of: \"#### \", with: \" \")\n            .replacingOccurrences(of: \"### \", with: \" \")\n            .replacingOccurrences(of: \"## \", with: \" \")\n            .replacingOccurrences(of: \"# \", with: \" \")\n            .replacingOccurrences(of: \"```\", with: \"\")\n            .replacingOccurrences(of: \"- [ ]\", with: \"\")\n            .replacingOccurrences(of: \"- [x]\", with: \"\")\n            .replacingOccurrences(of: \"[[\", with: \"\")\n            .replacingOccurrences(of: \"]]\", with: \"\")\n            .replacingOccurrences(of: \"{{TOC}}\", with: \"\")\n            .replacingOccurrences(of: \"\\u{FFFC}\", with: \"\")\n    }\n\n    func getPrefixMatchSequentially(char: String) -> String? {\n        var result = String()\n\n        for current in self {\n            if current.description == char {\n                result += char\n                continue\n            }\n            break\n        }\n\n        if result.count > 0 {\n            return result\n        }\n\n        return nil\n    }\n\n    func localizedCaseInsensitiveContainsTerms(_ terms: [Substring]) -> Bool {\n        // Use magic from https://stackoverflow.com/a/41902740/2778502\n        return terms.first(where: { !self.localizedLowercase.contains($0) }) == nil\n    }\n\n    func removeLastNewLine() -> String {\n        if self.last == \"\\n\" {\n            return String(self.dropLast())\n        }\n\n        return self\n    }\n\n    func isValidEmail() -> Bool {\n        let pattern = \"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$\"\n\n        if let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) {\n            return regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil\n        }\n\n        return false\n    }\n\n    var isValidUUID: Bool {\n        return UUID(uuidString: self) != nil\n    }\n\n    var md5: String {\n        let data = Data(self.utf8)\n        let hash = data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> [UInt8] in\n            var hash = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))\n            CC_MD5(bytes.baseAddress, CC_LONG(data.count), &hash)\n            return hash\n        }\n        return hash.map { String(format: \"%02x\", $0) }.joined()\n    }\n\n    var isWhitespace: Bool {\n        guard !isEmpty else { return true }\n\n        let whitespaceChars = NSCharacterSet.whitespacesAndNewlines\n\n        return self.unicodeScalars\n            .filter { (unicodeScalar: UnicodeScalar) -> Bool in !whitespaceChars.contains(unicodeScalar) }\n            .count == 0\n    }\n\n    var isNumber: Bool {\n        return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil\n    }\n\n    var isContainsLetters: Bool {\n        let letters = CharacterSet.letters\n        return self.rangeOfCharacter(from: letters) != nil\n    }\n\n    var fnv1a: UInt64 {\n        let fnvOffset: UInt64 = 0xcbf29ce484222325\n        let fnvPrime: UInt64 = 0x100000001b3\n        var hash = fnvOffset\n        for byte in self.utf8 {\n            hash ^= UInt64(byte)\n            hash = hash &* fnvPrime\n        }\n        return hash\n    }\n\n    var withoutSpecialCharacters: String {\n        return self.components(separatedBy: CharacterSet.alphanumerics.inverted).joined(separator: \" \")\n                .condenseWhitespace()\n    }\n\n    func escapePlus() -> String {\n        return self.replacingOccurrences(of: \"+\", with: \"%20\")\n    }\n\n    func matchingStrings(regex: String) -> [[String]] {\n        guard let regex = try? NSRegularExpression(pattern: regex, options: [.dotMatchesLineSeparators]) else { return [] }\n\n        let nsString = self as NSString\n        let results  = regex.matches(in: self, options: [], range: NSRange(0..<nsString.length))\n        return results.map { result in\n            (0..<result.numberOfRanges).map {\n                result.range(at: $0).location != NSNotFound\n                    ? nsString.substring(with: result.range(at: $0))\n                    : \"\"\n            }\n        }\n    }\n\n    func trunc(length: Int) -> String {\n        let result = self\n            .replacingOccurrences(of: \":\", with: \"\")\n            .replacingOccurrences(of: \"/\", with: \"\")\n            .replacingOccurrences(\n                of: #\"^#{1,6} \"#,\n                with: \"\",\n                options: .regularExpression\n            )\n        \n        return (result.count > length) ? String(result.prefix(length)) : result\n    }\n\n    func startsWith(string: String) -> Bool {\n        guard let range = range(of: string, options: [.caseInsensitive, .diacriticInsensitive]) else {\n            return false\n        }\n        return range.lowerBound == startIndex\n    }\n\n    func widthOfString(usingFont font: Font, tabs: [NSTextTab]? = nil) -> CGFloat {\n        let paragraph = NSMutableParagraphStyle()\n        if let tabs = tabs {\n            paragraph.tabStops = tabs\n        }\n\n        let fontAttributes = [\n            NSAttributedString.Key.font: font,\n            NSAttributedString.Key.paragraphStyle: paragraph\n        ]\n\n        let size = self.size(withAttributes: fontAttributes)\n        return size.width\n    }\n\n    func getSpacePrefix() -> String {\n        var prefix = String()\n        for char in unicodeScalars {\n            if char == \"\\t\" || char == \" \" {\n                prefix += String(char)\n            } else {\n                break\n            }\n        }\n        return prefix\n    }\n\n    func substring(with nsRange: NSRange) -> Substring? {\n        guard let range = Range(nsRange, in: self) else { return nil }\n        return self[range]\n    }\n\n    func replaced(from: String, to: String, by new: String) -> String {\n        guard let from = range(of: from)?.lowerBound, let to = range(of: to)?.upperBound else { return self }\n\n        let range = from..<to\n        return replacingCharacters(in: range, with: new)\n    }\n\n    static func random(length: Int = 20) -> String {\n         let base = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"\n         var randomString: String = \"\"\n\n         for _ in 0..<length {\n             let randomValue = arc4random_uniform(UInt32(base.count))\n             randomString += \"\\(base[base.index(base.startIndex, offsetBy: Int(randomValue))])\"\n         }\n         return randomString\n     }\n\n    // Join multibyte chars 1081 774 (и  ̆) to 1081 (й), important for proper length (git integration fn: git_tree_entry_bypath)\n    func recode4byteString() -> String {\n        if let decodedString = self.applyingTransform(.stripCombiningMarks, reverse: true) {\n            return decodedString\n        }\n\n        return self\n    }\n\n    func isHexColor() -> Bool {\n        return self.count == 6 && self.allSatisfy({ $0.isHexDigit })\n    }\n\n    private func index(at location: Int) -> String.Index? {\n        return self.index(startIndex, offsetBy: location, limitedBy: endIndex)\n    }\n\n    func capitalizingFirstLetter() -> String {\n        guard !isEmpty else { return self }\n        return prefix(1).uppercased() + dropFirst()\n    }\n    \n    func createURL(for note: Note? = nil) -> URL? {\n        var normalizedPath = self\n        \n        // Expand ~ to user home directory\n        if normalizedPath.hasPrefix(\"~\") {\n            normalizedPath = \"/Users/\\(NSUserName())\" + normalizedPath.dropFirst()\n        }\n        \n        // Handle absolute paths\n        if normalizedPath.hasPrefix(\"/\") {\n            return URL(fileURLWithPath: normalizedPath)\n        }\n        \n        if let note = note, normalizedPath.hasPrefix(\"./\") {\n            normalizedPath = note.project.url.path + normalizedPath.dropFirst()\n            return URL(fileURLWithPath: normalizedPath)\n        }\n        \n        // Handle regular URLs\n        return URL(string: normalizedPath)\n    }\n    \n    func substring(nsRange: NSRange) -> String? {\n        guard let range = Range(nsRange, in: self) else {\n            return nil\n        }\n        return String(self[range])\n    }\n    \n    func countWords() -> Int {\n        var count = 0\n        var inWord = false\n\n        for b in self.utf8 {\n            if b == 32 || b == 10 || b == 9 || b == 13 {\n                inWord = false\n            } else {\n                if !inWord {\n                    count += 1\n                    inWord = true\n                }\n            }\n        }\n\n        return count\n    }\n    \n    func countChars() -> Int {\n        if self.utf8.allSatisfy({ $0 < 0x80 }) {\n            return self.utf8.count\n        }\n        return self.count\n    }\n}\n\nextension StringProtocol where Index == String.Index {\n    public func nsRange(from range: Range<Index>) -> NSRange {\n        return NSRange(range, in: self)\n    }\n}\n\npublic extension String {\n    subscript(value: Int) -> Character {\n        self[index(at: value)]\n    }\n}\n\npublic extension String {\n  subscript(value: NSRange) -> Substring {\n    self[value.lowerBound..<value.upperBound]\n  }\n}\n\npublic extension String {\n  subscript(value: CountableClosedRange<Int>) -> Substring {\n    self[index(at: value.lowerBound)...index(at: value.upperBound)]\n  }\n\n  subscript(value: CountableRange<Int>) -> Substring {\n    self[index(at: value.lowerBound)..<index(at: value.upperBound)]\n  }\n\n  subscript(value: PartialRangeUpTo<Int>) -> Substring {\n    self[..<index(at: value.upperBound)]\n  }\n\n  subscript(value: PartialRangeThrough<Int>) -> Substring {\n    self[...index(at: value.upperBound)]\n  }\n\n  subscript(value: PartialRangeFrom<Int>) -> Substring {\n    self[index(at: value.lowerBound)...]\n  }\n}\n\nprivate extension String {\n  func index(at offset: Int) -> String.Index {\n    index(startIndex, offsetBy: offset)\n  }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/String+Punycode.swift",
    "content": "//\n//  String+Punycode.swift\n//  FSNotes\n//\n//  Created by Александр on 30.01.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport Punycode\n\nextension String {\n    func idnaEncodeURL() -> String {\n        if URL(string: self) != nil {\n            return self\n        }\n\n        var scheme: String?\n        var host: String?\n        var path: String?\n        var url = self\n\n        if url.startsWith(string: \"https://\") {\n            url = String(url.dropFirst(8))\n            scheme = \"https\"\n        }\n\n        if url.startsWith(string: \"http://\") {\n            url = String(url.dropFirst(7))\n            scheme = \"http\"\n        }\n\n        guard let scheme = scheme else { return self }\n\n        if url.contains(\"/\") {\n            let parts = url.components(separatedBy: \"/\")\n            if parts[0].contains(\".\") {\n                host = parts[0]\n                path = parts.dropFirst().joined(separator: \"/\")\n            }\n        } else if url.contains(\".\") {\n            host = url\n        }\n\n        guard let host = host else { return self }\n\n        let parts = host.components(separatedBy: \".\").compactMap({ $0.idnaEncoded! })\n        let domain = parts.joined(separator: \".\")\n\n        let encodedPath = getEncodedPath(path: path)\n        let result = String(\"\\(scheme)://\\(domain)/\\(encodedPath)\")\n\n        return result\n    }\n\n    private func getEncodedPath(path: String?) -> String {\n        var unwrappedPath = String()\n\n        if let path = path {\n            var addPercentEncoding = false\n            for pathChar in path.unicodeScalars {\n                if !CharacterSet.urlPathAllowed.contains(pathChar) {\n                    addPercentEncoding = true\n                }\n            }\n\n            if addPercentEncoding, let pathPercentEncoded = path.removingPercentEncoding?.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) {\n                unwrappedPath = pathPercentEncoded\n            } else {\n                unwrappedPath = path\n            }\n        }\n\n        return unwrappedPath\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/URL+.swift",
    "content": "//\n//  URL+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/22/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(iOS)\n    import MobileCoreServices\n#else\n    import CoreServices\n#endif\n\npublic extension URL {\n    /// Get extended attribute.\n    func extendedAttribute(forName name: String) throws -> Data {\n        return try self.withUnsafeFileSystemRepresentation { fileSystemPath -> Data in\n\n            // Determine attribute size:\n            let length = getxattr(fileSystemPath, name, nil, 0, 0, 0)\n            guard length >= 0 else { throw URL.posixError(errno) }\n\n            // Create buffer with required size:\n            var data = Data(count: length)\n            let count = data.count\n\n            // Retrieve attribute:\n            let result = data.withUnsafeMutableBytes {\n                getxattr(fileSystemPath, name, $0.baseAddress, count, 0, 0)\n            }\n            guard result >= 0 else { throw URL.posixError(errno) }\n            return data\n        }\n    }\n\n    /// Set extended attribute.\n    func setExtendedAttribute(data: Data, forName name: String) throws {\n\n        try self.withUnsafeFileSystemRepresentation { fileSystemPath in\n            let result = data.withUnsafeBytes {\n                setxattr(fileSystemPath, name, $0.baseAddress, data.count, 0, 0)\n            }\n            guard result == 0 else { throw URL.posixError(errno) }\n        }\n    }\n\n    /// Remove extended attribute.\n    func removeExtendedAttribute(forName name: String) throws {\n\n        try self.withUnsafeFileSystemRepresentation { fileSystemPath in\n            let result = removexattr(fileSystemPath, name, 0)\n            guard result == 0 else { throw URL.posixError(errno) }\n        }\n    }\n\n    /// Get list of all extended attributes.\n    func listExtendedAttributes() throws -> [String] {\n        let list = try self.withUnsafeFileSystemRepresentation { fileSystemPath -> [String] in\n            let length = listxattr(fileSystemPath, nil, 0, 0)\n            guard length >= 0 else { throw URL.posixError(errno) }\n\n            // Create buffer with required size:\n            var namebuf = [CChar](repeating: 0, count: length)\n\n            // Retrieve attribute list:\n            let result = listxattr(fileSystemPath, &namebuf, namebuf.count, 0)\n            guard result >= 0 else { throw URL.posixError(errno) }\n\n            // Extract attribute names:\n            let list = namebuf.split(separator: 0).compactMap {\n                $0.withUnsafeBufferPointer {\n                    $0.withMemoryRebound(to: UInt8.self) {\n                        String(bytes: $0, encoding: .utf8)\n                    }\n                }\n            }\n            return list\n        }\n        return list\n    }\n\n    /// Helper function to create an NSError from a Unix errno.\n    private static func posixError(_ err: Int32) -> NSError {\n        return NSError(domain: NSPOSIXErrorDomain, code: Int(err),\n                       userInfo: [NSLocalizedDescriptionKey: String(cString: strerror(err))])\n    }\n\n    // Access the URL parameters eg nv://make?title=blah&txt=body like so:\n    // let titleStr = myURL['title']\n    subscript(queryParam: String) -> String? {\n        guard let url = URLComponents(string: self.absoluteString) else { return nil }\n        return url.queryItems?.first(where: { $0.name == queryParam })?.value\n    }\n\n    func isRemote() -> Bool {\n        return (self.absoluteString.starts(with: \"http://\") || self.absoluteString.starts(with: \"https://\"))\n    }\n\n    func isHidden() -> Bool {\n        if let data = try? extendedAttribute(forName: \"es.fsnot.hidden.dir\"), String(data: data, encoding: .utf8) == \"true\" {\n           return true\n        }\n\n        return false\n    }\n\n    func hasNonHiddenBit() -> Bool {\n        if let data = try? extendedAttribute(forName: \"es.fsnot.hidden.dir\"), String(data: data, encoding: .utf8) == \"false\" {\n           return true\n        }\n\n        return false\n    }\n\n    var attributes: [FileAttributeKey: Any]? {\n        do {\n            return try FileManager.default.attributesOfItem(atPath: path)\n        } catch _ as NSError {\n            //print(\"FileAttribute error: \\(error)\")\n        }\n        return nil\n    }\n\n    var fileSize: UInt64 {\n        return attributes?[.size] as? UInt64 ?? UInt64(0)\n    }\n\n    func removingFragment() -> URL {\n        var string = self.absoluteString\n        if let query = query {\n            string = string.replacingOccurrences(of: \"?\\(query)\", with: \"\")\n        }\n\n        if let fragment = fragment {\n            string = string.replacingOccurrences(of: \"#\\(fragment)\", with: \"\")\n        }\n\n        return URL(string: string) ?? self\n    }\n\n    var typeIdentifier: String? {\n        return (try? resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier\n    }\n\n    var fileUTType: CFString? {\n        let unmanagedFileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)\n        return unmanagedFileUTI?.takeRetainedValue()\n    }\n\n    var isVideo: Bool {\n        guard let fileUTI = fileUTType else { return false }\n\n        return UTTypeConformsTo(fileUTI, kUTTypeMovie)\n            || UTTypeConformsTo(fileUTI, kUTTypeVideo)\n            || UTTypeConformsTo(fileUTI, kUTTypeQuickTimeMovie)\n            || UTTypeConformsTo(fileUTI, kUTTypeMPEG)\n            || UTTypeConformsTo(fileUTI, kUTTypeMPEG2Video)\n            || UTTypeConformsTo(fileUTI, kUTTypeMPEG2TransportStream)\n            || UTTypeConformsTo(fileUTI, kUTTypeMPEG4)\n            || UTTypeConformsTo(fileUTI, kUTTypeAppleProtectedMPEG4Video)\n            || UTTypeConformsTo(fileUTI, kUTTypeAVIMovie)\n    }\n\n    var isImage: Bool {\n        guard let fileUTI = fileUTType else { return false }\n\n        return UTTypeConformsTo(fileUTI, kUTTypeImage)\n    }\n\n    var isMedia: Bool {\n        return isImage || isVideo\n    }\n\n    var mimeType: String {\n        guard\n            let identifier = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(),\n            let mimeType = UTTypeCopyPreferredTagWithClass(identifier, kUTTagClassMIMEType)?.takeRetainedValue() as String?\n        else {\n            return \"application/octet-stream\"\n        }\n\n        return mimeType\n    }\n\n    var isWebURL: Bool {\n        guard let scheme = scheme?.lowercased() else { return false }\n        return scheme == \"http\" || scheme == \"https\"\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/URL+Image.swift",
    "content": "//\n//  URL+Image.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 15.11.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\nimport AVKit\n\nextension URL {\n    func getImageSize() -> CGSize {\n        guard let imageSource = CGImageSourceCreateWithURL(self as CFURL, nil),\n              let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as? [CFString: Any] else {\n            return .zero\n        }\n\n        var width = properties[kCGImagePropertyPixelWidth] as? Int ?? 0\n        var height = properties[kCGImagePropertyPixelHeight] as? Int ?? 0\n        let orientation = properties[kCGImagePropertyOrientation] as? Int ?? 0\n\n        // Swap dimensions for rotated images\n        if case 5...8 = orientation {\n            swap(&width, &height)\n        }\n\n        return CGSize(width: width, height: height)\n    }\n\n   func getVideoSize() -> CGSize {\n        guard let track = AVURLAsset(url: self).tracks(withMediaType: .video).first else {\n            return .zero\n        }\n\n        let size = track.naturalSize.applying(track.preferredTransform)\n        return CGSize(width: abs(size.width), height: abs(size.height))\n    }\n\n    func getMediaSize() -> CGSize {\n        if isVideo {\n            return getVideoSize()\n        }\n\n        return getImageSize()\n    }\n\n    func getBorderSize(maxWidth: CGFloat) -> CGSize {\n        let size = getMediaSize()\n\n        guard size.width > maxWidth else {\n            return size\n        }\n\n        let scale = maxWidth / size.width\n        let newHeight = size.height * scale\n\n        return CGSize(width: maxWidth, height: newHeight)\n\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Extensions/UTI.swift",
    "content": "import Foundation\n#if os(OSX)\nimport CoreServices\n#elseif os(iOS)\nimport MobileCoreServices\n#endif\n\npublic extension String {\n\n    func tag(withClass: CFString) -> String? {\n        return UTTypeCopyPreferredTagWithClass(self as CFString, withClass)?.takeRetainedValue() as String?\n    }\n\n    func uti(withClass: CFString) -> String? {\n        return UTTypeCreatePreferredIdentifierForTag(withClass, self as CFString, nil)?.takeRetainedValue() as String?\n    }\n\n    var utiMimeType: String? {\n        return tag(withClass: kUTTagClassMIMEType)\n    }\n\n    var mimeTypeUTI: String? {\n        return uti(withClass: kUTTagClassMIMEType)\n    }\n\n    var fileExtensionUTI: String? {\n        return uti(withClass: kUTTagClassFilenameExtension)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/FSParser.swift",
    "content": "//\n//  FSParser.swift\n//  FSNotes\n//\n//  Created by Александр on 30.01.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass FSParser {\n    /*\n     ---\n     key: value\n     ---\n\n     YAML\n     */\n    public static let yamlBlockPattern = [\n        \"(?<=\\\\n|\\\\A)\",\n            \"(^---(([^\\\\n]*?)\\\\n(?!\\\\n))+---)\",\n        \"(?:\\\\n|\\\\Z)\"\n        ].joined(separator: \"\\n\")\n\n    public static let tagsPattern = ###\"\"\"\n        (?:\\A|\\s|[^\\]]\\()\n        \\#(\n            [^\n                \\s          # no whitespace\n                \\#          # no hashes\n                \\+          # no plus sign https://github.com/glushchenko/fsnotes/issues/1303\n                ,?!\"`';:\\.  # no punctuation \n                \\\\          # no backslash\n                (){}\\[\\]    # no bracket pairs\n            ]+\n        )\n    \"\"\"###\n\n    /*\n     ```\n     Code\n     ```\n\n     Code\n     */\n    public static let codeQuoteBlockPattern = [\n        \"(?<=\\\\n|\\\\A)\",\n        \"(^```[\\\\S\\\\ \\\\(\\\\)]*\\\\n([\\\\s\\\\S]*?)\\\\n```(?:\\\\n|\\\\Z))\"\n        ].joined(separator: \"\\n\")\n\n    public static let codeSpanPattern = [\n            \"(?<![\\\\\\\\`])   # Character before opening ` can't be a backslash or backtick\",\n            \"(`+)           # $1 = Opening run of `\",\n            \"(?!`)          # and no more backticks -- match the full run\",\n            \"(.+?)          # $2 = The code block\",\n            \"(?<!`)\",\n            \"\\\\1\",\n            \"(?!`)\"\n            ].joined(separator: \"\\n\")\n\n    public static let imageInlinePattern = [\n        \"(                     # wrap whole match in $1\",\n        \"  !\\\\[\",\n        \"      ([^\\\\[\\\\]]*?)           # alt text = $2\",\n        \"  \\\\]\",\n        \"  \\\\s?                # one optional whitespace character\",\n        \"  \\\\(                 # literal paren\",\n        \"      \\\\p{Z}*\",\n        \"      (\\(getNestedParensPattern()))    # href = $3\",\n        \"      \\\\p{Z}*\",\n        \"      (               # $4\",\n        \"      (['\\\"])         # quote char = $5\",\n        \"      (.*?)           # title = $6\",\n        \"      \\\\5             # matching quote\",\n        \"      \\\\p{Z}*\",\n        \"      )?              # title is optional\",\n        \"  \\\\)\",\n        \")\"\n        ].joined(separator: \"\\n\")\n\n    public static var nestedBracketsPattern = String()\n    public static var nestedParensPattern = String()\n\n    /// Reusable pattern to match balanced (parens). See Friedl's\n    /// \"Mastering Regular Expressions\", 2nd Ed., pp. 328-331.\n    public static func getNestedParensPattern() -> String {\n        // in other words (this) and (this(also)) and (this(also(too)))\n        // up to _nestDepth\n        if nestedParensPattern.isEmpty {\n            nestedParensPattern = repeatString([\n                \"(?>            # Atomic matching\",\n                \"[^()\\\\s]+      # Anything other than parens or whitespace\",\n                \"|\",\n                \"\\\\(\"\n                ].joined(separator: \"\\n\"), 6) +\n                repeatString(\" \\\\))*\", 6)\n        }\n\n        return nestedParensPattern\n    }\n\n    /// this is to emulate what's available in PHP\n    public static func repeatString(_ text: String, _ count: Int) -> String {\n        return Array(repeating: text, count: count).reduce(\"\", +)\n    }\n\n    public static let yamlBlockRegex = FSParserRegex(pattern: yamlBlockPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n\n    public static let imageInlineRegex = FSParserRegex(pattern: imageInlinePattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n\n    public static let tagsInlineRegex = FSParserRegex(pattern: tagsPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n\n    public static func getSpanCodeBlockRange(content: NSMutableAttributedString, range: NSRange) -> NSRange? {\n        var codeSpan: NSRange?\n        let paragraphRange = content.mutableString.paragraphRange(for: range)\n        let paragraph = content.attributedSubstring(from: paragraphRange).string\n\n        if paragraph.contains(\"`\") {\n            FSParserRegex(pattern: codeSpanPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators]).matches(content.string, range: paragraphRange) { (result) -> Void in\n                if let spanRange = result?.range, spanRange.intersection(range) != nil {\n                    codeSpan = spanRange\n                }\n            }\n        }\n\n        return codeSpan\n    }\n}\n\npublic struct FSParserRegex {\n    public let regularExpression: NSRegularExpression!\n\n    public init(pattern: String, options: NSRegularExpression.Options = NSRegularExpression.Options(rawValue: 0)) {\n        var error: NSError?\n        let regexp: NSRegularExpression?\n        do {\n            regexp = try NSRegularExpression(pattern: pattern,\n                                         options: options)\n        } catch let error1 as NSError {\n            error = error1\n            regexp = nil\n        }\n\n        // If re is nil, it means NSRegularExpression didn't like\n        // the pattern we gave it.  All regex patterns used by Markdown\n        // should be valid, so this probably means that a pattern\n        // valid for .NET Regex is not valid for NSRegularExpression.\n        if regexp == nil {\n            if let error = error {\n                print(\"Regular expression error: \\(error.userInfo)\")\n            }\n            assert(regexp != nil)\n        }\n\n        self.regularExpression = regexp\n    }\n\n    public func matches(_ input: String, range: NSRange, completion: @escaping (_ result: NSTextCheckingResult?) -> Void) {\n        let sInput = input as NSString\n        let options = NSRegularExpression.MatchingOptions(rawValue: 0)\n\n        regularExpression.enumerateMatches(in: sInput as String, options: options, range: range, using: {(result, _, _) -> Void in\n            completion(result)\n        })\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/authentication/Authentication.swift",
    "content": "//\n//  Authentication.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 20/08/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Authentication handler\npublic protocol AuthenticationHandler {\n    \n    /// Raw libgit2 authentication\n    ///\n    /// - parameter out:      Git credential\n    /// - parameter url:      url\n    /// - parameter username: username\n    ///\n    /// - returns: 0 on ok\n    func authenticate(out: UnsafeMutablePointer<UnsafeMutablePointer<git_cred>?>?,\n                      url: String?,\n                      username: String?) -> Int32\n}\n\n\n\nfunc setAuthenticationCallback(_ callbacksStruct: inout git_remote_callbacks,\n                               authentication: AuthenticationHandler?) {\n    \n    // Convert handler to payload pointer\n    callbacksStruct.payload = Unmanaged\n        .passRetained(CWrapper(authentication))\n        .toOpaque()\n    \n    // Create crdential lambda calling credential handler\n    callbacksStruct.credentials = { out, url, username_from_url, allowed_types, payload in\n        \n        // Find url\n        let sUrl : String?\n        if (url == nil) {\n            sUrl = nil\n        } else {\n            sUrl = git_string_converter(url!)\n        }\n        \n        // Find username_from_url\n        let userName : String?\n        if (username_from_url == nil) {\n            userName = nil\n        } else {\n            userName = git_string_converter(username_from_url!)\n        }\n        \n        // Transformation du pointer en wrapper\n        let authenticationWrapper = Unmanaged<CWrapper<AuthenticationHandler>>\n            .fromOpaque(payload!)\n            .takeRetainedValue()\n        let result = authenticationWrapper.object.authenticate(out: out,\n                                                               url: sUrl,\n                                                               username: userName)\n        \n        return result\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/authentication/KeyAuthentication.swift",
    "content": "//\n//  KeyAuthentication.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 11/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\npublic protocol SshKeyData {\n    \n    /// Find user name\n    var username : String? {\n        get\n    }\n    \n    /// Find private key URL\n    var privateKey : URL {\n        get\n    }\n    \n    /// Key pass phrase (may be nil)\n    var passphrase : String? {\n        get\n    }\n\n    var publicKey : URL? {\n        get\n    }\n}\n\npublic struct RawSshKeyData : SshKeyData {\n    public let username : String?\n    public let privateKey : URL\n    public let publicKey : URL?\n    public let passphrase : String?\n    \n    public init(username : String?, privateKey : URL, publicKey: URL? = nil, passphrase : String? = nil) {\n        self.username = username\n        self.privateKey = privateKey\n        self.publicKey = publicKey\n        self.passphrase = passphrase\n    }\n}\n\n/// Ssh key delegate\npublic protocol SshKeyDelegate {\n    \n    /// Get ssh key data\n    ///\n    /// - parameter username: username\n    /// - parameter url:      url\n    ///\n    /// - returns: Password data\n    func get(username: String?, url: URL?) -> SshKeyData\n}\n\n/// SSh authentication\npublic class SshKeyHandler : AuthenticationHandler {\n    \n    /// Delegate to access SSH key\n    private let sshKeyDelegate: SshKeyDelegate\n    \n    public init(sshKeyDelegate: SshKeyDelegate) {\n        self.sshKeyDelegate = sshKeyDelegate\n    }\n    \n    /// Authentication\n    ///\n    /// - parameter out:      Git credential\n    /// - parameter url:      url\n    /// - parameter username: username\n    ///\n    /// - returns: 0 on ok\n    public func authenticate(out: UnsafeMutablePointer<UnsafeMutablePointer<git_cred>?>?,\n                             url: String?,\n                             username: String?) -> Int32 {\n        \n        // Find ssh key data\n        let sshKeyData = sshKeyDelegate.get(username: username, url: url == nil ? nil : URL(string: url!))\n                \n        // Private key\n        let privateKey = sshKeyData.privateKey.path\n        if (FileManager.default.fileExists(atPath: privateKey) == false) {\n            return 2\n        }\n        \n        // User name\n        let optionalUsername = sshKeyData.username\n        let optionalPassPhrase = sshKeyData.passphrase\n\n        let publicKey = sshKeyData.publicKey != nil ? sshKeyData.publicKey!.path : nil\n        \n        return git_cred_ssh_key_new(out,\n                                    optionalUsername == nil ? \"\" : optionalUsername!,\n                                    publicKey,\n                                    privateKey,\n                                    optionalPassPhrase == nil ? \"\" : optionalPassPhrase!)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/authentication/PasswordAuthentication.swift",
    "content": "//\n//  PasswordAuthentication.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 11/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\npublic protocol PasswordData {\n    var username : String? {\n        get\n    }\n    var password : String? {\n        get\n    }\n}\n\npublic struct RawPasswordData : PasswordData {\n    public let username : String?\n    public let password : String?\n    \n    public init(username : String?, password : String?) {\n        self.username = username\n        self.password = password\n    }\n}\n\n/// Password delegate\npublic protocol PasswordDelegate {\n    \n    /// Get password data\n    ///\n    /// - parameter username: username\n    /// - parameter url:      url\n    ///\n    /// - returns: Password data\n    func get(username: String?, url: URL?) -> PasswordData\n}\n\n/// Password handler\npublic class PasswordHandler : AuthenticationHandler {\n    \n    /// Password delegate\n    private let passwordDelegate : PasswordDelegate\n    \n    public init(passwordDelegate: PasswordDelegate) {\n        self.passwordDelegate = passwordDelegate\n    }\n    \n    /// Authentication\n    ///\n    /// - parameter out:      Git credential\n    /// - parameter url:      url\n    /// - parameter username: user name\n    ///\n    /// - returns: 0 on ok\n    public func authenticate(out: UnsafeMutablePointer<UnsafeMutablePointer<git_cred>?>?,\n                             url: String?,\n                             username: String?) -> Int32 {\n        \n        // Find password data\n        let passwordData = passwordDelegate.get(username: username, url: url == nil ? nil : URL(string: url!))\n        \n        let optionalUsername = passwordData.username\n        let optionalPasword = passwordData.password\n        \n        // Auth plain text\n        return git_cred_userpass_plaintext_new(\n            out,\n            optionalUsername == nil ? \"\" : optionalUsername!,\n            optionalPasword == nil ? \"\" : optionalPasword!)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/branch/Branch.swift",
    "content": "//\n//  Branch.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Branch type\n///\n/// - local:  Local branch\n/// - remote: Remote branch\n/// - all:    Local and remote branch\npublic enum BranchType : UInt32 {\n    case local = 1  // GIT_BRANCH_LOCAL\n    case remote = 2 // GIT_BRANCH_REMOTE\n    case all = 3 // GIT_BRANCH_ALL\n}\n\n/// Convert a Git2Swift branch to a libgit2 branch type\n///\n/// - parameter type: Git2Swift branch\n///\n/// - returns: libgit2 branch\nfunc git_convert_branch_type(_ type: BranchType) -> git_branch_t {\n    \n    switch type {\n    case .local:\n        return GIT_BRANCH_LOCAL\n    case .remote:\n        return GIT_BRANCH_REMOTE\n    case .all:\n        return GIT_BRANCH_ALL\n    }\n}\n\n/// Convert a libgit2 branch to Git2Swift branch.\n///\n/// - parameter type: Libgit2 branch\n///\n/// - returns: Git2Swift branch\nfunc git_convert_from_git_branch_t(_ type: git_branch_t) -> BranchType {\n    switch(type) {\n    case GIT_BRANCH_LOCAL :\n        return BranchType.local\n    case GIT_BRANCH_REMOTE :\n        return BranchType.remote\n    default :\n        return BranchType.all\n    }\n}\n\n/// Define a git branch\npublic class Branch : Reference {\n    \n    /// Type of branch\n    public let type: BranchType\n    \n    lazy public var shortName : String = {\n        do {\n            return try Branch.getSpecInfo(spec: self.name, type: self.type).name\n        } catch {\n            return self.name\n        }\n    } ()\n    \n    /// Decode rbanch spec in name and type\n    ///\n    /// - parameter spec: Full spec\n    /// - parameter type: Known type for optimisation (may be null)\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Typle (name, type)\n    public static func getSpecInfo(spec: String, type: BranchType? = nil) throws -> (name: String, type: BranchType) {\n        \n        // Test local\n        if ((type != nil && type! == .local) || spec.hasPrefix(\"refs/heads/\")) {\n            let startIndex = spec.index(spec.startIndex, offsetBy: 11)\n            let name = String(spec[startIndex...])\n            return (name, BranchType.local)\n            // Test remote\n        } else if ((type != nil && type! == .remote) || spec.hasPrefix(\"refs/remotes/\")) {\n            let startIndex = spec.index(spec.startIndex, offsetBy: 13)\n            let name = String(spec[startIndex...])\n            return (name, BranchType.local)\n        } else {\n            throw GitError.invalidSpec(spec: spec)\n        }\n    }\n    \n    /// Constructor with repository, name and libgit2 pointer\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter name:       Name of the branch\n    /// - parameter pointer:    libgit2 reference pointer\n    ///\n    /// - throws: GitError on init error\n    ///\n    /// - returns: Git2Swift branch\n    override init(repository: Repository, name: String, pointer: UnsafeMutablePointer<OpaquePointer?>) throws {\n        \n        // Set type\n        if (git_reference_is_remote(pointer.pointee) == 1) {\n            type = .remote\n        } else {\n            type = .local\n        }\n        \n        try super.init(repository: repository, name: name, pointer: pointer)\n    }\n    \n    /// Constructor with repository, libgit2 pointer and type.\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter pointer:    libgit2 reference pointer\n    /// - parameter type:       Branch type\n    ///\n    /// - throws: GitError on init error\n    ///\n    /// - returns: Git2Swift branch\n    init(repository: Repository, pointer: UnsafeMutablePointer<OpaquePointer?>, type: BranchType) throws {\n        self.type = type\n        \n        // Read name from pointer\n        let name = git_string_converter(git_reference_name(pointer.pointee))\n        \n        try super.init(repository: repository, name: name, pointer: pointer)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/branch/Branches.swift",
    "content": "//\n//  Branches.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Branches manager\npublic class Branches {\n\n    /// Repository\n    public let repository: Repository\n    \n    /// Constructor with repository\n    ///\n    /// - parameter repository: Git2Swift repository\n    ///\n    /// - returns: Branches\n    init(repository: Repository) {\n        self.repository = repository\n    }\n    \n    /// All branch names\n    public func names(type: BranchType = .local) throws -> [String] {\n        \n        var strs = [String]()\n        \n        for branch in try all(type: type) {\n            strs.append(branch.name)\n        }\n        \n        \n        return strs\n    }\n    \n    /// Get branch with full reference name\n    ///\n    /// - parameter name: Branch name\n    ///\n    /// - throws: GitError (notFound, invalidSpec)\n    ///\n    /// - returns: Branch\n    public func get(spec: String) throws -> Branch {\n        let specInfo = try Branch.getSpecInfo(spec: spec)\n        return try get(name: specInfo.name, type: specInfo.type)\n    }\n    \n    /// Get branch by name\n    ///\n    /// - parameter name: Branch name\n    /// - parameter type: Branch type\n    ///\n    /// - throws: GitError (notFound, invalidSpec)\n    ///\n    /// - returns: Branch\n    public func get(name: String, type: BranchType = .local) throws -> Branch {\n        \n        // Find reference pointer\n        let reference = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Lookup reference\n        let error = git_branch_lookup(reference, repository.pointer.pointee, name, git_convert_branch_type(type))\n        if (error != 0) {\n            \n            reference.deinitialize(count: 1)\n            reference.deallocate()\n            \n            // 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code.\n            switch (error) {\n            case GIT_ENOTFOUND.rawValue :\n                throw GitError.notFound(ref: name)\n            case GIT_EINVALIDSPEC.rawValue:\n                throw GitError.invalidSpec(spec: name)\n            default:\n                throw gitUnknownError(\"Unable to lookup reference \\(name)\", code: error)\n            }\n        }\n        \n        return try Branch(repository: repository, name:name, pointer: reference)\n    }\n    \n    /// Create a new branch\n    ///\n    /// - parameter name:  New branch name\n    /// - parameter force: Force creation\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Branch\n    public func create(name: String, force: Bool = false) throws -> Branch {\n        \n        // Find last commit\n        guard let lastCommit = try repository.head().targetCommit().pointer.pointee else {\n            throw GitError.notFound(ref: \"HEAD\")\n        }\n        \n        // new_branch\n        let new_branch = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Create branch\n        let error = git_branch_create(new_branch, repository.pointer.pointee, name, lastCommit, force ? 1 : 0)\n        if (error == 0) {\n            return try Branch(repository: repository, name: name, pointer: new_branch)\n        } else {\n            throw gitUnknownError(\"Unable to create branch\", code: error)\n        }\n    }\n    \n    /// Remove a branch by name and type\n    ///\n    /// - parameter name: Branch name\n    /// - parameter type: Branch type\n    ///\n    /// - throws: GitError\n    public func remove(name: String, type: BranchType = .local) throws {\n        \n        // branch\n        let lookup_branch = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        defer {\n            if (lookup_branch.pointee != nil) {\n                git_reference_free(lookup_branch.pointee)\n            }\n            lookup_branch.deinitialize(count: 1)\n            lookup_branch.deallocate()\n        }\n        \n        // Find type\n        let branchType : git_branch_t\n        if (type == .remote) {\n            branchType = GIT_BRANCH_REMOTE\n        } else {\n            branchType = GIT_BRANCH_LOCAL\n        }\n        \n        let error = git_branch_lookup(lookup_branch, repository.pointer.pointee,\n                                      name, branchType)\n        if (error == 0 && lookup_branch.pointee != nil) {\n            git_branch_delete(lookup_branch.pointee)\n        } else {\n            throw gitUnknownError(\"Unable to delete branch\", code: error)\n        }\n    }\n    \n    /// Find all branches\n    ///\n    /// - parameter type: Filter by types\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Branch iterator\n    public func all(type: BranchType = .local) throws -> BranchIterator {\n        return BranchIterator(repository: repository, type: type)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/branch/BranchesIterator.swift",
    "content": "//\n//  BranchesIterator.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 11/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Branch iterator\npublic class BranchIterator : Sequence, IteratorProtocol {\n \n    /// LibGit2 iterator pointer\n    private var branch_iterator : UnsafeMutablePointer<OpaquePointer?>\n    \n    /// LibGit2 repository pointer\n    private let repository: Repository\n    \n    /// Constructor with repository and type\n    ///\n    /// - parameter repository: Repository\n    /// - parameter type:       Type\n    ///\n    /// - returns: Branch iterator\n    init(repository : Repository, type: BranchType) {\n        \n        self.repository = repository\n        \n        // Pointer of branch iterator\n        branch_iterator = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Init iterator\n        git_branch_iterator_new(branch_iterator, repository.pointer.pointee, git_convert_branch_type(type))\n    }\n    \n    deinit {\n        if let ptr = branch_iterator.pointee {\n            git_branch_iterator_free(ptr)\n        }\n        branch_iterator.deinitialize(count: 1)\n        branch_iterator.deallocate()\n    }\n    \n    /// Find next branch\n    ///\n    /// - returns: Next branch or nil for the end\n    public func next() -> Branch? {\n        \n        // Next branch pointer\n        let branch = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Next branch type\n        let type = UnsafeMutablePointer<git_branch_t>.allocate(capacity: 1)\n        defer {\n            type.deinitialize(count: 1)\n            type.deallocate()\n        }\n        \n        // find next\n        let result = git_branch_next(branch, type, branch_iterator.pointee)\n        \n        // Test next\n        if (result != GIT_ITEROVER.rawValue) {\n            return try? Branch(repository: repository, pointer: branch, type: git_convert_from_git_branch_t(type.pointee))\n        } else {\n            // End\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commit/Commit.swift",
    "content": "//\n//  Commit.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Wrap a commit\npublic class Commit : Object {\n    \n    private let repository : Repository\n    \n    /// LibGit2 commit pointer\n    internal let pointer : UnsafeMutablePointer<OpaquePointer?>\n    \n    /// OID\n    public let oid: OID\n    \n    /// Commit summary\n    lazy public var summary : String = {\n        git_string_converter(git_commit_summary(self.pointer.pointee))\n    } ()\n    \n    /// Commit body\n    lazy public var body : String = {\n        git_string_converter(git_commit_body(self.pointer.pointee))\n    } ()\n    \n    /// Commit author\n    lazy public var author : Signature = {\n        Signature(sig: git_commit_author(self.pointer.pointee))\n    } ()\n    \n    /// Commit commiter\n    lazy public var committer : Signature = {\n        Signature(sig: git_commit_committer(self.pointer.pointee))\n    } ()\n    \n    /// Commit date\n    lazy public var date : Date = {\n        Date(timeIntervalSince1970: TimeInterval(git_commit_time(self.pointer.pointee)))\n    } ()\n    \n    /// Commit TimeZone\n    lazy public var timeZone : TimeZone? = {\n        TimeZone(secondsFromGMT: Int(git_commit_time_offset(self.pointer.pointee)) * 60)\n    } ()\n    \n    /// Constructor with libgit2 pointer and OID\n    ///\n    /// - parameter pointer: libgit2 commit pointer\n    /// - parameter oid:     OID\n    ///\n    /// - returns: Commit\n    init(repository : Repository, pointer: UnsafeMutablePointer<OpaquePointer?>, oid: OID) {\n        self.repository = repository\n        self.pointer = pointer\n        self.oid = oid\n    }\n    \n    deinit {\n        if let ptr = pointer.pointee {\n            git_commit_free(ptr)\n        }\n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n    \n    public func tree() throws -> Tree {\n        \n        // Tree\n        let tree = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Find tree from commit\n        let error = git_commit_tree(tree, pointer.pointee)\n        if (error == 0) {\n            return Tree(repository: repository, tree: tree)\n        } else {\n            throw GitError.unknownError(msg: \"Unable to find tree from commit\",\n                                        code: error, desc: git_error_message())\n        }\n    }\n    \n    public func getDate() -> String {\n        date.string(format: \"yyyy-MM-dd HH:mm:ss\")\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Blob.swift",
    "content": "//\n//  Blob.swift\n//  Git2Swift\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Tree Definition\npublic class Blob {\n\n    /// Internal libgit2 tree\n    internal let blob: UnsafeMutablePointer<OpaquePointer?>\n\n    /// Init with libgit2 tree\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter Blob:       Libgit2 blob pointer\n    ///\n    /// - returns: Blob\n    init(blob: UnsafeMutablePointer<OpaquePointer?>) {\n        self.blob = blob\n    }\n\n    deinit {\n        if let ptr = blob.pointee {\n            git_blob_free(ptr)\n        }\n\n        blob.deinitialize(count: 1)\n        blob.deallocate()\n    }\n\n    lazy public var rawContent: Data = {\n        Data(bytes: git_blob_rawcontent(self.blob.pointee),\n             count: Int(git_blob_rawsize(self.blob.pointee)))\n    }()\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/ConfigManager.swift",
    "content": "//\n//  ConfigManager.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Config manager\npublic class ConfigManager {\n    \n    /// LibGit2 config pointer\n    private let cfg : UnsafeMutablePointer<OpaquePointer?>\n    \n    /// Constructor\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: ConfigManager\n    init() throws {\n        \n        // Config\n        cfg = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Read config\n        let error = git_config_open_default(cfg);\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to open config\", code: error)\n        }\n    }\n    \n    deinit {\n        if let ptr = cfg.pointee {\n            git_config_free(ptr)\n        }\n        cfg.deinitialize(count: 1)\n        cfg.deallocate()\n    }\n    \n    /// Read string\n    ///\n    /// - parameter key: Key value\n    ///\n    /// - throws: GitError wrapping libgit2 error\n    ///\n    /// - returns: String\n    public func readString(key: String) throws -> String {\n        \n        // email entry\n        let entry = UnsafeMutablePointer<UnsafeMutablePointer<git_config_entry>?>.allocate(capacity: 1)\n        defer {\n            if (entry.pointee != nil) {\n                git_config_entry_free(entry.pointee)\n            }\n            entry.deinitialize(count: 1)\n            entry.deallocate()\n        }\n        \n        let value : String\n        if git_config_get_entry(entry, cfg.pointee, key) == 0 {\n            value = String(cString: entry.pointee!.pointee.value)\n        } else {\n            value = String(\"\")\n        }\n        \n        return value\n    }\n    \n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Error.swift",
    "content": "//\n//  Error.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 31/07/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\npublic enum GitError : Error {\n    \n    case invalidSHA(sha: String)\n    case notFound(ref: String)\n    case invalidSpec(spec: String)\n    case alreadyExists(ref: String)\n    case ambiguous(msg: String)\n    \n    case invalidReference(msg: String, type: ReferenceType)\n    case unknownReference(msg: String)\n    case unknownError(msg: String, code: Int32, desc: String)\n    case unableToMerge(msg: String)\n    case modifiedElsewhere(ref: String)\n    \n    case notImplemented(msg: String)\n    case uncommittedConflict\n    case noAddedFiles\n    \n    func associatedValue() -> String {\n        switch self {\n        case .invalidSHA(sha: let sha):\n            return \"Invalid sha \\(sha)\"\n        case .notFound(ref: let ref):\n            return \"Not found ref \\(ref)\"\n        case .invalidSpec(spec: let spec):\n            return \"Invalid spec \\(spec)\"\n        case .alreadyExists(ref: let ref):\n            return \"Already exist ref \\(ref)\"\n        case .ambiguous(msg: let msg):\n            return \"Ambiguous \\(msg)\"\n        case .invalidReference(msg: let msg, type: let type):\n            return \"Invalid ref \\(msg) \\(type)\"\n        case .unknownReference(msg: let msg):\n            return \"Unknown ref \\(msg)\"\n        case .unknownError(msg: let msg, code: let code, desc: let desc):\n            return \"\\(msg) \\(code) \\(desc)\"\n        case .unableToMerge(msg: let msg):\n            return \"Unable to merge \\(msg)\"\n        case .modifiedElsewhere(ref: let ref):\n            return \"Modified error \\(ref)\"\n        case .notImplemented(msg: let msg):\n            return \"Not implemented \\(msg)\"\n        case .uncommittedConflict:\n            return \"Uncommitted conflict\"\n        case .noAddedFiles:\n            return \"New files not found\"\n        }\n    }\n}\n\nfunc gitUnknownError(_ msg: String, code: Int32) -> GitError {\n    return GitError.unknownError(msg: msg, code: code, desc: git_error_message())\n}\n\n///\n/// Error message.\n/// - Returns message.\n///\nfunc git_error_message() -> String {\n    \n    let error = giterr_last()\n    if (error != nil) {\n        return \"\\(String(cString: error!.pointee.message))\"\n    } else {\n        return \"\"\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Errors.swift",
    "content": "import Foundation\nimport Cgit2\n\npublic let libGit2ErrorDomain = \"org.libgit2.libgit2\"\n\ninternal extension NSError {\n\t/// Returns an NSError with an error domain and message for libgit2 errors.\n\t///\n\t/// :param: errorCode An error code returned by a libgit2 function.\n\t/// :param: libGit2PointOfFailure The name of the libgit2 function that produced the\n\t///         error code.\n\t/// :returns: An NSError with a libgit2 error domain, code, and message.\n\tconvenience init(gitError errorCode: Int32, pointOfFailure: String? = nil) {\n\t\tlet code = Int(errorCode)\n\t\tvar userInfo: [String: String] = [:]\n\n\t\tif let message = errorMessage(errorCode) {\n\t\t\tuserInfo[NSLocalizedDescriptionKey] = message\n\t\t} else {\n\t\t\tuserInfo[NSLocalizedDescriptionKey] = \"Unknown libgit2 error.\"\n\t\t}\n\n\t\tif let pointOfFailure = pointOfFailure {\n\t\t\tuserInfo[NSLocalizedFailureReasonErrorKey] = \"\\(pointOfFailure) failed.\"\n\t\t}\n\n\t\tself.init(domain: libGit2ErrorDomain, code: code, userInfo: userInfo)\n\t}\n}\n\n/// Returns the libgit2 error message for the given error code.\n///\n/// The error message represents the last error message generated by\n/// libgit2 in the current thread.\n///\n/// :param: errorCode An error code returned by a libgit2 function.\n/// :returns: If the error message exists either in libgit2's thread-specific registry,\n///           or errno has been set by the system, this function returns the\n///           corresponding string representation of that error. Otherwise, it returns\n///           nil.\nprivate func errorMessage(_ errorCode: Int32) -> String? {\n\tlet last = giterr_last()\n\tif let lastErrorPointer = last {\n\t\treturn String(validatingUTF8: lastErrorPointer.pointee.message)\n\t} else if UInt32(errorCode) == GIT_ERROR_OS.rawValue {\n\t\treturn String(validatingUTF8: strerror(errno))\n\t} else {\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/OID.swift",
    "content": "//\n//  OID.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 31/07/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\n/// Define git OID\npublic struct OID {\n    \n    /// LibGit2 OID\n    internal var oid = git_oid()\n    \n    /// Init with libgit2 OID\n    ///\n    /// - parameter oid: Internal libgit2\n    ///\n    /// - returns: OID\n    init(withGitOid oid: git_oid) {\n        self.oid = oid\n    }\n    \n    /// Init with git SHA\n    ///\n    /// - parameter sha: String containing SHA\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: OID\n    public init(withSha sha: String?) throws {\n        guard let sha = sha else {\n            throw GitError.invalidSHA(sha: \"nil\")\n        }\n        if git_oid_fromstr(&self.oid, sha) != 0 {\n            throw GitError.invalidSHA(sha: sha)\n        }\n    }\n   \n    /// Retrieve SHA string\n    ///\n    /// - returns: String containing SHA or nil\n    public func sha() -> String? {\n        \n        // Create c_string\n        let c_string = UnsafeMutablePointer<CChar>.allocate(capacity: 40)\n        defer {\n            c_string.deinitialize(count: 40)\n            c_string.deallocate()\n        }\n        \n        // Copy string\n        var oid = self.oid\n        git_oid_fmt(c_string, &oid)\n        \n        // Convert to string\n        return String(bytesNoCopy: c_string, length: 40, encoding: String.Encoding.utf8, freeWhenDone: false)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Object.swift",
    "content": "//\n//  Object.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\n\n/// Object\npublic protocol Object {\n    \n    /// Oid\n    var oid : OID { get }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Progress.swift",
    "content": "//\n//  Progress.swift\n//  Git2Swift\n//\n//  Created by Dami on 24/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\n#if os(iOS)\nimport UIKit\n#else\nimport AppKit\n#endif\n\n/// Define progress protocol\npublic class GitProgress {\n    public var project: Project\n\n#if os(iOS)\n    public var statusTextField: UITextField\n    \n    init(statusTextField: UITextField, project: Project) {\n        self.statusTextField = statusTextField\n        self.project = project\n    }\n#else\n    public var statusTextField: NSTextField\n\n    init(statusTextField: NSTextField, project: Project) {\n        self.statusTextField = statusTextField\n        self.project = project\n    }\n#endif\n    \n    func log(current: Int, total: Int, action: String) {\n        let message = \"git \\(action): chunk \\(current) from \\(total)\"\n        send(message: message)\n    }\n    \n    func log(message: String) {\n        project.gitStatus = message\n        send(message: message)\n    }\n\n    func send(message: String) {\n        print(message)\n\n        DispatchQueue.main.async {\n            #if os(iOS)\n                self.statusTextField.text = message\n            #else\n                self.statusTextField.stringValue = message\n            #endif\n        }\n    }\n}\n\nfinal class ProgressDelegate {\n    static let checkoutIgnoreFilesProgressCallback: git_checkout_notify_cb = {a,b,c,d,e,f in\n        // Dirty found – skip checkout, commit before\n        if a.rawValue == 2 {\n            return -1\n        }\n\n        return 0\n    }\n\n    static let fetchProgressCallback: git_transfer_progress_cb = { stats, payload in\n        if let stats = stats {\n            AppDelegate.gitProgress?.log(current: Int(stats.pointee.received_objects), total: Int(stats.pointee.total_objects), action: \"fetch\")\n        }\n        return 0\n    }\n    \n    static let pushProgressCallback: git_push_transfer_progress_cb = { current, total, bytes, payload in\n        AppDelegate.gitProgress?.log(current: Int(current), total: Int(total), action: \"push\")\n        return 0\n    }\n    \n    static let packBuilderCallback: git_packbuilder_progress = { stage, current, total, payload in\n        AppDelegate.gitProgress?.log(current: Int(current), total: Int(total), action: \"pack\")\n        return 0\n    }\n\n    static let checkoutProgressCallback: git_checkout_progress_cb = { path, completed, total, payload in\n        AppDelegate.gitProgress?.log(current: Int(completed), total: Int(total), action: \"checkout\")\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Signature.swift",
    "content": "//\n//  Signature.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Define a git signature\n///\n/// Wrap name and email\npublic class Signature {\n    \n    ///\n    /// Signature name.\n    ///\n    public let name : String\n    \n    ///\n    /// Signature mail.\n    ///\n    public let email : String\n    \n    /// Constructor with name and email\n    ///\n    /// - parameter name:  Signature name\n    /// - parameter email: Signature email\n    ///\n    /// - returns: Signature\n    public init(name: String, email: String) {\n        self.name = name\n        self.email = email\n    }\n    \n    /// Constructor with libgit2 signature pointer\n    ///\n    /// - parameter sig: libgit2 signature\n    ///\n    /// - returns: Signature\n    convenience init(sig : UnsafePointer<git_signature>) {\n        self.init(name: git_string_converter(sig.pointee.name), email: git_string_converter(sig.pointee.email))\n    }\n    \n    ///\n    /// Create now signature.\n    /// - Parameter sig : signature\n    /// - Throws GitError\n    ///\n    \n    /// Create libgit2 rsignature\n    ///\n    /// - parameter sig: Pointer where creating libgit2 signature\n    ///\n    /// - throws: GitError\n    internal func now(sig : UnsafeMutablePointer<UnsafeMutablePointer<git_signature>?>) throws {\n        let error = git_signature_now(sig, name, email)\n        if (error != 0) {\n            throw gitUnknownError(\"\", code: error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/StaticSshKeyDelegate.swift",
    "content": "//\n//  StaticSshKeyDelegate.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.10.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass StaticSshKeyDelegate : SshKeyDelegate {\n    let privateUrl: URL\n    let publicUrl: URL?\n    let passphrase: String\n    \n    init(privateUrl: URL, passphrase: String, publicUrl: URL? = nil) {\n        self.privateUrl = privateUrl\n        self.publicUrl = publicUrl\n        self.passphrase = passphrase\n    }\n    \n    public func get(username: String?, url: URL?) -> SshKeyData {\n        if let publicUrl = self.publicUrl {\n            return RawSshKeyData(username: username, privateKey: privateUrl, publicKey: publicUrl, passphrase: passphrase)\n        }\n\n        return RawSshKeyData(username: username, privateKey: privateUrl, publicKey: nil, passphrase: passphrase)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Strings.swift",
    "content": "//\n//  Strings.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 31/07/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\n/// Convert libgit2 string to Swift string\n///\n/// - parameter cStr: C string pointer\n///\n/// - returns: Swift string\nfunc git_string_converter(_ cStr: UnsafePointer<CChar>) -> String {\n    return String(cString: cStr)\n}\n\n/// Convert libgit2 string array to swift string array\n///\n/// - parameter strarray: libgit2 string array\n///\n/// - returns: String array\nfunc git_strarray_to_strings(_ strarray: inout git_strarray) -> [String] {\n    \n    var strs = [String]()\n    \n    let count = strarray.count\n    if (count == 0) {\n        return strs\n    }\n    \n    strs.reserveCapacity(count)\n    for i in 0...(count - 1) {\n        strs.append(String(cString: strarray.strings[i]!))\n    }\n    return strs\n}\n\n\n///\n/// Define a string wrapper used to transform a String array to pointer array.\n///\nclass StringWrapper {\n    \n    ///\n    /// Raw UTF-8\n    ///\n    private var rawUtf8 = [ContiguousArray<Int8>]()\n    \n    ///\n    /// Character count.\n    ///\n    let count : Int\n    \n    ///\n    /// Pointer to 'const char **'\n    ///\n    private(set) var pointer : UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>\n    \n    ///\n    /// Init string wrapper.\n    /// - Parameter strs : String array.\n    ///\n    init(withStrs strs: [String]) {\n        \n        // String count\n        count = strs.count\n        \n        // Create result\n        pointer = UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>.allocate(capacity: count)\n        \n        // Store raw utf8\n        rawUtf8.reserveCapacity(count)\n        \n        // Init iterator\n        var iterator = pointer\n        \n        // Iterate other strings\n        for str in strs {\n            \n            // Create utf8 cString\n            let cStr : ContiguousArray<Int8> = str.utf8CString\n            rawUtf8.append(cStr)\n            \n            // Set pointer\n            let cStr1 = cStr.withUnsafeBufferPointer { UnsafeMutablePointer<Int8>(mutating: $0.baseAddress) }\n            \n            // Initialize with utf8 data\n            iterator.initialize(to: cStr1)\n            \n            // Add successor\n            iterator = iterator.successor()\n        }\n    }\n    \n    deinit {\n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/commons/Wrapper.swift",
    "content": "//\n//  Wrapper.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 20/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\n/// Wrap authentication to C function\ninternal class CWrapper<T> {\n    \n    /// Object\n    let object: T\n    \n    /// Init wrapper\n    ///\n    /// - parameter object: Wrapper\n    ///\n    /// - returns: Wrapper\n    init(_ object: T) {\n        self.object = object\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/diff/Diff.swift",
    "content": "//\n//  Diff.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 20/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\nvar paths = NSMutableDictionary()\n\n\n/// Define internal object to cast and use with C hander\nclass InternalDiffWrapper {\n    \n    /// Diff object\n    var diff : Diff\n    \n    /// Entries parsed\n    var entries = Dictionary<String, Bool>()\n    \n    init(_ diff: Diff) {\n        self.diff = diff\n    }\n}\n\n/// Diff\npublic class Diff {\n    \n    public static var commitsDict = [\"sha\": [String]()]\n\n    /// Internal Diff pointer\n    internal let pointer : UnsafeMutablePointer<OpaquePointer?>\n    \n    // Init with libgit2 diff pointer\n    init(pointer: UnsafeMutablePointer<OpaquePointer?>) {\n        self.pointer = pointer\n    }\n    \n    deinit {\n        if let ptr = pointer.pointee {\n            git_diff_free(ptr)\n        }\n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n    \n    /// Find diff entry by path\n    public func find(byPath path: String, oid: OID, project: Project? = nil) -> Bool {\n        project?.loadCommitsCache()\n        \n        guard let sha = oid.sha() else { return false }\n        paths.removeAllObjects()\n        \n        if let project = project, let paths = project.commitsCache[sha] {\n            return paths.contains(path)\n        }\n        \n        // Create internal object to convert in C pointer\n        let payload = InternalDiffWrapper(self)\n        \n        // COnvert in C pointer\n        let ptr = Unmanaged.passRetained(CWrapper(payload)).toOpaque()\n        \n        // Foreach on all diff entries\n        let error = git_diff_foreach(self.pointer.pointee, DiffFile.callback, nil, nil, nil, ptr)\n        if (error != 0) {\n            NSLog(\"git diff error \\(git_error_message())\")\n        }\n        \n        if let sha = oid.sha(), let keys = paths.allKeys as? [String], let project = project {\n            project.commitsCache[sha] = keys\n        }\n        \n        return paths[path] != nil\n    }\n}\n\nfinal class DiffFile{\n    static let callback: git_diff_file_cb = { delta, progress, payload in \n        if let delta = delta {\n            \n            // Create diff entry\n            let diffEntry = DiffEntry(delta: delta)\n            \n            // Test old name\n            if let oldName = diffEntry.oldName {\n                paths[oldName] = true\n            }\n            \n            // Test new name\n            if let newName = diffEntry.newName {\n                paths[newName] = true\n            }\n        }\n        \n        return 0\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/diff/DiffEntry.swift",
    "content": "//\n//  DiffEntry.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 21/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Delta type\n///\n/// - unmodified: no changes\n/// - added:      entry does not exist in old version\n/// - deleted:    entry does not exist in new version\n/// - modified:   entry content changed between old and new\n/// - renamed:    entry was renamed between old and new\n/// - copied:     entry was copied from another old entry\n/// - ignored:    entry is ignored item in workdir\n/// - untracked:  entry is untracked item in workdir\n/// - typechange: type of entry changed between old and new\n/// - unreadable: entry is unreadable\n/// - conflicted: entry in the index is conflicted\n/// - unknown:    Enum size\npublic enum DeltaType : UInt32 {\n    case unmodified = 0\n    case added = 1\n    case deleted = 2\n    case modified = 3\n    case renamed = 4\n    case copied = 5\n    case ignored = 6\n    case untracked = 7\n    case typechange = 8\n    case unreadable = 9\n    case conflicted = 10\n    case unknown\n}\n\n/// Diff entry\npublic class DiffEntry {\n    \n    /// Old file name\n    public let oldName : String?\n    \n    /// New file name\n    public let newName : String?\n    \n    /// Delta entry type\n    public let type : DeltaType\n    \n    init(delta: UnsafePointer<git_diff_delta>) {\n        \n        let ptr = delta.pointee\n        \n        oldName = git_string_converter(ptr.old_file.path)\n        newName = git_string_converter(ptr.old_file.path)\n        if let type = DeltaType(rawValue: ptr.status.rawValue) {\n            self.type = type\n        } else {\n            self.type = .unknown\n        }\n    }\n}\n\npublic class DiffFileNew {\n    init(delta: UnsafePointer<git_diff_file>) {\n        let ptr = delta.pointee\n        print(git_string_converter(ptr.path))\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/head/Head+Checkout.swift",
    "content": "//\n//  Head+Checkout.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 07/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Define checkout type\n///\n/// - none:            default checkout\n/// - safe:            todo\n/// - recreateMissing: todo\n/// - force:           todo\npublic enum CheckoutType {\n    case none\n    case safe\n    case recreateMissing\n    case force\n}\n\n/// Reset type\n///\n/// - soft:  todo\n/// - mixed: todo\n/// - hard:  todo\npublic enum ResetType {\n    case soft\n    case mixed\n    case hard\n}\n\n// MARK: - Head extension for checkout\nextension Head {\n    \n    /// Checkout a branch and swith HEAD to this\n    ///\n    /// - parameter branch: branch\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError \n    ///    - GitError.NOT_FOUND : if branch not found\n    ///    - GitError.UNKNOW_ERROR : for unknow error\n    public func checkout(branch: Branch, progress: Progress? = nil, type: CheckoutType = .safe) throws {\n        \n        // Checkout new tree\n        try checkout(tree: try branch.revTree(), type: type, progress: progress)\n        \n        // Set head\n        let error = git_repository_set_head(repository.pointer.pointee, branch.name)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to switch to '\\(branch.name)' branch\", code: error)\n        }\n    }\n    \n    /// Checkout a tag and swith HEAD to this\n    ///\n    /// - parameter tag: tag\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    ///    - GitError.NOT_FOUND : if branch not found\n    ///    - GitError.UNKNOW_ERROR : for unknow error\n    public func checkout(tag: Tag, progress: Progress? = nil) throws {\n        \n        // Checkout new tree\n        try checkout(tree: try tag.revTree(), type: .safe, progress: progress)\n        \n        // Set repository to tag\n        let error = git_repository_set_head(repository.pointer.pointee, tag.name)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to switch to '\\(tag.name)' tag\", code: error)\n        }\n    }\n    \n    /// Checkout tree to Head\n    ///\n    /// - parameter tree: File tree\n    /// - parameter type: Checkout type\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    public func checkout(tree: Tree, type: CheckoutType, progress: Progress? = nil) throws {\n        \n        // Select checkout strategy\n        var opts = git_checkout_options()\n        opts.version = 1\n        opts.progress_cb = ProgressDelegate.checkoutProgressCallback\n        \n        switch type {\n        case .none:\n            opts.checkout_strategy = GIT_CHECKOUT_NONE.rawValue;\n            opts.notify_cb = ProgressDelegate.checkoutIgnoreFilesProgressCallback\n            opts.notify_flags = GIT_CHECKOUT_NOTIFY_DIRTY.rawValue\n        case .safe:\n            opts.checkout_strategy = GIT_CHECKOUT_SAFE.rawValue;\n        case .recreateMissing:\n            opts.checkout_strategy = GIT_CHECKOUT_RECREATE_MISSING.rawValue;\n        case .force:\n            opts.checkout_strategy = GIT_CHECKOUT_FORCE.rawValue;\n        }\n        \n        // Checkout new tree\n        let error = git_checkout_tree(repository.pointer.pointee, tree.tree.pointee, &opts);\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to checkout to tree\", code: error)\n        }\n    }\n    \n    /// Reset head.\n    ///\n    /// - parameter type: Reset type\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    public func reset(type: ResetType, progress: Progress? = nil) throws {\n        \n        // Set checkout option\n        var opts = git_checkout_options()\n        opts.version = 1\n        \n        // Set progress\n        opts.progress_cb = ProgressDelegate.checkoutProgressCallback\n        //setCheckoutProgressHandler(options: &opts, progress: progress)\n        \n        let gType : git_reset_t\n        \n        switch (type) {\n        case .soft :\n            gType = GIT_RESET_SOFT\n        case .mixed :\n            gType = GIT_RESET_MIXED\n        case .hard :\n            gType = GIT_RESET_HARD\n        }\n        \n        // Reset directory\n        let error = git_reset(repository.pointer.pointee, try targetCommit().pointer.pointee, gType, &opts)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to reset 'HEAD'\", code: error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/head/Head+Merge.swift",
    "content": "//\n//  Head+Merge.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 08/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Merge type\n///\n/// - none:        No entries to merge\n/// - upToDate:    All entries up to date\n/// - fastForward: Fast forward\n/// - normal:      Nomral merge\npublic enum MergeType {\n    case none\n    case upToDate\n    case fastForward\n    case normal\n}\n\n// MARK: - Head extension for merging\nextension Head {\n\n    /// Head analysis\n    ///\n    /// - parameter branch: branch to analysis\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: MergeType résult\n    public func analysis(branch: Branch) throws -> MergeType {\n        \n        // Find oid\n        var oid = try branch.targetCommit().oid\n        \n        // Find annotated commit\n        let annotatedCommit = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        defer {\n            if let ptr = annotatedCommit.pointee {\n                git_annotated_commit_free(ptr)\n            }\n            annotatedCommit.deinitialize(count: 1)\n            annotatedCommit.deallocate()\n        }\n        \n        // Find annoted commit\n        var error = git_annotated_commit_lookup(annotatedCommit, repository.pointer.pointee, &oid.oid)\n        if (error != 0) {\n            throw gitUnknownError(\"Analysis : unable to create annotated commit\", code: error)\n        }\n        \n        // Allow fast-forward or normal merge\n        var preference : git_merge_preference_t = GIT_MERGE_PREFERENCE_NONE\n        \n        // Merge analysis\n        var analysis = GIT_MERGE_ANALYSIS_NONE\n        error = git_merge_analysis(&analysis, &preference, repository.pointer.pointee, annotatedCommit, 1)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to analysis\", code: error)\n        }\n        \n        /*\n        print(\"GIT_MERGE_ANALYSIS_NONE : \\(analysis.rawValue & GIT_MERGE_ANALYSIS_NONE.rawValue)\")\n        print(\"GIT_MERGE_ANALYSIS_NORMAL : \\(analysis.rawValue & GIT_MERGE_ANALYSIS_NORMAL.rawValue)\")\n        print(\"GIT_MERGE_ANALYSIS_UP_TO_DATE : \\(analysis.rawValue & GIT_MERGE_ANALYSIS_UP_TO_DATE.rawValue)\")\n        print(\"GIT_MERGE_ANALYSIS_FASTFORWARD : \\(analysis.rawValue & GIT_MERGE_ANALYSIS_FASTFORWARD.rawValue)\")\n        print(\"GIT_MERGE_ANALYSIS_UNBORN : \\(analysis.rawValue & GIT_MERGE_ANALYSIS_UNBORN.rawValue)\")\n        */\n        \n        // Test up to date\n        if (analysis.rawValue & GIT_MERGE_ANALYSIS_UP_TO_DATE.rawValue != 0) {\n            return .upToDate\n        }\n        \n        // Test fast-froward\n        if (analysis.rawValue & GIT_MERGE_ANALYSIS_FASTFORWARD.rawValue != 0) {\n            return .fastForward\n        }\n        \n        // Test normal\n        if (analysis.rawValue & GIT_MERGE_ANALYSIS_NORMAL.rawValue != 0) {\n            return .normal\n        }\n        \n        // Test none\n        if (analysis.rawValue & GIT_MERGE_ANALYSIS_NONE.rawValue != 0) {\n            return .none\n        }\n        \n        throw GitError.notImplemented(msg: \"Index iterator not implemented \\(analysis.rawValue).\")\n    }\n\n    /// Merge branch with signature\n    ///\n    /// - parameter branch:    branch to merge\n    /// - parameter signature: signature for commiter\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: True if branch is merged or false if conflicted files\n    public func merge(branch: Branch, signature: Signature, progress: Progress? = nil) throws -> Bool {\n        \n        // Analysis branch\n        let mergeType = try analysis(branch: branch)\n        \n        switch (mergeType) {\n        case .upToDate:\n            return true\n        case .fastForward:\n            try fastForward(branch: branch, signature: signature, progress: progress)\n            return true\n        case .normal:\n            return try normalMerge(branch: branch, signature: signature, progress: progress)\n        case .none:\n            throw GitError.unableToMerge(msg: \"Unmergeable branch \\(branch)\")\n        }\n    }\n\n    /// Internal fast forward\n    ///\n    /// - parameter branch:    branch to merge\n    /// - parameter signature: signature for commiter\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    private func fastForward(branch: Branch, signature: Signature, progress: Progress? = nil) throws {\n        do {\n            // Dry run for detect dirty\n            try checkout(tree: revTree(), type: .none, progress: progress)\n\n            // All fine – force checkout\n            try targetReference().updateTargetCommit(commit: try branch.targetCommit(), message: \"Merge '\\(branch.name)': Fast forward\")\n            try checkout(tree: revTree(), type: .force, progress: progress)\n        } catch {\n            throw GitError.uncommittedConflict\n        }\n    }\n\n    /// Internal normal merge\n    ///\n    /// - parameter branch:    branch to merge\n    /// - parameter signature: signature for commiter\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: True if branch is merged or false if conflicted files\n    public func normalMerge(branch: Branch, signature: Signature, progress: Progress? = nil) throws -> Bool {\n        \n        // Merge index\n        let mergeIndexPtr = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n\n        // Merge\n        let tCommit = try targetCommit()\n        let bCommit = try branch.targetCommit()\n        let error = git_merge_commits(mergeIndexPtr, repository.pointer.pointee, tCommit.pointer.pointee, bCommit.pointer.pointee, nil)\n        \n        if (error != 0) {\n            \n            // Dealloc\n            mergeIndexPtr.deinitialize(count: 1)\n            mergeIndexPtr.deallocate()\n            \n            throw gitUnknownError(\"Failed to merge \\(branch.name) to HEAD\", code: error)\n        }\n        \n        // Create index\n        let mergeIndex = Index(repository: repository, idx: mergeIndexPtr)\n        \n        // Check conflicts\n        if (mergeIndex.conflicts) {\n            \n            // Create annotated commit\n            let annotatedCommit = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n            defer {\n                if let ptr = annotatedCommit.pointee {\n                    git_annotated_commit_free(ptr)\n                }\n                annotatedCommit.deinitialize(count: 1)\n                annotatedCommit.deallocate()\n            }\n            \n            // Init annoted commit\n            var oid = try branch.targetCommit().oid\n            var error = git_annotated_commit_lookup(annotatedCommit, repository.pointer.pointee, &oid.oid)\n            if (error != 0) {\n                let shaCommit = oid.sha() ?? \"no sha\"\n                throw gitUnknownError(\"Unable to annotated commit \\(shaCommit)\", code: error)\n            }\n            \n            // Write conflicts\n            var merge_opts = git_merge_options()\n            merge_opts.version = 1\n            var checkout_opts = git_checkout_options()\n            checkout_opts.version = 1\n            checkout_opts.checkout_strategy = GIT_CHECKOUT_ALLOW_CONFLICTS.rawValue\n            \n            // Set progress\n            checkout_opts.progress_cb = ProgressDelegate.checkoutProgressCallback\n            \n            // Merge\n            error = git_merge(repository.pointer.pointee, annotatedCommit, 1, &merge_opts, &checkout_opts)\n            if (error != 0) {\n                throw gitUnknownError(\"Unable to merge conflicted branch \\(branch.name)\", code: error)\n            }\n            \n            do {\n                return try resolveConflicts(annotatedCommit: annotatedCommit, signature: signature)\n            } catch {\n                print(\"Automatic conflict resolution failed\")\n            }\n            \n            return false\n            \n        } else {\n            \n            // Write tree to repository\n            let tree = try repository.write(index: mergeIndex)\n\n            // Commit\n            _ = try repository.createCommit(tree: tree,\n                                            parents: [try targetCommit(), try branch.targetCommit()],\n                                            msg: \"Merge branch '\\(branch.name)'\",\n                                            signature: signature)\n            \n            // Checkout new commit\n            try checkout(tree: try repository.head().revTree(), type: .force, progress: progress)\n            \n            return true\n        }\n    }\n    \n    private func conflictPaths(index: OpaquePointer) -> [String]? {\n        var iterator: OpaquePointer?\n        var result = git_index_conflict_iterator_new(&iterator, index)\n        defer {\n            git_index_conflict_iterator_free(iterator)\n        }\n        guard result == GIT_OK.rawValue else {\n            return nil\n        }\n        var paths = [String]()\n        var entry: UnsafePointer<git_index_entry>?\n        var our: UnsafePointer<git_index_entry>?\n        var their: UnsafePointer<git_index_entry>?\n        while true {\n            result = git_index_conflict_next(&entry, &our, &their, iterator!)\n            if result == GIT_ITEROVER.rawValue { break }\n            guard result == GIT_OK.rawValue else {\n                return nil\n            }\n\n            if let entry = entry {\n                paths.append(String(cString: entry.pointee.path))\n            }\n        }\n        return paths\n    }\n    \n    private func resolveConflicts(annotatedCommit: UnsafeMutablePointer<OpaquePointer?>, signature: Signature) throws -> Bool {\n        var index: OpaquePointer? = nil\n        git_repository_index(&index, repository.pointer.pointee)\n        \n        guard let index = index else { return false }\n        guard let paths = conflictPaths(index: index) else { return false }\n        \n        for path in paths {\n            git_index_add_bypath(index, path)\n            git_index_conflict_remove(index, path)\n        }\n        \n        git_index_conflict_cleanup(index)\n        git_index_write(index)\n        \n        var headRef: OpaquePointer? = nil\n        git_repository_head(&headRef, repository.pointer.pointee)\n        \n        let rHead = try repository.head()\n        let tCommit = try rHead.targetCommit()\n        guard let lastCommit = tCommit.pointer.pointee else {\n            throw GitError.notFound(ref: \"HEAD\")\n        }\n        \n        guard let commitID = git_annotated_commit_id(annotatedCommit.pointee) else { return false }\n        let parent2 = try repository.commitLookup(oid: OID(withGitOid: commitID.pointee))\n        \n        var treeOid = git_oid()\n        git_index_write_tree(&treeOid, index)\n        \n        var tree : OpaquePointer? = nil\n        git_tree_lookup(&tree, repository.pointer.pointee, &treeOid);\n                    \n        let sig = UnsafeMutablePointer<UnsafeMutablePointer<git_signature>?>.allocate(capacity: 1)\n        defer {\n            if let ptr = sig.pointee {\n                git_signature_free(ptr)\n            }\n            \n            sig.deinitialize(count: 1)\n            sig.deallocate()\n        }\n        \n        // Create now signature\n        try signature.now(sig: sig)\n        \n        \n        // Parents\n        var parentsPtr : UnsafeMutablePointer<OpaquePointer?>? = nil\n        defer {\n            if let ptr = parentsPtr {\n                ptr.deinitialize(count: 1)\n                ptr.deallocate()\n            }\n        }\n        \n        parentsPtr = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 2)\n        \n        var it = parentsPtr!\n        \n        it.initialize(to: lastCommit)\n        it = it.successor()\n        \n        it.initialize(to: parent2.pointer.pointee)\n        it = it.successor()\n        \n        \n        // Create merge commit\n        var commit_id = git_oid()\n        let commitError = git_commit_create(&commit_id,\n            repository.pointer.pointee,\n            \"HEAD\",\n            sig.pointee,\n            sig.pointee,\n            \"UTF-8\", \"Merge conflict\",\n            tree,\n            2,\n           parentsPtr\n        )\n        \n        if (commitError != 0) {\n            throw gitUnknownError(\"Unable to create commit\", code: commitError)\n        }\n        \n        git_tree_free(tree)\n        git_repository_state_cleanup(repository.pointer.pointee)\n        \n        return true\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/head/Head.swift",
    "content": "//\n//  Head.swift\n//  Git2Swift\n//\n//  Created by Dami on 31/07/2016.\n//\n//\n\nimport Foundation\n\n/// Head repository\npublic class Head : Reference {\n\n    /// Head index\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Git index\n    public func index() throws -> Index {\n        return try Index(repository: repository)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/index/Index+Commit.swift",
    "content": "//\n//  Index+Commit.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\n\n// MARK: - Index extension for commit\nextension Index {\n\n    /// Create initial commit\n    ///\n    /// - parameter msg:       Commit message\n    /// - parameter signature: Author\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Commit\n    internal func createInitialCommit(msg: String, signature: Signature) throws -> Commit {\n        return try repository.createCommit(idx: idx, parent: nil, msg: msg, signature: signature)\n    }\n    \n    /// Create commit\n    ///\n    /// - parameter msg:       Commit message\n    /// - parameter signature: Author\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Commit\n    public func createCommit(msg: String, signature: Signature) throws -> Commit {\n        return try repository.createCommit(idx: idx, parent: try repository.head().targetCommit(), msg: msg, signature: signature)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/index/Index+Files.swift",
    "content": "//\n//  Index+Files.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n///\n/// Find relative path to an other url.\n///\nfunc relativePath(from: URL, to: URL) -> String? {\n    \n    // Find current file path\n    let currentFilePath = from.absoluteURL.path\n    \n    // Find from path\n    let fromFilePath = to.path\n    \n    // Check if current URL is parent of from\n    guard (currentFilePath.hasPrefix(fromFilePath)) else {\n        return nil\n    }\n    \n    // Find prefix size\n    let size = fromFilePath.count + (currentFilePath[currentFilePath.startIndex] == \"/\" ? 1 : 0 )\n    \n    let startIndex = currentFilePath.index(currentFilePath.startIndex, offsetBy: size)\n\n    // Return sub string\n    return String(currentFilePath[startIndex...])\n}\n\n// MARK: - Index extension for files\nextension Index {\n    \n    /// Add item\n    ///\n    /// - parameter url: URL of the item\n    ///\n    /// - throws: GitError\n    public func addItem(at url: URL) throws {\n        \n        // Create relative path\n        guard let path = relativePath(from: url, to: repository.url) else {\n            throw GitError.notFound(ref: url.absoluteString)\n        }\n        \n        let error = git_index_add_bypath(idx.pointee, path);\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to add item to index\", code: error)\n        }\n    }\n    \n    /// Add item\n    ///\n    /// - parameter url: URL of the item\n    ///\n    /// - throws: GitError\n    public func addItem(data: Data, at path: String) throws {\n        var index_entry = git_index_entry()\n        try path.withCString { (ptr: UnsafePointer<Int8>) -> Void in\n            index_entry.path = ptr\n            index_entry.mode = 33188\n            /* create a blob from our buffer */\n            try data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> Void in\n                let error = git_index_add_frombuffer(idx.pointee, &index_entry, bytes.baseAddress, data.count)\n                if error != 0 {\n                    throw gitUnknownError(\"Unable to add Data to index\", code: error)\n                }\n            }\n        }\n    }\n    \n    /// Remove item\n    ///\n    /// - parameter url: URL of the item\n    ///\n    /// - throws: GitError\n    public func removeItem(at url: URL) throws {\n        \n        // Create relative path\n        guard let path = relativePath(from: url, to: repository.url) else {\n            throw GitError.notFound(ref: url.absoluteString)\n        }\n        \n        let error = git_index_remove_bypath(idx.pointee, path)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to remove item to index\", code: error)\n        }\n    }\n    \n    /// Save index\n    ///\n    /// - throws: GitError\n    public func save() throws {\n        let error = git_index_write(idx.pointee)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to save index\", code: error)\n        }\n    }\n    \n    /// Reload index\n    ///\n    /// - throws: GitError\n    public func reload() throws {\n        let error = git_index_read(idx.pointee, 1); // A for true\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to read index\", code: error)\n        }\n    }\n    \n    /// Clear index\n    ///\n    /// - throws: GitError\n    public func clear() throws {\n        let error = git_index_clear(idx.pointee);\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to read index\", code: error)\n        }\n    }\n\n    static var count = 0\n\n    static let gitIndexCallback: git_index_matched_path_cb = { path, match, payload in\n        let newPath: String = git_string_converter(path!)\n\n        if newPath.startsWith(string: \".Trash\") {\n            return 1\n        }\n\n        count += 1\n        return 0\n    }\n    \n    public func add(path: String) -> Bool {\n        var dirPointer = UnsafeMutablePointer<Int8>(mutating: (path as NSString).utf8String)\n        var paths = withUnsafeMutablePointer(to: &dirPointer) {\n            git_strarray(strings: $0, count: 1)\n        }\n        \n        idx.pointee.flatMap { index in\n            defer { git_index_free(index) }\n            let addResult = git_index_add_all(index, &paths, 0, Index.gitIndexCallback, nil)\n            guard addResult == GIT_OK.rawValue else {\n                print(\"git_index_add_all \\(addResult)\")\n                return\n            }\n            // write index to disk\n            let writeResult = git_index_write(index)\n            guard writeResult == GIT_OK.rawValue else {\n                print(\"git_index_write \\(writeResult)\")\n                return\n            }\n        }\n\n        let success = Index.count > 0\n\n        // reset\n        Index.count = 0\n\n        return success\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/index/Index.swift",
    "content": "//\n//  Index.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Git index\npublic class Index {\n    \n    /// Git2Swift repository\n    public let repository : Repository\n    \n    /// Libgit2 index pointer\n    internal let idx: UnsafeMutablePointer<OpaquePointer?>\n  \n    /// Has conflict in index\n    public var conflicts : Bool {\n        get {\n            return git_index_has_conflicts(idx.pointee) == 1\n        }\n    }\n    \n    /// Constructor with repository and libgit2 index pointer\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter idx:        Libgit2 index\n    ///\n    /// - returns: Index\n    init(repository: Repository, idx: UnsafeMutablePointer<OpaquePointer?>) {\n        self.repository = repository\n        self.idx = idx\n    }\n    \n    /// Constructor with repository and return repository index\n    ///\n    /// - parameter repository: Git2Swift repository\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Index\n    convenience init(repository: Repository) throws {\n    \n        let idx = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Create index\n        let error = git_repository_index(idx, repository.pointer.pointee)\n        if (error != 0) {\n            \n            idx.deinitialize(count: 1)\n            idx.deallocate()\n            \n            throw gitUnknownError(\"Unable to init repository index\", code: error)\n        }\n        \n        self.init(repository: repository, idx: idx)\n    }\n    \n    deinit {\n        if let ptr = idx.pointee {\n            git_index_free(ptr)\n        }\n        idx.deinitialize(count: 1)\n        idx.deallocate()\n    }\n    \n}\n"
  },
  {
    "path": "FSNotesCore/Git/reference/Reference+Target.swift",
    "content": "//\n//  Reference+Target.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 08/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n// MARK: - Reference extension for target\nextension Reference {\n    \n    /// Target commit\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Reference\n    public func targetCommit() throws -> Commit {\n        \n        \n        // Create commit\n        let target = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Find commit\n        let error = git_reference_peel(target, pointer.pointee, GIT_OBJECT_COMMIT)\n        if (error != 0) {\n            \n            target.deinitialize(count: 1)\n            target.deallocate()\n            \n            switch error {\n                case GIT_EAMBIGUOUS.rawValue:\n                    throw GitError.ambiguous(msg: \"HEAD -> target\")\n                case GIT_ENOTFOUND.rawValue:\n                    throw GitError.notFound(ref: \"HEAD\")\n            default:\n                throw gitUnknownError(\"HEAD -> target\", code: error)\n            }\n        }\n        \n        // Read oid\n        let gOid = git_commit_id(target.pointee)\n        if (gOid == nil) {\n            throw GitError.notFound(ref: \"nil\")\n        }\n        \n        // Set target\n        return Commit(repository: repository, pointer: target, oid: OID(withGitOid: gOid!.pointee))\n    }\n    \n    /// Update target commit\n    ///\n    /// - parameter commit:  New target commit\n    /// - parameter message: log message\n    ///\n    /// - throws: GitError\n    public func updateTargetCommit(commit: Commit, message: String) throws {\n        \n        let reference = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        defer {\n            if let ptr = reference.pointee {\n                git_reference_free(ptr)\n            }\n            reference.deinitialize(count: 1)\n            reference.deallocate()\n        }\n        \n        var oid = commit.oid\n        if (refType == ReferenceType.oid) {\n            let error = git_reference_set_target(reference, self.pointer.pointee, &oid.oid, message)\n            if (error != 0) {\n                switch error {\n                case GIT_EMODIFIED.rawValue:\n                    throw GitError.modifiedElsewhere(ref: name)\n                default:\n                    throw gitUnknownError(\"Unable to set target\", code: error)\n                }\n            }\n            \n        } else {\n            guard let sha = oid.sha() else {\n                throw GitError.invalidSHA(sha: \"nil\")\n            }\n            let error = git_reference_symbolic_set_target(reference, self.pointer.pointee, sha, message)\n            if (error != 0) {\n                let msg = \"Unable to set (symbolic) target\"\n                switch error {\n                case GIT_EINVALIDSPEC.rawValue:\n                    throw GitError.invalidSpec(spec: name)\n                default:\n                    throw gitUnknownError(msg, code: error)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/reference/Reference.swift",
    "content": "//\n//  Reference.swift\n//  Git2Swift\n//\n//  Created by Dami on 31/07/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Refrence type\n///\n/// - invalid:  Invalid reference\n/// - oid:      Reference OID\n/// - symbolic: Reference an other reference\npublic enum ReferenceType {\n    case invalid\n    case oid\n    case symbolic\n}\n\n/// Git2Swift reference type from libgit2\n///\n/// - parameter type: libgit2 type\n///\n/// - returns: Swift2Git type\nfunc git_reference_type(_ type: git_reference_t) -> ReferenceType {\n    switch type.rawValue {\n    case GIT_REFERENCE_DIRECT.rawValue :\n        return .oid\n    case GIT_REFERENCE_SYMBOLIC.rawValue:\n        return .symbolic\n    default:\n        return .invalid\n    }\n}\n\n/// Fonction to retrieve tree from refrence\n///\n/// - parameter repository:    Git2Swift repository\n/// - parameter referenceName: Reference name\n///\n/// - throws: GitError\n///\n/// - returns: Git2Swift tree\nfunc git_revTree(repository: Repository, referenceName: String) throws -> Tree {\n    \n    // Find branch tree\n    let revTree = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n    \n    // Find tree\n    let error = git_revparse_single(revTree, repository.pointer.pointee, referenceName);\n    if (error != 0) {\n        throw gitUnknownError(\"Unable to find rev-tree for '\\(referenceName)'\", code: error)\n    }\n    \n    return Tree(repository: repository, tree: revTree)\n}\n\n/// Git2Swift reference\npublic class Reference {\n    \n    /// Reference name\n    public let name : String\n    \n    /// Git2Swift reference type\n    public let refType : ReferenceType\n    \n    /// Git2Swift Repository\n    public let repository : Repository\n    \n    /// Libgit2 refrence pointer\n    internal let pointer : UnsafeMutablePointer<OpaquePointer?>\n    \n    /// Target reference\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Swift2Git refrence\n    public func targetReference() throws -> Reference {\n        switch refType {\n        case .symbolic:\n            return try repository.referenceLookup(name: git_string_converter(git_reference_symbolic_target(pointer.pointee)))\n        case .oid:\n            throw GitError.invalidReference(msg: \"Unable to dereference symbolic target\", type: .symbolic)\n        default:\n            throw GitError.unknownReference(msg: \"Unable to dereference symbolic target\")\n        }\n    }\n    \n    /// Find rev tree\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Tree\n    public func revTree() throws -> Tree {\n        return try git_revTree(repository: repository, referenceName: name)\n    }\n    \n    /// Create revision walker from this reference\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Revision walker\n    public func revWalker() throws -> RevisionIterator {\n        \n        // Create walker\n        let walker = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Init walker\n        var error = git_revwalk_new(walker, repository.pointer.pointee)\n        guard error == 0 else {\n            walker.deinitialize(count: 1)\n            walker.deallocate()\n            throw gitUnknownError(\"Unable to create rev walker for \\(name)\", code: error)\n        }\n        \n        // Push reference\n        error = git_revwalk_push_ref(walker.pointee, name)\n        guard error == 0 else {\n            walker.deinitialize(count: 1)\n            walker.deallocate()\n            throw gitUnknownError(\"Unable to set rev walker for \\(name)\", code: error)\n        }\n        \n        return RevisionIterator(repository: repository, pointer: walker)\n    }\n    \n    /// Constructor with repository, name and pointer\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter name:       Reference name\n    /// - parameter pointer:    libgit2 reference pointer\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Git2Swift reference\n    init(repository: Repository, name: String, pointer: UnsafeMutablePointer<OpaquePointer?>) throws {\n        self.repository = repository\n        self.pointer = pointer\n        self.name = git_string_converter(git_reference_name(pointer.pointee))\n        self.refType = git_reference_type(git_reference_type(pointer.pointee))\n    }\n\n    /// Constructor with repository and pointer\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter pointer:    libgit2 reference pointer\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Git2Swift reference\n    convenience init(repository: Repository, pointer: UnsafeMutablePointer<OpaquePointer?>) throws {\n        // Finde name\n        let str = git_reference_name(pointer.pointee)\n        guard let name = str else {\n            throw GitError.notFound(ref: \"Unknown\")\n        }\n        try self.init(repository: repository, name: git_string_converter(name), pointer: pointer)\n    }\n    \n    deinit {\n        if let ptr = pointer.pointee {\n            git_reference_free(ptr)\n        }\n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/remote/Remote.swift",
    "content": "//\n//  Remote.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 17/08/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Define remote repository.\npublic class Remote {\n    \n    /// Repository\n    let repository : Repository\n    \n    /// Remote name\n    public let name: String\n    \n    /// Remote pointer\n    internal let pointer: UnsafeMutablePointer<OpaquePointer?>\n    \n    /// Constructor with repository, pointer and name\n    ///\n    /// - parameter repository: repository\n    /// - parameter pointer:    pointer\n    /// - parameter name:       name\n    ///\n    /// - returns: Remote\n    init(repository: Repository, pointer: UnsafeMutablePointer<OpaquePointer?>, name: String) {\n        self.repository = repository\n        self.name = name\n        self.pointer = pointer\n    }\n    \n    \n    /// Fetch all remote branches\n    /// - parameter authentication: Authentication callback, maybe nil\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    public func fetch(authentication: AuthenticationHandler? = nil, progress: Progress? = nil) throws {\n        \n        let foPointer = UnsafeMutablePointer<git_fetch_options>.allocate(capacity: 1)\n        git_fetch_init_options(foPointer, UInt32(GIT_FETCH_OPTIONS_VERSION))\n\n        var fetchOptions = foPointer.move()\n        foPointer.deallocate()\n//        \n//        // Define fetch options\n//        var fetchOptions = git_fetch_options()\n        fetchOptions.version = 1\n        fetchOptions.callbacks.version = 1\n        fetchOptions.prune = GIT_FETCH_PRUNE_UNSPECIFIED\n        fetchOptions.update_fetchhead = 1\n        \n        // Set progress\n        fetchOptions.callbacks.transfer_progress = ProgressDelegate.fetchProgressCallback\n        \n        \n        // test authentication\n        if (authentication != nil) {\n            setAuthenticationCallback(&fetchOptions.callbacks, authentication: authentication)\n        }\n        \n        // Fetch remote\n        let error = git_remote_fetch(pointer.pointee, nil, &fetchOptions, nil)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to fetch from remote\", code: error)\n        }\n    }\n    \n    /// Pull all remote branches\n    ///\n    /// - parameter signature: Signature\n    /// - parameter remote: Remote branch to merge\n    /// - parameter authentication: Authentication callback, maybe nil\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    public func pull(signature: Signature, remote: Branch? = nil,\n                     authentication: AuthenticationHandler? = nil,\n                     progress: Progress? = nil, project: Project? = nil) throws {\n        \n        // Fetch remote\n        try fetch(authentication: authentication, progress: progress)\n        \n        let remoteBranch: Branch\n        \n        if (remote == nil) {\n            \n            // Find spec informations\n            let specInfo = try Branch.getSpecInfo(spec: repository.head().targetReference().name)\n            \n            // Find remote branch\n            remoteBranch = try repository.branches.get(name: \"\\(name)/\\(specInfo.name)\", type: .remote)\n        } else {\n            remoteBranch = remote!\n        }\n        \n        // Merge head\n        let head = try repository.head()\n        _ = try head.merge(branch: remoteBranch, signature: signature, progress: progress)\n    }\n    \n    /// Push a branch to remote\n    ///\n    /// - parameter local:  Local branch\n    /// - parameter remote: Remote branch or nil for same remote branch\n    /// - parameter authentication: Authentication callback, maybe nil\n    /// - parameter progress: Progress object\n    ///\n    /// - throws: GitError\n    public func push(local: Branch, remote: Branch? = nil,\n                     authentication: AuthenticationHandler? = nil,\n                     progress: Progress? = nil) throws {\n   \n        let puPointer = UnsafeMutablePointer<git_push_options>.allocate(capacity: 1)\n        git_push_init_options(puPointer, UInt32(GIT_PUSH_OPTIONS_VERSION))\n\n        var pushOptions = puPointer.move()\n        pushOptions.pb_parallelism = 8\n        \n        puPointer.deallocate()\n        \n        // FIXME Use progress\n        \n//        // Set options\n//        var opts = git_push_options()\n//        opts.version = 1\n//        opts.callbacks.version = 1\n        \n        // Set progress\n        pushOptions.callbacks.push_transfer_progress = ProgressDelegate.pushProgressCallback\n        pushOptions.callbacks.pack_progress = ProgressDelegate.packBuilderCallback\n        \n        // test authentication\n        if (authentication != nil) {\n            setAuthenticationCallback(&pushOptions.callbacks, authentication: authentication)\n        }\n        \n        // Create refspec\n        let refspec : String\n        if (remote == nil) {\n            refspec = \"\\(local.name):\\(local.name)\"\n        } else {\n            refspec = \"\\(local.name):refs/heads/\\(remote!.shortName)\"\n        }\n        \n        // Create refspecs\n        let wrapper = StringWrapper(withStrs: [refspec])\n        \n        // Create str array\n        var refspecs = git_strarray(strings: wrapper.pointer, count:  wrapper.count)\n\n        let error = git_remote_push(pointer.pointee, &refspecs, &pushOptions);\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to push to remote\", code: error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/remote/Remotes.swift",
    "content": "//\n//  Remotes.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 17/08/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Manage remote repository\npublic class Remotes {\n    \n    /// Repository\n    private let repository : Repository\n    \n    /// Constructor with repository manager\n    ///\n    /// - parameter repository: Repository\n    ///\n    /// - returns: Remotes\n    init(repository: Repository) {\n        self.repository = repository\n    }\n    \n    /// Find remote names\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: String array\n    public func remoteNames() throws -> [String] {\n        \n        // Store remote names\n        var remotes = git_strarray()\n        \n        // List remotes\n        let error = git_remote_list(&remotes, repository.pointer.pointee)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to list remotes\", code: error)\n        }\n        \n        return git_strarray_to_strings(&remotes)\n    }\n    \n    /// Find remote by name.\n    ///\n    /// - parameter name: Remote name\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Remote\n    public func get(remoteName: String) throws -> Remote {\n        \n        // Remote pointer\n        let remote = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Lookup remote\n        let error = git_remote_lookup(remote, repository.pointer.pointee, remoteName)\n        if (error != 0) {\n            \n            remote.deinitialize(count: 1)\n            remote.deallocate()\n            \n            switch(error) {\n            case GIT_ENOTFOUND.rawValue:\n                throw GitError.notFound(ref: remoteName)\n            case GIT_EINVALIDSPEC.rawValue:\n                throw GitError.invalidSpec(spec: remoteName)\n            default:\n                throw gitUnknownError(\"Unable to lookup remote \\(remoteName)\", code: error)\n            }\n        }\n        \n        return Remote(repository: repository, pointer: remote, name: remoteName)\n    }\n    \n    \n    /// Create remote\n    ///\n    /// - parameter name: Remote name\n    /// - parameter url:  URL\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Remote\n    public func create(name: String, url: URL) throws -> Remote {\n        \n        // Remote pointer\n        let remote = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Create remote\n        let error = git_remote_create(remote, repository.pointer.pointee,\n                                      name, url.path)\n        if (error != 0) {\n            switch(error) {\n            case GIT_EINVALIDSPEC.rawValue:\n                throw GitError.invalidSpec(spec: name)\n            case GIT_EEXISTS.rawValue:\n                throw GitError.alreadyExists(ref: name)\n            default:\n                throw gitUnknownError(\"Unable to create remote \\(name)\",\n                    code: error)\n            }\n        }\n        \n        return Remote(repository: repository, pointer: remote, name: name)\n    }\n    \n    \n    /// Remove remote\n    ///\n    /// - parameter name: Remote name\n    ///\n    /// - throws: GitError\n    public func remove(name: String) throws {\n        \n        // remove remote\n        let error = git_remote_delete(repository.pointer.pointee, name)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to remove remote \\(name)\",\n                code: error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/repository/Repository+Commit.swift",
    "content": "//\n//  Repository+Commit.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 11/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n// MARK: - Repository extension for commit\nextension Repository {\n\n    /// Internal create commit from libgit2 index\n    ///\n    /// - parameter idx:       libgit2 index pointer\n    /// - parameter parent:    Parent commite\n    /// - parameter msg:       Message commit\n    /// - parameter signature: Commit signature\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Commit\n    internal func createCommit(idx: UnsafeMutablePointer<OpaquePointer?>,\n                               parent: Commit?,\n                               msg: String,\n                               signature: Signature) throws -> Commit {\n        \n        // Create tree index\n        var tree_id = git_oid()\n        let error = git_index_write_tree(&tree_id, idx.pointee)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to write index to tree\", code: error)\n        }\n        \n        // Tree oid\n        let oid = OID(withGitOid: tree_id)\n        \n        // Lookup tree\n        let tree = try treeLookup(oid: oid)\n        \n        let parents : [Commit]\n        if (parent == nil) {\n            parents = []\n        } else {\n            parents = [parent!]\n        }\n        \n        return try createCommit(tree: tree, parents: parents, msg: msg, signature: signature)\n    }\n    \n    /// Internal create commit with tree\n    ///\n    /// - parameter tree:      Tree\n    /// - parameter parents:   Parent commit\n    /// - parameter msg:       Commit message\n    /// - parameter signature: Commit signature\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Commit\n    internal func createCommit(tree: Tree,\n                               parents: [Commit],\n                               msg: String,\n                               signature: Signature) throws -> Commit {\n        \n        // Create signature\n        let sig = UnsafeMutablePointer<UnsafeMutablePointer<git_signature>?>.allocate(capacity: 1)\n        defer {\n            \n            if let ptr = sig.pointee {\n                git_signature_free(ptr)\n            }\n            \n            sig.deinitialize(count: 1)\n            sig.deallocate()\n        }\n        \n        // Create now signature\n        try signature.now(sig: sig)\n        \n        // Find parents\n        let parentsCount = parents.count\n        \n        \n        var parentsPtr : UnsafeMutablePointer<OpaquePointer?>? = nil\n        defer {\n            if let ptr = parentsPtr {\n                ptr.deinitialize(count: 1)\n                ptr.deallocate()\n            }\n        }\n        \n        if (parentsCount > 0) {\n            parentsPtr = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: parentsCount)\n            \n            var it = parentsPtr!\n            for parent in parents {\n                it.initialize(to: parent.pointer.pointee)\n                it = it.successor()\n            }\n        }\n        \n        // Create empty commit\n        var commit_id = git_oid()\n        let error = git_commit_create(&commit_id,\n                                  pointer.pointee, \"HEAD\",\n                                  sig.pointee, sig.pointee,\n                                  \"UTF-8\", msg,\n                                  tree.tree.pointee,\n                                  parentsCount,\n                                  parentsPtr)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to create commit\", code: error)\n        }\n        \n        return try commitLookup(oid: OID(withGitOid: commit_id))\n    }\n    \n    /// Write index and return tree\n    ///\n    /// - parameter index: Git2Swift index\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Tree\n    public func write(index: Index) throws -> Tree {\n        \n        var gOid = git_oid()\n        \n        // Write tree to index\n        let error = git_index_write_tree_to(&gOid, index.idx.pointee, pointer.pointee)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to write index to repository\", code: error)\n        }\n        \n        return try treeLookup(oid: OID(withGitOid: gOid))\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/repository/Repository+Lookup.swift",
    "content": "//\n//  Repository+Lookup.swift\n//  Git2Swift\n//\n//  Created by Dami on 31/07/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Git reference lookup\n///\n/// - parameter repository: Libgit2 repository pointer\n/// - parameter name:       Reference name\n///\n/// - throws: GitError\n///\n/// - returns: Libgit2 reference pointer\ninternal func gitReferenceLookup(repository: UnsafeMutablePointer<OpaquePointer?>,\n                                 name: String) throws -> UnsafeMutablePointer<OpaquePointer?> {\n    \n    // Find reference pointer\n    let reference = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n    \n    // Lookup reference\n    let error = git_reference_lookup(reference, repository.pointee, name)\n    if (error != 0) {\n        \n        reference.deinitialize(count: 1)\n        reference.deallocate()\n        \n        // 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code.\n        switch (error) {\n        case GIT_ENOTFOUND.rawValue :\n            throw GitError.notFound(ref: name)\n        case GIT_EINVALIDSPEC.rawValue:\n            throw GitError.invalidSpec(spec: name)\n        default:\n            throw gitUnknownError(\"Unable to lookup reference \\(name)\", code: error)\n        }\n    }\n    \n    return reference\n}\n\n// MARK: - Repository extension for lookup\nextension Repository {\n\n    /// Lookup reference\n    ///\n    /// - parameter name: Refrence name\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Refernce\n    public func referenceLookup(name: String) throws -> Reference {\n        return try Reference(repository: self, name: name, pointer: try gitReferenceLookup(repository: pointer, name: name))\n    }\n\n    /// Lookup a tree\n    ///\n    /// - parameter tree_id: Tree OID\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Tree\n    public func treeLookup(oid tree_id: OID) throws -> Tree {\n        \n        // Create tree\n        let tree : UnsafeMutablePointer<OpaquePointer?> = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        var oid = tree_id.oid\n        let error = git_tree_lookup(tree, pointer.pointee, &oid)\n        if (error != 0) {\n            \n            tree.deinitialize(count: 1)\n            tree.deallocate()\n            \n            throw gitUnknownError(\"Unable to lookup tree\", code: error)\n        }\n        \n        return Tree(repository: self, tree: tree)\n    }\n    \n    /// Lookup a commit\n    ///\n    /// - parameter commit_id: OID\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Commit\n    public func commitLookup(oid commit_id: OID) throws -> Commit {\n        \n        // Create tree\n        let commit : UnsafeMutablePointer<OpaquePointer?> = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        var oid = commit_id.oid\n        let error = git_commit_lookup(commit, pointer.pointee, &oid)\n        if (error != 0) {\n            \n            commit.deinitialize(count: 1)\n            commit.deallocate()\n            \n            throw gitUnknownError(\"Unable to lookup commit\", code: error)\n        }\n        \n        return Commit(repository: self, pointer: commit, oid: OID(withGitOid: oid))\n    }\n\n    /// Lookup a blob\n    ///\n    /// - parameter blob_id: OID\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Blob\n    public func blobLookup(oid blob_id: OID) throws -> Blob {\n\n        // Create tree\n        let blob : UnsafeMutablePointer<OpaquePointer?> = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n\n        var oid = blob_id.oid\n        let error = git_blob_lookup(blob, pointer.pointee, &oid)\n        if error != 0 {\n\n            blob.deinitialize(count: 1)\n            blob.deallocate()\n\n            throw gitUnknownError(\"Unable to lookup blob\", code: error)\n        }\n\n        return Blob(blob: blob)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/repository/Repository+Open.swift",
    "content": "//\n//  Repository+Init.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 31/07/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\n// MARK: - Repository extension for openning\nextension Repository {\n    \n    /// Constructor with URL and manager\n    ///\n    /// - parameter url:     Repository URL\n    /// - parameter manager: Repository manager\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Repository\n    convenience init(openAt url: URL, manager: RepositoryManager) throws {\n        \n        // Repository pointer\n        let repository = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Init repo\n        let error = git_repository_open(repository, url.path)\n        if (error != 0) {\n            repository.deinitialize(count: 1)\n            repository.deallocate()\n            throw gitUnknownError(\"Unable to open repository, url: \\(url)\", code: error)\n        }\n        \n        self.init(at: url, manager: manager, repository: repository)\n    }\n    \n    /// Init new repository at URL\n    ///\n    /// - parameter url:       Repository URL\n    /// - parameter manager:   Repository manager\n    /// - parameter signature: Initial commiter\n    /// - parameter bare:      Create bare repository\n    /// - parameter shared:    Share repository from users\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Repository\n    convenience init(initAt url: URL, manager: RepositoryManager,\n                     signature: Signature,\n                     bare: Bool,\n                     shared : Bool) throws {\n        \n        // Repository pointer\n        let repository = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Options\n        var options = git_repository_init_options()\n        \n        options.version = 1\n        \n        if bare {\n            // Set bare\n            options.flags = GIT_REPOSITORY_INIT_BARE.rawValue\n        }\n        \n        if shared {\n            // Used shared\n            options.mode = GIT_REPOSITORY_INIT_SHARED_ALL.rawValue\n        }\n        \n        // Init repo\n        let error = git_repository_init_ext(repository, url.path, &options)\n        //let error = git_repository_init(repository, url.path, bare ? 1 : 0)\n        if (error != 0) {\n            repository.deinitialize(count: 1)\n            repository.deallocate()\n            throw gitUnknownError(\"Unable to init repository, url: \\(url) (bare \\(bare))\", code: error)\n        }\n        \n        self.init(at: url, manager: manager, repository: repository)\n    }\n    \n    /// Clone a repository at URL\n    ///\n    /// - parameter url:            URL to remote git\n    /// - parameter at:             URL to local respository\n    /// - parameter manager:        Repository manager\n    /// - parameter authentication: Authentication\n    /// - parameter progress:       Object containing progress callbacks\n    ///\n    /// - throws: GitError wrapping libgit2 error\n    ///\n    /// - returns: Repository\n    convenience init(cloneFrom url: URL,\n                     at: URL,\n                     manager: RepositoryManager,\n                     authentication: AuthenticationHandler? = nil,\n                     progress: Progress? = nil) throws {\n        \n        // Repository pointer\n        let repository = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        var opts = git_clone_options()\n        opts.version = 1\n        \n        // General checkouts\n        opts.checkout_opts.version = 1\n        opts.checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE.rawValue\n        opts.checkout_opts.progress_cb = ProgressDelegate.checkoutProgressCallback\n        \n        // General fetchs\n        opts.fetch_opts.version = 1\n        opts.fetch_opts.prune = GIT_FETCH_PRUNE_UNSPECIFIED\n        opts.fetch_opts.update_fetchhead = 1\n        opts.fetch_opts.callbacks.version = 1\n        opts.fetch_opts.proxy_opts.version = 1\n\n        // Set fetch progress\n        opts.fetch_opts.callbacks.transfer_progress = ProgressDelegate.fetchProgressCallback\n        \n        // Check handler\n        if (authentication != nil) {\n            setAuthenticationCallback(&opts.fetch_opts.callbacks, authentication: authentication!)\n        }\n        \n        // Clone repository\n        let error = git_clone(repository, url.absoluteString, at.path, &opts)\n        if (error != 0) {\n            repository.deinitialize(count: 1)\n            repository.deallocate()\n            throw gitUnknownError(\"Unable to clone repository, from \\(url) to: \\(at)\", code: error)\n        }\n        \n        self.init(at: at, manager: manager, repository: repository)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/repository/Repository.swift",
    "content": "//\n//  Repository.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 31/07/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\n/// Repository wrapping a libgit2 repository\npublic class Repository {\n    \n    /// Repository URL\n    public let url : URL\n    \n    /// Repository manager\n    private let manager : RepositoryManager\n    \n    /// Libgit2 pointer to repository\n    internal let pointer : UnsafeMutablePointer<OpaquePointer?>\n    \n    /// Branches manager\n    lazy public private(set) var branches : Branches = {\n        Branches(repository: self)\n    } ()\n    \n    /// Statuses manager\n    lazy public private(set) var statuses : Statuses = {\n        Statuses(repository: self)\n    } ()\n    \n    /// Access tags manager\n    lazy public private(set) var tags : Tags = {\n        Tags(repository: self)\n    } ()\n    \n    lazy public private(set) var remotes : Remotes = {\n        Remotes(repository: self)\n    } ()\n    \n    /// Constructor with repository manager and libgit2 repository\n    ///\n    /// - parameter url:        URL repository\n    /// - parameter manager:    Repository manager\n    /// - parameter repository: Libgit2 repository\n    ///\n    /// - returns: Repository\n    init(at url: URL, manager: RepositoryManager, repository: UnsafeMutablePointer<OpaquePointer?>) {\n        self.url = url\n        self.manager = manager\n        self.pointer = repository\n    }\n    \n    deinit {\n        if let ptr = pointer.pointee {\n            git_repository_free(ptr)\n        }\n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n    \n    /// Retrieve head\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Head\n    public func head() throws -> Head {\n        // Create head\n        return try Head(repository: self, name: \"HEAD\", pointer: try gitReferenceLookup(repository: pointer, name: \"HEAD\"))\n    }\n    \n    /// Get the index for the repo. The caller is responsible for freeing the index.\n    func unsafeIndex() -> Result<OpaquePointer, NSError> {\n        guard let ptr = pointer.pointee else { return .failure(NSError()) }\n        \n        var index: OpaquePointer? = nil\n        let result = git_repository_index(&index, ptr)\n        guard result == GIT_OK.rawValue && index != nil else {\n            let err = NSError(gitError: result, pointOfFailure: \"git_repository_index\")\n            return .failure(err)\n        }\n        return .success(index!)\n    }\n    \n    public func add(path: String) -> Result<(), NSError> {\n        guard pointer.pointee != nil else { return .failure(NSError()) }\n        \n        var dirPointer = UnsafeMutablePointer<Int8>(mutating: (path as NSString).utf8String)\n        var paths = withUnsafeMutablePointer(to: &dirPointer) {\n            git_strarray(strings: $0, count: 1)\n        }\n        return unsafeIndex().flatMap { index in\n            defer { git_index_free(index) }\n            let addResult = git_index_add_all(index, &paths, 0, nil, nil)\n            guard addResult == GIT_OK.rawValue else {\n                return .failure(NSError(gitError: addResult, pointOfFailure: \"git_index_add_all\"))\n            }\n            // write index to disk\n            let writeResult = git_index_write(index)\n            guard writeResult == GIT_OK.rawValue else {\n                return .failure(NSError(gitError: writeResult, pointOfFailure: \"git_index_write\"))\n            }\n            return .success(())\n        }\n    }\n    \n    public func addRemoteOrigin(path: String) {\n        let result = git_remote_set_url(self.pointer.pointee, \"origin\", path)\n        \n        if result != GIT_OK.rawValue {\n            print(\"Remote origin error\")\n        }\n    }\n    \n    public func setWorkTree(path: String) {\n        var configPointer: OpaquePointer? = nil\n        \n        var result = git_repository_config(&configPointer, self.pointer.pointee);\n        if result != GIT_OK.rawValue {\n            print(\"Config opening error\")\n        }\n        \n        result = git_config_set_string(configPointer, \"core.worktree\", path);\n        if result != GIT_OK.rawValue {\n            print(\"Core config error\")\n        }\n    }\n    \n    public func checkout(commit: Commit, path: String) throws {\n        var dirPointer = UnsafeMutablePointer<Int8>(mutating: (path as NSString).utf8String)\n        let paths = withUnsafeMutablePointer(to: &dirPointer) {\n            git_strarray(strings: $0, count: 1)\n        }\n        \n        var opts = git_checkout_options()\n        opts.version = 1\n        opts.paths = paths\n        opts.checkout_strategy = GIT_CHECKOUT_FORCE.rawValue\n        \n        // Checkout new tree\n        let error = git_checkout_tree(self.pointer.pointee, commit.pointer.pointee, &opts);\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to checkout commit path\", code: error)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/repository/RepositoryManager.swift",
    "content": "//\n//  RepositoryManager.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 31/07/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\nimport Cgit2\n\n/// Repository manager\n///\n/// Use to init and clear libgit2\npublic class RepositoryManager {\n    \n    /// Repository instance count\n    private static var count : Int = 0\n    \n    /// Lock manager\n    ///\n    /// Used to lock manager when updating repository counter\n    private static var lock = NSLock()\n    \n    /// Find config manager\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: ConfigManager\n    public func configManager() throws -> ConfigManager {\n        return try ConfigManager()\n    }\n    \n    /// Constructor\n    ///\n    /// If there is the first contruction, init libgit2 librairy\n    public init() {\n        \n        // Lock\n        RepositoryManager.lock.lock()\n        \n        // Test init lib\n        if (RepositoryManager.count == 0) {\n            \n            // Init git\n            git_libgit2_init()\n        }\n        \n        RepositoryManager.count += 1\n        \n        // Lock\n        RepositoryManager.lock.unlock()\n    }\n    \n    /// If there are only one repository, free libgit2 library\n    deinit {\n        \n        // Lock\n        RepositoryManager.lock.lock()\n        \n        RepositoryManager.count -= 1\n        if (RepositoryManager.count == 0) {\n            // Shutdown git\n            git_libgit2_shutdown()\n        }\n        \n        // Lock\n        RepositoryManager.lock.unlock()\n    }\n    \n    /// Init new repository at URL\n    ///\n    /// - parameter url:       Repository URL\n    /// - parameter signature: Init signature\n    /// - parameter bare:      Create a bare repository\n    /// - parameter shared:    Share repository from users\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Repository\n    public func initRepository(at url: URL, signature: Signature, bare: Bool = false, shared : Bool = false) throws -> Repository {\n        \n        // Create repository\n        let repository =  try Repository(initAt: url, manager: self, signature: signature, bare: bare, shared: shared)\n        \n        // Create initial commit\n        _ = try repository.head().index().createInitialCommit(msg: \"Initial commit\", signature: signature)\n        \n        return repository\n    }\n    \n    /// Open repository at URL\n    ///\n    /// - parameter url: Repository URL\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Repository\n    public func openRepository(at url: URL) throws -> Repository {\n        \n        // Open repository\n        return try Repository(openAt: url, manager: self)\n    }\n    \n    /// Clone repository\n    ///\n    /// - parameter remoteUrl: Remote URL\n    /// - parameter url:       Repository URL\n    /// - parameter progress: Progress object\n    /// - parameter authentication: Authentication handler\n    ///\n    /// - throws: GitError wrapping libgit2 error\n    ///\n    /// - returns: Repository\n    public func cloneRepository(from remoteUrl: URL,\n                                at url: URL,\n                                progress: Progress? = nil,\n                                authentication: AuthenticationHandler? = nil) throws -> Repository {\n        \n        // Open repository\n        return try Repository(cloneFrom: remoteUrl, at: url, manager: self, authentication: authentication, progress: progress)\n    }\n\n    /// Find system signature\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Signature\n    public func systemSignature() throws -> Signature {\n        let configManager = try self.configManager()\n        \n        let systemName = try configManager.readString(key: \"user.name\")\n        let systemEmail = try configManager.readString(key: \"user.email\")\n        \n        let name : String\n        if systemName.isEmpty {\n            name = \"Unknown\"\n        } else {\n            name = systemName\n        }\n        \n        let email : String\n        if systemEmail.isEmpty {\n            email = \"unknown@unknown.fr\"\n        } else {\n            email = systemEmail\n        }\n        \n        return Signature(name: name, email: email)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/revision/FileHistoryIterator.swift",
    "content": "//\n//  FileRevLog.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 14/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Iterate to file history\npublic class FileHistoryIterator: RevisionIterator {\n    \n    // File path\n    private let path: String\n    private let project: Project?\n    \n    // Previous commit oid\n    private var previousOid: OID? = nil\n    private var lastFetchedOid: OID? = nil\n    \n    public init(repository: Repository, path: String, refspec: String = \"HEAD\", project: Project? = nil) throws {\n        self.project = project\n        \n        // Set path\n        self.path = path\n        \n        // Create walker\n        let walker = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Init walker\n        var error = git_revwalk_new(walker, repository.pointer.pointee)\n        guard error == 0 else {\n            walker.deinitialize(count: 1)\n            walker.deallocate()\n            throw gitUnknownError(\"Unable to create rev walker for '\\(refspec)'\", code: error)\n        }\n        \n        // Push reference\n        error = git_revwalk_push_ref(walker.pointee, refspec)\n        guard error == 0 else {\n            walker.deinitialize(count: 1)\n            walker.deallocate()\n            throw gitUnknownError(\"Unable to set rev walker for '\\(refspec)'\", code: error)\n        }\n        \n        super.init(repository: repository, pointer: walker)\n    }\n    \n    \n    /// Next value\n    ///\n    /// - returns: Next value or nil\n    public override func next() -> OID? {\n        \n        guard let oid = super.next() else {\n            return nil\n        }\n                \n        lastFetchedOid = oid\n        \n        do {\n            // Find commit\n            let currentCommit = try repository.commitLookup(oid: oid)\n            \n            // Find parent entry\n            let tree = try currentCommit.tree()\n            \n            // Find current entry\n            let entry = try tree.entry(byPath: path)\n            if (entry == nil) {\n                return diffPrev(tree: tree, oid: oid)\n            }\n            \n            // Test previous\n            if (previousOid == nil) {\n                previousOid = oid\n                \n                return next()\n            } else {\n                return diffPrev(tree: tree, oid: oid)\n            }\n            \n        } catch {\n            NSLog(\"Unable to find next OID \\(error)\")\n        }\n        \n        return nil\n    }\n    \n    public func walkCacheDiff() {\n        var gitOid = git_oid()\n        var oids = [OID]()\n\n        while git_revwalk_next(&gitOid, pointer.pointee) == 0 {\n            let oid = OID(withGitOid: gitOid)\n            oids.append(oid)\n        }\n\n        for oid in oids {\n            do {\n                guard let pOid = previousOid else {\n                    previousOid = oid\n                    continue\n                }\n\n                let currentCommit = try repository.commitLookup(oid: oid)\n                let tree = try currentCommit.tree()\n\n                let previousCommit = try repository.commitLookup(oid: pOid)\n                let previousTree = try previousCommit.tree()\n\n                let diff = try previousTree.diff(other: tree)\n                _ = diff.find(byPath: path, oid: oid, project: project)\n            } catch {/*_*/}\n\n            previousOid = oid\n        }\n    }\n    \n    private func diffPrev(tree: Tree, oid: OID) -> OID? {\n        guard let pOid = previousOid else { return next() }\n        \n        do {\n            // Find commit\n            let previousCommit = try repository.commitLookup(oid: pOid)\n            \n            // Find parent entry\n            let previousTree = try previousCommit.tree()\n            \n            // Find diff\n            let diff = try previousTree.diff(other: tree)\n            \n            // Find\n            if !diff.find(byPath: path, oid: oid, project: project) {\n                \n                // Set previous and find next\n                previousOid = oid\n                \n                return next()\n            } else {\n                \n                // Save previousOid\n                let validOid = previousOid\n                \n                // Set previousOid\n                previousOid = oid\n                \n                return validOid;\n            }\n        } catch {\n            return nil\n        }\n    }\n    \n    public func getLast() -> OID? {\n        return lastFetchedOid\n    }\n    \n    public func checkFirstCommit() -> Bool {\n        guard let oid = lastFetchedOid else { return false }\n        \n        do {\n            let currentCommit = try repository.commitLookup(oid: oid)\n            let tree = try currentCommit.tree()\n            let entry = try tree.entry(byPath: path)\n            if entry != nil {\n                return true\n            }\n        } catch {/*_*/}\n        \n        return false\n    }\n\n    public func walk() -> [OID] {\n        var gitOid = git_oid()\n        var oids = [OID]()\n        var oidsValid = [OID]()\n\n        while git_revwalk_next(&gitOid, pointer.pointee) == 0 {\n            let oid = OID(withGitOid: gitOid)\n            oids.append(oid)\n        }\n\n        for oid in oids {\n            if let oid = getMatchedOid(oid: oid) {\n                oidsValid.append(oid)\n            }\n        }\n\n        return oidsValid\n    }\n\n    public func getMatchedOid(oid: OID) -> OID? {\n        lastFetchedOid = oid\n\n        do {\n            // Find commit\n            let currentCommit = try repository.commitLookup(oid: oid)\n\n            // Find parent entry\n            let tree = try currentCommit.tree()\n\n            // Find current entry\n            let entry = try tree.entry(byPath: path)\n            if (entry == nil) {\n                return diff(tree: tree, oid: oid)\n            }\n\n            // Test previous\n            if (previousOid == nil) {\n                previousOid = oid\n\n                return nil\n            } else {\n                return diff(tree: tree, oid: oid)\n            }\n\n        } catch {\n            NSLog(\"Unable to find next OID \\(error)\")\n        }\n\n        return nil\n    }\n\n    private func diff(tree: Tree, oid: OID) -> OID? {\n        guard let pOid = previousOid else { return nil }\n\n        do {\n            // Find commit\n            let previousCommit = try repository.commitLookup(oid: pOid)\n\n            // Find parent entry\n            let previousTree = try previousCommit.tree()\n\n            // Find diff\n            let diff = try previousTree.diff(other: tree)\n\n            // Find\n            if !diff.find(byPath: path, oid: oid, project: project) {\n\n                // Set previous and find next\n                previousOid = oid\n\n                return nil\n            } else {\n\n                // Save previousOid\n                let validOid = previousOid\n\n                // Set previousOid\n                previousOid = oid\n\n                return validOid;\n            }\n        } catch {\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/revision/RevisionIterator.swift",
    "content": "//\n//  RevisionIterator.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 14/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Revision iterator\n///\n/// Iterate over commits\n///\npublic class RevisionIterator : Sequence, IteratorProtocol {\n    \n    /// Repository\n    let repository: Repository\n    \n    /// Libgit2 pointer\n    internal let pointer: UnsafeMutablePointer<OpaquePointer?>\n    \n    init(repository: Repository,\n         pointer: UnsafeMutablePointer<OpaquePointer?>) {\n        self.repository = repository\n        self.pointer = pointer\n    }\n    \n    deinit {\n        if let ptr = pointer.pointee {\n            git_revwalk_free(ptr)\n        }\n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n    \n    /// Find next oid\n    ///\n    /// - returns: Next branch or nil for the end\n    public func next() -> OID? {\n        \n        var gitOid = git_oid()\n        \n        if git_revwalk_next(&gitOid, pointer.pointee) == 0 {\n            return OID(withGitOid: gitOid)\n        } else {\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/status/Status.swift",
    "content": "//\n//  Status.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 12/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Define status types\n///\n/// - current:         Todo\n/// - indexNew:        New file in index\n/// - indexModified:   Modified file in index\n/// - indexDeleted:    Deleted file in index\n/// - indexRenamed:    Renamed file in index\n/// - indexTypeChange: Todo\n/// - wtNew:           New file in working directory\n/// - wtModified:      Modified file in working directory\n/// - wtDeleted:       Deleted file in working directory\n/// - wtTypeChange:    Todo\n/// - wtRenamed:       Renamed file in working directory\n/// - wtUnreadable:    Unreadable file in working directory\n/// - ignored:         Ignored file\n/// - conflicted:      Conflicted file\npublic enum StatusType : UInt32 {\n    \n    case current = 0\n    \n    case indexNew        = 1\n    case indexModified   = 2\n    case indexDeleted    = 4\n    case indexRenamed    = 8\n    case indexTypeChange = 16\n    \n    case wtNew           = 128\n    case wtModified      = 256\n    case wtDeleted       = 512\n    \n    // TODO: Unknown status\n    case wtDeletedU      = 513\n    case wtTypeChange    = 1024\n    case wtRenamed       = 2048\n    case wtUnreadable    = 4096\n    \n    case ignored          = 16384\n    case conflicted       = 32768\n    \n}\n\n/// Define a file status\npublic class Status {\n    \n    /// File path\n    public let path : String\n    \n    /// Status type\n    public let type : StatusType\n    \n    /// Init with libgit2 status entry\n    ///\n    /// - parameter entry: Libgit2 status entry pointer\n    ///\n    /// - throws: GitError with libgit2 error\n    ///\n    /// - returns: Status\n    init(entry: UnsafePointer<git_status_entry>) throws {\n        \n        // Test index\n        if (entry.pointee.index_to_workdir != nil) {\n            path = String(cString: entry.pointee.index_to_workdir.pointee.new_file.path!)\n        }\n            \n        else if (entry.pointee.head_to_index != nil) {\n            path = String(cString: entry.pointee.head_to_index.pointee.new_file.path!)\n        }\n            \n        else {\n            path = \"<Error>\"\n        }\n        \n        guard let type = StatusType(rawValue: entry.pointee.status.rawValue) else {\n            throw GitError.unknownError(msg: \"Unable to init status\", code: -1, desc: \"Unable to find status \\(entry.pointee.status)\")\n        }\n        \n        // Set status\n        self.type = type\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/status/StatusIterator.swift",
    "content": "//\n//  StatusIterator.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 12/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Statuses iterator\npublic class StatusIterator : Sequence, IteratorProtocol {\n    \n    /// Statuses libgit2 pointer\n    private let statuses : UnsafeMutablePointer<OpaquePointer?>\n    \n    ///\n    /// Statues count.\n    ///\n    private let count : Int\n    \n    \n    /// Statuses count\n    private var index = 0\n    \n    \n    /// Costructor with options\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter opt:        libgit2 status options\n    ///\n    /// - throws: GitError wrapping libgit2 errors\n    ///\n    /// - returns: StatuesIterator\n    init(repository : Repository, opt: inout git_status_options) throws {\n        \n        // Init status list\n        statuses = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        let error = git_status_list_new(statuses, repository.pointer.pointee, &opt)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to list status\", code: error)\n        }\n        \n        // List count\n        count = git_status_list_entrycount(statuses.pointee);\n    }\n    \n    /// Free iterator list\n    deinit {\n        if let ptr = statuses.pointee {\n            git_status_list_free(ptr)\n        }\n        statuses.deinitialize(count: 1)\n        statuses.deallocate()\n    }\n    \n    /// Next value or nil\n    public func next() -> Status? {\n        \n        if (index < count) {\n            \n            // Find status at index.\n            let entry = git_status_byindex(statuses.pointee, index);\n            \n            // Inc index\n            index += 1\n            \n            if entry == nil {\n                return nil\n            }\n\n            do {\n                let result = try Status(entry: entry!)\n                return result\n            } catch {\n                print(error.localizedDescription)\n                return nil\n            }\n        } else {\n            return nil\n        }\n        \n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/status/Statuses.swift",
    "content": "//\n//  Statuses.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 12/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Manage current repository statuses\npublic class Statuses {\n    \n    /// Git2Swift repository\n    public let repository : Repository\n    \n    /// Clean working directory property : true if clean, false in other cases\n    public var workingDirectoryClean: Bool {\n        get {\n            do {\n                return try all().next() == nil\n            } catch {\n                print(error.localizedDescription)\n                return false\n            }\n        }\n    }\n    \n    /// Constructor with Git2Swift repository\n    ///\n    /// - parameter repository: Repository\n    ///\n    /// - returns: Statuses\n    init(repository: Repository) {\n        self.repository = repository\n    }\n    \n    /// Return all statuses in an iterator\n    ///\n    /// - throws: GitError wrapping libgit2 error\n    ///\n    /// - returns: Statuses iterator\n    public func all() throws -> StatusIterator {\n        \n        var opt = git_status_options()\n        opt.version = 1 // Use #define 1\n        \n        // Set defaults flags\n        opt.flags = (GIT_STATUS_OPT_INCLUDE_IGNORED.rawValue |\n            GIT_STATUS_OPT_INCLUDE_UNTRACKED.rawValue |\n            GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS.rawValue)\n        \n        return try StatusIterator(repository: repository, opt: &opt)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/tag/Tag.swift",
    "content": "//\n//  Tag.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 12/08/2016.\n//\n//\n\nimport Foundation\n\n/// Git tag\npublic class Tag : Object {\n    \n    /// Git2Swift repository\n    public let repository : Repository\n    \n    /// Tag name, full path like \"refs/tags/sample\"\n    public let name: String\n    \n    /// Short name like \"sample\"\n    public let shortName: String\n    \n    /// Targeted OID\n    public let oid: OID\n    \n    \n    /// Constructor with name and OID\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter name:       tag name\n    /// - parameter oid:        target OID\n    ///\n    /// - returns: Tag\n    init(repository: Repository, name: String, oid: OID) {\n        self.repository = repository\n        self.name = \"refs/tags/\\(name)\"\n        self.shortName = name\n        self.oid = oid\n    }\n    \n    /// Rev tree\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Tree\n    public func revTree() throws -> Tree {\n        return try git_revTree(repository: repository, referenceName: name)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/tag/TagIterator.swift",
    "content": "//\n//  TagIterator.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 12/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Tag iterator\npublic class TagIterator {\n    \n    /// Current array index\n    private var index = 0\n    \n    /// Git2Swift repository\n    private let repository : Repository\n    \n    /// Arrays of tags pointer\n    private var tagsArray :  UnsafeMutablePointer<git_strarray>\n\n    /// Constructor with Git2Swift and libgit2 array pointer\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter tagsArray:  Libgit2 array pointer\n    ///\n    /// - returns: Tag iterator\n    init(repository: Repository, tagsArray: UnsafeMutablePointer<git_strarray>) {\n        self.repository = repository\n        self.tagsArray = tagsArray\n    }\n    \n    deinit {\n        git_strarray_free(tagsArray)\n        tagsArray.deinitialize(count: 1)\n        tagsArray.deallocate()\n    }\n    \n    /// Find next tag\n    ///\n    /// - returns: Next tag or nil\n    public func next() -> Tag? {\n        if (index < tagsArray.pointee.count) {\n            let tag = try? repository.tags.get(name: String(cString: tagsArray.pointee.strings[index]!))\n            if (tag == nil) {\n                return nil\n            }\n            index += 1\n            return tag\n        } else {\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/tag/Tags.swift",
    "content": "//\n//  Tags.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 12/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n// Manage tags\npublic class Tags {\n    \n    /// Git2Swift Repository\n    public let repository: Repository\n    \n    /// Constructor with repository\n    ///\n    /// - parameter repository: Git2Swift repository\n    ///\n    /// - returns: Tags\n    init(repository: Repository) {\n        self.repository = repository\n    }\n    \n    /// All tag names\n    public func names() -> [String] {\n        \n        // Git array\n        var tags = git_strarray()\n        \n        // List all tags\n        git_tag_list(&tags, repository.pointer.pointee);\n        \n        // Convert to swift\n        let strs = git_strarray_to_strings(&tags)\n        \n        // free array\n        git_strarray_free(&tags)\n        \n        return strs\n    }\n    \n    /// Get name\n    ///\n    /// - parameter name: tag name to search\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Tag\n    public func get(name: String) throws -> Tag {\n        \n        let spec : String\n        let shortName : String\n        \n        // Find spec\n        if (name.hasPrefix(\"refs/tags/\")) {\n            spec = name\n            let startIndex = name.index(name.startIndex, offsetBy: 10)\n            shortName = String(name[startIndex...])\n        } else {\n            spec = \"refs/tags/\\(name)\"\n            shortName = name\n        }\n        \n        let reference = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Find tag reference\n        let error = git_reference_lookup(reference, repository.pointer.pointee, spec)\n        if (error != 0) {\n            \n            // 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code.\n            switch error {\n            case GIT_EINVALIDSPEC.rawValue:\n                throw GitError.invalidSpec(spec: name)\n            case GIT_ENOTFOUND.rawValue:\n                throw GitError.notFound(ref: name)\n            default:\n                throw gitUnknownError(\"Unable to find tag\", code: error)\n                \n            }\n        }\n        \n        // Find git oid\n        let gOid = git_tag_target_id(reference.pointee)\n        if (gOid == nil) {\n            throw GitError.notFound(ref: \"refs/tags/\\(name)\")\n        }\n        \n        return Tag(repository: repository, name: shortName, oid: OID(withGitOid: gOid!.pointee))\n    }\n    \n    \n    /// Create new tag\n    ///\n    /// - parameter name:  tag name\n    /// - parameter force: force creation\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: new Tag\n    public func create(name: String, force: Bool = false) throws -> Tag {\n        \n        // Tag oid\n        var tag_oid = git_oid()\n        \n        // Create tag\n        let error = git_tag_create_lightweight(&tag_oid, repository.pointer.pointee, name,\n                                               try repository.head().targetCommit().pointer.pointee, force ? 1 : 0);\n        if (error != 0) {\n            switch error {\n            case GIT_EEXISTS.rawValue :\n                throw GitError.alreadyExists(ref: \"refs/tags/\\(name)\")\n            default:\n                throw gitUnknownError(\"Unable to create tag\", code: error)\n            }\n        }\n        \n        return Tag(repository: repository, name: name, oid: OID(withGitOid: tag_oid))\n    }\n    \n    /// Remove tag by name\n    ///\n    /// - parameter name: tag name\n    ///\n    /// - throws: GitError\n    public func remove(name: String) throws {\n        let error = git_tag_delete(repository.pointer.pointee, name)\n        if (error != 0) {\n            throw gitUnknownError(\"Unable to delete tag\", code: error)\n        }\n    }\n    \n    /// Find all tag in iterator\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: Tag iterator\n    public func all() throws -> TagIterator {\n        return try find()\n    }\n    \n    /// Find tags\n    ///\n    /// - parameter pattern: tag pattern\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: TagIterator\n    public func find(withPattern pattern: String? = nil) throws -> TagIterator {\n        \n        // Git array\n        let tags = UnsafeMutablePointer<git_strarray>.allocate(capacity: 1)\n        \n        if let pattern = pattern  {\n            \n            // List tags from pattern\n            git_tag_list_match(tags, pattern, repository.pointer.pointee)\n            \n        } else {\n            \n            // List all tags\n            git_tag_list(tags, repository.pointer.pointee);\n            \n        }\n        \n        // Return iterator form array\n        return TagIterator(repository: repository, tagsArray: tags)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/tree/Tree.swift",
    "content": "//\n//  Tree.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 01/08/2016.\n//\n//\n\nimport Foundation\nimport Cgit2\n\n/// Tree Definition\npublic class Tree {\n    \n    let repository : Repository\n    \n    /// Internal libgit2 tree\n    internal let tree : UnsafeMutablePointer<OpaquePointer?>\n    \n    /// Init with libgit2 tree\n    ///\n    /// - parameter repository: Git2Swift repository\n    /// - parameter tree:       Libgit2 tree pointer\n    ///\n    /// - returns: Tree\n    init(repository: Repository, tree : UnsafeMutablePointer<OpaquePointer?>) {\n        self.tree = tree\n        self.repository = repository\n    }\n    \n    deinit {\n        \n        if let ptr = tree.pointee {\n            git_tree_free(ptr)\n        }\n        \n        tree.deinitialize(count: 1)\n        tree.deallocate()\n    }\n    \n    \n    /// Find entry by path.\n    ///\n    /// - parameter byPath: Path of file\n    ///\n    /// - throws: GitError\n    ///\n    /// - returns: TreeEntry or nil\n    public func entry(byPath: String) throws -> TreeEntry? {\n        \n        // Entry\n        let treeEntry = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Find tree entry\n        let error = git_tree_entry_bypath(treeEntry, tree.pointee, byPath)\n        switch error {\n        case 0:\n            return TreeEntry(pointer: treeEntry)\n        case GIT_ENOTFOUND.rawValue:\n            return nil\n        default:\n            throw GitError.unknownError(msg: \"\", code: error, desc: git_error_message())\n        }\n        \n    }\n    \n    /// Diff\n    ///\n    /// - parameter other: Other tree\n    ///\n    /// - returns: Diff\n    public func diff(other: Tree) throws -> Diff {\n        \n        // Create diff\n        let diff = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: 1)\n        \n        // Create diff\n        let error = git_diff_tree_to_tree(diff, repository.pointer.pointee,\n                                          tree.pointee,\n                                          other.tree.pointee, nil)\n        if (error == 0) {\n            return Diff(pointer: diff)\n        } else {\n            throw GitError.unknownError(msg: \"diff\", code: error, desc: git_error_message())\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Git/tree/TreeEntry.swift",
    "content": "//\n//  TreeEntry.swift\n//  Git2Swift\n//\n//  Created by Damien Giron on 20/09/2016.\n//  Copyright © 2016 Creabox. All rights reserved.\n//\n\nimport Foundation\n\nimport Cgit2\n\n/// Tree entry\npublic class TreeEntry {\n\n    /// The filename of a tree entry\n    public let name : String\n    \n    /// Libgit2 pointer\n    internal let pointer : UnsafeMutablePointer<OpaquePointer?>\n    \n    init(pointer: UnsafeMutablePointer<OpaquePointer?>) {\n        self.pointer = pointer\n        \n        self.name = git_string_converter(git_tree_entry_name(pointer.pointee))\n    }\n    \n    deinit {\n        if let ptr = pointer.pointee {\n            git_tree_entry_free(ptr)\n        }\n        \n        pointer.deinitialize(count: 1)\n        pointer.deallocate()\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/HtmlExtractor.swift",
    "content": "//\n//  HtmlExtractor.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 24.08.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic  func extractTitle(from htmlString: String) -> String? {\n    let lowercasedHTML = htmlString.lowercased()\n\n    guard let titleStartRange = lowercasedHTML.range(of: \"<title\") else {\n        return nil\n    }\n\n    let afterTitleTag = htmlString[titleStartRange.upperBound...]\n    guard let closingBracketRange = afterTitleTag.range(of: \">\") else {\n        return nil\n    }\n\n    let titleContentStart = closingBracketRange.upperBound\n    let remainingHTML = htmlString[titleContentStart...]\n\n    guard let endTitleRange = remainingHTML.range(of: \"</title>\", options: .caseInsensitive) else {\n        return nil\n    }\n\n    let titleContent = String(remainingHTML[..<endTitleRange.lowerBound])\n\n    return cleanHTMLString(titleContent)\n}\n\npublic func cleanHTMLString(_ string: String) -> String {\n    var cleaned = string\n\n    let htmlEntities: [String: String] = [\n        \"&amp;\": \"&\",\n        \"&lt;\": \"<\",\n        \"&gt;\": \">\",\n        \"&quot;\": \"\\\"\",\n        \"&apos;\": \"'\",\n        \"&nbsp;\": \" \"\n    ]\n\n    for (entity, replacement) in htmlEntities {\n        cleaned = cleaned.replacingOccurrences(of: entity, with: replacement, options: .caseInsensitive)\n    }\n\n    let numericEntityPattern = \"&#x?([0-9a-fA-F]+);\"\n    if let regex = try? NSRegularExpression(pattern: numericEntityPattern) {\n        let range = NSRange(location: 0, length: cleaned.count)\n        let matches = regex.matches(in: cleaned, range: range)\n\n        for match in matches.reversed() {\n            if let numberRange = Range(match.range(at: 1), in: cleaned) {\n                let numberString = String(cleaned[numberRange])\n                let isHex = cleaned[match.range].contains(\"&#x\")\n\n                var characterCode: Int?\n                if isHex {\n                    characterCode = Int(numberString, radix: 16)\n                } else {\n                    characterCode = Int(numberString)\n                }\n\n                if let code = characterCode, let unicodeScalar = UnicodeScalar(code) {\n                    let character = String(Character(unicodeScalar))\n                    if let fullRange = Range(match.range, in: cleaned) {\n                        cleaned = cleaned.replacingCharacters(in: fullRange, with: character)\n                    }\n                }\n            }\n        }\n    }\n\n    return cleaned\n        .trimmingCharacters(in: .whitespacesAndNewlines)\n        .replacingOccurrences(of: \"\\\\s+\", with: \" \", options: .regularExpression)\n}\n"
  },
  {
    "path": "FSNotesCore/ImagesProcessor.swift",
    "content": "//\n//  ImagesProcessor.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 1/12/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic class ImagesProcessor {\n\n\n\n    public static func getFileName(from: URL? = nil, to: URL, ext: String? = nil) -> String? {\n        let path = from?.absoluteString ?? to.absoluteString\n        var name: String?\n\n        if path.starts(with: \"http://\") || path.starts(with: \"https://\"), let webName = path.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {\n            name = webName\n        }\n        \n        if path.starts(with: \"file://\") {\n            var ext = ext ?? \"jpg\"\n            var pathComponent = NSUUID().uuidString.lowercased() + \".\" + ext\n\n            if let from = from {\n                pathComponent = from.lastPathComponent\n                ext = from.pathExtension\n            }\n\n            while name == nil {\n                let destination = to.appendingPathComponent(pathComponent)\n                let icloud = destination.appendingPathExtension(\"icloud\")\n                \n                if FileManager.default.fileExists(atPath: destination.path) || FileManager.default.fileExists(atPath: icloud.path) {\n                    pathComponent = NSUUID().uuidString.lowercased() + \".\\(ext)\"\n                    continue\n                }\n                \n                name = pathComponent\n            }\n        }\n\n        return name\n    }\n    \n    public static func writeFile(data: Data, url: URL? = nil, note: Note, ext: String? = nil) -> String? {\n        if note.isTextBundle() {\n            var ext = ext\n            \n            if ext == nil {\n                ext = ImageFormat.get(from: data).rawValue\n            }\n\n            let assetsUrl = note.getURL().appendingPathComponent(\"assets\")\n            \n            if !FileManager.default.fileExists(atPath: assetsUrl.path, isDirectory: nil) {\n                try? FileManager.default.createDirectory(at: assetsUrl, withIntermediateDirectories: true, attributes: nil)\n            }\n\n            let destination = URL(fileURLWithPath: assetsUrl.path)\n            guard var fileName = ImagesProcessor.getFileName(from: url, to: destination, ext: ext) else { return nil }\n            \n            let to = destination.appendingPathComponent(fileName)\n            do {\n                try data.write(to: to, options: .atomic)\n            } catch {\n                print(error)\n            }\n\n            fileName = fileName\n                .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? fileName\n\n            return \"assets/\\(fileName)\"\n        }\n\n        var prefix = \"i/\"\n        if let url = url, !url.isImage {\n            prefix = \"files/\"\n        }\n\n        let project = note.project\n        let destination = URL(fileURLWithPath: project.url.path + \"/\" + prefix)\n\n        do {\n            try FileManager.default.createDirectory(at: destination, withIntermediateDirectories: false, attributes: nil)\n        } catch {}\n\n        guard var fileName = ImagesProcessor.getFileName(from: url, to: destination, ext: ext) else { return nil }\n\n        let to = destination.appendingPathComponent(fileName)\n        try? data.write(to: to, options: .atomic)\n\n        fileName = fileName.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? fileName\n\n        return \"\\(prefix)\\(fileName)\"\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/KeychainConfiguration.swift",
    "content": "/*\n Copyright (C) 2016 Apple Inc. All Rights Reserved.\n See LICENSE.txt for this sample’s licensing information\n \n Abstract:\n A simple struct that defines the service and access group to be used by the sample apps.\n */\n\nimport Foundation\n\nstruct KeychainConfiguration {\n    static let serviceName = \"FSNotesApp\"\n\n    /*\n     Specifying an access group to use with `KeychainPasswordItem` instances\n     will create items shared accross both apps.\n     \n     For information on App ID prefixes, see:\n     https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/AppID.html\n     and:\n     https://developer.apple.com/library/ios/technotes/tn2311/_index.html\n     */\n    //    static let accessGroup = \"[YOUR APP ID PREFIX].com.example.apple-samplecode.GenericKeychainShared\"\n\n    /*\n     Not specifying an access group to use with `KeychainPasswordItem` instances\n     will create items specific to each app.\n     */\n    static let accessGroup: String? = nil\n}\n"
  },
  {
    "path": "FSNotesCore/KeychainPasswordItem.swift",
    "content": "/*\n Copyright (C) 2016 Apple Inc. All Rights Reserved.\n See LICENSE.txt for this sample’s licensing information\n \n Abstract:\n A struct for accessing generic password keychain items.\n */\n\nimport Foundation\n\nstruct KeychainPasswordItem {\n    // MARK: Types\n\n    enum KeychainError: Error {\n        case noPassword\n        case unexpectedPasswordData\n        case unexpectedItemData\n        case unhandledError(status: OSStatus)\n    }\n\n    // MARK: Properties\n\n    let service: String\n\n    private(set) var account: String\n\n    let accessGroup: String?\n\n    // MARK: Intialization\n\n    init(service: String, account: String, accessGroup: String? = nil) {\n        self.service = service\n        self.account = account\n        self.accessGroup = accessGroup\n    }\n\n    // MARK: Keychain access\n\n    func readPassword() throws -> String {\n        /*\n         Build a query to find the item that matches the service, account and\n         access group.\n         */\n        var query = KeychainPasswordItem.keychainQuery(withService: service, account: account, accessGroup: accessGroup)\n        query[kSecMatchLimit as String] = kSecMatchLimitOne\n        query[kSecReturnAttributes as String] = kCFBooleanTrue\n        query[kSecReturnData as String] = kCFBooleanTrue\n\n        // Try to fetch the existing keychain item that matches the query.\n        var queryResult: AnyObject?\n        let status = withUnsafeMutablePointer(to: &queryResult) {\n            SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0))\n        }\n\n        // Check the return status and throw an error if appropriate.\n        guard status != errSecItemNotFound else { throw KeychainError.noPassword }\n        guard status == noErr else { throw KeychainError.unhandledError(status: status) }\n\n        // Parse the password string from the query result.\n        guard let existingItem = queryResult as? [String: AnyObject],\n            let passwordData = existingItem[kSecValueData as String] as? Data,\n            let password = String(data: passwordData, encoding: String.Encoding.utf8)\n            else {\n                throw KeychainError.unexpectedPasswordData\n        }\n\n        return password\n    }\n\n    func savePassword(_ password: String) throws {\n        // Encode the password into an Data object.\n        let encodedPassword = password.data(using: String.Encoding.utf8)!\n\n        do {\n            // Check for an existing item in the keychain.\n            try _ = readPassword()\n\n            // Update the existing item with the new password.\n            var attributesToUpdate = [String: AnyObject]()\n            attributesToUpdate[kSecValueData as String] = encodedPassword as AnyObject?\n\n            let query = KeychainPasswordItem.keychainQuery(withService: service, account: account, accessGroup: accessGroup)\n            let status = SecItemUpdate(query as CFDictionary, attributesToUpdate as CFDictionary)\n\n            // Throw an error if an unexpected status was returned.\n            guard status == noErr else {\n                throw KeychainError.unhandledError(status: status)\n            }\n        } catch KeychainError.noPassword {\n            /*\n             No password was found in the keychain. Create a dictionary to save\n             as a new keychain item.\n             */\n            var newItem = KeychainPasswordItem.keychainQuery(withService: service, account: account, accessGroup: accessGroup)\n            newItem[kSecValueData as String] = encodedPassword as AnyObject?\n\n            // Add a the new item to the keychain.\n            let status = SecItemAdd(newItem as CFDictionary, nil)\n\n            // Throw an error if an unexpected status was returned.\n            guard status == noErr else { throw KeychainError.unhandledError(status: status) }\n        }\n    }\n\n    mutating func renameAccount(_ newAccountName: String) throws {\n        // Try to update an existing item with the new account name.\n        var attributesToUpdate = [String: AnyObject]()\n        attributesToUpdate[kSecAttrAccount as String] = newAccountName as AnyObject?\n\n        let query = KeychainPasswordItem.keychainQuery(withService: service, account: self.account, accessGroup: accessGroup)\n        let status = SecItemUpdate(query as CFDictionary, attributesToUpdate as CFDictionary)\n\n        // Throw an error if an unexpected status was returned.\n        guard status == noErr || status == errSecItemNotFound else { throw KeychainError.unhandledError(status: status) }\n\n        self.account = newAccountName\n    }\n\n    func deleteItem() throws {\n        // Delete the existing item from the keychain.\n        let query = KeychainPasswordItem.keychainQuery(withService: service, account: account, accessGroup: accessGroup)\n        let status = SecItemDelete(query as CFDictionary)\n\n        // Throw an error if an unexpected status was returned.\n        guard status == noErr || status == errSecItemNotFound else { throw KeychainError.unhandledError(status: status) }\n    }\n\n    static func passwordItems(forService service: String, accessGroup: String? = nil) throws -> [KeychainPasswordItem] {\n        // Build a query for all items that match the service and access group.\n        var query = KeychainPasswordItem.keychainQuery(withService: service, accessGroup: accessGroup)\n        query[kSecMatchLimit as String] = kSecMatchLimitAll\n        query[kSecReturnAttributes as String] = kCFBooleanTrue\n        query[kSecReturnData as String] = kCFBooleanFalse\n\n        // Fetch matching items from the keychain.\n        var queryResult: AnyObject?\n        let status = withUnsafeMutablePointer(to: &queryResult) {\n            SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0))\n        }\n\n        // If no items were found, return an empty array.\n        guard status != errSecItemNotFound else { return [] }\n\n        // Throw an error if an unexpected status was returned.\n        guard status == noErr else { throw KeychainError.unhandledError(status: status) }\n\n        // Cast the query result to an array of dictionaries.\n        guard let resultData = queryResult as? [[String: AnyObject]] else { throw KeychainError.unexpectedItemData }\n\n        // Create a `KeychainPasswordItem` for each dictionary in the query result.\n        var passwordItems = [KeychainPasswordItem]()\n        for result in resultData {\n            guard let account  = result[kSecAttrAccount as String] as? String else { throw KeychainError.unexpectedItemData }\n\n            let passwordItem = KeychainPasswordItem(service: service, account: account, accessGroup: accessGroup)\n            passwordItems.append(passwordItem)\n        }\n\n        return passwordItems\n    }\n\n    // MARK: Convenience\n\n    private static func keychainQuery(withService service: String, account: String? = nil, accessGroup: String? = nil) -> [String: AnyObject] {\n        var query = [String: AnyObject]()\n        query[kSecClass as String] = kSecClassGenericPassword\n        query[kSecAttrService as String] = service as AnyObject?\n\n        if let account = account {\n            query[kSecAttrAccount as String] = account as AnyObject?\n        }\n\n        if let accessGroup = accessGroup {\n            query[kSecAttrAccessGroup as String] = accessGroup as AnyObject?\n        }\n\n        return query\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/MPreviewView.swift",
    "content": "//\n//  MPreviewView.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 8/17/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport WebKit\nimport SSZipArchive\n\n#if os(iOS)\nimport MobileCoreServices\nimport AudioToolbox\n#else\nimport Carbon.HIToolbox\n#endif\n\npublic typealias MPreviewViewClosure = () -> ()\n\nclass MPreviewView: WKWebView, WKUIDelegate, WKNavigationDelegate {\n\n    private var editorVC: EditorViewController?\n    private weak var note: Note?\n    private var closure: MPreviewViewClosure?\n    public static var template: String?\n    \n    init(frame: CGRect, note: Note, closure: MPreviewViewClosure?, force: Bool = false) {\n        self.closure = closure\n        let userContentController = WKUserContentController()\n        userContentController.add(HandlerSelection(), name: \"newSelectionDetected\")\n        \n        let handlerCheckbox = HandlerCheckbox(note: note)\n        userContentController.add(handlerCheckbox, name: \"checkbox\")\n        \n        userContentController.add(HandlerMouse(), name: \"mouse\")\n        userContentController.add(HandlerClipboard(), name: \"clipboard\")\n        \n        let handlerOpener = HandlerOpen(note: note)\n        userContentController.add(handlerOpener, name: \"open\")\n        \n        userContentController.add(HandlerQuickLook(), name: \"quicklook\")\n        \n        let handlerScroll = PreviewScrollHandler(note: note)\n        userContentController.add(handlerScroll, name: \"scrollPosition\")\n\n        let configuration = WKWebViewConfiguration()\n        configuration.userContentController = userContentController\n        configuration.suppressesIncrementalRendering = true\n        \n        super.init(frame: frame, configuration: configuration)\n\n        navigationDelegate = self\n        \n#if os(OSX)\n        if #available(macOS 10.14, *) {\n              setValue(false, forKey: \"drawsBackground\")\n        }\n#else\n        isOpaque = false\n        backgroundColor = UIColor.clear\n        scrollView.backgroundColor = UIColor.clear\n        scrollView.bounces = true\n#endif\n\n        load(note: note, force: force)\n    }\n\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    public func setEditorVC(evc: EditorViewController? = nil) {\n        self.editorVC = evc\n    }\n\n#if os(OSX)\n    override func mouseDown(with event: NSEvent) {\n        guard let evc = editorVC else {\n            super.mouseDown(with: event)\n            return\n        }\n        \n        if let note = evc.vcEditor?.note {\n            if note.container == .encryptedTextPack && !note.isUnlocked() {\n                evc.unLock(notes: [note])\n            } else if note.content.length == 0 {\n                evc.disablePreview()\n                evc.focusEditArea()\n            }\n        }\n        \n        super.mouseDown(with: event)\n    }\n\n    override func keyDown(with event: NSEvent) {\n        if event.keyCode == kVK_Return {\n            DispatchQueue.main.async {\n                if let evc = self.editorVC {\n                    evc.disablePreview()\n                    evc.focusEditArea()\n                }\n            }\n            return\n        }\n        super.keyDown(with: event)\n    }\n\n    override func performKeyEquivalent(with event: NSEvent) -> Bool {\n        if event.characters?.unicodeScalars.first == \"c\" && event.modifierFlags.contains(.command) {\n            DispatchQueue.main.async {\n                guard let string = HandlerSelection.selectionString else { return }\n                let pasteboard = NSPasteboard.general\n                pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n                pasteboard.setString(string, forType: NSPasteboard.PasteboardType.string)\n            }\n\n            return false\n        }\n\n        return super.performKeyEquivalent(with: event)\n    }\n\n    override func willOpenMenu(_ menu: NSMenu, with event: NSEvent) {\n        for item in menu.items {\n            if item.identifier?.rawValue == \"WKMenuItemIdentifierReload\" {\n                item.isHidden = true\n            }\n        }\n    }\n#endif\n\n    public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {\n        closure?()\n    }\n\n    public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {\n        guard let url = navigationAction.request.url else { return }\n\n        switch navigationAction.navigationType {\n        case .linkActivated:\n            decisionHandler(.cancel)\n\n            if isFootNotes(url: url) {\n                return\n            }\n\n#if os(iOS)\n            if url.absoluteString.starts(with: \"fsnotes://find?id=\") {\n                UIApplication.getEVC().openWikiLink(query: url.absoluteString)\n                return\n            }\n\n            UIApplication.shared.open(url, options: [:], completionHandler: nil)\n#elseif os(OSX)\n            NSWorkspace.shared.open(url)\n#endif\n        default:\n            decisionHandler(.allow)\n        }\n    }\n\n    public static func loadAttachments(html: String, note: Note, showButton: Bool = true) -> String {\n        guard let urls = note.attachments, urls.count > 0  else { return html }\n\n        var htmlString = html\n        var imagesStorage = note.project.url\n\n        if note.isTextBundle() {\n            imagesStorage = note.getURL()\n        }\n\n        do {\n            let regex = try NSRegularExpression(pattern: \"<img.*?src=\\\"([^\\\"]*)\\\"\")\n            let results = regex.matches(in: html, range: NSRange(html.startIndex..., in: html))\n\n            let images = results.map {\n                String(html[Range($0.range, in: html)!])\n            }\n\n            for image in images {\n                let localPath = image.replacingOccurrences(of: \"<img src=\\\"\", with: \"\").dropLast()\n\n                guard !localPath.starts(with: \"http://\") && !localPath.starts(with: \"https://\") else { continue }\n\n                let localPathClean = localPath.removingPercentEncoding ?? String(localPath)\n                let fullImageURL = imagesStorage\n                let imageURL = fullImageURL.appendingPathComponent(localPathClean)\n\n                guard !imageURL.isImage && !imageURL.isVideo else { continue }\n\n                #if os(iOS)\n                let editor = UIApplication.getEVC().editArea\n                #else\n                let editor = ViewController.shared()?.editor\n                #endif\n\n                if let editor = editor {\n                    let attachment = NoteAttachment(url: imageURL)\n\n                    if let imageData = attachment.getAttachmentImage()?.jpgData {\n                        let base64 = imageData.base64EncodedString()\n                        var imPath = \"<img class=\\\"attachment\\\" data-url=\\\"\" + imageURL.path + \"\\\" src=\\\"\" + \"data:image;base64,\" + base64 + \"\\\"\"\n\n                        if !showButton {\n                            imPath = \"<img \"\n                        }\n\n                        htmlString = htmlString.replacingOccurrences(of: image, with: imPath)\n                    }\n                }\n            }\n        } catch let error {\n            print(\"Images regex: \\(error.localizedDescription)\")\n        }\n\n        return htmlString\n    }\n\n    public func load(note: Note, force: Bool = false) {\n        /// Do not re-load already loaded view\n        guard self.note != note || force else { return }\n        self.note = note\n        \n        let markdownString = note.getPrettifiedContent()\n\n        if let urls = note.imageUrl, urls.count > 0 {\n            cleanCache()\n            \n            let dst = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"wkPreview\")\n            \n            if let i = MPreviewView.buildPage(for: note, at: dst) {\n                if getppid() != 1 {\n                    print(\"Web view loaded from: \\(i)\")\n                }\n                \n                let accessURL = i.deletingLastPathComponent()\n                loadFileURL(i, allowingReadAccessTo: accessURL)\n            }\n        } else {\n            var htmlString = renderMarkdownHTML(markdown: markdownString)!\n            htmlString = MPreviewView.loadAttachments(html: htmlString, note: note)\n\n            if let pageHTMLString = try? MPreviewView.htmlFromTemplate(htmlString),\n               let baseURL = Bundle.main.url(forResource: \"MPreview\", withExtension: \"bundle\") {\n                loadHTMLString(pageHTMLString, baseURL: baseURL)\n            }\n        }\n    }\n    \n    public func cleanCache() {\n        URLCache.shared.removeAllCachedResponses()\n\n        DispatchQueue.global(qos: .background).async {\n            HTTPCookieStorage.shared.removeCookies(since: Date.distantPast)\n        }\n\n        WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in\n            records.forEach { record in\n                WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {})\n            }\n        }\n    }\n\n    public static func getMathJaxJS() -> String {\n        if !UserDefaultsManagement.mathJaxPreview {\n            return String()\n        }\n\n        return \"\"\"\n            <script>\n            MathJax = {\n              tex: {\n                inlineMath: [\n                    ['$', '$'],\n                    ['\\\\\\\\(', '\\\\\\\\)'],\n                    ['$$', '$$'],\n                    ['\\\\\\\\((', '\\\\\\\\))']\n                ]\n              }\n            };\n            </script>\n            <script id=\"MathJax-script\" async src=\"{WEB_PATH}js/tex-mml-chtml.js\"></script>\n        \"\"\"\n    }\n\n    private func isFootNotes(url: URL) -> Bool {\n        let link = url.absoluteString.components(separatedBy: \"/index.html#\")\n        if link.count == 2 {\n            openAnchor(anchor: link[1])\n            return true\n        }\n\n        let bundleLink = url.absoluteString.components(separatedBy: \"/MPreview.bundle/#\")\n        if bundleLink.count == 2 {\n            openAnchor(anchor: bundleLink[1])\n            return true\n        }\n\n        return false\n    }\n\n    private func openAnchor(anchor: String) {\n        evaluateJavaScript(\"document.getElementById('\\(anchor)').offsetTop\") { [weak self] (result, error) in\n            if let offset = result as? CGFloat {\n                self?.evaluateJavaScript(\"window.scrollTo(0,\\(offset))\", completionHandler: nil)\n            }\n        }\n\n        evaluateJavaScript(\"getElementsByText('\\(anchor)')[0].offsetTop\") { [weak self] (result, error) in\n            if let offset = result as? CGFloat {\n                self?.evaluateJavaScript(\"window.scrollTo(0,\\(offset))\", completionHandler: nil)\n            }\n        }\n\n        let textQuery = anchor.replacingOccurrences(of: \"-\", with: \" \")\n        evaluateJavaScript(\"getElementsByTextContent('\\(textQuery)').offsetTop\") { [weak self] (result, error) in\n            if let offset = result as? CGFloat {\n                self?.evaluateJavaScript(\"window.scrollTo(0,\\(offset))\", completionHandler: nil)\n            }\n        }\n    }\n\n    public static func buildPage(for note: Note, at dst: URL, web: Bool = false, print: Bool = false) -> URL? {\n        var markdownString = note.getPrettifiedContent()\n        \n        // Hack for WebView compatibility\n        if print {\n            markdownString = MPreviewView.assignBase64Images(note: note, html: markdownString)\n        }\n        \n        var htmlString = renderMarkdownHTML(markdown: markdownString)!\n        \n        var imagesStorage = note.project.url\n        if note.isTextBundle() {\n            imagesStorage = note.getURL()\n        }\n        \n        var webPath: String?\n        var zipName: String?\n        \n        // For uploaded content\n        if web {\n            // Generate zip\n            zipName = \"\\(note.getLatinName()).zip\"\n            \n            let zipURL = dst.appendingPathComponent(note.getLatinName()).appendingPathExtension(\"zip\")\n            try? FileManager.default.createDirectory(at: dst, withIntermediateDirectories: true, attributes: nil)\n            \n            if note.container == .none {\n                SSZipArchive.createZipFile(atPath: zipURL.path, withFilesAtPaths: [note.url.path])\n            } else {\n                SSZipArchive.createZipFile(atPath: zipURL.path, withContentsOfDirectory: note.url.path, keepParentDirectory: true)\n            }\n            \n            if UserDefaultsManagement.customWebServer {\n                webPath = UserDefaultsManagement.sftpWeb\n            } else {\n                webPath = UserDefaultsManagement.webPath\n            }\n        }\n        \n\n        let state = !(web || print)\n        htmlString = MPreviewView.loadAttachments(html: htmlString, note: note, showButton: state)\n\n        if let urls = note.imageUrl, urls.count > 0, !print {\n            htmlString = MPreviewView.loadImages(imagesStorage: imagesStorage, html: htmlString, at: dst, web: web)\n        }\n\n        if let pageHTMLString = try? htmlFromTemplate(htmlString, webPath: webPath, print: print, archivePath: zipName, note: note) {\n            let indexURL = createTemporaryBundle(pageHTMLString: pageHTMLString, at: dst)\n            \n            return indexURL\n        }\n        \n        return nil\n    }\n\n    public static func createTemporaryBundle(pageHTMLString: String, at: URL) -> URL? {\n        let path = Bundle.main.path(forResource: \"MPreview\", ofType: \".bundle\")\n        let url = NSURL.fileURL(withPath: path!)\n        let bundle = Bundle(url: url)\n\n        guard let bundleResourceURL = bundle?.resourceURL else { return nil }\n\n        let webkitPreview = at\n        try? FileManager.default.createDirectory(at: webkitPreview, withIntermediateDirectories: true, attributes: nil)\n\n        let indexURL = webkitPreview.appendingPathComponent(\"index.html\")\n        let mainCssUrl = webkitPreview.appendingPathComponent(\"main.css\")\n\n        // If updating markdown contents, no need to re-copy bundle.\n        if !FileManager.default.fileExists(atPath: indexURL.path) || !FileManager.default.fileExists(atPath: mainCssUrl.path) {\n            // Copy bundle resources to temporary location.\n            do {\n                let fileList = try FileManager.default.contentsOfDirectory(atPath: bundleResourceURL.path)\n                for file in fileList {\n                    let tmpURL = webkitPreview.appendingPathComponent(file)\n\n                    if [\"css\", \"js\"].contains(file) {\n                        try? FileManager.default.removeItem(at: tmpURL)\n                    }\n\n                    try? FileManager.default.copyItem(atPath: bundleResourceURL.appendingPathComponent(file).path, toPath: tmpURL.path)\n                }\n            } catch {\n                print(error)\n            }\n        }\n\n        // Write generated index.html to temporary location.\n        try? pageHTMLString.write(to: indexURL, atomically: true, encoding: .utf8)\n\n        return indexURL\n    }\n\n    public static func loadImages(imagesStorage: URL, html: String, at: URL, web: Bool = false) -> String {\n        var htmlString = html\n        \n        do {\n            let regex = try NSRegularExpression(pattern: \"<img.*?src=\\\"([^\\\"]*)\\\"\")\n            let results = regex.matches(in: html, range: NSRange(html.startIndex..., in: html))\n\n            let images = results.map {\n                String(html[Range($0.range, in: html)!])\n            }\n\n            for image in images {\n                var localPath = image.replacingOccurrences(of: \"<img src=\\\"\", with: \"\").dropLast()\n\n                guard !localPath.starts(with: \"http://\") && !localPath.starts(with: \"https://\") else {\n                    continue\n                }\n\n                let localPathClean = localPath.removingPercentEncoding ?? String(localPath)\n\n                let fullImageURL = imagesStorage\n                let imageURL = fullImageURL.appendingPathComponent(localPathClean)\n\n                guard imageURL.isImage else { continue }\n\n                let webkitPreview = at\n\n                let create = webkitPreview\n                    .appendingPathComponent(localPathClean)\n                    .deletingLastPathComponent()\n                let destination = webkitPreview.appendingPathComponent(localPathClean)\n\n                try? FileManager.default.createDirectory(atPath: create.path, withIntermediateDirectories: true, attributes: nil)\n                try? FileManager.default.removeItem(at: destination)\n                try? FileManager.default.copyItem(at: imageURL, to: destination)\n\n                var orientation = 0\n                let url = NSURL(fileURLWithPath: imageURL.path)\n                if let imageSource = CGImageSourceCreateWithURL(url, nil) {\n                    let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary?\n                    if let orientationProp = imageProperties?[kCGImagePropertyOrientation] as? Int {\n                        orientation = orientationProp\n                    }\n                }\n\n                if localPath.first == \"/\" {\n                    localPath.remove(at: localPath.startIndex)\n                }\n                \n                // Uploaded over API or SSH\n                if web {\n                    localPath = \"i/\\(imageURL.lastPathComponent)\"\n                }\n\n                let imPath = \"<img data-orientation=\\\"\\(orientation)\\\" class=\\\"fsnotes-preview\\\" src=\\\"\" + localPath + \"\\\"\"\n\n                htmlString = htmlString.replacingOccurrences(of: image, with: imPath)\n            }\n        } catch let error {\n            print(\"Images regex: \\(error.localizedDescription)\")\n        }\n\n        return htmlString\n    }\n\n    public static func htmlFromTemplate(_ htmlString: String, webPath: String? = nil, print: Bool = false, archivePath: String? = nil, note: Note? = nil) throws -> String {\n        let webPath = webPath ?? \"\"\n\n        var htmlString = htmlString\n        let path = Bundle.main.path(forResource: \"MPreview\", ofType: \".bundle\")\n        let url = NSURL.fileURL(withPath: path!)\n        let bundle = Bundle(url: url)\n        let baseURL = bundle!.url(forResource: \"index\", withExtension: \"html\")!\n\n        var template = try String(contentsOf: baseURL, encoding: .utf8)\n        var platform = String()\n        var appearance = String()\n        \n        let isWeb = webPath.count > 0\n        let preview = String(webPath.count == 0)\n\n#if os(iOS)\n        platform = \"ios\"\n        if UITraitCollection.current.userInterfaceStyle == .dark && archivePath == nil {\n            appearance = \"darkmode\"\n        }\n#else\n        platform = \"macos\"\n        if UserDataService.instance.isDark && archivePath == nil && print == false {\n            appearance = \"darkmode\"\n        }\n#endif\n        \n        if webPath.count > 0 {\n             htmlString = \"\"\"\n                <style>\n                    \n                    article {\n                        max-width: 1280px;\n                        margin: 0 auto;\n                        margin-bottom: 70px;\n                    }\n            \n                    footer {\n                        max-width: 1280px;\n                        margin: 0 auto;\n                        background: white;\n                        position: fixed;\n                        left: 0;\n                        right: 0;\n                        bottom: 0;\n                        height: 60px;\n                        width: 100%;\n                        padding: 10px 20px 20px 20px;\n                        border-top: 1px solid gray;\n                    }\n            \n                    img.logo {\n                        display: inline-block;\n                        height: 32px;\n                        width: 32px;\n                    }\n            \n                    .footer__span {\n                        display: inline-block;\n                        line-height: 32px;\n                        margin: 3px 0 0 0;\n                    }\n                        .footer__span__archive {\n                            float: right;\n                        }\n            \n                    .share-button {\n                      border: 1px solid #eee;\n                      border-radius: 4px;\n                      color: #999;\n                      cursor: pointer;\n                      display: inline-block;\n                      font-weight: 600;\n                      line-height: 1.7;\n                      padding: 6px 17px;\n                      text-decoration: none;\n                    }\n                        .share-button .label i {\n                          margin-right: 0.4em;\n                        }\n                        .share-button .sites {\n                          display: none;\n                          line-height: 1;\n                          vertical-align: middle;\n                        }\n                        .share-button .sites a {\n                          color: #777;\n                          font-size: 1.2em;\n                          margin-left: 0.3em;\n                        }\n                        .share-button .sites a:hover.facebook {\n                          color: #385797;\n                        }\n                        .share-button .sites a:hover.twitter {\n                          color: #03abea;\n                        }\n            \n                        .share-button .sites a:hover.linkedin {\n                          color: #0078a8;\n                        }\n                        .share-button .sites a:hover.pinterest {\n                          color: #c91515;\n                        }\n                        .share-button:hover {\n                          border-color: #ddd;\n                          box-shadow: 0.1em 0.1em 0.3em rgba(0, 0, 0, 0.05);\n                          color: #777;\n                        }\n                        .share-button:hover .sites {\n                          display: inline-block;\n                        }\n\n                        h1 {\n                            margin-top: 0px;\n                        }\n\n                        body {\n                            margin: 0 20px;\n                        }\n            \n                        @media screen and (max-width: 600px) {\n                            .share-button .label {\n                                display: none;\n                            }\n                        }\n            \n                    .macos ul.cb {\n                        margin-left: 0;\n                    }\n                </style>\n                <article>\\(htmlString)</article>\n                \n                <footer>\n                    <span class=\"footer__span\">Powered by <a href=\"https://fsnot.es\" target=\"_blank\">FSNotes App</a> <img class=\"logo\" src=\"https://fsnot.es/img/icon.webp\" style=\"margin: 0 0 -10px 0;\"></span>\n                    <a class=\"share-button\" href=\"\\(archivePath!)\" style=\"float: right; text-decoration: none;\">\n                        <span class=\"label\" style=\"vertical-align: middle;\">Download</span>\n                        <span style=\"display: inline-block; height: 22px; width: 22px; vertical-align: middle;\">\n                            <svg viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M4 19h16v-7h2v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-8h2v7zM14 9h5l-7 7-7-7h5V3h4v6z\"/></svg>\n                        </span>\n                    </a>\n                </footer>\n            \"\"\"\n        }\n        \n        var title = String()\n        if let unwrapped = note?.getTitle() {\n            title = unwrapped\n        }\n        \n        let inlineCss = MPreviewView.getPreviewStyle(print: print, forceLightTheme: isWeb)\n        \n        template = template\n            .replacingOccurrences(of: \"{TITLE}\", with: title)\n            .replacingOccurrences(of: \"{INLINE_CSS}\", with: inlineCss)\n            .replacingOccurrences(of: \"{MATH_JAX_JS}\", with: MPreviewView.getMathJaxJS())\n            .replacingOccurrences(of: \"{FSNOTES_APPEARANCE}\", with: appearance)\n            .replacingOccurrences(of: \"{FSNOTES_PLATFORM}\", with: platform)\n            .replacingOccurrences(of: \"{FSNOTES_PREVIEW}\", with: preview)\n            .replacingOccurrences(of: \"{NOTE_BODY}\", with: htmlString)\n            .replacingOccurrences(of: \"{WEB_PATH}\", with: webPath)\n        \n        return template\n    }\n\n    public static func getPreviewStyle(print: Bool = false, forceLightTheme: Bool = false) -> String {\n        var theme: String? = nil\n        var fullScreen = false\n        var useFixedImageHeight = true\n        var css = \"<style>\"\n        \n        if print {\n            theme = \"github-light\"\n            fullScreen = true\n            useFixedImageHeight = false\n        }\n\n        css +=\n            useFixedImageHeight\n                ? String(\"img { max-height: 90vh; }\")\n                : String()\n\n        if forceLightTheme {\n            theme = UserDefaultsManagement.codeTheme.getCssName(isDark: false)\n            fullScreen = true\n        } else {\n            let isDark = UserDataService.instance.isDark\n            theme = theme ?? UserDefaultsManagement.codeTheme.getCssName(isDark: isDark)\n        }\n\n        var codeStyle = String()\n        \n        if let bundleURL = Bundle.main.url(forResource: \"MPreview\", withExtension: \"bundle\"),\n            let mPreviewBundle = Bundle(url: bundleURL),\n            let theme = theme,\n            let cssURL = mPreviewBundle.url(forResource: theme, withExtension: \"min.css\", subdirectory: \"styles\"),\n            let content = try? String(contentsOf: cssURL, encoding: .utf8) {\n\n            codeStyle = content\n        }\n        \n        #if os(iOS)\n            let codeFamilyName = UserDefaultsManagement.codeFont.familyName\n            var familyName = UserDefaultsManagement.noteFont.familyName\n            let tagColor = \"#6692cb\"\n        #else\n            let codeFamilyName = UserDefaultsManagement.codeFont.familyName ?? \"\"\n            var familyName = UserDefaultsManagement.noteFont.familyName ?? \"\"\n            let tagColor = NSColor.tagColor.hexString\n        #endif\n\n        if familyName.starts(with: \".\") {\n            familyName = \"Helvetica Neue\";\n        }\n\n        #if os(iOS)\n            var width = 10\n        #else\n            var width = Int(ViewController.shared()!.editor.getInsetWidth())\n        #endif\n\n        if fullScreen {\n            width = 0\n        }\n\n        let codeBackground = NotesTextProcessor.getHighlighter().options.style.backgroundColor.hexString\n        var maxImageWidth = String(Int(UserDefaultsManagement.imagesWidth)) + \"px\"\n        \n    #if os(iOS)\n        let fontSize = UserDefaultsManagement.noteFont.pointSize\n        let codeFontSize = fontSize\n        \n        let tagAttributes = [NSAttributedString.Key.font: UserDefaultsManagement.codeFont]\n        let oneCharSize = (\"A\" as NSString).size(withAttributes: tagAttributes as [NSAttributedString.Key : Any])\n        let codeLineHeight = UserDefaultsManagement.editorLineSpacing / 2 + Float(oneCharSize.height)\n        let lineHeight = Int(UserDefaultsManagement.editorLineSpacing) + Int(UserDefaultsManagement.noteFont.lineHeight)\n        \n        maxImageWidth = \"auto\"\n    #else\n        let fontSize = UserDefaultsManagement.fontSize\n        let codeFontSize = UserDefaultsManagement.codeFontSize\n        \n        let codeLineHeight = computeDefaultLineHeight(for: UserDefaultsManagement.codeFont, lineHeightMultiple: UserDefaultsManagement.lineHeightMultiple)\n        let lineHeight = computeDefaultLineHeight(for: UserDefaultsManagement.noteFont, lineHeightMultiple: UserDefaultsManagement.lineHeightMultiple)\n    #endif\n\n        var result = \"\"\"\n            @font-face {\n                font-family: 'Source Code Pro';\n                src: url('{WEB_PATH}fonts/SourceCodePro-Regular.ttf')\n                format('truetype');\n            }\n\n            @font-face {\n                font-family: 'Source Code Pro';\n                src: url('{WEB_PATH}fonts/SourceCodePro-Bold.ttf');\n                font-weight: bold;\n            }\n        \n            body {font: \\(fontSize)px '\\(familyName)', '-apple-system'; margin: 0 \\(width + 5)px; -webkit-text-size-adjust: none;}\n            code, pre {font: \\(codeFontSize)px '\\(codeFamilyName)', Courier, monospace, 'Liberation Mono', Menlo; line-height: \\(codeLineHeight + 3)px; -webkit-text-size-adjust: none; }\n            img:not(footer img, .attachment) {display: block; margin: 0 auto; max-width: \\(maxImageWidth); }\n        \n            img.attachment { height: \\(fontSize + 5)px; max-width: auto }\n            a[href^=\\\"fsnotes://open/?tag=\\\"] { background: \\(tagColor); }\n            p, li, blockquote, dl, ol, ul { line-height: \\(lineHeight)px; -webkit-text-size-adjust: none; } \\(codeStyle) \\(css)\n        \n            code, .hljs { background: \\(codeBackground); }\n\n            #MathJax_Message+* {\n                margin-top: 0 !important;\n            }\n        \"\"\"\n                \n        if print {\n            result += \"\"\"\n                body { -webkit-text-size-adjust: none; font-size: 1.0em;}\n                pre, code { border: 1px solid #c0c4ce; border-radius: 3px; }\n                pre, pre code { word-wrap: break-word; }\n            \"\"\"\n        }\n        \n        css += result\n        css += \"</style>\"\n        \n        return css\n    }\n    \n    public static func assignBase64Images(note: Note, html: String) -> String {\n        var html = html\n\n        FSParser.imageInlineRegex.regularExpression.enumerateMatches(in: note.content.string, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSRange(0..<note.content.length), using:\n                {(result, flags, stop) -> Void in\n\n            guard let range = result?.range(at: 3), note.content.length >= range.location else { return }\n\n            let path = note.content.attributedSubstring(from: range).string\n            guard let imagePath = path.removingPercentEncoding else { return }\n\n            if let url = note.getAttachmentFileUrl(name: imagePath) {\n                if url.isRemote() {\n                    return\n                }\n\n                if FileManager.default.fileExists(atPath: url.path), url.isImage {\n                    if let image = try? Data(contentsOf: url) {\n                        let base64 = image.base64EncodedString()\n                        html = html.replacingOccurrences(of: path, with: \"data:image;base64,\" + base64)\n                    }\n                }\n            }\n        })\n\n        return html\n    }\n\n    public func clean() {\n        loadHTMLString(\"\", baseURL: nil)\n    }\n    \n    private static func computeDefaultLineHeight(for font: Font, lineHeightMultiple: CGFloat = 1.0) -> CGFloat {\n        let asc = font.ascender\n        let desc = abs(font.descender)\n        let lead = font.leading\n\n        let base = asc + desc + lead\n        return base * lineHeightMultiple\n    }\n}\n\nclass HandlerSelection: NSObject, WKScriptMessageHandler {\n    public static var selectionString: String?\n\n    func userContentController(_ userContentController: WKUserContentController,\n                               didReceive message: WKScriptMessage) {\n        let message = (message.body as! String).trimmingCharacters(in: .whitespacesAndNewlines)\n\n        HandlerSelection.selectionString = message\n    }\n}\n\nclass HandlerCheckbox: NSObject, WKScriptMessageHandler {\n    private var note: Note?\n    \n    init(note: Note) {\n        self.note = note\n    }\n    \n    func userContentController(_ userContentController: WKUserContentController,\n                               didReceive message: WKScriptMessage) {\n\n        guard let position = message.body as? String else { return }\n        guard let note = self.note else { return }\n\n        let content = note.content.unloadAttachments()\n        let string = content.string\n        let range = NSRange(0..<string.count)\n\n        var i = 0\n        NotesTextProcessor.allTodoInlineRegex.matches(string, range: range) { (result) -> Void in\n            guard let range = result?.range else { return }\n\n            if i == Int(position) {\n                let substring = content.mutableString.substring(with: range)\n\n                if substring.contains(\"- [x] \") {\n                    content.replaceCharacters(in: range, with: \"- [ ] \")\n                } else {\n                    content.replaceCharacters(in: range, with: \"- [x] \")\n                }\n\n                #if os(iOS)\n                AudioServicesPlaySystemSound(1519)\n                #endif\n            }\n\n            i = i + 1\n        }\n\n        note.save(content: content.loadAttachments(note))\n    }\n}\n\nclass HandlerMouse: NSObject, WKScriptMessageHandler {\n    func userContentController(_ userContentController: WKUserContentController,\n                               didReceive message: WKScriptMessage) {\n\n        guard let action = message.body as? String else { return }\n\n        #if os(OSX)\n        if action == \"enter\" {\n            NSCursor.pointingHand.set()\n        } else {\n            NSCursor.arrow.set()\n        }\n        #endif\n    }\n}\n\nclass HandlerClipboard: NSObject, WKScriptMessageHandler {\n    func userContentController(_ userContentController: WKUserContentController,\n                               didReceive message: WKScriptMessage) {\n\n        guard let action = message.body as? String else { return }\n\n        var cleanText = action.trim()\n        if cleanText.last == \"\\n\" {\n            cleanText.removeLast()\n        }\n\n        #if os(OSX)\n            NSPasteboard.general.clearContents()\n            NSPasteboard.general.setString(cleanText, forType: .string)\n        #else\n            UIPasteboard.general.setItems([\n                [kUTTypePlainText as String: cleanText]\n            ])\n        #endif\n    }\n}\n\nclass HandlerOpen: NSObject, WKScriptMessageHandler {\n    private var note: Note?\n    \n    init(note: Note) {\n        self.note = note\n    }\n    \n    func userContentController(_ userContentController: WKUserContentController,\n                               didReceive message: WKScriptMessage) {\n        guard let note = note else { return }\n        guard let action = message.body as? String else { return }\n        \n        var cleanText = action.trim()\n        cleanText = cleanText.removingPercentEncoding ?? cleanText\n\n        if cleanText.contains(\"wkPreview/index.html\")\n            || cleanText.contains(\"MPreview.bundle/index.html\")\n            || cleanText.contains(\"MPreview.bundle/#\")\n        {\n            return\n        }\n        \n        #if os(OSX)\n            let result = cleanText.replacingOccurrences(\n                of: \"^.*?/(tmp/wkPreview|Resources/MPreview\\\\.bundle)/\",\n                with: \"\",\n                options: .regularExpression\n            )\n        \n            if let url = result.createURL(for: note) {\n                NSWorkspace.shared.activateFileViewerSelecting([url])\n            }\n        #endif\n    }\n}\n\nclass HandlerQuickLook: NSObject, WKScriptMessageHandler {\n    func userContentController(_ userContentController: WKUserContentController,\n                               didReceive message: WKScriptMessage) {\n\n        guard let action = message.body as? String else { return }\n        let cleanText = \"file://\" + action.trim()\n\n        if let url = URL(string: cleanText) {\n            #if os(iOS)\n                UIApplication.getEVC().quickLook(url: url)\n            #else\n                NSWorkspace.shared.activateFileViewerSelecting([url])\n            #endif\n        }\n    }\n}\n\nfinal class PreviewScrollHandler: NSObject, WKScriptMessageHandler {\n    private var note: Note?\n    \n    init(note: Note) {\n        self.note = note\n    }\n\n    func userContentController(\n            _ userContentController: WKUserContentController,\n            didReceive message: WKScriptMessage\n    ) {\n        guard\n            message.name == \"scrollPosition\",\n            let dict = message.body as? [String: Double],\n            let x = dict[\"x\"],\n            let y = dict[\"y\"]\n        else { return }\n\n        note?.contentOffsetWeb = CGPoint(x: x, y: y)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/NSTextAttachment+.swift",
    "content": "//\n//  NSTextAttachment+.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 10/2/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(OSX)\nimport AppKit\n#else\nimport UIKit\n#endif\n\nimport UniformTypeIdentifiers\n\nextension NSTextAttachment {\n    public func isFile() -> Bool {\n        #if os(iOS)\n            return false\n        #endif\n\n        #if os(OSX)\n            return (attachmentCell?.cellSize().height == 30)\n        #endif\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/NSTextStorage++.swift",
    "content": "//\n//  CustomTextStorage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 10/12/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(OSX)\nimport AppKit\n#else\nimport UIKit\n#endif\n\nextension NSTextStorage {\n#if os(OSX)\n    public var highlightColor: NSColor {\n        get {\n            return NSColor(named: \"highlight\")!\n        }\n    }\n#else\n    public var highlightColor: UIColor {\n        get {\n            return UIColor.highlightColor\n        }\n    }\n#endif\n\n    public func getImageRange(url: URL) -> NSRange? {\n        let affectedRange = NSRange(0..<length)\n        var foundRange: NSRange?\n\n        enumerateAttribute(.attachment, in: affectedRange) { (value, range, stop) in\n            guard let meta = getMeta(at: range.location),\n                  url.path == meta.url.path else { return }\n\n            foundRange = range\n            stop.pointee = true\n        }\n\n        return foundRange\n    }\n\n    public func updateParagraphStyle(range: NSRange? = nil) {\n        let scanRange = range ?? NSRange(0..<length)\n        \n        guard scanRange.length != 0 else { return }\n\n        beginEditing()\n        let font = UserDefaultsManagement.noteFont\n        let tabs = getTabStops()\n        addTabStops(range: scanRange, tabs: tabs)\n        let spaceWidth = \" \".widthOfString(usingFont: font, tabs: tabs)\n\n        let parRange = mutableString.paragraphRange(for: scanRange)\n\n        enumerateAttribute(.attachment, in: parRange, options: .init()) { value, range, _ in\n            guard attribute(.todo, at: range.location, effectiveRange: nil) != nil else { return }\n\n            let currentParRange = mutableString.paragraphRange(for: range)\n\n            var attachmentWidth: CGFloat = 0\n            if let attachment = value as? NSTextAttachment {\n                let attachmentBounds = attachment.bounds\n                attachmentWidth = attachmentBounds.width\n            }\n\n            let parStyle = NSMutableParagraphStyle()\n            parStyle.headIndent = spaceWidth + attachmentWidth\n            parStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n            addAttribute(.paragraphStyle, value: parStyle, range: currentParRange)\n        }   \n        endEditing()\n    }\n\n    /*\n     * Implements https://github.com/glushchenko/fsnotes/issues/311\n     */\n    public func addTabStops(range: NSRange, tabs: [NSTextTab]) {\n        let font = UserDefaultsManagement.noteFont\n        let lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        let paragraphRange = mutableString.paragraphRange(for: range)\n\n        let markers = [\"* \", \"- \", \"+ \", \"> \"]\n\n        mutableString.enumerateSubstrings(in: paragraphRange, options: .byParagraphs) { value, parRange, _, _ in\n            guard let value = value else { return }\n\n            let paragraph = NSMutableParagraphStyle()\n            paragraph.lineSpacing = lineSpacing\n            paragraph.alignment = .left\n            paragraph.tabStops = tabs\n\n            if value.count > 1 {\n                let prefix = value.getSpacePrefix()\n                var matchedPrefix: String?\n\n                if prefix.isEmpty {\n                    for marker in markers {\n                        if value.hasPrefix(marker) {\n                            matchedPrefix = marker\n                            break\n                        }\n                    }\n                } else {\n                    for marker in markers {\n                        let fullMarker = prefix + marker\n                        if value.hasPrefix(fullMarker) {\n                            matchedPrefix = fullMarker\n                            break\n                        }\n                    }\n                }\n\n                if matchedPrefix == nil {\n                    matchedPrefix = self.getNumberListPrefix(paragraph: value)\n                }\n\n                if let prefix = matchedPrefix {\n                    paragraph.headIndent = prefix.widthOfString(usingFont: font, tabs: tabs)\n                }\n            }\n\n            self.addAttribute(.paragraphStyle, value: paragraph, range: parRange)\n        }\n    }\n\n    public func getTabStops() -> [NSTextTab] {\n        var tabs = [NSTextTab]()\n        let tabInterval = 40\n\n        for index in 1...25 {\n            let tab = NSTextTab(textAlignment: .left, location: CGFloat(tabInterval * index), options: [:])\n            tabs.append(tab)\n        }\n\n        return tabs\n    }\n\n    private static let numberListRegex = try? NSRegularExpression(\n        pattern: #\"^(\\s*)(\\d+)(\\.)(\\s+)\"#,\n        options: []\n    )\n\n    public func getNumberListPrefix(paragraph: String) -> String? {\n        guard !paragraph.isEmpty else { return nil }\n\n        let nsString = paragraph as NSString\n        let range = NSRange(location: 0, length: min(nsString.length, 20))\n\n        if let match = Self.numberListRegex?.firstMatch(in: paragraph, options: [], range: range) {\n            return nsString.substring(with: match.range)\n        }\n\n        return nil\n    }\n\n    public func updateCheckboxList() {\n        let fullRange = NSRange(location: 0, length: self.length)\n\n        enumerateAttribute(.todo, in: fullRange, options: []) { value, range, _ in\n            if let value = value as? Int {\n                let attribute = self.attribute(.attachment, at: range.location, longestEffectiveRange: nil, in: fullRange)\n\n                if let attachment = attribute as? NSTextAttachment {\n                    let checkboxName = value == 0 ? \"checkbox_empty\" : \"checkbox\"\n\n                    attachment.image = AttributedBox.getImage(name: checkboxName)\n\n                    for layoutManager in layoutManagers {\n                        layoutManager.invalidateDisplay(forCharacterRange: range)\n                    }\n                }\n            }\n        }\n    }\n\n    public func highlightKeyword(search: String) {\n        var search = search\n        guard search.count > 1, UserDefaultsManagement.searchHighlight else { return }\n        \n        if search.hasPrefix(\"\\\"\") && search.hasSuffix(\"\\\"\") {\n            let clean = String(search.dropFirst().dropLast())\n            if clean.count > 0 {\n                search = clean\n            }\n        }\n        \n        let searchTerm = NSRegularExpression.escapedPattern(for: search)\n        let pattern = \"(\\(searchTerm))\"\n        let range = NSRange(location: 0, length: length)\n        \n        do {\n            let regex = try NSRegularExpression(pattern: pattern, options: [.caseInsensitive])\n            let matches = regex.matches(in: self.string, options: [], range: range)\n            \n            self.beginEditing()\n            for match in matches {\n                let subRange = match.range\n                guard subRange.location < self.length else { continue }\n                \n                if let currentBackgroundColor = self.attribute(.backgroundColor, at: subRange.location, effectiveRange: nil) {\n                    self.addAttribute(.highlight, value: currentBackgroundColor, range: subRange)\n                } else {\n                    self.addAttribute(.highlight, value: NSNull(), range: subRange)\n                }\n                self.addAttribute(.backgroundColor, value: self.highlightColor, range: subRange)\n            }\n            self.endEditing()\n            \n        } catch {\n            print(error)\n        }\n    }\n\n    public func removeHighlight() {\n        let range = NSRange(location: 0, length: length)\n\n        self.beginEditing()\n        self.enumerateAttribute(\n            .highlight,\n            in: range,\n            options: []\n        ) { value, subRange, _ in\n            guard value != nil else { return }\n\n            #if os(macOS)\n            if let originalColor = value as? NSColor {\n                self.addAttribute(.backgroundColor, value: originalColor, range: subRange)\n            } else {\n                self.removeAttribute(.backgroundColor, range: subRange)\n            }\n            #else\n            if let originalColor = value as? UIColor {\n                self.addAttribute(.backgroundColor, value: originalColor, range: subRange)\n            } else {\n                self.removeAttribute(.backgroundColor, range: subRange)\n            }\n            #endif\n\n            self.removeAttribute(.highlight, range: subRange)\n        }\n        self.endEditing()\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/NameHelper.swift",
    "content": "//\n//  File.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/4/19.\n//  Copyright © 2019 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\nclass NameHelper {\n    public static func getUniqueFileName(name: String, postfix: Int = 1, project: Project, ext: String) -> URL {\n\n        var defaultName = UUID().uuidString\n        if let naming = SettingsFilesNaming(rawValue: UserDefaultsManagement.naming.rawValue) {\n            defaultName = naming.getName()\n        }\n\n        var postfix = postfix\n        var name = name\n            .trimmingCharacters(in: CharacterSet.whitespaces)\n            .replacingOccurrences(of: \":\", with: \"\")\n            .replacingOccurrences(of: \"/\", with: \"\")\n\n        if name.isEmpty {\n            name = defaultName\n        }\n\n        var fileUrl = project.url\n        fileUrl.appendPathComponent(name + \".\" + ext, isDirectory: false)\n\n        let fileManager = FileManager.default\n        if fileManager.fileExists(atPath: fileUrl.path) {\n            let regex = try? NSRegularExpression(pattern: \"(.+)\\\\s(\\\\d)+$\", options: .caseInsensitive)\n\n            if let result = regex?.firstMatch(in: name, range: NSRange(0..<name.count)) {\n\n                if let range = Range(result.range(at: 1), in: name) {\n                    name = String(name[range])\n                }\n\n                if let range = Range(result.range(at: 2), in: name) {\n                    let digit = name[range]\n\n                    if let converted = Int(digit) {\n                        postfix = converted\n                    }\n                }\n            }\n\n            let increment = postfix + 1\n            let newName = name + \" \" + String(increment)\n            return NameHelper.getUniqueFileName(name: newName, postfix: increment, project: project, ext: ext)\n        }\n\n        return fileUrl\n    }\n\n    public static func generateCopy(file: URL, dstDir: URL? = nil, number: Int = 1) -> URL {\n        let dst = dstDir ?? file.deletingLastPathComponent()\n        let ext = file.pathExtension\n        var name = file.deletingPathExtension().lastPathComponent\n\n        let regex = try? NSRegularExpression(pattern: \"(.+)\\\\s(?:Copy\\\\s)+(?:\\\\d)+$\", options: .caseInsensitive)\n        if let result = regex?.firstMatch(in: name, range: NSRange(0..<name.count)) {\n            if let range = Range(result.range(at: 1), in: name) {\n                name = String(name[range])\n            }\n        }\n\n        var endName = name\n        if !endName.hasSuffix(\" Copy\") {\n            endName += \" Copy\"\n        }\n\n        if number > 1 {\n            endName += \" \" + String(number)\n        }\n\n        let newDst = dst.appendingPathComponent(endName + \".\" + ext, isDirectory: false)\n\n        if !FileManager.default.fileExists(atPath: newDst.path) {\n            return newDst\n        }\n\n        return generateCopy(file: file, dstDir: dst, number: number + 1)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/Note+History.swift",
    "content": "//\n//  Note+History.swift\n//  FSNotes iOS\n//\n//  Created by Александр on 14.02.2022.\n//  Copyright © 2022 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\nimport Compression\n\nextension Note {\n\n    public func getGitPath(history: Bool = false) -> String {\n        var path = name\n\n        if let gitPath = getGitPathPrefix() {\n            path = gitPath\n        }\n\n        if history && isTextBundle(), let contentURL = getContentFileURL() {\n            path += \"/\" + contentURL.lastPathComponent\n        }\n\n        return path.recode4byteString()\n    }\n\n    public func getGitPathPrefix() -> String? {\n        guard let project = getGitProject() else { return nil }\n\n        let relative = url.path.replacingOccurrences(of: project.url.path, with: \"\")\n\n        if !UserDefaultsManagement.iCloudDrive && relative.startsWith(string: \"/private/\") {\n            return relative.replacingOccurrences(of: \"/private/\", with: \"\")\n        }\n\n        if relative.first == \"/\" {\n            return String(relative.dropFirst())\n        }\n\n        if relative == \"\" {\n            return nil\n        }\n\n        return relative\n    }\n\n    public func hasGitRepository() -> Bool {\n        return project.getGitProject() != nil\n    }\n\n    public func getGitProject() -> Project? {\n        return project.getGitProject()\n    }\n\n    public func saveRevision() throws {\n        guard hasGitRepository() else { return }\n        guard let project = getGitProject() else { return }\n\n        try project.saveRevision(commitMessage: nil)\n    }\n\n    public func dropRevisions() {\n        do {\n            if let repository = getRepositoryUrl() {\n                try FileManager.default.removeItem(at: repository)\n            }\n        } catch {/*_*/}\n    }\n\n    public func restore(revision: Revision) {\n        guard hasGitRepository() else { return }\n\n        checkout(commit: revision.commit!)\n        forceLoad()\n    }\n\n    public func listRevisions() -> [Revision] {\n        guard hasGitRepository() else { return [Revision]() }\n\n        var result = [Revision]()\n        let commits = getCommits()\n        for commit in commits {\n            let timestamp = commit.date.timeIntervalSince1970\n            result.append(Revision(timestamp: timestamp, commit: commit))\n        }\n        return result\n    }\n\n    private func getRepositoryUrl() -> URL? {\n        guard let url = project.getHistoryURL() else { return nil }\n\n        return url.appendingPathComponent(name)\n    }\n\n    public func moveHistory(src: URL, dst: URL) {\n        let srcFileName = src.lastPathComponent\n        let dstFileName = dst.lastPathComponent\n\n        var srcProject = project.getHistoryURL()\n        var dstProject = project.getHistoryURL()\n\n        if let dstHistory = project.storage.getProjectBy(url: dst.deletingLastPathComponent())?.getHistoryURL() {\n\n            if !FileManager.default.directoryExists(atUrl: dstHistory) {\n                try? FileManager.default.createDirectory(at: dstHistory, withIntermediateDirectories: true, attributes: nil)\n            }\n\n            dstProject = dstHistory\n        }\n\n        if let srcHistory = project.storage.getProjectBy(url: src.deletingLastPathComponent())?.getHistoryURL(),\n            FileManager.default.directoryExists(atUrl: srcHistory) {\n\n            srcProject = srcHistory\n        }\n\n        guard let srcDir = srcProject?.appendingPathComponent(srcFileName),\n              FileManager.default.fileExists(atPath: srcDir.path),\n              let dstDir = dstProject?.appendingPathComponent(dstFileName),\n              !FileManager.default.directoryExists(atUrl: dstDir)\n        else { return }\n\n        do {\n            try FileManager.default.moveItem(at: srcDir, to: dstDir)\n        } catch {\n            print(\"History transfer \\(error)\")\n        }\n    }\n\n    public func getCommits() -> [Commit] {\n        var commits = [Commit]()\n\n        do {\n            guard let project = getGitProject(), project.hasCommitsDiffsCache() else { return commits }\n\n            let repository = try project.getRepository()\n            let path = getGitPath(history: true)\n\n            do {\n                let fileRevLog = try FileHistoryIterator(repository: repository, path: path, project: project)\n                let oids = fileRevLog.walk()\n\n                for oid in oids {\n                    if let commit = try? repository.commitLookup(oid: oid) {\n                        commits.append(commit)\n                    }\n                }\n\n                if fileRevLog.checkFirstCommit() {\n                    if let oid = fileRevLog.getLast(), let commit = try? repository.commitLookup(oid: oid) {\n                        commits.append(commit)\n                    }\n                }\n            } catch {/*_*/}\n\n            return commits\n        } catch {\n            print(error)\n        }\n\n        return commits\n    }\n\n    public func checkout(commit: Commit) {\n        do {\n            guard let repository = try getGitProject()?.getRepository() else { return }\n            let commit = try repository.commitLookup(oid: commit.oid)\n            try repository.checkout(commit: commit, path: getGitPath())\n            print(\"Successful checkout\")\n        } catch {\n            print(error)\n        }\n    }\n}\n\npublic struct Revision {\n    var timestamp: Double\n    var url: URL?\n    var commit: Commit?\n}\n"
  },
  {
    "path": "FSNotesCore/NoteCellView+.swift",
    "content": "//\n//  NoteCellView+.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 11/6/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(iOS)\nimport UIKit\ntypealias ImageView = UIImageView\n#else\nimport Cocoa\ntypealias ImageView = NSImageView\n#endif\n\nextension NoteCellView {\n    public func loadImagesPreview(position: Int? = nil, urls: [URL]? = nil) {\n        guard let note = self.note else {\n            hideUnusedImagesPreview()\n            imageKeys = []\n            return\n        }\n\n        note.loadPreviewInfo()\n\n        guard\n            !UserDefaultsManagement.hidePreviewImages &&\n            !UserDefaultsManagement.horizontalOrientation else {\n            hideUnusedImagesPreview()\n            imageKeys = []\n            return\n        }\n\n        let imageURLs = urls ?? note.imageUrl\n        \n        guard let imageURLs = imageURLs, !imageURLs.isEmpty else {\n            hideUnusedImagesPreview()\n            imageKeys = []\n            attachHeaders(note: note)\n            fixTopConstraint(position: position, note: note)\n            return\n        }\n        \n        let isNotAssigned = imagePreview.image == nil\n            && imagePreviewSecond.image == nil\n            && imagePreviewThird.image == nil\n        \n        let isAssigned = imagePreview.image != nil ||\n            imagePreviewSecond.image != nil ||\n            imagePreviewThird.image != nil\n\n        let needsReload = isImagesChanged(imageURLs: imageURLs)\n        \n        if !needsReload && !isNotAssigned {\n            attachHeaders(note: note)\n            fixTopConstraint(position: position, note: note)\n            return\n        }\n\n        if needsReload || (isNotAssigned && isAssigned) {\n            hideUnusedImagesPreview()\n            imageKeys = []\n        }\n\n        DispatchQueue.global(qos: .userInteractive).async { [weak self] in\n            guard let self = self else { return }\n            \n            let current = Date().toMillis()\n            self.timestamp = current\n            var paths = [String]()\n\n            let resizedImages = self.getResizedPreviewImages(note: note, images: imageURLs, timestamp: current!)\n\n            DispatchQueue.main.async { [weak self] in\n                guard let self = self else { return }\n                \n                if current != self.timestamp {\n                    return\n                }\n                \n                guard self.note === note else {\n                    return\n                }\n\n                for imageUrl in imageURLs {\n                    paths.append(imageUrl.path)\n                }\n\n                self.imageKeys = paths\n                self.attachImagesPreview(resizedImages: resizedImages)\n                self.fixTopConstraint(position: position, note: note)\n            }\n        }\n    }\n\n    private func isImagesChanged(imageURLs: [URL]? = nil) -> Bool {\n        guard let imageURLs = imageURLs else {\n            return !imageKeys.isEmpty\n        }\n\n        if imageURLs.count != imageKeys.count {\n            return true\n        }\n        \n        let newPaths = Set(imageURLs.map { $0.path })\n        let currentPaths = Set(imageKeys)\n        \n        return newPaths != currentPaths\n    }\n\n    private func hideUnusedImagesPreview() {\n        self.imagePreviewThird.image = nil\n        self.imagePreviewThird.isHidden = true\n\n        self.imagePreviewSecond.image = nil\n        self.imagePreviewSecond.isHidden = true\n\n        self.imagePreview.image = nil\n        self.imagePreview.isHidden = true\n    }\n\n    private func attachImagesPreview(resizedImages: [Image]) {\n        var index = 0\n        for resized in resizedImages {\n            index += 1\n\n            switch index {\n            case 1:\n                self.imagePreview.image = resized\n                self.styleImageView(imageView: self.imagePreview)\n            case 2:\n                self.imagePreviewSecond.image = resized\n                self.styleImageView(imageView: self.imagePreviewSecond)\n            case 3:\n                self.imagePreviewThird.image = resized\n                self.styleImageView(imageView: self.imagePreviewThird)\n            default:\n                break\n            }\n        }\n        \n        if resizedImages.count < 3 {\n            self.imagePreviewThird.image = nil\n            self.imagePreviewThird.isHidden = true\n        }\n        if resizedImages.count < 2 {\n            self.imagePreviewSecond.image = nil\n            self.imagePreviewSecond.isHidden = true\n        }\n        if resizedImages.count < 1 {\n            self.imagePreview.image = nil\n            self.imagePreview.isHidden = true\n        }\n        \n    #if os(macOS)\n        self.needsDisplay = true\n        self.needsLayout = true\n                \n        self.imagePreview.needsDisplay = true\n        self.imagePreviewSecond.needsDisplay = true\n        self.imagePreviewThird.needsDisplay = true\n        \n        self.layoutSubtreeIfNeeded()\n        self.superview?.needsLayout = true\n        self.superview?.layoutSubtreeIfNeeded()\n    #endif\n    }\n\n    public func getResizedPreviewImages(note: Note, images: [URL], timestamp: Int64 = 00) -> [Image] {\n        var resizedImages: [Image] = []\n\n        for imageUrl in images {\n            if timestamp != self.timestamp {\n                return []\n            }\n\n            if let image = getPreviewImage(imageUrl: imageUrl, note: note) {\n                resizedImages.append(image)\n            }\n        }\n\n        return resizedImages\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/NoteMeta.swift",
    "content": "//\n//  NoteMeta.swift\n//  FSNotes\n//\n//  Created by Олександр Глущенко on 17.05.2020.\n//  Copyright © 2020 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic struct NoteMeta: Codable {\n    var url: URL\n    var attachments: [URL]?\n    var imageUrl: [URL]?\n    var title: String\n    var preview: String\n    var modificationDate: Date\n    var creationDate: Date\n    var pinned: Bool\n    var tags: [String]\n    var selectedRange: NSRange?\n}\n"
  },
  {
    "path": "FSNotesCore/NotesTextProcessor.swift",
    "content": "//\n//  NotesTextStorage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 12/26/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\n#if os(OSX)\n    import Cocoa\n    import MASShortcut\n#else\n    import UIKit\n#endif\n\npublic class NotesTextProcessor {\n#if os(OSX)\n    typealias Color = NSColor\n    typealias Image = NSImage\n    typealias Font = NSFont\n\n    public static var fontColor: NSColor {\n        get {\n            return NSColor(named: \"mainText\")!\n        }\n    }\n#else\n    typealias Color = UIColor\n    typealias Image = UIImage\n    typealias Font = UIFont\n\n    public static var fontColor: UIColor {\n        get {\n            return UIColor { (traits) -> UIColor in\n                return traits.userInterfaceStyle == .dark ?\n                    UIColor.white :\n                    UIColor.black\n            }\n        }\n    }\n#endif\n    // MARK: Syntax highlight customisation\n    \n    /**\n     Color used to highlight markdown syntax. Default value is light grey.\n     */\n    public static var syntaxColor = Color.lightGray\n    \n    public static var yamlOpenerColor = Color.systemRed\n    \n    public static var codeBackground: PlatformColor {\n        get {\n            let isDark = UserDataService.instance.isDark\n            let editorTheme = UserDefaultsManagement.codeTheme.makeStyle(isDark: isDark)\n            \n            return editorTheme.backgroundColor\n        }\n    }\n    \n#if os(OSX)\n    public static var font: NSFont {\n        get {\n            return UserDefaultsManagement.noteFont\n        }\n    }\n\n    public static var codeSpanBackground: NSColor {\n        get {\n            return NSColor(named: \"code\") ?? NSColor(red:0.97, green:0.97, blue:0.97, alpha:1.0)\n        }\n    }\n\n    public static var quoteColor: NSColor {\n        get {\n            return NSColor(named: \"quoteColor\")!\n        }\n    }\n#else\n    public static var font: UIFont {\n        get {\n            return UserDefaultsManagement.noteFont\n        }\n    }\n\n    public static var codeSpanBackground: UIColor {\n        get {\n            return UIColor.codeBackground\n        }\n    }\n    \n    public static var quoteColor: UIColor {\n        get {\n            return UIColor.darkGray\n        }\n    }\n#endif\n    \n    /**\n     Quote indentation in points. Default 20.\n     */\n    open var quoteIndendation : CGFloat = 20\n    \n    static var codeFont = UserDefaultsManagement.codeFont\n    \n    /**\n     If the markdown syntax should be hidden or visible\n     */\n    public static var hideSyntax = false\n    \n    private var note: Note?\n    private var storage: NSTextStorage?\n    private var range: NSRange?\n    private var width: CGFloat?\n    \n    public static var hl: SwiftHighlighter? = nil\n        \n    init(note: Note? = nil, storage: NSTextStorage? = nil, range: NSRange? = nil) {\n        self.note = note\n        self.storage = storage\n        self.range = range\n    }\n    \n    public static func getHighlighter() -> SwiftHighlighter {\n        if let instance = self.hl {\n            return instance\n        }\n\n        let isDark = UserDataService.instance.isDark\n        let style = UserDefaultsManagement.codeTheme.makeStyle(isDark: isDark)\n        let highlighter = SwiftHighlighter(options: .init(style: style))\n        self.hl = highlighter\n        \n        return highlighter\n    }\n\n    public static func resetCaches() {\n        NotesTextProcessor.hl = nil\n        NotesTextProcessor.codeFont = UserDefaultsManagement.codeFont\n    }\n\n    public static func getSpanCodeBlockRange(content: NSMutableAttributedString, range: NSRange) -> NSRange? {\n        var codeSpan: NSRange?\n        let paragraphRange = content.mutableString.paragraphRange(for: range)\n        let paragraph = content.attributedSubstring(from: paragraphRange).string\n\n        if paragraph.contains(\"`\") {\n            NotesTextProcessor.codeSpanRegex.matches(content.string, range: paragraphRange) { (result) -> Void in\n                if let spanRange = result?.range, spanRange.intersection(range) != nil {\n                    codeSpan = spanRange\n                }\n            }\n        }\n        \n        return codeSpan\n    }\n\n    fileprivate static var quoteIndendationStyle : NSParagraphStyle {\n        let paragraphStyle = NSMutableParagraphStyle()\n        paragraphStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n        return paragraphStyle\n    }\n    \n    /**\n     Coverts App links:`[[Link Title]]` to Markdown: `[Link](fsnotes://find/link%20title)`\n     \n     - parameter content:      A string containing CommonMark Markdown\n     \n     - returns: Content string with converted links\n     */\n\n    public static func convertAppLinks(in content: NSMutableAttributedString, codeBlockRanges: [NSRange]?) -> NSMutableAttributedString {\n        let attributedString = content.mutableCopy() as! NSMutableAttributedString\n        let range = NSRange(0..<content.string.utf16.count)\n        let tagQuery = \"fsnotes://find?id=\"\n\n        NotesTextProcessor.appUrlRegex.matches(content.string, range: range, completion: { (result) -> (Void) in\n            guard let innerRange = result?.range else { return }\n\n            var substring = attributedString.mutableString.substring(with: innerRange)\n            substring = substring\n                .replacingOccurrences(of: \"[[\", with: \"\")\n                .replacingOccurrences(of: \"]]\", with: \"\")\n                .trim()\n\n            guard let tag = substring.addingPercentEncoding(withAllowedCharacters: .alphanumerics) else { return }\n\n            attributedString.addAttribute(.link, value: \"\\(tagQuery)\\(tag)\", range: innerRange)\n        })\n\n        attributedString.enumerateAttribute(.link, in: range) { (value, range, _) in\n            if let value = value as? String, value.starts(with: tagQuery) {\n                if let tag = value\n                    .replacingOccurrences(of: tagQuery, with: \"\")\n                    .removingPercentEncoding\n                {\n\n                    if NotesTextProcessor.getSpanCodeBlockRange(content: attributedString, range: range) != nil {\n                        return\n                    }\n\n                    if let codeRanges = codeBlockRanges {\n                        for codeRange in codeRanges {\n                            if NSIntersectionRange(codeRange, range).length > 0 {\n                                return\n                            }\n                        }\n                    }\n\n                    let link = \"[\\(tag)](\\(value))\"\n                    attributedString.replaceCharacters(in: range, with: link)\n                }\n            }\n        }\n        \n        return attributedString\n    }\n\n    public static func convertAppTags(in content: NSMutableAttributedString, codeBlockRanges: [NSRange]?) -> NSMutableAttributedString {\n        let attributedString = content.mutableCopy() as! NSMutableAttributedString\n        guard UserDefaultsManagement.inlineTags else { return attributedString}\n\n        let range = NSRange(0..<content.string.utf16.count)\n        let tagQuery = \"fsnotes://open/?tag=\"\n\n        FSParser.tagsInlineRegex.matches(content.string, range: range) { (result) -> Void in\n            guard var range = result?.range(at: 1) else { return }\n\n            var substring = attributedString.mutableString.substring(with: range)\n            guard !substring.isNumber else { return }\n\n            range = NSRange(location: range.location - 1, length: range.length + 1)\n            substring = attributedString.mutableString.substring(with: range)\n                .replacingOccurrences(of: \"#\", with: \"\")\n                .replacingOccurrences(of: \"\\n\", with: \"\")\n                .trim()\n\n            guard let tag = substring.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else { return }\n\n            attributedString.addAttribute(.link, value: \"\\(tagQuery)\\(tag)\", range: range)\n        }\n\n        attributedString.enumerateAttribute(.link, in: range) { (value, range, _) in\n            if let value = value as? String, value.starts(with: tagQuery) {\n                if let tag = value\n                    .replacingOccurrences(of: tagQuery, with: \"\")\n                    .removingPercentEncoding\n                {\n\n                    if NotesTextProcessor.getSpanCodeBlockRange(content: attributedString, range: range) != nil {\n                        return\n                    }\n\n                    if let codeRanges = codeBlockRanges {\n                        for codeRange in codeRanges {\n                            if NSIntersectionRange(codeRange, range).length > 0 {\n                                return\n                            }\n                        }\n                    }\n\n                    let link = \"[#\\(tag)](\\(value))\"\n                    attributedString.replaceCharacters(in: range, with: link)\n                }\n            }\n        }\n\n        return attributedString\n    }\n\n    public static func highlight(attributedString: NSMutableAttributedString) {\n        let ranges = CodeBlockDetector.shared.findCodeBlocks(in: attributedString)\n\n        NotesTextProcessor.highlightMarkdown(attributedString: attributedString, codeBlockRanges: ranges)\n\n        for range in ranges {\n            NotesTextProcessor\n                .getHighlighter()\n                .highlight(in: attributedString, fullRange: range)\n        }\n    }\n    \n    public static func removeFontTraits(\n        _ traitsToRemove: FontTraits,\n        range: NSRange,\n        attributedString: NSMutableAttributedString\n    ) {\n        let baseFont = UserDefaultsManagement.noteFont\n        let pointSize = baseFont.pointSize\n\n        attributedString.enumerateAttribute(.font, in: range) { value, subrange, _ in\n            guard let font = value as? PlatformFont else { return }\n\n            let currentTraits = font.fontDescriptor.symbolicTraits\n            guard !currentTraits.isDisjoint(with: traitsToRemove) else { return }\n\n            let newTraits = currentTraits.subtracting(traitsToRemove)\n            let newDesc = font.fontDescriptor.withSymbolicTraits(newTraits)\n            \n        #if os(iOS)\n            guard let newDesc = newDesc else { return }\n            let newFont = PlatformFont(descriptor: newDesc, size: pointSize)\n        #else\n            guard let newFont = PlatformFont(descriptor: newDesc, size: pointSize) else { return }\n        #endif\n            \n            attributedString.addAttribute(.font, value: newFont, range: subrange)\n        }\n    }\n\n    public static func addFontTraits(\n        _ traitsToAdd: FontTraits,\n        range: NSRange,\n        attributedString: NSMutableAttributedString\n    ) {\n        attributedString.enumerateAttribute(.font, in: range) { value, subrange, _ in\n            guard let font = (value as? PlatformFont) else { return }\n\n            let currentTraits = font.fontDescriptor.symbolicTraits\n            let newTraits = currentTraits.union(traitsToAdd)\n            let newDesc = font.fontDescriptor.withSymbolicTraits(newTraits)\n\n        #if os(iOS)\n            guard let newDesc = newDesc else { return }\n            let newFont = PlatformFont(descriptor: newDesc, size: font.pointSize)\n        #else\n            guard let newFont = PlatformFont(descriptor: newDesc, size: font.pointSize) else { return }\n        #endif\n            \n            attributedString.addAttribute(.font, value: newFont, range: subrange)\n        }\n    }\n    \n    public static func resetFont(attributedString: NSMutableAttributedString, paragraphRange: NSRange) {\n        attributedString.addAttribute(.font, value: font, range: paragraphRange)\n        attributedString.fixAttributes(in: paragraphRange)\n    }\n\n    public static func highlightMarkdown(attributedString: NSMutableAttributedString, paragraphRange: NSRange? = nil, codeBlockRanges: [NSRange]? = nil) {\n        let paragraphRange = paragraphRange ?? NSRange(0..<attributedString.length)\n        \n        attributedString.beginEditing()\n        if paragraphRange.length == attributedString.length {\n            // Initial operation\n            resetFont(attributedString: attributedString, paragraphRange: paragraphRange)\n        } else {\n            removeFontTraits([.bold, .italic], range: paragraphRange, attributedString: attributedString)\n        }\n        \n        defer {\n            attributedString.endEditing()\n        }\n        \n        let string = attributedString.string\n        let pointSize = UserDefaultsManagement.noteFont.pointSize\n        let codeFont = UserDefaultsManagement.codeFont\n        \n    #if os(OSX)\n        let hiddenFont = NSFont.systemFont(ofSize: 0.1)\n    #else\n        let hiddenFont = UIFont.systemFont(ofSize: 0.1)\n    #endif\n\n        let hiddenColor = Color.clear\n        let hiddenAttributes: [NSAttributedString.Key : Any] = [\n            .font : hiddenFont,\n            .foregroundColor : hiddenColor\n        ]\n        \n        func hideSyntaxIfNecessary(range: @autoclosure () -> NSRange) {\n            guard NotesTextProcessor.hideSyntax else { return }\n            \n            attributedString.addAttributes(hiddenAttributes, range: range())\n        }\n\n        attributedString.enumerateAttribute(.link, in: paragraphRange,  options: []) { (value, range, stop) -> Void in\n            if value != nil && attributedString.attribute(.attachment, at: range.location, effectiveRange: nil) == nil {\n                attributedString.removeAttribute(.link, range: range)\n            }\n        }\n\n        attributedString.enumerateAttribute(.strikethroughStyle, in: paragraphRange,  options: []) { (value, range, stop) -> Void in\n            if value != nil {\n                attributedString.removeAttribute(.strikethroughStyle, range: range)\n            }\n        }\n\n        attributedString.enumerateAttribute(.tag, in: paragraphRange,  options: []) { (value, range, stop) -> Void in\n            if value != nil {\n                attributedString.removeAttribute(.tag, range: range)\n            }\n        }\n\n        #if os(iOS)\n            attributedString.addAttribute(.foregroundColor, value: UIColor.blackWhite, range: paragraphRange)\n        #else\n            attributedString.addAttribute(.foregroundColor, value: fontColor, range: paragraphRange)\n            attributedString.enumerateAttribute(.foregroundColor, in: paragraphRange,  options: []) { (value, range, stop) -> Void in\n\n                if (value as? NSColor) != nil {\n                    attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.fontColor, range: range)\n                }\n            }\n        #endif\n\n        // We detect and process inline links not formatted\n        NotesTextProcessor.autolinkRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard var range = result?.range else { return }\n            var substring = attributedString.mutableString.substring(with: range)\n            \n            guard substring.lengthOfBytes(using: .utf8) > 0 else { return }\n            \n            if [\"!\", \"?\", \";\", \":\", \".\", \",\", \"_\"].contains(substring.last) {\n                range = NSRange(location: range.location, length: range.length - 1)\n                substring = String(substring.dropLast())\n            }\n            \n            if substring.first == \"(\" {\n                range = NSRange(location: range.location + 1, length: range.length - 1)\n            }\n            \n            if substring.last == \")\" {\n                range = NSRange(location: range.location, length: range.length - 1)\n            }\n            \n            if let url = URL(string: substring) {\n                attributedString.addAttribute(.link, value: url, range: range)\n            } else if let substring = String(substring).addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) {\n                attributedString.addAttribute(.link, value: substring, range: range)\n            }\n            \n            if NotesTextProcessor.hideSyntax {\n                NotesTextProcessor.autolinkPrefixRegex.matches(string, range: range) { (innerResult) -> Void in\n                    guard let innerRange = innerResult?.range else { return }\n                    attributedString.addAttribute(.font, value: hiddenFont, range: innerRange)\n                    attributedString.fixAttributes(in: innerRange)\n                    attributedString.addAttribute(.foregroundColor, value: hiddenColor, range: innerRange)\n                }\n            }\n        }\n        \n        FSParser.yamlBlockRegex.matches(string, range: NSRange(location: 0, length: attributedString.length)) { (result) -> Void in\n            guard let range = result?.range(at: 1) else { return }\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.fontColor, range: range)\n\n            if range.location == 0 {\n                let listOpeningRegex = MarklightRegex(pattern: \"([a-zA-Z_]+):\", options: [.allowCommentsAndWhitespace])\n                \n                listOpeningRegex.matches(string, range: range) { (result) -> Void in\n                    guard let range = result?.range(at: 0) else { return }\n                    attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.yamlOpenerColor, range: range)\n                }\n                \n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.yamlOpenerColor, range: NSRange(location: 0, length: 3))\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.yamlOpenerColor, range: NSRange(location: range.length - 3, length: 3))\n                \n                attributedString.addAttribute(NSAttributedString.Key.yamlBlock, value: range, range: range)\n            }\n        }\n        \n        // We detect and process underlined headers\n        NotesTextProcessor.headersSetextRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            \n            attributedString.enumerateAttribute(.font, in: range) { value, subrange, _ in\n                guard let font = value as? PlatformFont else { return }\n                let headerFont = NotesTextProcessor.getHeaderFont(level: 1, baseFont: font, baseFontSize: pointSize)\n                attributedString.addAttribute(.font, value: headerFont, range: subrange)\n            }\n            \n            NotesTextProcessor.headersSetextUnderlineRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: NSMakeRange(innerRange.location, innerRange.length))\n            }\n        }\n        \n        // We detect and process dashed headers\n        NotesTextProcessor.headersAtxRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range,\n                  let headerMarksRange = result?.range(at: 1) else { return }\n                \n            let headerLevel = headerMarksRange.length\n            attributedString.enumerateAttribute(.font, in: range) { value, subrange, _ in\n                guard let font = value as? PlatformFont else { return }\n\n                let headerFont = NotesTextProcessor.getHeaderFont(level: headerLevel, baseFont: font, baseFontSize: pointSize)\n                \n                attributedString.addAttribute(.font, value: headerFont, range: subrange)\n            }\n\n            NotesTextProcessor.headersAtxOpeningRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                let syntaxRange = NSMakeRange(innerRange.location, innerRange.length + 1)\n                hideSyntaxIfNecessary(range: syntaxRange)\n            }\n\n            NotesTextProcessor.headersAtxClosingRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n        }\n        \n        // We detect and process reference links\n        NotesTextProcessor.referenceLinkRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: range)\n        }\n        \n        // We detect and process lists\n        NotesTextProcessor.listRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            NotesTextProcessor.listOpeningRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n            }\n        }\n\n        #if IOS_APP || os(OSX)\n        // We detect and process inline anchors (links)\n        NotesTextProcessor.anchorInlineRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            attributedString.addAttribute(.font, value: codeFont, range: range)\n            //attributedString.fixAttributes(in: range)\n            \n            var destinationLink : String?\n            NotesTextProcessor.coupleRoundRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                \n                guard let linkRange = result?.range(at: 3), linkRange.length > 0 else { return }\n\n                let substring = attributedString.mutableString.substring(with: linkRange)\n                guard substring.count > 0 else { return }\n\n                destinationLink = substring\n                attributedString.addAttribute(.link, value: substring, range: linkRange)\n\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n            \n            NotesTextProcessor.openingSquareRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n            \n            NotesTextProcessor.closingSquareRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n            \n            guard let destinationLinkString = destinationLink else { return }\n            \n            NotesTextProcessor.coupleSquareRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                var _range = innerRange\n                _range.location = _range.location + 1\n                _range.length = _range.length - 2\n                \n                let substring = attributedString.mutableString.substring(with: _range)\n                guard substring.lengthOfBytes(using: .utf8) > 0 else { return }\n                \n                attributedString.addAttribute(.link, value: destinationLinkString, range: _range)\n            }\n        }\n        #endif\n        \n        NotesTextProcessor.anchorInlineGFMRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            attributedString.addAttribute(.font, value: codeFont, range: range)\n            //attributedString.fixAttributes(in: range)\n            \n            var destinationLink : String?\n            \n            NotesTextProcessor.coupleRoundRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                \n                if let linkRange = result?.range(at: 3), linkRange.length > 0 {\n                    let substring = attributedString.mutableString.substring(with: linkRange)\n                    guard substring.count > 0 else { return }\n                    destinationLink = substring\n                    attributedString.addAttribute(.link, value: substring, range: linkRange)\n                    \n                    let fullURL = attributedString.mutableString.substring(with: innerRange)\n                    if let angleStart = fullURL.range(of: \"<\")?.lowerBound,\n                       let angleEnd = fullURL.range(of: \">\", options: .backwards)?.upperBound {\n                        let startOffset = fullURL.distance(from: fullURL.startIndex, to: angleStart)\n                        let endOffset = fullURL.distance(from: fullURL.startIndex, to: angleEnd)\n                        \n                        let openAngleRange = NSRange(location: innerRange.location + startOffset, length: 1)\n                        attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: openAngleRange)\n                        hideSyntaxIfNecessary(range: openAngleRange)\n                        \n                        let closeAngleRange = NSRange(location: innerRange.location + endOffset - 1, length: 1)\n                        attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: closeAngleRange)\n                        hideSyntaxIfNecessary(range: closeAngleRange)\n                    }\n                } else if let linkRange = result?.range(at: 4), linkRange.length > 0 {\n                    let substring = attributedString.mutableString.substring(with: linkRange)\n                    guard substring.count > 0 else { return }\n                    destinationLink = substring\n                    attributedString.addAttribute(.link, value: substring, range: linkRange)\n                }\n                \n                hideSyntaxIfNecessary(range: innerRange)\n            }\n            \n            // Opening [\n            NotesTextProcessor.openingSquareRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n            \n            // Closing ]\n            NotesTextProcessor.closingSquareRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n            \n            guard let destinationLinkString = destinationLink else { return }\n            \n            // Title [text]\n            NotesTextProcessor.coupleSquareRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                var _range = innerRange\n                _range.location = _range.location + 1\n                _range.length = _range.length - 2\n                \n                let substring = attributedString.mutableString.substring(with: _range)\n                guard substring.lengthOfBytes(using: .utf8) > 0 else { return }\n                \n                attributedString.addAttribute(.link, value: destinationLinkString, range: _range)\n            }\n        }\n\n        // We detect and process app urls [[link]]\n        NotesTextProcessor.appUrlRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let innerRange = result?.range else { return }\n            var _range = innerRange\n            _range.location = _range.location + 2\n            _range.length = _range.length - 4\n            \n            let appLink = attributedString.mutableString.substring(with: _range)\n            guard !appLink.startsWith(string: \"`\") else { return }\n\n            if let link = appLink.addingPercentEncoding(withAllowedCharacters: .alphanumerics) {\n\n            #if os(iOS)\n                attributedString.addAttribute(.foregroundColor, value: UIColor.wikiColor, range: innerRange)\n            #endif\n\n                attributedString.addAttribute(.link, value: \"fsnotes://find?id=\" + link, range: _range)\n\n                if let range = result?.range(at: 0) {\n                    attributedString.addAttribute(.foregroundColor, value: Color.gray, range: range)\n                }\n\n                if let range = result?.range(at: 2) {\n                    attributedString.addAttribute(.foregroundColor, value: Color.gray, range: range)\n                }\n            }\n        }\n        \n        // We detect and process quotes\n        NotesTextProcessor.blockQuoteRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            attributedString.addAttribute(.foregroundColor, value: quoteColor, range: range)\n            NotesTextProcessor.blockQuoteOpeningRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n                hideSyntaxIfNecessary(range: innerRange)\n            }\n        }\n                \n        // We detect and process italics\n        NotesTextProcessor.strictItalicRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range(at: 3) else { return }\n\n            if NotesTextProcessor.isLink(attributedString: attributedString, range: range) {\n                return\n            }\n\n            addFontTraits([.italic], range: range, attributedString: attributedString)\n\n            NotesTextProcessor.strictBoldRegex.matches(string, range: range) { (result) -> Void in\n                guard let range = result?.range else { return }\n                addFontTraits([.bold], range: range, attributedString: attributedString)\n            }\n            \n            let preRange = NSMakeRange(range.location - 1, 1)\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: preRange)\n            hideSyntaxIfNecessary(range: preRange)\n            \n            let postRange = NSMakeRange(range.location + range.length, 1)\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: postRange)\n            hideSyntaxIfNecessary(range: postRange)\n        }\n\n        // We detect and process bolds\n        NotesTextProcessor.strictBoldRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range(at: 3) else { return }\n\n            let boldString = attributedString.attributedSubstring(from: range)\n            if boldString.string.contains(\"__\") || boldString.string == \"_\" {\n                return\n            }\n\n            if NotesTextProcessor.isLink(attributedString: attributedString, range: range) {\n                return\n            }\n\n            if let font = boldString.attribute(.font, at: 0, effectiveRange: nil) as? Font, font.isItalic {\n            } else {\n                addFontTraits([.bold], range: range, attributedString: attributedString)\n                \n                NotesTextProcessor.strictItalicRegex.matches(string, range: range) { (result) -> Void in\n                    guard let range = result?.range else { return }\n                    addFontTraits([.italic], range: range, attributedString: attributedString)\n                }\n            }\n\n            let preRange = NSMakeRange(range.location - 2, 2)\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: preRange)\n            hideSyntaxIfNecessary(range: preRange)\n            \n            let postRange = NSMakeRange(range.location + range.length, 2)\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: postRange)\n            hideSyntaxIfNecessary(range: postRange)\n        }\n\n//        NotesTextProcessor.italicRegex.matches(string, range: paragraphRange) { (result) -> Void in\n//            guard let range = result?.range else { return }\n//            addFontTraits([.italic], range: range, attributedString: attributedString)\n//\n//            let preRange = NSMakeRange(range.location, 1)\n//            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: preRange)\n//\n//            let postRange = NSMakeRange(range.location + range.length - 1, 1)\n//            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: postRange)\n//        }\n//\n//        NotesTextProcessor.boldRegex.matches(string, range: paragraphRange) { (result) -> Void in\n//            guard let range = result?.range else { return }\n//            addFontTraits([.bold], range: range, attributedString: attributedString)\n//            \n//            let preRange = NSMakeRange(range.location, 2)\n//            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: preRange)\n//\n//            let postRange = NSMakeRange(range.location + range.length - 2, 2)\n//            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: postRange)\n//        }\n\n        // We detect and process bolds\n        NotesTextProcessor.strikeRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n\n            attributedString.addAttribute(.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: range.location + 2, length: range.length - 4))\n\n            //attributedString.fixAttributes(in: range)\n\n            let preRange = NSMakeRange(range.location, 2)\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: preRange)\n            hideSyntaxIfNecessary(range: preRange)\n\n            let postRange = NSMakeRange(range.location + range.length - 2, 2)\n            attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: postRange)\n            hideSyntaxIfNecessary(range: postRange)\n        }\n        \n        // We detect and process inline mailto links not formatted\n        NotesTextProcessor.autolinkEmailRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n            let substring = attributedString.mutableString.substring(with: range)\n            guard substring.lengthOfBytes(using: .utf8) > 0, URL(string: substring) != nil else { return }\n            \n            if substring.isValidEmail() {\n                attributedString.addAttribute(.link, value: \"mailto:\\(substring)\", range: range)\n            } else {\n                attributedString.addAttribute(.link, value: substring, range: range)\n            }\n            \n            if NotesTextProcessor.hideSyntax {\n                NotesTextProcessor.mailtoRegex.matches(string, range: range) { (innerResult) -> Void in\n                    guard let innerRange = innerResult?.range else { return }\n                    attributedString.addAttribute(.font, value: hiddenFont, range: innerRange)\n                    attributedString.addAttribute(.foregroundColor, value: hiddenColor, range: innerRange)\n                }\n            }\n        }\n\n        // Inline tags\n        if UserDefaultsManagement.inlineTags {\n            FSParser.tagsInlineRegex.matches(string, range: paragraphRange) { (result) -> Void in\n                guard var range = result?.range(at: 1) else { return }\n\n                // Skip if indented code block\n                let parRange = attributedString.mutableString.paragraphRange(for: range)\n                let parString = attributedString.mutableString.substring(with: parRange)\n                if parString.starts(with: \"    \") || parString.starts(with: \"\\t\") {\n                    return\n                }\n\n                if NotesTextProcessor.getSpanCodeBlockRange(content: attributedString, range: range) != nil {\n                    return\n                }\n\n                if let ranges = codeBlockRanges {\n                    for range in ranges {\n                        if NSIntersectionRange(range, parRange).length > 0 {\n                            return\n                        }\n                    }\n                }\n\n                var substring = attributedString.mutableString.substring(with: range)\n                guard !substring.isNumber && !substring.isHexColor() else { return }\n\n                range = NSRange(location: range.location - 1, length: range.length + 1)\n                substring = attributedString.mutableString.substring(with: range)\n                    .replacingOccurrences(of: \"#\", with: \"\")\n                    .replacingOccurrences(of: \"\\n\", with: \"\")\n                    .trim()\n\n                guard let tag = substring.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else { return }\n\n                attributedString.addAttribute(.link, value: \"fsnotes://open/?tag=\\(tag)\", range: range)\n                attributedString.addAttribute(.tag, value: \"\\(tag)\", range: range)\n            }\n        }\n\n        attributedString.enumerateAttribute(.attachment, in: paragraphRange,  options: []) { (value, range, stop) -> Void in\n            if value != nil, let todo = attributedString.attribute(.todo, at: range.location, effectiveRange: nil) {\n\n                let strikeRange = attributedString.mutableString.paragraphRange(for: range)\n                attributedString.addAttribute(.strikethroughStyle, value: todo, range: strikeRange)\n            }\n        }\n\n        guard UserDefaultsManagement.codeBlockHighlight else { return }\n\n        // Code span removed\n        attributedString.enumerateAttribute(.backgroundColor, in: paragraphRange) { (value, innerRange, _) in\n            if value != nil {\n                let font = UserDefaultsManagement.noteFont\n                attributedString.removeAttribute(.backgroundColor, range: innerRange)\n                attributedString.addAttribute(.font, value: font, range: innerRange)\n                attributedString.fixAttributes(in: innerRange)\n            }\n        }\n\n        NotesTextProcessor.codeSpanRegex.matches(string, range: paragraphRange) { (result) -> Void in\n            guard let range = result?.range else { return }\n\n            if attributedString.mutableString.substring(with: range).startsWith(string: \"```\") {\n                return\n            }\n\n            attributedString.addAttribute(.font, value: codeFont, range: range)\n            attributedString.fixAttributes(in: range)\n\n            attributedString.addAttribute(.backgroundColor, value: NotesTextProcessor.codeSpanBackground, range: range)\n\n            NotesTextProcessor.codeSpanOpeningRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n            }\n            NotesTextProcessor.codeSpanClosingRegex.matches(string, range: range) { (innerResult) -> Void in\n                guard let innerRange = innerResult?.range else { return }\n                attributedString.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: innerRange)\n            }\n        }\n    }\n\n    public static func isLink(attributedString: NSAttributedString, range: NSRange) -> Bool {\n        return attributedString.attributedSubstring(from: range).attribute(.link, at: 0, effectiveRange: nil) != nil\n    }\n    \n    /// Tabs are automatically converted to spaces as part of the transform\n    /// this constant determines how \"wide\" those tabs become in spaces\n    public static let _tabWidth = 4\n    \n    // MARK: Headers\n    \n    /*\n     Head\n     ======\n     \n     Subhead\n     -------\n     */\n    \n    fileprivate static let headerSetextPattern = [\n        \"^(.+?)\",\n        \"\\\\p{Z}*\",\n        \"\\\\n\",\n        \"(==+)\",  // $1 = string of ='s or -'s\n        \"\\\\p{Z}*\",\n        \"\\\\n|\\\\Z\"\n        ].joined(separator: \"\\n\")\n    \n    public static let headersSetextRegex = MarklightRegex(pattern: headerSetextPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    fileprivate static let setextUnderlinePattern = [\n        \"(==+|--+)     # $1 = string of ='s or -'s\",\n        \"\\\\p{Z}*$\"\n        ].joined(separator: \"\\n\")\n    \n    public static let headersSetextUnderlineRegex = MarklightRegex(pattern: setextUnderlinePattern, options: [.allowCommentsAndWhitespace])\n    \n    /*\n     # Head\n     \n     ## Subhead ##\n     */\n    \n    fileprivate static let headerAtxPattern = [\n        \"^(\\\\#{1,6}\\\\  )  # $1 = string of #'s\",\n        \"\\\\p{Z}*\",\n        \"(.+?)        # $2 = Header text\",\n        \"\\\\p{Z}*\",\n        \"\\\\#*         # optional closing #'s (not counted)\",\n        \"(?:\\\\n|\\\\Z)\"\n        ].joined(separator: \"\\n\")\n    \n    public static let headersAtxRegex = MarklightRegex(pattern: headerAtxPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    fileprivate static let headersAtxOpeningPattern = [\n        \"^(\\\\#{1,6}\\\\ )\"\n        ].joined(separator: \"\\n\")\n    \n    public static let headersAtxOpeningRegex = MarklightRegex(pattern: headersAtxOpeningPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    fileprivate static let headersAtxClosingPattern = [\n        \"\\\\#{1,6}\\\\ \\\\n+\"\n        ].joined(separator: \"\\n\")\n    \n    public static let headersAtxClosingRegex = MarklightRegex(pattern: headersAtxClosingPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    // MARK: Reference links\n    \n    /*\n     TODO: we don't know how reference links are formed\n     */\n    \n    fileprivate static let referenceLinkPattern = [\n        \"^\\\\p{Z}{0,\\(_tabWidth - 1)}\\\\[([^\\\\[\\\\]]+)\\\\]:  # id = $1\",\n        \"  \\\\p{Z}*\",\n        \"  \\\\n?                   # maybe *one* newline\",\n        \"  \\\\p{Z}*\",\n        \"<?(\\\\S+?)>?              # url = $2\",\n        \"  \\\\p{Z}*\",\n        \"  \\\\n?                   # maybe one newline\",\n        \"  \\\\p{Z}*\",\n        \"(?:\",\n        \"    (?<=\\\\s)             # lookbehind for whitespace\",\n        \"    [\\\"(]\",\n        \"    (.+?)                # title = $3\",\n        \"    [\\\")]\",\n        \"    \\\\p{Z}*\",\n        \")?                       # title is optional\",\n        \"(?:\\\\n|\\\\Z)\"\n        ].joined(separator: \"\")\n    \n    public static let referenceLinkRegex = MarklightRegex(pattern: referenceLinkPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    // MARK: Lists\n    \n    /*\n     * First element\n     * Second element\n     */\n    \n    fileprivate static let _markerUL = \"[*+-]\"\n    fileprivate static let _markerOL = \"[0-9-]+[.]\"\n\n    fileprivate static let _listMarker = \"(?:\\\\p{Z}|\\\\t)*(?:\\(_markerUL)|\\(_markerOL))\"\n    fileprivate static let _listSingleLinePattern = \"^(?:\\\\p{Z}|\\\\t)*((?:[*+-]|\\\\d+[.]))\\\\p{Z}+\"\n\n    public static let listRegex = MarklightRegex(pattern: _listSingleLinePattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    public static let listOpeningRegex = MarklightRegex(pattern: _listMarker, options: [.allowCommentsAndWhitespace])\n\n    // MARK: Anchors\n    \n    /*\n     [Title](http://example.com)\n     */\n    \n    fileprivate static let anchorPattern = [\n        \"(                                  # wrap whole match in $1\",\n        \"    \\\\[\",\n        \"        (\\(NotesTextProcessor.getNestedBracketsPattern()))  # link text = $2\",\n        \"    \\\\]\",\n        \"\",\n        \"    \\\\p{Z}?                        # one optional space\",\n        \"    (?:\\\\n\\\\p{Z}*)?                # one optional newline followed by spaces\",\n        \"\",\n        \"    \\\\[\",\n        \"        (.*?)                      # id = $3\",\n        \"    \\\\]\",\n        \")\"\n        ].joined(separator: \"\\n\")\n    \n    public static let anchorRegex = MarklightRegex(pattern: anchorPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let opneningSquarePattern = [\n        \"(\\\\[)\"\n        ].joined(separator: \"\\n\")\n    \n    public static let openingSquareRegex = MarklightRegex(pattern: opneningSquarePattern, options: [.allowCommentsAndWhitespace])\n    \n    fileprivate static let closingSquarePattern = [\n        \"\\\\]\"\n        ].joined(separator: \"\\n\")\n    \n    public static let closingSquareRegex = MarklightRegex(pattern: closingSquarePattern, options: [.allowCommentsAndWhitespace])\n    \n    fileprivate static let coupleSquarePattern = [\n        \"\\\\[(.*?)\\\\]\"\n        ].joined(separator: \"\\n\")\n    \n    public static let coupleSquareRegex = MarklightRegex(pattern: coupleSquarePattern, options: [])\n    \n    fileprivate static let coupleRoundPattern = [\n        \".*(?:\\\\])\\\\((.+)\\\\)\"\n        ].joined(separator: \"\\n\")\n    \n    public static let coupleRoundRegex = MarklightRegex(pattern: coupleRoundPattern, options: [])\n    \n    fileprivate static let parenPattern = [\n        \"(\",\n        \"\\\\(                 # literal paren\",\n        \"      \\\\p{Z}*\",\n        \"      (\\(NotesTextProcessor.getNestedParensPattern()))    # href = $3\",\n        \"      \\\\p{Z}*\",\n        \"      (               # $4\",\n        \"      (['\\\"])         # quote char = $5\",\n        \"      (.*?)           # title = $6\",\n        \"      \\\\5             # matching quote\",\n        \"      \\\\p{Z}*\",\n        \"      )?              # title is optional\",\n        \"  \\\\)\",\n        \")\"\n        ].joined(separator: \"\\n\")\n    \n    public static let parenRegex = MarklightRegex(pattern: parenPattern, options: [.allowCommentsAndWhitespace])\n    \n    fileprivate static let anchorInlinePattern = [\n        \"(                           # wrap whole match in $1\",\n        \"    \\\\[\",\n        \"        (\\(NotesTextProcessor.getNestedBracketsPattern()))   # link text = $2\",\n        \"    \\\\]\",\n        \"    \\\\(                     # literal paren\",\n        \"        \\\\p{Z}*\",\n        \"        (\\(NotesTextProcessor.getNestedParensPattern()))   # href = $3\",\n        \"        \\\\p{Z}*\",\n        \"        (                   # $4\",\n        \"        (['\\\"])           # quote char = $5\",\n        \"        (.*?)               # title = $6\",\n        \"        \\\\5                 # matching quote\",\n        \"        \\\\p{Z}*                # ignore any spaces between closing quote and )\",\n        \"        )?                  # title is optional\",\n        \"    \\\\)\",\n        \")\"\n        ].joined(separator: \"\\n\")\n    \n    public static let anchorInlineRegex = MarklightRegex(pattern: anchorInlinePattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    // Mark: GFM links\n    \n    fileprivate static let anchorInlineGFMPattern = [\n        \"(                           # wrap whole match in $1\",\n        \"    \\\\[\",\n        \"        (\\(NotesTextProcessor.getNestedBracketsPattern()))   # link text = $2\",\n        \"    \\\\]\",\n        \"    \\\\(                     # literal paren\",\n        \"        \\\\p{Z}*\",\n        \"        (?:                 # URL group (non-capturing)\",\n        \"            <               # opening angle bracket\",\n        \"            ([^>]+)         # href with spaces = $3\",\n        \"            >               # closing angle bracket\",\n        \"        |                   # OR\",\n        \"            (\\(NotesTextProcessor.getNestedParensPattern()))   # regular href = $4\",\n        \"        )\",\n        \"        \\\\p{Z}*\",\n        \"        (                   # $5\",\n        \"        (['\\\"])           # quote char = $6\",\n        \"        (.*?)               # title = $7\",\n        \"        \\\\6                 # matching quote\",\n        \"        \\\\p{Z}*                # ignore any spaces between closing quote and )\",\n        \"        )?                  # title is optional\",\n        \"    \\\\)\",\n        \")\"\n    ].joined(separator: \"\\n\")\n\n    public static let anchorInlineGFMRegex = MarklightRegex(pattern: anchorInlineGFMPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    // Mark: Images\n    \n    /*\n     ![Title](http://example.com/image.png)\n     */\n    \n    fileprivate static let imagePattern = [\n        \"(               # wrap whole match in $1\",\n        \"!\\\\[\",\n        \"    (.*?)       # alt text = $2\",\n        \"\\\\]\",\n        \"\",\n        \"\\\\p{Z}?            # one optional space\",\n        \"(?:\\\\n\\\\p{Z}*)?    # one optional newline followed by spaces\",\n        \"\",\n        \"\\\\[\",\n        \"    (.*?)       # id = $3\",\n        \"\\\\]\",\n        \"\",\n        \")\"\n        ].joined(separator: \"\\n\")\n    \n    public static let imageRegex = MarklightRegex(pattern: imagePattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let imageOpeningSquarePattern = [\n        \"(!\\\\[)\"\n        ].joined(separator: \"\\n\")\n    \n    public static let imageOpeningSquareRegex = MarklightRegex(pattern: imageOpeningSquarePattern, options: [.allowCommentsAndWhitespace])\n    \n    fileprivate static let imageClosingSquarePattern = [\n        \"(\\\\])\"\n        ].joined(separator: \"\\n\")\n    \n    public static let imageClosingSquareRegex = MarklightRegex(pattern: imageClosingSquarePattern, options: [.allowCommentsAndWhitespace])\n\n    fileprivate static let todoInlinePattern = \"(^(-\\\\ \\\\[(?:\\\\ |x)\\\\])\\\\ )\"\n    \n    public static let todoInlineRegex = MarklightRegex(pattern: todoInlinePattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n\n    fileprivate static let allTodoInlinePattern = \"((-\\\\ \\\\[(?:\\\\ |x)\\\\])\\\\ )\"\n\n    public static let allTodoInlineRegex = MarklightRegex(pattern: allTodoInlinePattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    fileprivate static let codeSpanPattern = [\n        \"(?<![\\\\\\\\`])   # Character before opening ` can't be a backslash or backtick\",\n        \"(`+)           # $1 = Opening run of `\",\n        \"(?!`)          # and no more backticks -- match the full run\",\n        \"(.+?)          # $2 = The code block\",\n        \"(?<!`)\",\n        \"\\\\1\",\n        \"(?!`)\"\n        ].joined(separator: \"\\n\")\n    \n    public static let codeSpanRegex = MarklightRegex(pattern: codeSpanPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let codeSpanOpeningPattern = [\n        \"(?<![\\\\\\\\`])   # Character before opening ` can't be a backslash or backtick\",\n        \"(`+)           # $1 = Opening run of `\"\n        ].joined(separator: \"\\n\")\n    \n    public static let codeSpanOpeningRegex = MarklightRegex(pattern: codeSpanOpeningPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let codeSpanClosingPattern = [\n        \"(?<![\\\\\\\\`])   # Character before opening ` can't be a backslash or backtick\",\n        \"(`+)           # $1 = Opening run of `\"\n        ].joined(separator: \"\\n\")\n    \n    public static let codeSpanClosingRegex = MarklightRegex(pattern: codeSpanClosingPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    // MARK: Block quotes\n    \n    /*\n     > Quoted text\n     */\n    \n    fileprivate static let blockQuotePattern = [\n        \"(                           # Wrap whole match in $1\",\n        \"    (\",\n        \"    ^\\\\p{Z}*>\\\\p{Z}?              # '>' at the start of a line\",\n        \"        .+(?:\\\\n|\\\\Z)               # rest of the first line\",\n        \"    (.+(?:\\\\n|\\\\Z))*                # subsequent consecutive lines\",\n        \"    (?:\\\\n|\\\\Z)*                    # blanks\",\n        \"    )+\",\n        \")\"\n        ].joined(separator: \"\\n\")\n    \n    public static let blockQuoteRegex = MarklightRegex(pattern: blockQuotePattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    fileprivate static let blockQuoteOpeningPattern = [\n        \"(^\\\\p{Z}*>\\\\p{Z})\"\n        ].joined(separator: \"\\n\")\n    \n    public static let blockQuoteOpeningRegex = MarklightRegex(pattern: blockQuoteOpeningPattern, options: [.anchorsMatchLines])\n    \n    // MARK: App url\n    \n    fileprivate static let appUrlPattern = \"(\\\\[\\\\[)(.+?[\\\\[\\\\]]*)(\\\\]\\\\])\"\n\n    public static let appUrlRegex = MarklightRegex(pattern: appUrlPattern, options: [.anchorsMatchLines])\n    \n    // MARK: Bold\n    \n    /*\n     **Bold**\n     __Bold__\n     */\n    \n    fileprivate static let strictBoldPattern = \"(^|[\\\\W_])(?:(?!\\\\1)|(?=^))(\\\\*|_)\\\\2(?=\\\\S)(.*?\\\\S)\\\\2\\\\2(?!\\\\2)(?=[\\\\W_]|$)\"\n\n    public static let strictBoldRegex = MarklightRegex(pattern: strictBoldPattern, options: [.anchorsMatchLines])\n\n    fileprivate static let boldPattern = \"(\\\\*\\\\*) (?=\\\\S) (.+?[*_]*) (?<=\\\\S) \\\\1\"\n\n    public static let boldRegex = MarklightRegex(pattern: boldPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n\n    fileprivate static let strikePattern = \"(\\\\~\\\\~) (?=\\\\S) (.+?[~]*) (?<=\\\\S) \\\\1\"\n\n    public static let strikeRegex = MarklightRegex(pattern: strikePattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n    \n    // MARK: Italic\n    \n    /*\n     *Italic*\n     _Italic_\n     */\n    \n    fileprivate static let strictItalicPattern = \"(^|[\\\\W_])(?:(?!\\\\1)|(?=^))(\\\\*|_)(?=\\\\S)((?:(?!\\\\2).)*?\\\\S)\\\\2(?!\\\\2)(?=[\\\\W_]|$)\"\n\n    public static let strictItalicRegex = MarklightRegex(pattern: strictItalicPattern, options: [.anchorsMatchLines])\n    \n    fileprivate static let italicPattern = \"(\\\\*) (?=\\\\S) (.+?) (?<=\\\\S) \\\\1\"\n\n    public static let italicRegex = MarklightRegex(pattern: italicPattern, options: [.allowCommentsAndWhitespace, .anchorsMatchLines])\n\n    fileprivate static let autolinkPattern = \"([\\\\(]*(https?|sftp|file|ftp):[^`\\'\\\">\\\\s\\\\*]+)\"\n    \n    public static let autolinkRegex = MarklightRegex(pattern: autolinkPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let autolinkPrefixPattern = \"((https?|sftp|file|ftp)://)\"\n\n    public static let autolinkPrefixRegex = MarklightRegex(pattern: autolinkPrefixPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let autolinkEmailPattern = [\n        \"(?:mailto:)?\",\n        \"(\",\n        \"  [-.\\\\w]+\",\n        \"  \\\\@\",\n        \"  [-a-z0-9]+(\\\\.[-a-z0-9]+)*\\\\.[a-z]+\",\n        \")\"\n        ].joined(separator: \"\\n\")\n    \n    public static let autolinkEmailRegex = MarklightRegex(pattern: autolinkEmailPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    fileprivate static let mailtoPattern = \"mailto:\"\n    \n    public static let mailtoRegex = MarklightRegex(pattern: mailtoPattern, options: [.allowCommentsAndWhitespace, .dotMatchesLineSeparators])\n    \n    /// maximum nested depth of [] and () supported by the transform;\n    /// implementation detail\n    fileprivate static let _nestDepth = 6\n    \n    fileprivate static var _nestedBracketsPattern = \"\"\n    fileprivate static var _nestedParensPattern = \"\"\n    \n    /// Reusable pattern to match balanced [brackets]. See Friedl's\n    /// \"Mastering Regular Expressions\", 2nd Ed., pp. 328-331.\n    fileprivate static func getNestedBracketsPattern() -> String {\n        // in other words [this] and [this[also]] and [this[also[too]]]\n        // up to _nestDepth\n        if (_nestedBracketsPattern.isEmpty) {\n            _nestedBracketsPattern = repeatString([\n                \"(?>             # Atomic matching\",\n                \"[^\\\\[\\\\]]+      # Anything other than brackets\",\n                \"|\",\n                \"\\\\[\"\n                ].joined(separator: \"\\n\"), _nestDepth) +\n                repeatString(\" \\\\])*\", _nestDepth)\n        }\n        return _nestedBracketsPattern\n    }\n    \n    /// Reusable pattern to match balanced (parens). See Friedl's\n    /// \"Mastering Regular Expressions\", 2nd Ed., pp. 328-331.\n    fileprivate static func getNestedParensPattern() -> String {\n        // in other words (this) and (this(also)) and (this(also(too)))\n        // up to _nestDepth\n        if (_nestedParensPattern.isEmpty) {\n            _nestedParensPattern = repeatString([\n                \"(?>            # Atomic matching\",\n                \"[^()\\\\s]+      # Anything other than parens or whitespace\",\n                \"|\",\n                \"\\\\(\"\n                ].joined(separator: \"\\n\"), _nestDepth) +\n                repeatString(\" \\\\))*\", _nestDepth)\n        }\n        return _nestedParensPattern\n    }\n    \n    /// this is to emulate what's available in PHP\n    fileprivate static func repeatString(_ text: String, _ count: Int) -> String {\n        return Array(repeating: text, count: count).reduce(\"\", +)\n    }\n\n    fileprivate static func getHeaderFont(level: Int, baseFont: PlatformFont, baseFontSize: CGFloat) -> PlatformFont {\n        let headerSize: CGFloat\n        \n        switch level {\n        case 1: headerSize = baseFontSize * 2.0    // #\n        case 2: headerSize = baseFontSize * 1.7    // ##\n        case 3: headerSize = baseFontSize * 1.4    // ###\n        case 4: headerSize = baseFontSize * 1.2    // ####\n        case 5: headerSize = baseFontSize * 1.1    // #####\n        case 6: headerSize = baseFontSize * 1.05   // ######\n        default: headerSize = baseFontSize\n        }\n        \n        let boldTraits: FontTraits = [.bold]\n        var fontDescriptor = baseFont.fontDescriptor\n            .withSymbolicTraits(boldTraits)\n        \n        #if os(OSX)\n            fontDescriptor = fontDescriptor.withSize(headerSize)\n        \n            return PlatformFont(descriptor: fontDescriptor, size: headerSize) ?? baseFont\n        #else\n            fontDescriptor = fontDescriptor?.withSize(headerSize)\n        \n            guard let fontDescriptor = fontDescriptor else { return baseFont }\n        \n            return PlatformFont(descriptor: fontDescriptor, size: headerSize)\n        #endif\n    }\n}\n\npublic struct MarklightRegex {\n    public let regularExpression: NSRegularExpression!\n    \n    public init(pattern: String, options: NSRegularExpression.Options = NSRegularExpression.Options(rawValue: 0)) {\n        var error: NSError?\n        let re: NSRegularExpression?\n        do {\n            re = try NSRegularExpression(pattern: pattern,\n                                         options: options)\n        } catch let error1 as NSError {\n            error = error1\n            re = nil\n        }\n        \n        // If re is nil, it means NSRegularExpression didn't like\n        // the pattern we gave it.  All regex patterns used by Markdown\n        // should be valid, so this probably means that a pattern\n        // valid for .NET Regex is not valid for NSRegularExpression.\n        if re == nil {\n            if let error = error {\n                print(\"Regular expression error: \\(error.userInfo)\")\n            }\n            assert(re != nil)\n        }\n        \n        self.regularExpression = re\n    }\n    \n    public func matches(_ input: String, range: NSRange,\n                        completion: @escaping (_ result: NSTextCheckingResult?) -> Void) {\n        let s = input as NSString\n        //NSRegularExpression.\n        let options = NSRegularExpression.MatchingOptions(rawValue: 0)\n        regularExpression.enumerateMatches(in: s as String,\n                                           options: options,\n                                           range: range,\n                                           using: { (result, flags, stop) -> Void in\n\n                                            completion(result)\n        })\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/RepositoryAction.swift",
    "content": "//\n//  RepositoryAction.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 13.03.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\nimport Foundation\n\npublic enum RepositoryAction: Int, CaseIterable {\n    case initCommit\n    case clonePush\n    case commit\n    case pullPush\n\n    var title: String {\n        switch self {\n        case .initCommit: return \"Init/commit\"\n        case .clonePush: return \"Clone/push\"\n        case .pullPush: return \"Pull/push\"\n        case .commit: return \"Add/commit\"\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Assembly.swift",
    "content": "//\n//  AssemblyLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct AssemblyLanguage: LanguageDefinition {\n    let name = \"Assembly\"\n    let aliases: [String]? = [\"asm\", \"asm86\", \"nasm\", \"masm\", \"gas\"]\n    let caseInsensitive = true\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Data movement\n            \"mov\", \"movb\", \"movw\", \"movl\", \"movq\", \"movsx\", \"movzx\", \"lea\", \"xchg\",\n            \"push\", \"pop\", \"pusha\", \"popa\", \"pushad\", \"popad\", \"pushf\", \"popf\",\n            \"pushfd\", \"popfd\",\n            // Arithmetic\n            \"add\", \"adc\", \"sub\", \"sbb\", \"mul\", \"imul\", \"div\", \"idiv\", \"inc\", \"dec\",\n            \"neg\", \"cmp\", \"aaa\", \"aas\", \"aam\", \"aad\", \"daa\", \"das\",\n            // Logical\n            \"and\", \"or\", \"xor\", \"not\", \"test\", \"shl\", \"shr\", \"sal\", \"sar\", \"rol\",\n            \"ror\", \"rcl\", \"rcr\", \"shld\", \"shrd\",\n            // Control flow\n            \"jmp\", \"je\", \"jz\", \"jne\", \"jnz\", \"jg\", \"jge\", \"jl\", \"jle\", \"ja\", \"jae\",\n            \"jb\", \"jbe\", \"js\", \"jns\", \"jo\", \"jno\", \"jp\", \"jpe\", \"jnp\", \"jpo\",\n            \"jcxz\", \"jecxz\", \"jrcxz\",\n            \"call\", \"ret\", \"retn\", \"retf\", \"iret\", \"iretd\", \"iretq\",\n            \"loop\", \"loope\", \"loopz\", \"loopne\", \"loopnz\",\n            // String operations\n            \"movs\", \"movsb\", \"movsw\", \"movsd\", \"movsq\",\n            \"cmps\", \"cmpsb\", \"cmpsw\", \"cmpsd\", \"cmpsq\",\n            \"scas\", \"scasb\", \"scasw\", \"scasd\", \"scasq\",\n            \"lods\", \"lodsb\", \"lodsw\", \"lodsd\", \"lodsq\",\n            \"stos\", \"stosb\", \"stosw\", \"stosd\", \"stosq\",\n            \"rep\", \"repe\", \"repz\", \"repne\", \"repnz\",\n            // Stack frame\n            \"enter\", \"leave\",\n            // Flag operations\n            \"clc\", \"stc\", \"cmc\", \"cld\", \"std\", \"cli\", \"sti\",\n            \"lahf\", \"sahf\", \"pushf\", \"popf\", \"pushfd\", \"popfd\",\n            // Processor control\n            \"nop\", \"hlt\", \"wait\", \"lock\", \"esc\",\n            // Set byte on condition\n            \"sete\", \"setz\", \"setne\", \"setnz\", \"setg\", \"setge\", \"setl\", \"setle\",\n            \"seta\", \"setae\", \"setb\", \"setbe\", \"sets\", \"setns\", \"seto\", \"setno\",\n            \"setp\", \"setpe\", \"setnp\", \"setpo\",\n            // Conditional move\n            \"cmove\", \"cmovz\", \"cmovne\", \"cmovnz\", \"cmovg\", \"cmovge\", \"cmovl\", \"cmovle\",\n            \"cmova\", \"cmovae\", \"cmovb\", \"cmovbe\", \"cmovs\", \"cmovns\", \"cmovo\", \"cmovno\",\n            \"cmovc\", \"cmovnc\",\n            // Bit manipulation\n            \"bt\", \"btc\", \"btr\", \"bts\", \"bsf\", \"bsr\", \"bswap\",\n            // I/O\n            \"in\", \"out\", \"ins\", \"insb\", \"insw\", \"insd\", \"outs\", \"outsb\", \"outsw\", \"outsd\",\n            // System\n            \"int\", \"into\", \"bound\", \"cpuid\", \"rdtsc\", \"rdmsr\", \"wrmsr\",\n            \"lgdt\", \"sgdt\", \"lidt\", \"sidt\", \"lldt\", \"sldt\", \"ltr\", \"str\",\n            \"lmsw\", \"smsw\", \"clts\", \"arpl\", \"lar\", \"lsl\", \"verr\", \"verw\",\n            \"invd\", \"wbinvd\", \"invlpg\", \"invpcid\",\n            // x87 FPU\n            \"fld\", \"fst\", \"fstp\", \"fild\", \"fist\", \"fistp\", \"fbld\", \"fbstp\",\n            \"fxch\", \"fcmove\", \"fcmovne\", \"fcmovb\", \"fcmovbe\", \"fcmovnb\", \"fcmovnbe\",\n            \"fadd\", \"faddp\", \"fiadd\", \"fsub\", \"fsubp\", \"fisub\", \"fsubr\", \"fsubrp\", \"fisubr\",\n            \"fmul\", \"fmulp\", \"fimul\", \"fdiv\", \"fdivp\", \"fidiv\", \"fdivr\", \"fdivrp\", \"fidivr\",\n            \"fabs\", \"fchs\", \"fcom\", \"fcomp\", \"fcompp\", \"ficom\", \"ficomp\", \"fcomi\", \"fcomip\",\n            \"fucomi\", \"fucomip\", \"ftst\", \"fxam\", \"fsqrt\", \"fsin\", \"fcos\", \"fsincos\", \"fptan\",\n            \"fpatan\", \"f2xm1\", \"fyl2x\", \"fyl2xp1\", \"fldz\", \"fld1\", \"fldpi\", \"fldl2e\", \"fldl2t\",\n            \"fldlg2\", \"fldln2\", \"finit\", \"fninit\", \"fclex\", \"fnclex\", \"fstcw\", \"fnstcw\",\n            \"fldcw\", \"fstenv\", \"fnstenv\", \"fldenv\", \"fsave\", \"fnsave\", \"frstor\", \"fincstp\",\n            \"fdecstp\", \"ffree\", \"ffreep\", \"fnop\", \"fwait\",\n            // SSE/AVX\n            \"movaps\", \"movups\", \"movss\", \"movsd\", \"movdqa\", \"movdqu\", \"movq\",\n            \"addps\", \"addss\", \"subps\", \"subss\", \"mulps\", \"mulss\", \"divps\", \"divss\",\n            \"sqrtps\", \"sqrtss\", \"maxps\", \"maxss\", \"minps\", \"minss\",\n            \"andps\", \"andnps\", \"orps\", \"xorps\", \"cmpps\", \"cmpss\",\n            \"vmovaps\", \"vmovups\", \"vaddps\", \"vsubps\", \"vmulps\", \"vdivps\",\n            // MMX\n            \"movd\", \"movq\", \"packsswb\", \"packssdw\", \"packuswb\", \"paddb\", \"paddw\", \"paddd\",\n            \"paddsb\", \"paddsw\", \"paddusb\", \"paddusw\", \"pand\", \"pandn\", \"por\", \"pxor\",\n            \"pcmpeqb\", \"pcmpeqw\", \"pcmpeqd\", \"pcmpgtb\", \"pcmpgtw\", \"pcmpgtd\",\n            \"pmaddwd\", \"pmulhw\", \"pmullw\", \"psllw\", \"pslld\", \"psllq\", \"psraw\", \"psrad\",\n            \"psrlw\", \"psrld\", \"psrlq\", \"psubb\", \"psubw\", \"psubd\", \"psubsb\", \"psubsw\",\n            \"psubusb\", \"psubusw\", \"punpckhbw\", \"punpckhwd\", \"punpckhdq\", \"punpcklbw\",\n            \"punpcklwd\", \"punpckldq\", \"emms\"\n        ],\n        \"literal\": [],\n        \"built_in\": [\n            // Registers - 8-bit\n            \"al\", \"ah\", \"bl\", \"bh\", \"cl\", \"ch\", \"dl\", \"dh\",\n            \"spl\", \"bpl\", \"sil\", \"dil\",\n            \"r8b\", \"r9b\", \"r10b\", \"r11b\", \"r12b\", \"r13b\", \"r14b\", \"r15b\",\n            // Registers - 16-bit\n            \"ax\", \"bx\", \"cx\", \"dx\", \"si\", \"di\", \"bp\", \"sp\",\n            \"r8w\", \"r9w\", \"r10w\", \"r11w\", \"r12w\", \"r13w\", \"r14w\", \"r15w\",\n            \"ip\", \"cs\", \"ds\", \"es\", \"fs\", \"gs\", \"ss\",\n            // Registers - 32-bit\n            \"eax\", \"ebx\", \"ecx\", \"edx\", \"esi\", \"edi\", \"ebp\", \"esp\",\n            \"r8d\", \"r9d\", \"r10d\", \"r11d\", \"r12d\", \"r13d\", \"r14d\", \"r15d\",\n            \"eip\", \"eflags\",\n            // Registers - 64-bit\n            \"rax\", \"rbx\", \"rcx\", \"rdx\", \"rsi\", \"rdi\", \"rbp\", \"rsp\",\n            \"r8\", \"r9\", \"r10\", \"r11\", \"r12\", \"r13\", \"r14\", \"r15\",\n            \"rip\", \"rflags\",\n            // FPU registers\n            \"st0\", \"st1\", \"st2\", \"st3\", \"st4\", \"st5\", \"st6\", \"st7\",\n            \"st\",\n            // MMX registers\n            \"mm0\", \"mm1\", \"mm2\", \"mm3\", \"mm4\", \"mm5\", \"mm6\", \"mm7\",\n            // XMM registers (SSE)\n            \"xmm0\", \"xmm1\", \"xmm2\", \"xmm3\", \"xmm4\", \"xmm5\", \"xmm6\", \"xmm7\",\n            \"xmm8\", \"xmm9\", \"xmm10\", \"xmm11\", \"xmm12\", \"xmm13\", \"xmm14\", \"xmm15\",\n            // YMM registers (AVX)\n            \"ymm0\", \"ymm1\", \"ymm2\", \"ymm3\", \"ymm4\", \"ymm5\", \"ymm6\", \"ymm7\",\n            \"ymm8\", \"ymm9\", \"ymm10\", \"ymm11\", \"ymm12\", \"ymm13\", \"ymm14\", \"ymm15\",\n            // ZMM registers (AVX-512)\n            \"zmm0\", \"zmm1\", \"zmm2\", \"zmm3\", \"zmm4\", \"zmm5\", \"zmm6\", \"zmm7\",\n            \"zmm8\", \"zmm9\", \"zmm10\", \"zmm11\", \"zmm12\", \"zmm13\", \"zmm14\", \"zmm15\",\n            \"zmm16\", \"zmm17\", \"zmm18\", \"zmm19\", \"zmm20\", \"zmm21\", \"zmm22\", \"zmm23\",\n            \"zmm24\", \"zmm25\", \"zmm26\", \"zmm27\", \"zmm28\", \"zmm29\", \"zmm30\", \"zmm31\",\n            // Control registers\n            \"cr0\", \"cr2\", \"cr3\", \"cr4\", \"cr8\",\n            // Debug registers\n            \"dr0\", \"dr1\", \"dr2\", \"dr3\", \"dr6\", \"dr7\",\n            // Size directives\n            \"byte\", \"word\", \"dword\", \"qword\", \"tbyte\", \"oword\", \"yword\", \"zword\",\n            \"ptr\", \"offset\", \"seg\",\n            // Data types\n            \"db\", \"dw\", \"dd\", \"dq\", \"dt\", \"do\", \"dy\", \"dz\",\n            \"resb\", \"resw\", \"resd\", \"resq\", \"rest\", \"reso\", \"resy\", \"resz\",\n            // Directives\n            \"section\", \"segment\", \"global\", \"extern\", \"public\", \"extrn\",\n            \"align\", \"alignb\", \"bits\", \"use16\", \"use32\", \"use64\",\n            \"org\", \"times\", \"equ\", \"macro\", \"endm\", \"struc\", \"endstruc\",\n            \"istruc\", \"iend\", \"end\", \"proc\", \"endp\",\n            // Special\n            \"short\", \"near\", \"far\", \"abs\", \"rel\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"comment\", begin: \";\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"@\", end: \"\\n\"),\n        \n        Mode(scope: \"meta\", begin: \"^\\\\s*%(?:define|undef|include|ifdef|ifndef|if|elif|else|endif|macro|endmacro|rep|endrep)\\\\b\"),\n        Mode(scope: \"meta\", begin: \"^\\\\.(?:text|data|bss|section|global|extern|align|ascii|asciz|byte|word|long|quad)\\\\b\"),\n        Mode(scope: \"meta\", begin: \"^\\\\s*\\\\.\\\\w+\"),\n        \n        Mode(scope: \"function\", begin: \"^[a-zA-Z_][a-zA-Z0-9_]*:\"),\n        Mode(scope: \"function\", begin: \"^\\\\.[a-zA-Z_][a-zA-Z0-9_]*:\"),\n        \n        Mode(scope: \"function\", begin: \"^\\\\d+:\"),\n        \n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)'\"),\n        \n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+[hH]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b[01]+[bB]\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[oO][0-7]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b[0-7]+[oOqQ]\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b[0-9][0-9a-fA-F]*[hH]\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\$[0-9a-fA-F]+\\\\b\"),\n        // Decimal\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[dD]?\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+(?:[eE][+-]?\\\\d+)?\\\\b\"),\n        \n        Mode(scope: \"meta\", begin: \"\\\\[\", end: \"\\\\]\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Bash.swift",
    "content": "//\n//  BashLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct BashLanguage: LanguageDefinition {\n    let name = \"Bash\"\n    let aliases: [String]? = [\"bash\", \"sh\", \"shell\", \"zsh\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Control flow\n            \"if\", \"then\", \"else\", \"elif\", \"fi\", \"case\", \"esac\", \"for\", \"select\",\n            \"while\", \"until\", \"do\", \"done\", \"in\", \"function\", \"time\",\n            // Declarations\n            \"declare\", \"typeset\", \"local\", \"export\", \"readonly\", \"unset\",\n            // Built-in commands\n            \"break\", \"continue\", \"return\", \"exit\", \"shift\", \"eval\", \"exec\",\n            \"source\", \".\", \"trap\", \"wait\", \"jobs\", \"bg\", \"fg\", \"disown\",\n            \"suspend\", \"alias\", \"unalias\", \"set\", \"unset\", \"shopt\",\n            \"enable\", \"command\", \"builtin\", \"caller\", \"true\", \"false\",\n            // Test commands\n            \"test\", \"[\", \"[[\",\n            // Compound commands\n            \"{\", \"}\", \"((\", \"))\", \"[[\", \"]]\"\n        ],\n        \"literal\": [\"true\", \"false\"],\n        \"built_in\": [\n            // File operations\n            \"cat\", \"cp\", \"mv\", \"rm\", \"rmdir\", \"mkdir\", \"touch\", \"ln\", \"chmod\",\n            \"chown\", \"chgrp\", \"ls\", \"pwd\", \"cd\", \"pushd\", \"popd\", \"dirs\",\n            \"find\", \"locate\", \"which\", \"whereis\", \"file\", \"stat\", \"du\", \"df\",\n            \"mount\", \"umount\", \"dd\", \"tar\", \"gzip\", \"gunzip\", \"bzip2\", \"bunzip2\",\n            \"zip\", \"unzip\", \"compress\", \"uncompress\", \"rsync\", \"scp\", \"sftp\",\n            // Text processing\n            \"echo\", \"printf\", \"read\", \"cat\", \"head\", \"tail\", \"less\", \"more\",\n            \"grep\", \"egrep\", \"fgrep\", \"sed\", \"awk\", \"cut\", \"paste\", \"join\",\n            \"sort\", \"uniq\", \"wc\", \"tr\", \"expand\", \"unexpand\", \"fold\", \"fmt\",\n            \"nl\", \"pr\", \"tee\", \"split\", \"csplit\", \"diff\", \"patch\", \"cmp\",\n            \"comm\", \"column\", \"iconv\", \"dos2unix\", \"unix2dos\",\n            // Process management\n            \"ps\", \"top\", \"htop\", \"kill\", \"killall\", \"pkill\", \"pgrep\", \"pidof\",\n            \"nice\", \"renice\", \"nohup\", \"screen\", \"tmux\", \"at\", \"batch\", \"cron\",\n            \"crontab\", \"sleep\", \"timeout\", \"watch\", \"xargs\",\n            // System information\n            \"uname\", \"hostname\", \"uptime\", \"who\", \"whoami\", \"id\", \"groups\",\n            \"users\", \"last\", \"lastlog\", \"w\", \"finger\", \"date\", \"cal\", \"time\",\n            \"timedatectl\", \"localectl\", \"hostnamectl\",\n            // Network\n            \"ping\", \"traceroute\", \"netstat\", \"ss\", \"ip\", \"ifconfig\", \"route\",\n            \"arp\", \"dig\", \"nslookup\", \"host\", \"wget\", \"curl\", \"nc\", \"netcat\",\n            \"telnet\", \"ftp\", \"ssh\", \"scp\", \"rsync\", \"nmap\", \"tcpdump\",\n            // User management\n            \"useradd\", \"usermod\", \"userdel\", \"groupadd\", \"groupmod\", \"groupdel\",\n            \"passwd\", \"chpasswd\", \"su\", \"sudo\", \"visudo\",\n            // Package management\n            \"apt\", \"apt-get\", \"aptitude\", \"dpkg\", \"yum\", \"dnf\", \"rpm\", \"zypper\",\n            \"pacman\", \"brew\", \"snap\", \"flatpak\",\n            // System management\n            \"systemctl\", \"service\", \"journalctl\", \"dmesg\", \"shutdown\", \"reboot\",\n            \"poweroff\", \"halt\", \"init\", \"telinit\",\n            // Shell built-ins\n            \"alias\", \"bg\", \"bind\", \"builtin\", \"caller\", \"cd\", \"command\",\n            \"compgen\", \"complete\", \"compopt\", \"continue\", \"declare\", \"dirs\",\n            \"disown\", \"echo\", \"enable\", \"eval\", \"exec\", \"exit\", \"export\",\n            \"false\", \"fc\", \"fg\", \"getopts\", \"hash\", \"help\", \"history\", \"jobs\",\n            \"kill\", \"let\", \"local\", \"logout\", \"mapfile\", \"popd\", \"printf\",\n            \"pushd\", \"pwd\", \"read\", \"readarray\", \"readonly\", \"return\", \"set\",\n            \"shift\", \"shopt\", \"source\", \"suspend\", \"test\", \"times\", \"trap\",\n            \"true\", \"type\", \"typeset\", \"ulimit\", \"umask\", \"unalias\", \"unset\",\n            \"wait\",\n            // Common utilities\n            \"basename\", \"dirname\", \"expr\", \"bc\", \"dc\", \"seq\", \"yes\", \"tty\",\n            \"stty\", \"clear\", \"reset\", \"script\", \"rev\", \"factor\", \"env\",\n            \"printenv\", \"getopt\", \"getopts\", \"mktemp\", \"mkfifo\", \"tput\",\n            // Archiving\n            \"tar\", \"cpio\", \"zip\", \"unzip\", \"gzip\", \"gunzip\", \"bzip2\", \"bunzip2\",\n            \"xz\", \"unxz\", \"7z\", \"rar\", \"unrar\",\n            // Disk operations\n            \"fdisk\", \"parted\", \"mkfs\", \"fsck\", \"tune2fs\", \"resize2fs\", \"blkid\",\n            \"lsblk\", \"hdparm\", \"smartctl\",\n            // Variables\n            \"PATH\", \"HOME\", \"USER\", \"SHELL\", \"PWD\", \"OLDPWD\", \"TMPDIR\", \"LANG\",\n            \"LC_ALL\", \"TERM\", \"EDITOR\", \"VISUAL\", \"PAGER\", \"PS1\", \"PS2\", \"PS3\",\n            \"PS4\", \"IFS\", \"RANDOM\", \"SECONDS\", \"LINENO\", \"BASHPID\", \"BASH_VERSION\",\n            \"HOSTNAME\", \"UID\", \"EUID\", \"GROUPS\", \"PPID\", \"SHLVL\", \"BASH_SUBSHELL\",\n            // Special parameters\n            \"$@\", \"$*\", \"$#\", \"$$\", \"$!\", \"$?\", \"$-\", \"$_\", \"$0\",\n            // Test operators\n            \"-e\", \"-f\", \"-d\", \"-L\", \"-h\", \"-b\", \"-c\", \"-p\", \"-S\", \"-t\",\n            \"-r\", \"-w\", \"-x\", \"-s\", \"-u\", \"-g\", \"-k\", \"-O\", \"-G\", \"-N\",\n            \"-nt\", \"-ot\", \"-ef\", \"-z\", \"-n\", \"=\", \"!=\", \"==\", \"-eq\", \"-ne\",\n            \"-lt\", \"-le\", \"-gt\", \"-ge\", \"&&\", \"||\", \"!\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Shebang\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        \n        // Heredoc\n        Mode(scope: \"string\", begin: \"<<-?\\\\s*(['\\\"]?)([a-zA-Z_][a-zA-Z0-9_]*)\\\\1\", end: \"^\\\\2$\"),\n        \n        // Variables\n        Mode(scope: \"meta\", begin: \"\\\\$[a-zA-Z_][a-zA-Z0-9_]*\"),\n        Mode(scope: \"meta\", begin: \"\\\\$\\\\{[^}]+\\\\}\"),\n        Mode(scope: \"meta\", begin: \"\\\\$\\\\([^)]+\\\\)\"),\n        Mode(scope: \"meta\", begin: \"\\\\$\\\\(\\\\([^)]+\\\\)\\\\)\"),\n        \n        // Special\n        Mode(scope: \"meta\", begin: \"\\\\$[0-9@*#?$!_-]\"),\n        \n        // Command substitution (backticks)\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Strings with double quotes (allows variable expansion)\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Strings with single quotes (no expansion)\n        CommonModes.stringSingle,\n        \n        // ANSI-C quoting\n        Mode(scope: \"string\", begin: \"\\\\$'\", end: \"'\"),\n        \n        // Functions\n        Mode(scope: \"function\", begin: \"^\\\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\\\s*\\\\(\\\\s*\\\\)\"),\n        Mode(scope: \"function\", begin: \"\\\\bfunction\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Numbers\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b[0-9]+\\\\b\"),\n        \n        // Redirection operators\n        Mode(scope: \"keyword\", begin: \"[0-9]*(?:>>|>|<<|<|&>|&>>|<&|>&|<>)\"),\n        \n        // Pipe\n        Mode(scope: \"keyword\", begin: \"\\\\|\\\\|?|&&?|;|&\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/C.swift",
    "content": "//\n//  CLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct CLanguage: LanguageDefinition {\n    let name = \"C\"\n    let aliases: [String]? = [\"c\", \"h\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"auto\", \"break\", \"case\", \"char\", \"const\", \"continue\", \"default\", \"do\",\n            \"double\", \"else\", \"enum\", \"extern\", \"float\", \"for\", \"goto\", \"if\",\n            \"inline\", \"int\", \"long\", \"register\", \"restrict\", \"return\", \"short\",\n            \"signed\", \"sizeof\", \"static\", \"struct\", \"switch\", \"typedef\", \"union\",\n            \"unsigned\", \"void\", \"volatile\", \"while\",\n            // C99\n            \"_Bool\", \"_Complex\", \"_Imaginary\",\n            // C11\n            \"_Alignas\", \"_Alignof\", \"_Atomic\", \"_Generic\", \"_Noreturn\",\n            \"_Static_assert\", \"_Thread_local\"\n        ],\n        \"literal\": [\"true\", \"false\", \"NULL\"],\n        \"built_in\": [\n            // stdio.h\n            \"printf\", \"scanf\", \"fprintf\", \"fscanf\", \"sprintf\", \"sscanf\",\n            \"fopen\", \"fclose\", \"fread\", \"fwrite\", \"fgets\", \"fputs\", \"fgetc\", \"fputc\",\n            \"getchar\", \"putchar\", \"puts\", \"gets\", \"fseek\", \"ftell\", \"rewind\", \"feof\", \"ferror\",\n            // stdlib.h\n            \"malloc\", \"calloc\", \"realloc\", \"free\", \"exit\", \"abort\", \"atexit\",\n            \"atoi\", \"atof\", \"atol\", \"strtol\", \"strtod\", \"rand\", \"srand\",\n            \"abs\", \"labs\", \"div\", \"ldiv\", \"qsort\", \"bsearch\",\n            // string.h\n            \"strlen\", \"strcpy\", \"strncpy\", \"strcat\", \"strncat\", \"strcmp\", \"strncmp\",\n            \"strchr\", \"strrchr\", \"strstr\", \"strtok\", \"memcpy\", \"memmove\", \"memset\",\n            \"memcmp\", \"memchr\",\n            // math.h\n            \"sin\", \"cos\", \"tan\", \"asin\", \"acos\", \"atan\", \"atan2\",\n            \"sinh\", \"cosh\", \"tanh\", \"exp\", \"log\", \"log10\", \"pow\", \"sqrt\",\n            \"ceil\", \"floor\", \"fabs\", \"fmod\",\n            // time.h\n            \"time\", \"clock\", \"difftime\", \"mktime\", \"strftime\", \"gmtime\", \"localtime\",\n            // ctype.h\n            \"isalnum\", \"isalpha\", \"isdigit\", \"islower\", \"isupper\", \"isspace\",\n            \"toupper\", \"tolower\",\n            // assert.h\n            \"assert\",\n            // Типы\n            \"size_t\", \"ptrdiff_t\", \"wchar_t\", \"FILE\", \"time_t\", \"clock_t\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"meta\", begin: \"^\\\\s*#\\\\s*(?:include|define|undef|if|ifdef|ifndef|else|elif|endif|error|pragma|line)\\\\b.*$\"),\n        \n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(?=\\\\()\"),\n        \n        CommonModes.stringDouble,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[uUlL]*\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+[uUlL]*\\\\b\"),\n        // Float/Double\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[fFlL]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+[fFlL]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[eE][+-]?\\\\d+[fFlL]?\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[uUlL]*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Clojure.swift",
    "content": "//\n//  Clojure.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 09.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct ClojureLanguage: LanguageDefinition {\n    let name = \"Clojure\"\n    let aliases: [String]? = [\"clojure\", \"clj\", \"cljs\", \"cljc\", \"edn\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Special forms\n            \"def\", \"if\", \"do\", \"let\", \"quote\", \"var\", \"fn\", \"loop\", \"recur\",\n            \"throw\", \"try\", \"catch\", \"finally\", \"monitor-enter\", \"monitor-exit\",\n            // Defining forms\n            \"defn\", \"defn-\", \"defmacro\", \"defmethod\", \"defmulti\", \"defonce\",\n            \"defprotocol\", \"defrecord\", \"defstruct\", \"deftype\", \"definterface\",\n            // Binding\n            \"let\", \"letfn\", \"binding\", \"with-bindings\", \"with-bindings*\",\n            \"with-local-vars\", \"with-open\", \"with-precision\", \"with-redefs\",\n            \"with-redefs-fn\",\n            // Conditionals\n            \"if\", \"if-not\", \"if-let\", \"if-some\", \"when\", \"when-not\", \"when-let\",\n            \"when-some\", \"when-first\", \"cond\", \"condp\", \"case\",\n            // Loops\n            \"loop\", \"recur\", \"while\", \"dotimes\", \"doseq\", \"for\", \"doto\",\n            // Functions\n            \"fn\", \"defn\", \"defn-\", \"defmacro\", \"comp\", \"partial\", \"constantly\",\n            \"identity\", \"complement\", \"juxt\", \"some-fn\", \"every-pred\",\n            // Java interop\n            \"new\", \".\", \"..\", \"set!\", \"import\", \"gen-class\", \"gen-interface\",\n            \"proxy\", \"proxy-super\", \"reify\", \"memfn\", \"bean\",\n            // Namespace\n            \"ns\", \"in-ns\", \"create-ns\", \"remove-ns\", \"require\", \"use\", \"import\",\n            \"refer\", \"refer-clojure\", \"alias\",\n            // Vars\n            \"def\", \"defonce\", \"declare\", \"intern\", \"var\",\n            // Metadata\n            \"meta\", \"with-meta\", \"vary-meta\", \"alter-meta!\", \"reset-meta!\",\n            // Threading macros\n            \"->\", \"->>\", \"as->\", \"cond->\", \"cond->>\", \"some->\", \"some->>\",\n            // Logic\n            \"and\", \"or\", \"not\", \"not=\",\n            // Other\n            \"assert\", \"comment\", \"doc\", \"lazy-seq\", \"delay\", \"force\", \"promise\",\n            \"deliver\", \"future\", \"future-call\", \"pmap\", \"pcalls\", \"pvalues\"\n        ],\n        \"literal\": [\"true\", \"false\", \"nil\"],\n        \"built_in\": [\n            // Core functions - Collections\n            \"list\", \"list*\", \"vector\", \"vec\", \"hash-map\", \"hash-set\", \"sorted-map\",\n            \"sorted-set\", \"sorted-map-by\", \"sorted-set-by\", \"seq\", \"cons\", \"conj\",\n            \"concat\", \"lazy-cat\", \"mapcat\", \"cycle\", \"interleave\", \"interpose\",\n            \"rest\", \"next\", \"butlast\", \"drop\", \"drop-while\", \"take\", \"take-nth\",\n            \"take-while\", \"repeat\", \"replicate\", \"iterate\", \"range\", \"merge\",\n            \"merge-with\", \"zipmap\", \"into\", \"reduce\", \"reduce-kv\", \"reductions\",\n            \"set\", \"set/union\", \"set/intersection\", \"set/difference\", \"set/select\",\n            // Sequences\n            \"first\", \"second\", \"last\", \"rest\", \"next\", \"ffirst\", \"fnext\", \"nfirst\",\n            \"nnext\", \"nth\", \"nthnext\", \"rand-nth\", \"when-first\", \"max-key\", \"min-key\",\n            \"distinct\", \"filter\", \"remove\", \"keep\", \"keep-indexed\", \"for\", \"replace\",\n            \"shuffle\", \"random-sample\", \"split-at\", \"split-with\", \"partition\",\n            \"partition-all\", \"partition-by\", \"map\", \"map-indexed\", \"mapcat\", \"mapv\",\n            \"pmap\", \"group-by\", \"frequencies\", \"reduce\", \"reductions\", \"transduce\",\n            // Collections - predicates\n            \"empty?\", \"not-empty\", \"seq?\", \"vector?\", \"list?\", \"map?\", \"set?\",\n            \"coll?\", \"sequential?\", \"associative?\", \"sorted?\", \"counted?\", \"reversible?\",\n            // Collections - operations\n            \"count\", \"empty\", \"contains?\", \"get\", \"get-in\", \"assoc\", \"assoc-in\",\n            \"dissoc\", \"update\", \"update-in\", \"select-keys\", \"rename-keys\", \"keys\",\n            \"vals\", \"key\", \"val\", \"find\", \"peek\", \"pop\", \"conj\", \"disj\",\n            // Sequences - lazy\n            \"lazy-seq\", \"realized?\", \"doall\", \"dorun\",\n            // Strings\n            \"str\", \"subs\", \"format\", \"join\", \"escape\", \"split\", \"split-lines\",\n            \"trim\", \"triml\", \"trimr\", \"trim-newline\", \"upper-case\", \"lower-case\",\n            \"capitalize\", \"reverse\", \"replace\", \"replace-first\", \"re-find\",\n            \"re-seq\", \"re-matches\", \"re-pattern\", \"re-matcher\", \"re-groups\",\n            // Numbers\n            \"inc\", \"dec\", \"max\", \"min\", \"abs\", \"+\", \"-\", \"*\", \"/\", \"quot\", \"rem\",\n            \"mod\", \"bit-and\", \"bit-or\", \"bit-xor\", \"bit-not\", \"bit-shift-left\",\n            \"bit-shift-right\", \"bit-flip\", \"bit-set\", \"bit-test\", \"bit-clear\",\n            \"bit-and-not\", \"even?\", \"odd?\", \"zero?\", \"pos?\", \"neg?\", \"number?\",\n            \"rational?\", \"integer?\", \"ratio?\", \"decimal?\", \"float?\", \"double?\",\n            // Math\n            \"rand\", \"rand-int\", \"rand-nth\", \"+\", \"-\", \"*\", \"/\", \"quot\", \"rem\",\n            \"mod\", \"inc\", \"dec\", \"max\", \"min\", \"==\", \"<\", \">\", \"<=\", \">=\",\n            // Type predicates\n            \"nil?\", \"some?\", \"true?\", \"false?\", \"boolean?\", \"string?\", \"number?\",\n            \"integer?\", \"int?\", \"pos-int?\", \"neg-int?\", \"nat-int?\", \"float?\",\n            \"double?\", \"keyword?\", \"symbol?\", \"ident?\", \"simple-ident?\",\n            \"qualified-ident?\", \"simple-symbol?\", \"qualified-symbol?\",\n            \"simple-keyword?\", \"qualified-keyword?\", \"fn?\", \"ifn?\", \"coll?\",\n            \"list?\", \"vector?\", \"map?\", \"set?\", \"seq?\", \"char?\", \"class?\",\n            \"instance?\", \"var?\", \"identical?\", \"compare\",\n            // Functions\n            \"apply\", \"partial\", \"comp\", \"complement\", \"constantly\", \"identity\",\n            \"fnil\", \"every-pred\", \"some-fn\", \"juxt\", \"memoize\", \"trampoline\",\n            // Atoms, Refs, Agents\n            \"atom\", \"swap!\", \"reset!\", \"compare-and-set!\", \"swap-vals!\",\n            \"reset-vals!\", \"ref\", \"dosync\", \"ref-set\", \"alter\", \"commute\",\n            \"ensure\", \"agent\", \"send\", \"send-off\", \"await\", \"await-for\",\n            \"release-pending-sends\", \"restart-agent\", \"set-error-handler!\",\n            \"set-error-mode!\", \"shutdown-agents\", \"add-watch\", \"remove-watch\",\n            // Vars\n            \"var-get\", \"var-set\", \"alter-var-root\", \"bound?\", \"thread-bound?\",\n            \"with-bindings\", \"with-bindings*\", \"with-local-vars\", \"with-redefs\",\n            \"push-thread-bindings\", \"pop-thread-bindings\", \"get-thread-bindings\",\n            // I/O\n            \"pr\", \"prn\", \"print\", \"println\", \"newline\", \"pr-str\", \"prn-str\",\n            \"print-str\", \"println-str\", \"with-out-str\", \"with-in-str\", \"read\",\n            \"read-line\", \"read-string\", \"slurp\", \"spit\", \"line-seq\",\n            // Namespaces\n            \"ns-name\", \"ns-map\", \"ns-interns\", \"ns-publics\", \"ns-imports\",\n            \"ns-refers\", \"ns-aliases\", \"ns-resolve\", \"ns-unmap\", \"ns-unalias\",\n            \"the-ns\", \"find-ns\", \"all-ns\", \"remove-ns\", \"symbol\", \"keyword\",\n            \"namespace\", \"name\", \"gensym\",\n            // Evaluation\n            \"eval\", \"load\", \"load-file\", \"load-string\", \"load-reader\",\n            \"requiring-resolve\", \"resolve\", \"macroexpand\", \"macroexpand-1\",\n            // Metadata\n            \"meta\", \"with-meta\", \"vary-meta\", \"alter-meta!\", \"reset-meta!\",\n            // Java interop\n            \"class\", \"type\", \"bases\", \"supers\", \"bean\", \"iterator-seq\",\n            \"enumeration-seq\", \"format\", \"printf\",\n            // Transients\n            \"transient\", \"persistent!\", \"conj!\", \"assoc!\", \"dissoc!\", \"pop!\",\n            \"disj!\",\n            // Sequences - sorting\n            \"sort\", \"sort-by\", \"sorted?\", \"compare\",\n            // Multimethods\n            \"defmulti\", \"defmethod\", \"remove-method\", \"remove-all-methods\",\n            \"prefer-method\", \"methods\", \"get-method\", \"prefers\",\n            // Protocols\n            \"defprotocol\", \"extend\", \"extend-type\", \"extend-protocol\", \"reify\",\n            \"satisfies?\", \"extenders\",\n            // Records and Types\n            \"defrecord\", \"deftype\", \"record?\", \"map->\", \"->\",\n            // Reducers\n            \"reduce\", \"fold\", \"filter\", \"remove\", \"map\", \"mapcat\", \"flatten\",\n            \"take\", \"take-while\", \"drop\", \"drop-while\",\n            // Spec (clojure.spec.alpha)\n            \"def\", \"fdef\", \"keys\", \"valid?\", \"conform\", \"explain\", \"explain-str\",\n            \"explain-data\", \"form\", \"describe\", \"assert\", \"check-asserts\",\n            // Testing\n            \"test\", \"deftest\", \"testing\", \"is\", \"are\", \"run-tests\", \"run-all-tests\",\n            // Core.async\n            \"go\", \"go-loop\", \"thread\", \"chan\", \"buffer\", \"dropping-buffer\",\n            \"sliding-buffer\", \"timeout\", \"<!!\", \">!!\", \"alts!!\", \"close!\",\n            \"<!\", \">!\", \"alts!\", \"alt!\", \"alt!!\", \"put!\", \"take!\", \"offer!\",\n            \"poll!\", \"onto-chan!\", \"to-chan!\", \"pipe\", \"pipeline\", \"pipeline-async\",\n            \"pipeline-blocking\", \"split\", \"mix\", \"admix\", \"unmix\", \"mult\", \"tap\",\n            \"untap\", \"pub\", \"sub\", \"unsub\", \"unsub-all\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Comments\n        Mode(scope: \"comment\", begin: \";\", end: \"\\n\"),\n        \n        // Shebang\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        \n        // Discard form (reader macro)\n        Mode(scope: \"comment\", begin: \"#_\"),\n        \n        // Keywords (with namespace support)\n        Mode(scope: \"meta\", begin: \"::?[a-zA-Z][a-zA-Z0-9*+!_?-]*(?:/[a-zA-Z][a-zA-Z0-9*+!_?-]*)?\"),\n        \n        // Symbols (with namespace support)\n        Mode(scope: \"meta\", begin: \"[a-zA-Z*+!_?-][a-zA-Z0-9*+!_?-]*(?:/[a-zA-Z*+!_?-][a-zA-Z0-9*+!_?-]*)?\"),\n        \n        // Regex literals\n        Mode(scope: \"string\", begin: \"#\\\"\", end: \"\\\"\"),\n        \n        // Strings\n        CommonModes.stringDouble,\n        \n        // Characters\n        Mode(scope: \"string\", begin: \"\\\\\\\\(?:newline|space|tab|formfeed|backspace|return|u[0-9a-fA-F]{4}|o[0-7]{1,3}|.)\"),\n        \n        // Anonymous function literal\n        Mode(scope: \"function\", begin: \"#\\\\(\"),\n        \n        // Set literal\n        Mode(scope: \"meta\", begin: \"#\\\\{\"),\n        \n        // Var quote\n        Mode(scope: \"meta\", begin: \"#'\"),\n        \n        // Tagged literals\n        Mode(scope: \"meta\", begin: \"#[a-zA-Z][a-zA-Z0-9*+!_?-]*(?:/[a-zA-Z][a-zA-Z0-9*+!_?-]*)?\"),\n        \n        // Numbers\n        // Ratio\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?\\\\d+/\\\\d+\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?0[xX][0-9a-fA-F]+N?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?0[0-7]+N?\\\\b\"),\n        // Scientific notation\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+M?\\\\b\"),\n        // Float with M suffix (BigDecimal)\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?\\\\d+\\\\.\\\\d+M\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?\\\\d+\\\\.\\\\d+\\\\b\"),\n        // Integer with N suffix (BigInt)\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?\\\\d+N\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b[+-]?\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Cpp.swift",
    "content": "//\n//  CPlusPlusLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct CppLanguage: LanguageDefinition {\n    let name = \"C++\"\n    let aliases: [String]? = [\"cpp\", \"cc\", \"cxx\", \"c++\", \"hpp\", \"hh\", \"hxx\", \"h++\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // C keywords\n            \"auto\", \"break\", \"case\", \"char\", \"const\", \"continue\", \"default\", \"do\",\n            \"double\", \"else\", \"enum\", \"extern\", \"float\", \"for\", \"goto\", \"if\",\n            \"inline\", \"int\", \"long\", \"register\", \"restrict\", \"return\", \"short\",\n            \"signed\", \"sizeof\", \"static\", \"struct\", \"switch\", \"typedef\", \"union\",\n            \"unsigned\", \"void\", \"volatile\", \"while\",\n            // C++ keywords\n            \"alignas\", \"alignof\", \"and\", \"and_eq\", \"asm\", \"bitand\", \"bitor\",\n            \"bool\", \"catch\", \"class\", \"compl\", \"concept\", \"const_cast\", \"consteval\",\n            \"constexpr\", \"constinit\", \"co_await\", \"co_return\", \"co_yield\",\n            \"decltype\", \"delete\", \"dynamic_cast\", \"explicit\", \"export\", \"false\",\n            \"friend\", \"mutable\", \"namespace\", \"new\", \"noexcept\", \"not\", \"not_eq\",\n            \"nullptr\", \"operator\", \"or\", \"or_eq\", \"private\", \"protected\", \"public\",\n            \"reinterpret_cast\", \"requires\", \"static_assert\", \"static_cast\",\n            \"template\", \"this\", \"thread_local\", \"throw\", \"true\", \"try\", \"typeid\",\n            \"typename\", \"using\", \"virtual\", \"wchar_t\", \"xor\", \"xor_eq\"\n        ],\n        \"literal\": [\"true\", \"false\", \"nullptr\", \"NULL\"],\n        \"built_in\": [\n            // STL containers\n            \"std\", \"string\", \"wstring\", \"vector\", \"list\", \"deque\", \"set\", \"multiset\",\n            \"map\", \"multimap\", \"unordered_set\", \"unordered_multiset\", \"unordered_map\",\n            \"unordered_multimap\", \"stack\", \"queue\", \"priority_queue\", \"array\",\n            \"bitset\", \"valarray\",\n            // Smart pointers\n            \"unique_ptr\", \"shared_ptr\", \"weak_ptr\", \"auto_ptr\",\n            // Streams\n            \"iostream\", \"istream\", \"ostream\", \"fstream\", \"ifstream\", \"ofstream\",\n            \"stringstream\", \"istringstream\", \"ostringstream\",\n            \"cin\", \"cout\", \"cerr\", \"clog\", \"wcin\", \"wcout\", \"wcerr\", \"wclog\",\n            // Algorithms\n            \"sort\", \"find\", \"find_if\", \"count\", \"count_if\", \"transform\", \"copy\",\n            \"remove\", \"remove_if\", \"replace\", \"replace_if\", \"fill\", \"reverse\",\n            \"rotate\", \"unique\", \"lower_bound\", \"upper_bound\", \"binary_search\",\n            \"max\", \"min\", \"swap\", \"accumulate\", \"for_each\",\n            // Iterators\n            \"iterator\", \"const_iterator\", \"reverse_iterator\", \"const_reverse_iterator\",\n            \"begin\", \"end\", \"rbegin\", \"rend\", \"cbegin\", \"cend\", \"crbegin\", \"crend\",\n            // Utilities\n            \"pair\", \"make_pair\", \"tuple\", \"make_tuple\", \"optional\", \"variant\", \"any\",\n            \"move\", \"forward\", \"declval\",\n            // Memory\n            \"allocator\", \"make_unique\", \"make_shared\",\n            // Numeric types\n            \"int8_t\", \"int16_t\", \"int32_t\", \"int64_t\",\n            \"uint8_t\", \"uint16_t\", \"uint32_t\", \"uint64_t\",\n            \"size_t\", \"ptrdiff_t\", \"nullptr_t\",\n            // C standard library\n            \"printf\", \"scanf\", \"malloc\", \"calloc\", \"realloc\", \"free\",\n            \"strlen\", \"strcpy\", \"strcmp\", \"memcpy\", \"memset\",\n            // Exception types\n            \"exception\", \"runtime_error\", \"logic_error\", \"out_of_range\",\n            \"invalid_argument\", \"bad_alloc\", \"bad_cast\", \"bad_typeid\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"meta\", begin: \"^\\\\s*#\\\\s*(?:include|define|undef|if|ifdef|ifndef|else|elif|endif|error|pragma|line|warning)\\\\b.*$\"),\n        \n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"meta\", begin: \"template\\\\s*<\", end: \">\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\b(?:class|struct)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bnamespace\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(?=\\\\()\"),\n        \n        // Raw string literals (C++11)\n        Mode(scope: \"string\", begin: \"R\\\"\\\\(\", end: \"\\\\)\\\"\"),\n        \n        \n        CommonModes.stringDouble,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        Mode(scope: \"string\", begin: \"L'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),  // Wide char\n        Mode(scope: \"string\", begin: \"u'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),  // UTF-16\n        Mode(scope: \"string\", begin: \"U'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),  // UTF-32\n        \n        // String literals with prefixes\n        Mode(scope: \"string\", begin: \"L\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\"),  // Wide string\n        Mode(scope: \"string\", begin: \"u8\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\"), // UTF-8\n        Mode(scope: \"string\", begin: \"u\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\"),  // UTF-16\n        Mode(scope: \"string\", begin: \"U\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\"),  // UTF-32\n        \n        // Числа\n        // Binary (C++14)\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+[uUlL]*\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[uUlL]*\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+[uUlL]*\\\\b\"),\n        // Float/Double with suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[fFlL]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+[fFlL]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[eE][+-]?\\\\d+[fFlL]?\\\\b\"),\n        // Integer with digit separators (C++14)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:'\\\\d+)*[uUlL]*\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[uUlL]*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Csharp.swift",
    "content": "//\n//  CSharpLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct CSharpLanguage: LanguageDefinition {\n    let name = \"C#\"\n    let aliases: [String]? = [\"csharp\", \"cs\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\", \"as\", \"base\", \"break\", \"case\", \"catch\", \"checked\", \"class\",\n            \"const\", \"continue\", \"default\", \"delegate\", \"do\", \"else\", \"enum\", \"event\",\n            \"explicit\", \"extern\", \"finally\", \"fixed\", \"for\", \"foreach\", \"goto\", \"if\",\n            \"implicit\", \"in\", \"interface\", \"internal\", \"is\", \"lock\", \"namespace\", \"new\",\n            \"operator\", \"out\", \"override\", \"params\", \"private\", \"protected\", \"public\",\n            \"readonly\", \"ref\", \"return\", \"sealed\", \"sizeof\", \"stackalloc\", \"static\",\n            \"struct\", \"switch\", \"this\", \"throw\", \"try\", \"typeof\", \"unchecked\", \"unsafe\",\n            \"using\", \"virtual\", \"void\", \"volatile\", \"while\",\n            // Contextual keywords\n            \"add\", \"alias\", \"ascending\", \"async\", \"await\", \"by\", \"descending\", \"dynamic\",\n            \"equals\", \"from\", \"get\", \"global\", \"group\", \"init\", \"into\", \"join\", \"let\",\n            \"nameof\", \"notnull\", \"on\", \"orderby\", \"partial\", \"record\", \"remove\", \"select\",\n            \"set\", \"unmanaged\", \"value\", \"var\", \"when\", \"where\", \"with\", \"yield\",\n            // C# 9.0+\n            \"and\", \"not\", \"or\", \"nint\", \"nuint\",\n            // C# 10.0+\n            \"file\", \"required\",\n            // C# 11.0+\n            \"scoped\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Primitive types\n            \"bool\", \"byte\", \"sbyte\", \"char\", \"decimal\", \"double\", \"float\",\n            \"int\", \"uint\", \"long\", \"ulong\", \"short\", \"ushort\", \"object\", \"string\",\n            // Common types\n            \"String\", \"Object\", \"Boolean\", \"Byte\", \"SByte\", \"Char\", \"Decimal\", \"Double\",\n            \"Single\", \"Int16\", \"Int32\", \"Int64\", \"UInt16\", \"UInt32\", \"UInt64\",\n            \"DateTime\", \"DateTimeOffset\", \"TimeSpan\", \"Guid\", \"Uri\", \"Version\",\n            // Collections\n            \"Array\", \"List\", \"Dictionary\", \"HashSet\", \"Queue\", \"Stack\", \"LinkedList\",\n            \"SortedList\", \"SortedDictionary\", \"SortedSet\", \"Collection\", \"ObservableCollection\",\n            \"IEnumerable\", \"ICollection\", \"IList\", \"IDictionary\", \"ISet\", \"IReadOnlyCollection\",\n            \"IReadOnlyList\", \"IReadOnlyDictionary\",\n            // System types\n            \"Exception\", \"SystemException\", \"ArgumentException\", \"ArgumentNullException\",\n            \"InvalidOperationException\", \"NotImplementedException\", \"NotSupportedException\",\n            \"NullReferenceException\", \"IndexOutOfRangeException\", \"OverflowException\",\n            \"DivideByZeroException\", \"FormatException\", \"IOException\", \"OutOfMemoryException\",\n            // Nullable\n            \"Nullable\",\n            // Delegates and events\n            \"Action\", \"Func\", \"Predicate\", \"EventHandler\", \"EventArgs\",\n            // Tasks and async\n            \"Task\", \"ValueTask\", \"CancellationToken\", \"CancellationTokenSource\",\n            // LINQ\n            \"Enumerable\", \"Queryable\", \"IQueryable\",\n            // Attributes\n            \"Attribute\", \"Obsolete\", \"Serializable\", \"DllImport\", \"StructLayout\",\n            \"MethodImpl\", \"CallerMemberName\", \"CallerFilePath\", \"CallerLineNumber\",\n            // StringBuilder\n            \"StringBuilder\",\n            // Regex\n            \"Regex\", \"Match\", \"MatchCollection\", \"Group\", \"Capture\",\n            // IO\n            \"File\", \"Directory\", \"Path\", \"FileStream\", \"StreamReader\", \"StreamWriter\",\n            \"MemoryStream\", \"BinaryReader\", \"BinaryWriter\", \"FileInfo\", \"DirectoryInfo\",\n            // Reflection\n            \"Type\", \"Assembly\", \"MethodInfo\", \"PropertyInfo\", \"FieldInfo\", \"ConstructorInfo\",\n            \"MemberInfo\", \"ParameterInfo\",\n            // Generics\n            \"IComparable\", \"IEquatable\", \"IDisposable\", \"IAsyncDisposable\",\n            \"ICloneable\", \"IConvertible\", \"IFormattable\", \"IFormatProvider\",\n            // Threading\n            \"Thread\", \"ThreadPool\", \"Monitor\", \"Mutex\", \"Semaphore\", \"AutoResetEvent\",\n            \"ManualResetEvent\", \"ReaderWriterLock\", \"ReaderWriterLockSlim\",\n            // Console\n            \"Console\", \"Environment\",\n            // Convert\n            \"Convert\", \"BitConverter\", \"Encoding\",\n            // Math\n            \"Math\", \"Random\",\n            // Tuple\n            \"Tuple\", \"ValueTuple\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment.doc\", begin: \"///\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        Mode(scope: \"meta\", begin: \"^\\\\s*#\\\\s*(?:if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\\\\b.*$\"),\n        Mode(scope: \"meta\", begin: \"\\\\[\", end: \"\\\\]\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\b(?:class|interface|struct|enum|record)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bnamespace\\\\s+([a-zA-Z_][a-zA-Z0-9_.]*)\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(?=\\\\()\"),\n        \n        // Verbatim string literals\n        Mode(scope: \"string\", begin: \"@\\\"\", end: \"\\\"\"),\n        \n        // Interpolated strings\n        Mode(scope: \"string\", begin: \"\\\\$\\\"\", end: \"\\\"\"),\n        \n        // Verbatim interpolated strings\n        Mode(scope: \"string\", begin: \"\\\\$@\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"@\\\\$\\\"\", end: \"\\\"\"),\n        \n        // Raw string literals (C# 11)\n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        \n        CommonModes.stringDouble,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // Binary (C# 7.0+)\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01_]+(?:[uUlLfFdDmM]+)?\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F_]+(?:[uUlL]+)?\\\\b\"),\n        // Float/Double/Decimal with suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.[0-9_]+(?:[eE][+-]?[0-9_]+)?[fFdDmM]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*[eE][+-]?[0-9_]+[fFdDmM]?\\\\b\"),\n        // Integer with underscores (C# 7.0+)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*(?:[uUlLfFdDmM]+)?\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Css.swift",
    "content": "//\n//  CSSLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct CSSLanguage: LanguageDefinition {\n    let name = \"CSS\"\n    let aliases: [String]? = [\"css\"]\n    let caseInsensitive = true\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // At-rules\n            \"@charset\", \"@import\", \"@namespace\", \"@media\", \"@supports\", \"@page\",\n            \"@font-face\", \"@keyframes\", \"@counter-style\", \"@font-feature-values\",\n            \"@property\", \"@layer\", \"@container\", \"@scope\",\n            // Media query keywords\n            \"and\", \"not\", \"only\", \"or\",\n            // Important\n            \"!important\",\n            // Logical operators\n            \"from\", \"to\"\n        ],\n        \"literal\": [\n            // Color keywords\n            \"transparent\", \"currentColor\", \"inherit\", \"initial\", \"unset\", \"revert\",\n            // Named colors (common ones)\n            \"black\", \"white\", \"red\", \"green\", \"blue\", \"yellow\", \"orange\", \"purple\",\n            \"pink\", \"brown\", \"gray\", \"grey\", \"cyan\", \"magenta\", \"lime\", \"navy\",\n            \"teal\", \"aqua\", \"maroon\", \"olive\", \"silver\", \"fuchsia\",\n            // System colors\n            \"ActiveBorder\", \"ActiveCaption\", \"AppWorkspace\", \"Background\", \"ButtonFace\",\n            \"ButtonHighlight\", \"ButtonShadow\", \"ButtonText\", \"CaptionText\", \"GrayText\",\n            \"Highlight\", \"HighlightText\", \"InactiveBorder\", \"InactiveCaption\",\n            \"InactiveCaptionText\", \"InfoBackground\", \"InfoText\", \"Menu\", \"MenuText\",\n            \"Scrollbar\", \"ThreeDDarkShadow\", \"ThreeDFace\", \"ThreeDHighlight\",\n            \"ThreeDLightShadow\", \"ThreeDShadow\", \"Window\", \"WindowFrame\", \"WindowText\"\n        ],\n        \"built_in\": [\n            // Properties - Layout\n            \"display\", \"position\", \"top\", \"right\", \"bottom\", \"left\", \"float\", \"clear\",\n            \"z-index\", \"overflow\", \"overflow-x\", \"overflow-y\", \"overflow-wrap\",\n            \"clip\", \"clip-path\", \"visibility\", \"isolation\",\n            // Properties - Box Model\n            \"width\", \"height\", \"min-width\", \"max-width\", \"min-height\", \"max-height\",\n            \"margin\", \"margin-top\", \"margin-right\", \"margin-bottom\", \"margin-left\",\n            \"padding\", \"padding-top\", \"padding-right\", \"padding-bottom\", \"padding-left\",\n            \"border\", \"border-width\", \"border-style\", \"border-color\",\n            \"border-top\", \"border-right\", \"border-bottom\", \"border-left\",\n            \"border-top-width\", \"border-top-style\", \"border-top-color\",\n            \"border-right-width\", \"border-right-style\", \"border-right-color\",\n            \"border-bottom-width\", \"border-bottom-style\", \"border-bottom-color\",\n            \"border-left-width\", \"border-left-style\", \"border-left-color\",\n            \"border-radius\", \"border-top-left-radius\", \"border-top-right-radius\",\n            \"border-bottom-right-radius\", \"border-bottom-left-radius\",\n            \"border-image\", \"border-image-source\", \"border-image-slice\",\n            \"border-image-width\", \"border-image-repeat\", \"border-image-outset\",\n            \"box-sizing\", \"box-shadow\", \"outline\", \"outline-width\", \"outline-style\",\n            \"outline-color\", \"outline-offset\",\n            // Properties - Background\n            \"background\", \"background-color\", \"background-image\", \"background-repeat\",\n            \"background-position\", \"background-size\", \"background-attachment\",\n            \"background-origin\", \"background-clip\", \"background-blend-mode\",\n            // Properties - Typography\n            \"color\", \"font\", \"font-family\", \"font-size\", \"font-weight\", \"font-style\",\n            \"font-variant\", \"font-stretch\", \"font-size-adjust\", \"font-synthesis\",\n            \"font-kerning\", \"font-variant-ligatures\", \"font-variant-position\",\n            \"font-variant-caps\", \"font-variant-numeric\", \"font-variant-alternates\",\n            \"font-variant-east-asian\", \"font-feature-settings\", \"font-variation-settings\",\n            \"line-height\", \"letter-spacing\", \"word-spacing\", \"text-align\",\n            \"text-align-last\", \"text-decoration\", \"text-decoration-line\",\n            \"text-decoration-color\", \"text-decoration-style\", \"text-decoration-thickness\",\n            \"text-underline-position\", \"text-underline-offset\", \"text-indent\",\n            \"text-transform\", \"text-shadow\", \"text-overflow\", \"text-wrap\",\n            \"white-space\", \"word-break\", \"word-wrap\", \"hyphens\", \"tab-size\",\n            \"direction\", \"unicode-bidi\", \"writing-mode\", \"text-orientation\",\n            \"vertical-align\",\n            // Properties - Flexbox\n            \"flex\", \"flex-direction\", \"flex-wrap\", \"flex-flow\", \"flex-grow\",\n            \"flex-shrink\", \"flex-basis\", \"justify-content\", \"align-items\",\n            \"align-self\", \"align-content\", \"order\", \"gap\", \"row-gap\", \"column-gap\",\n            // Properties - Grid\n            \"grid\", \"grid-template\", \"grid-template-columns\", \"grid-template-rows\",\n            \"grid-template-areas\", \"grid-auto-columns\", \"grid-auto-rows\",\n            \"grid-auto-flow\", \"grid-column\", \"grid-row\", \"grid-area\",\n            \"grid-column-start\", \"grid-column-end\", \"grid-row-start\", \"grid-row-end\",\n            \"justify-items\", \"justify-self\", \"place-items\", \"place-self\", \"place-content\",\n            // Properties - Transform & Animation\n            \"transform\", \"transform-origin\", \"transform-style\", \"transform-box\",\n            \"perspective\", \"perspective-origin\", \"backface-visibility\",\n            \"transition\", \"transition-property\", \"transition-duration\",\n            \"transition-timing-function\", \"transition-delay\",\n            \"animation\", \"animation-name\", \"animation-duration\", \"animation-timing-function\",\n            \"animation-delay\", \"animation-iteration-count\", \"animation-direction\",\n            \"animation-fill-mode\", \"animation-play-state\", \"animation-timeline\",\n            \"rotate\", \"scale\", \"translate\",\n            // Properties - Filters & Effects\n            \"filter\", \"backdrop-filter\", \"opacity\", \"mix-blend-mode\",\n            \"mask\", \"mask-image\", \"mask-mode\", \"mask-repeat\", \"mask-position\",\n            \"mask-clip\", \"mask-origin\", \"mask-size\", \"mask-composite\",\n            // Properties - Lists & Counters\n            \"list-style\", \"list-style-type\", \"list-style-position\", \"list-style-image\",\n            \"counter-reset\", \"counter-increment\", \"counter-set\",\n            // Properties - Tables\n            \"table-layout\", \"border-collapse\", \"border-spacing\", \"caption-side\",\n            \"empty-cells\",\n            // Properties - Columns\n            \"columns\", \"column-width\", \"column-count\", \"column-gap\", \"column-rule\",\n            \"column-rule-width\", \"column-rule-style\", \"column-rule-color\",\n            \"column-span\", \"column-fill\", \"break-before\", \"break-after\", \"break-inside\",\n            // Properties - User Interface\n            \"cursor\", \"pointer-events\", \"resize\", \"user-select\", \"caret-color\",\n            \"accent-color\", \"appearance\", \"outline\", \"scroll-behavior\",\n            \"scroll-margin\", \"scroll-padding\", \"scroll-snap-type\", \"scroll-snap-align\",\n            \"scroll-snap-stop\", \"overscroll-behavior\", \"touch-action\",\n            // Properties - Content\n            \"content\", \"quotes\", \"content-visibility\", \"contain\",\n            // Properties - Printing\n            \"page-break-before\", \"page-break-after\", \"page-break-inside\",\n            \"orphans\", \"widows\",\n            // Properties - Other\n            \"all\", \"will-change\", \"object-fit\", \"object-position\", \"image-rendering\",\n            \"image-orientation\", \"aspect-ratio\", \"inset\", \"inset-block\", \"inset-inline\",\n            // Property values - Display\n            \"block\", \"inline\", \"inline-block\", \"flex\", \"inline-flex\", \"grid\",\n            \"inline-grid\", \"table\", \"table-row\", \"table-cell\", \"list-item\",\n            \"none\", \"contents\", \"flow-root\",\n            // Property values - Position\n            \"static\", \"relative\", \"absolute\", \"fixed\", \"sticky\",\n            // Property values - Float\n            \"left\", \"right\", \"none\",\n            // Property values - Text align\n            \"center\", \"justify\", \"start\", \"end\",\n            // Property values - Border style\n            \"solid\", \"dashed\", \"dotted\", \"double\", \"groove\", \"ridge\", \"inset\",\n            \"outset\", \"hidden\",\n            // Property values - Font weight\n            \"normal\", \"bold\", \"bolder\", \"lighter\",\n            // Property values - Font style\n            \"italic\", \"oblique\",\n            // Property values - Text decoration\n            \"underline\", \"overline\", \"line-through\",\n            // Property values - Text transform\n            \"uppercase\", \"lowercase\", \"capitalize\",\n            // Property values - White space\n            \"nowrap\", \"pre\", \"pre-wrap\", \"pre-line\",\n            // Property values - Overflow\n            \"visible\", \"hidden\", \"scroll\", \"auto\", \"clip\",\n            // Property values - Cursor\n            \"pointer\", \"default\", \"crosshair\", \"move\", \"text\", \"wait\", \"help\",\n            \"grab\", \"grabbing\", \"zoom-in\", \"zoom-out\", \"not-allowed\", \"progress\",\n            // Property values - Repeat\n            \"repeat\", \"repeat-x\", \"repeat-y\", \"no-repeat\", \"space\", \"round\",\n            // Property values - Size\n            \"auto\", \"contain\", \"cover\",\n            // Property values - Flex/Grid\n            \"row\", \"column\", \"wrap\", \"nowrap\", \"flex-start\", \"flex-end\", \"space-between\",\n            \"space-around\", \"space-evenly\", \"stretch\", \"baseline\",\n            // Units\n            \"px\", \"em\", \"rem\", \"vh\", \"vw\", \"vmin\", \"vmax\", \"%\", \"cm\", \"mm\", \"in\",\n            \"pt\", \"pc\", \"ch\", \"ex\", \"fr\", \"deg\", \"rad\", \"grad\", \"turn\", \"s\", \"ms\",\n            // Functions\n            \"url\", \"rgb\", \"rgba\", \"hsl\", \"hsla\", \"calc\", \"var\", \"attr\",\n            \"linear-gradient\", \"radial-gradient\", \"conic-gradient\",\n            \"repeating-linear-gradient\", \"repeating-radial-gradient\",\n            \"repeating-conic-gradient\", \"min\", \"max\", \"clamp\", \"minmax\",\n            \"fit-content\", \"blur\", \"brightness\", \"contrast\", \"drop-shadow\",\n            \"grayscale\", \"hue-rotate\", \"invert\", \"opacity\", \"saturate\", \"sepia\",\n            \"rotate\", \"scale\", \"scaleX\", \"scaleY\", \"scaleZ\", \"scale3d\",\n            \"skew\", \"skewX\", \"skewY\", \"translate\", \"translateX\", \"translateY\",\n            \"translateZ\", \"translate3d\", \"matrix\", \"matrix3d\", \"perspective\",\n            \"cubic-bezier\", \"steps\", \"counters\", \"symbols\", \"path\", \"polygon\",\n            \"circle\", \"ellipse\", \"inset\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Multi-line comments\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        // Single-line comments (non-standard but used in preprocessors)\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        // At-rules\n        Mode(scope: \"meta\", begin: \"@[a-z-]+\"),\n        \n        // Selectors - IDs\n        Mode(scope: \"meta\", begin: \"#[a-zA-Z][a-zA-Z0-9_-]*\"),\n        \n        // Selectors - Classes\n        Mode(scope: \"meta\", begin: \"\\\\.[a-zA-Z][a-zA-Z0-9_-]*\"),\n        \n        // Selectors - Pseudo-classes\n        Mode(scope: \"meta\", begin: \":[a-zA-Z][a-zA-Z0-9_-]*(?:\\\\([^)]*\\\\))?\"),\n        \n        // Selectors - Pseudo-elements\n        Mode(scope: \"meta\", begin: \"::[a-zA-Z][a-zA-Z0-9_-]*\"),\n        \n        // Selectors - Attribute selectors\n        Mode(scope: \"meta\", begin: \"\\\\[\", end: \"\\\\]\"),\n        \n        // Property names\n        Mode(scope: \"keyword\", begin: \"\\\\b[a-z-]+(?=\\\\s*:)\"),\n        \n        // Strings with double quotes\n        CommonModes.stringDouble,\n        \n        // Strings with single quotes\n        CommonModes.stringSingle,\n        \n        // URLs\n        Mode(scope: \"string\", begin: \"url\\\\(\", end: \"\\\\)\"),\n        \n        // Important\n        Mode(scope: \"keyword\", begin: \"!important\\\\b\"),\n        \n        // Functions\n        Mode(scope: \"function\", begin: \"\\\\b[a-z-]+\\\\(\"),\n        \n        // Variables (CSS custom properties)\n        Mode(scope: \"meta\", begin: \"--[a-zA-Z][a-zA-Z0-9_-]*\"),\n        Mode(scope: \"function\", begin: \"var\\\\(\"),\n        \n        // Colors - Hex\n        Mode(scope: \"number\", begin: \"#[0-9a-fA-F]{3,8}\\\\b\"),\n        \n        // Colors - RGB/RGBA\n        Mode(scope: \"function\", begin: \"rgba?\\\\(\"),\n        \n        // Colors - HSL/HSLA\n        Mode(scope: \"function\", begin: \"hsla?\\\\(\"),\n        \n        // Numbers with units\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*(?:px|em|rem|%|vh|vw|vmin|vmax|cm|mm|in|pt|pc|ch|ex|fr|deg|rad|grad|turn|s|ms)\\\\b\"),\n        \n        // Plain numbers\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Dart.swift",
    "content": "//\n//  DartLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct DartLanguage: LanguageDefinition {\n    let name = \"Dart\"\n    let aliases: [String]? = [\"dart\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\", \"as\", \"assert\", \"async\", \"await\", \"break\", \"case\", \"catch\",\n            \"class\", \"const\", \"continue\", \"covariant\", \"default\", \"deferred\", \"do\",\n            \"dynamic\", \"else\", \"enum\", \"export\", \"extends\", \"extension\", \"external\",\n            \"factory\", \"false\", \"final\", \"finally\", \"for\", \"Function\", \"get\", \"hide\",\n            \"if\", \"implements\", \"import\", \"in\", \"interface\", \"is\", \"late\", \"library\",\n            \"mixin\", \"new\", \"null\", \"on\", \"operator\", \"part\", \"required\", \"rethrow\",\n            \"return\", \"sealed\", \"set\", \"show\", \"static\", \"super\", \"switch\", \"sync\",\n            \"this\", \"throw\", \"true\", \"try\", \"typedef\", \"var\", \"void\", \"while\", \"with\",\n            \"yield\",\n            // Dart 3.0+ keywords\n            \"base\", \"final\", \"interface\", \"mixin\", \"sealed\", \"when\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Core types\n            \"int\", \"double\", \"num\", \"bool\", \"String\", \"Object\", \"Type\", \"Symbol\",\n            \"List\", \"Set\", \"Map\", \"Runes\", \"StringBuffer\", \"RegExp\", \"Match\",\n            \"Pattern\", \"DateTime\", \"Duration\", \"Uri\", \"Stopwatch\",\n            // Collections\n            \"Iterable\", \"Iterator\", \"LinkedHashMap\", \"LinkedHashSet\", \"HashMap\",\n            \"HashSet\", \"SplayTreeMap\", \"SplayTreeSet\", \"Queue\", \"ListQueue\",\n            \"DoubleLinkedQueue\", \"UnmodifiableListView\", \"UnmodifiableMapView\",\n            // Future and Stream\n            \"Future\", \"Stream\", \"StreamController\", \"StreamSubscription\",\n            \"StreamTransformer\", \"Completer\", \"StreamSink\", \"EventSink\",\n            \"FutureOr\", \"Zone\", \"ZoneSpecification\",\n            // Core functions\n            \"print\", \"identical\", \"identityHashCode\",\n            // Exceptions\n            \"Exception\", \"Error\", \"ArgumentError\", \"RangeError\", \"IndexError\",\n            \"StateError\", \"UnsupportedError\", \"UnimplementedError\", \"CastError\",\n            \"TypeError\", \"NoSuchMethodError\", \"NullThrownError\", \"FormatException\",\n            \"IntegerDivisionByZeroException\", \"OutOfMemoryError\", \"StackOverflowError\",\n            \"ConcurrentModificationError\", \"TimeoutException\",\n            // Math\n            \"Random\", \"Point\", \"Rectangle\", \"MutableRectangle\",\n            // Convert\n            \"Converter\", \"Codec\", \"Encoding\", \"utf8\", \"latin1\", \"ascii\",\n            \"base64\", \"base64Url\", \"json\", \"JsonEncoder\", \"JsonDecoder\",\n            \"JsonCodec\", \"LineSplitter\", \"StringConversionSink\",\n            // dart:io (common)\n            \"File\", \"Directory\", \"Link\", \"IOSink\", \"FileStat\", \"FileMode\",\n            \"FileSystemEntity\", \"FileSystemEvent\", \"Platform\", \"stdin\", \"stdout\",\n            \"stderr\", \"Process\", \"ProcessResult\", \"HttpClient\", \"HttpServer\",\n            \"HttpRequest\", \"HttpResponse\", \"HttpHeaders\", \"Cookie\", \"WebSocket\",\n            \"Socket\", \"ServerSocket\", \"RawSocket\", \"RawServerSocket\",\n            \"InternetAddress\", \"NetworkInterface\",\n            // dart:async\n            \"Timer\", \"scheduleMicrotask\", \"runZoned\", \"runZonedGuarded\",\n            // dart:collection\n            \"LinkedList\", \"LinkedListEntry\", \"ListBase\", \"MapBase\", \"SetBase\",\n            \"IterableBase\", \"UnmodifiableListBase\", \"UnmodifiableMapBase\",\n            // dart:typed_data\n            \"ByteData\", \"Endian\", \"Float32List\", \"Float64List\", \"Int8List\",\n            \"Int16List\", \"Int32List\", \"Int64List\", \"Uint8List\", \"Uint16List\",\n            \"Uint32List\", \"Uint64List\", \"Uint8ClampedList\", \"ByteBuffer\",\n            // Common methods\n            \"forEach\", \"map\", \"where\", \"reduce\", \"fold\", \"every\", \"any\", \"contains\",\n            \"firstWhere\", \"lastWhere\", \"singleWhere\", \"take\", \"takeWhile\", \"skip\",\n            \"skipWhile\", \"toList\", \"toSet\", \"join\", \"length\", \"isEmpty\", \"isNotEmpty\",\n            \"first\", \"last\", \"single\", \"elementAt\", \"add\", \"addAll\", \"remove\",\n            \"removeAt\", \"removeLast\", \"removeWhere\", \"retainWhere\", \"clear\", \"insert\",\n            \"insertAll\", \"sort\", \"shuffle\", \"reversed\", \"indexOf\", \"lastIndexOf\",\n            \"sublist\", \"getRange\", \"setRange\", \"fillRange\", \"replaceRange\", \"asMap\",\n            // String methods\n            \"substring\", \"trim\", \"trimLeft\", \"trimRight\", \"padLeft\", \"padRight\",\n            \"startsWith\", \"endsWith\", \"split\", \"splitMapJoin\", \"replaceAll\",\n            \"replaceFirst\", \"replaceRange\", \"toLowerCase\", \"toUpperCase\",\n            \"compareTo\", \"codeUnitAt\", \"codeUnits\", \"runes\", \"characters\",\n            // Future methods\n            \"then\", \"catchError\", \"whenComplete\", \"timeout\", \"asStream\",\n            // Stream methods\n            \"listen\", \"asBroadcastStream\", \"where\", \"map\", \"asyncMap\", \"asyncExpand\",\n            \"handleError\", \"expand\", \"take\", \"takeWhile\", \"skip\", \"skipWhile\",\n            \"distinct\", \"first\", \"last\", \"single\", \"isEmpty\", \"length\", \"toList\",\n            \"drain\", \"pipe\", \"transform\", \"reduce\", \"fold\", \"join\", \"contains\",\n            \"any\", \"every\", \"firstWhere\", \"lastWhere\", \"singleWhere\", \"elementAt\",\n            // Flutter-related (common)\n            \"Widget\", \"StatelessWidget\", \"StatefulWidget\", \"State\", \"BuildContext\",\n            \"Key\", \"GlobalKey\", \"ValueKey\", \"ObjectKey\", \"UniqueKey\",\n            \"InheritedWidget\", \"BuildOwner\", \"Element\", \"RenderObject\",\n            // Annotations\n            \"override\", \"deprecated\", \"pragma\", \"required\", \"protected\", \"visibleForTesting\",\n            \"immutable\", \"sealed\", \"nonVirtual\", \"mustCallSuper\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Documentation comments\n        Mode(scope: \"comment.doc\", begin: \"///\", end: \"\\n\"),\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        // Metadata/Annotations\n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\b(?:class|enum|mixin|extension)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\babstract\\\\s+class\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(?=\\\\()\"),\n        \n        // Raw strings\n        Mode(scope: \"string\", begin: \"r\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        Mode(scope: \"string\", begin: \"r'''\", end: \"'''\"),\n        Mode(scope: \"string\", begin: \"r\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"r'\", end: \"'\"),\n        \n        // Multi-line strings with interpolation\n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        Mode(scope: \"string\", begin: \"'''\", end: \"'''\"),\n        \n        // Regular strings with interpolation\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"'\", end: \"'\"),\n        \n        // Symbols\n        Mode(scope: \"meta\", begin: \"#[a-zA-Z_][a-zA-Z0-9_]*\"),\n        \n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        // Scientific notation\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Erlang.swift",
    "content": "//\n//  ErlangLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct ErlangLanguage: LanguageDefinition {\n    let name = \"Erlang\"\n    let aliases: [String]? = [\"erlang\", \"erl\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Control flow\n            \"after\", \"and\", \"andalso\", \"band\", \"begin\", \"bnot\", \"bor\", \"bsl\", \"bsr\",\n            \"bxor\", \"case\", \"catch\", \"cond\", \"div\", \"end\", \"fun\", \"if\", \"let\",\n            \"not\", \"of\", \"or\", \"orelse\", \"receive\", \"rem\", \"try\", \"when\", \"xor\",\n            // Module attributes\n            \"module\", \"export\", \"import\", \"compile\", \"vsn\", \"author\", \"copyright\",\n            \"doc\", \"behaviour\", \"behavior\", \"record\", \"include\", \"include_lib\",\n            \"define\", \"undef\", \"ifdef\", \"ifndef\", \"else\", \"endif\", \"error\", \"warning\",\n            // Special forms\n            \"query\", \"spec\", \"type\", \"opaque\", \"callback\", \"export_type\"\n        ],\n        \"literal\": [\"true\", \"false\"],\n        \"built_in\": [\n            // BIFs (Built-In Functions)\n            \"abs\", \"adler32\", \"adler32_combine\", \"alive\", \"apply\", \"atom_to_binary\",\n            \"atom_to_list\", \"binary_to_atom\", \"binary_to_existing_atom\",\n            \"binary_to_list\", \"binary_to_term\", \"bit_size\", \"bitstring_to_list\",\n            \"byte_size\", \"ceil\", \"check_process_code\", \"date\", \"delete_module\",\n            \"demonitor\", \"disconnect_node\", \"display\", \"element\", \"erase\", \"error\",\n            \"exit\", \"float\", \"float_to_list\", \"floor\", \"function_exported\",\n            \"garbage_collect\", \"get\", \"get_keys\", \"group_leader\", \"halt\", \"hd\",\n            \"integer_to_list\", \"iolist_size\", \"iolist_to_binary\", \"is_alive\",\n            \"is_atom\", \"is_binary\", \"is_bitstring\", \"is_boolean\", \"is_builtin\",\n            \"is_float\", \"is_function\", \"is_integer\", \"is_list\", \"is_map\", \"is_number\",\n            \"is_pid\", \"is_port\", \"is_process_alive\", \"is_record\", \"is_reference\",\n            \"is_tuple\", \"length\", \"link\", \"list_to_atom\", \"list_to_binary\",\n            \"list_to_bitstring\", \"list_to_existing_atom\", \"list_to_float\",\n            \"list_to_integer\", \"list_to_pid\", \"list_to_tuple\", \"load_module\",\n            \"loaded\", \"localtime\", \"localtime_to_universaltime\", \"make_ref\",\n            \"map_size\", \"max\", \"md5\", \"md5_final\", \"md5_init\", \"md5_update\",\n            \"memory\", \"min\", \"module_loaded\", \"monitor\", \"monitor_node\", \"node\",\n            \"nodes\", \"now\", \"open_port\", \"pid_to_list\", \"port_close\", \"port_command\",\n            \"port_connect\", \"port_control\", \"port_info\", \"port_to_list\",\n            \"process_display\", \"process_flag\", \"process_info\", \"purge_module\", \"put\",\n            \"register\", \"registered\", \"round\", \"self\", \"send\", \"send_after\",\n            \"send_nosuspend\", \"set_cookie\", \"setelement\", \"size\", \"spawn\", \"spawn_link\",\n            \"spawn_monitor\", \"spawn_opt\", \"split_binary\", \"start_timer\",\n            \"statistics\", \"system_flag\", \"system_info\", \"system_monitor\",\n            \"system_profile\", \"term_to_binary\", \"throw\", \"time\", \"tl\", \"trace\",\n            \"trace_delivered\", \"trace_info\", \"trace_pattern\", \"trunc\", \"tuple_size\",\n            \"tuple_to_list\", \"unalias\", \"universaltime\", \"universaltime_to_localtime\",\n            \"unlink\", \"unregister\", \"whereis\",\n            // Process dictionary\n            \"erase\", \"get\", \"get_keys\", \"put\",\n            // Ports\n            \"open_port\", \"port_call\", \"port_close\", \"port_command\", \"port_connect\",\n            \"port_control\", \"port_info\",\n            // Lists module\n            \"all\", \"any\", \"append\", \"concat\", \"delete\", \"dropwhile\", \"duplicate\",\n            \"filter\", \"filtermap\", \"flatlength\", \"flatmap\", \"flatten\", \"foldl\",\n            \"foldr\", \"foreach\", \"keydelete\", \"keyfind\", \"keymap\", \"keymember\",\n            \"keymerge\", \"keyreplace\", \"keysearch\", \"keysort\", \"keystore\", \"keytake\",\n            \"last\", \"map\", \"mapfoldl\", \"mapfoldr\", \"max\", \"member\", \"merge\",\n            \"min\", \"nth\", \"nthtail\", \"partition\", \"prefix\", \"reverse\", \"search\",\n            \"seq\", \"sort\", \"split\", \"splitwith\", \"sublist\", \"subtract\", \"suffix\",\n            \"sum\", \"takewhile\", \"ukeymerge\", \"ukeysort\", \"umerge\", \"uniq\", \"unzip\",\n            \"unzip3\", \"usort\", \"zip\", \"zip3\", \"zipwith\", \"zipwith3\",\n            // String module\n            \"centre\", \"chars\", \"chr\", \"concat\", \"copies\", \"cspan\", \"equal\", \"join\",\n            \"left\", \"len\", \"lexemes\", \"lowercase\", \"rchr\", \"replace\", \"right\",\n            \"rstr\", \"slice\", \"span\", \"split\", \"str\", \"strip\", \"sub_string\",\n            \"sub_word\", \"substr\", \"take\", \"tokens\", \"to_float\", \"to_integer\",\n            \"to_lower\", \"to_upper\", \"trim\", \"uppercase\", \"words\",\n            // Binary module\n            \"at\", \"bin_to_list\", \"compile_pattern\", \"copy\", \"decode_unsigned\",\n            \"encode_unsigned\", \"first\", \"last\", \"list_to_bin\", \"longest_common_prefix\",\n            \"longest_common_suffix\", \"match\", \"matches\", \"part\", \"referenced_byte_size\",\n            \"replace\", \"split\",\n            // Maps module\n            \"filter\", \"filtermap\", \"find\", \"fold\", \"foreach\", \"from_keys\", \"from_list\",\n            \"get\", \"groups_from_list\", \"intersect\", \"intersect_with\", \"is_key\",\n            \"iterator\", \"keys\", \"map\", \"merge\", \"merge_with\", \"new\", \"next\", \"put\",\n            \"remove\", \"size\", \"take\", \"to_list\", \"update\", \"update_with\", \"values\",\n            \"with\", \"without\",\n            // IO module\n            \"format\", \"fread\", \"fwrite\", \"get_chars\", \"get_line\", \"nl\", \"parse_erl_exprs\",\n            \"parse_erl_form\", \"put_chars\", \"read\", \"scan_erl_exprs\", \"scan_erl_form\",\n            \"write\",\n            // File module\n            \"close\", \"consult\", \"copy\", \"delete\", \"get_cwd\", \"list_dir\", \"make_dir\",\n            \"open\", \"position\", \"pread\", \"pwrite\", \"read\", \"read_file\", \"read_file_info\",\n            \"read_link\", \"read_link_info\", \"rename\", \"script\", \"set_cwd\", \"sync\",\n            \"truncate\", \"write\", \"write_file\", \"write_file_info\",\n            // Process related\n            \"monitor\", \"demonitor\", \"link\", \"unlink\", \"spawn\", \"spawn_link\",\n            \"spawn_monitor\", \"spawn_opt\", \"exit\", \"register\", \"unregister\",\n            \"whereis\", \"send\", \"send_after\", \"send_nosuspend\",\n            // Ets (Erlang Term Storage)\n            \"all\", \"delete\", \"delete_all_objects\", \"delete_object\", \"file2tab\",\n            \"first\", \"foldl\", \"foldr\", \"from_dets\", \"fun2ms\", \"give_away\", \"i\",\n            \"info\", \"init_table\", \"insert\", \"insert_new\", \"is_compiled_ms\", \"last\",\n            \"lookup\", \"lookup_element\", \"match\", \"match_delete\", \"match_object\",\n            \"match_spec_compile\", \"match_spec_run\", \"member\", \"new\", \"next\", \"prev\",\n            \"rename\", \"repair_continuation\", \"safe_fixtable\", \"select\", \"select_count\",\n            \"select_delete\", \"select_replace\", \"select_reverse\", \"setopts\", \"slot\",\n            \"tab2file\", \"tab2list\", \"tabfile_info\", \"table\", \"take\", \"test_ms\",\n            \"to_dets\", \"update_counter\", \"update_element\", \"whereis\",\n            // Gen_server, gen_statem, supervisor behaviors\n            \"start\", \"start_link\", \"stop\", \"call\", \"cast\", \"reply\", \"abcast\",\n            \"multi_call\", \"enter_loop\", \"init\", \"handle_call\", \"handle_cast\",\n            \"handle_info\", \"terminate\", \"code_change\", \"format_status\",\n            // OTP application\n            \"ensure_all_started\", \"ensure_started\", \"get_all_env\", \"get_all_key\",\n            \"get_application\", \"get_env\", \"get_key\", \"load\", \"loaded_applications\",\n            \"set_env\", \"start\", \"start_type\", \"stop\", \"takeover\", \"unload\",\n            \"unset_env\", \"which_applications\",\n            // Common records\n            \"state\", \"mod\", \"id\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Comments\n        Mode(scope: \"comment\", begin: \"%\", end: \"\\n\"),\n        \n        // Module attributes\n        Mode(scope: \"meta\", begin: \"^-\\\\s*(?:module|export|import|compile|vsn|author|copyright|behaviour|behavior|record|include|include_lib|define|undef|ifdef|ifndef|else|endif|error|warning|spec|type|opaque|callback|export_type)\\\\b\"),\n        \n        // Function definitions\n        Mode(scope: \"function\", begin: \"^([a-z][a-zA-Z0-9_@]*)\\\\s*\\\\(\"),\n        \n        // Atoms\n        Mode(scope: \"meta\", begin: \"'\", end: \"'\"),\n        Mode(scope: \"meta\", begin: \"\\\\b[a-z][a-zA-Z0-9_@]*\\\\b(?!\\\\s*\\\\()\"),\n        \n        // Variables (start with uppercase or underscore)\n        Mode(scope: \"meta\", begin: \"\\\\b[A-Z_][a-zA-Z0-9_@]*\\\\b\"),\n        \n        // Macros\n        Mode(scope: \"meta\", begin: \"\\\\?[a-zA-Z][a-zA-Z0-9_@]*\"),\n        \n        // Records\n        Mode(scope: \"class\", begin: \"#[a-z][a-zA-Z0-9_@]*\"),\n        \n        // Strings\n        CommonModes.stringDouble,\n        \n        // Binaries\n        Mode(scope: \"string\", begin: \"<<\", end: \">>\"),\n        \n        // Character literals\n        Mode(scope: \"string\", begin: \"\\\\$(?:[^\\\\\\\\]|\\\\\\\\(?:[bdefnrstv\\\\\\\\'\\\"]|[0-7]{1,3}|x[0-9a-fA-F]{2}|x\\\\{[0-9a-fA-F]+\\\\}|\\\\^[@-_]))\"),\n        \n        // Numbers\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+(?:[eE][+-]?\\\\d+)?\\\\b\"),\n        // Based integers (e.g., 16#FF, 2#1010)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+#[0-9a-zA-Z]+\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Go.swift",
    "content": "//\n//  GoLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct GoLanguage: LanguageDefinition {\n    let name = \"Go\"\n    let aliases: [String]? = [\"go\", \"golang\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"break\", \"case\", \"chan\", \"const\", \"continue\", \"default\", \"defer\",\n            \"else\", \"fallthrough\", \"for\", \"func\", \"go\", \"goto\", \"if\", \"import\",\n            \"interface\", \"map\", \"package\", \"range\", \"return\", \"select\", \"struct\",\n            \"switch\", \"type\", \"var\"\n        ],\n        \"literal\": [\"true\", \"false\", \"nil\", \"iota\"],\n        \"built_in\": [\n            // Базовые типы\n            \"bool\", \"byte\", \"rune\", \"string\", \"error\",\n            \"int\", \"int8\", \"int16\", \"int32\", \"int64\",\n            \"uint\", \"uint8\", \"uint16\", \"uint32\", \"uint64\", \"uintptr\",\n            \"float32\", \"float64\", \"complex64\", \"complex128\",\n            // Встроенные функции\n            \"append\", \"cap\", \"close\", \"complex\", \"copy\", \"delete\", \"imag\",\n            \"len\", \"make\", \"new\", \"panic\", \"print\", \"println\", \"real\", \"recover\",\n            // Типы и интерфейсы\n            \"any\", \"comparable\",\n            // Пакет fmt\n            \"Print\", \"Printf\", \"Println\", \"Sprint\", \"Sprintf\", \"Sprintln\",\n            \"Fprint\", \"Fprintf\", \"Fprintln\", \"Scan\", \"Scanf\", \"Scanln\",\n            \"Fscan\", \"Fscanf\", \"Fscanln\", \"Sscan\", \"Sscanf\", \"Sscanln\",\n            \"Errorf\",\n            // Пакет errors\n            \"New\", \"Is\", \"As\", \"Unwrap\",\n            // Пакет io\n            \"Reader\", \"Writer\", \"ReadWriter\", \"ReadCloser\", \"WriteCloser\",\n            \"ReadWriteCloser\", \"Copy\", \"ReadAll\", \"ReadFull\", \"WriteString\",\n            \"EOF\", \"Closer\",\n            // Пакет os\n            \"File\", \"Open\", \"Create\", \"OpenFile\", \"Stdin\", \"Stdout\", \"Stderr\",\n            \"Args\", \"Getenv\", \"Setenv\", \"Exit\", \"Remove\", \"RemoveAll\", \"Mkdir\",\n            \"MkdirAll\", \"Chdir\", \"Getwd\",\n            // Пакет time\n            \"Time\", \"Duration\", \"Now\", \"Since\", \"Until\", \"Sleep\", \"After\",\n            \"Ticker\", \"Timer\", \"Parse\", \"ParseDuration\",\n            \"Second\", \"Minute\", \"Hour\", \"Millisecond\", \"Microsecond\", \"Nanosecond\",\n            // Пакет strings\n            \"Contains\", \"ContainsAny\", \"Count\", \"HasPrefix\", \"HasSuffix\",\n            \"Index\", \"Join\", \"Replace\", \"Split\", \"ToLower\", \"ToUpper\", \"Trim\",\n            \"TrimSpace\", \"Builder\",\n            // Пакет strconv\n            \"Atoi\", \"Itoa\", \"ParseBool\", \"ParseFloat\", \"ParseInt\", \"ParseUint\",\n            \"FormatBool\", \"FormatFloat\", \"FormatInt\", \"FormatUint\",\n            // Пакет bytes\n            \"Buffer\", \"Equal\", \"Compare\",\n            // Пакет sync\n            \"Mutex\", \"RWMutex\", \"WaitGroup\", \"Once\", \"Cond\", \"Pool\", \"Map\",\n            \"Lock\", \"Unlock\", \"RLock\", \"RUnlock\", \"Wait\", \"Done\", \"Add\",\n            // Пакет context\n            \"Context\", \"Background\", \"TODO\", \"WithCancel\", \"WithDeadline\",\n            \"WithTimeout\", \"WithValue\",\n            // Пакет http\n            \"Request\", \"Response\", \"Client\", \"Server\", \"Handler\", \"HandlerFunc\",\n            \"Get\", \"Post\", \"Head\", \"ListenAndServe\", \"Handle\", \"HandleFunc\",\n            \"StatusOK\", \"StatusNotFound\", \"StatusInternalServerError\",\n            // Пакет json\n            \"Marshal\", \"Unmarshal\", \"Encoder\", \"Decoder\", \"RawMessage\",\n            // Пакет regexp\n            \"Regexp\", \"Compile\", \"MustCompile\", \"Match\", \"MatchString\",\n            \"FindString\", \"FindAllString\",\n            // Пакет sort\n            \"Sort\", \"Slice\", \"Strings\", \"Ints\", \"Float64s\", \"Search\",\n            // Пакет math\n            \"Abs\", \"Ceil\", \"Floor\", \"Max\", \"Min\", \"Pow\", \"Sqrt\", \"Round\",\n            \"Sin\", \"Cos\", \"Tan\", \"Pi\", \"E\", \"Inf\", \"NaN\", \"IsNaN\", \"IsInf\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"function\", begin: \"\\\\bfunc\\\\s+(?:\\\\([^)]*\\\\)\\\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\btype\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\b(?:struct|interface)\\\\b\"),\n        \n        // Raw string literals (backticks)\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+(?:\\\\.[0-9a-fA-F]+)?[pP]?[+-]?\\\\d*\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[oO][0-7]+\\\\b\"),\n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:\\\\.\\\\d+)?[eE][+-]?\\\\d+[i]?\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[i]?\\\\b\"),\n        // Integer with underscores\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:_\\\\d+)*[i]?\\\\b\"),\n        // Imaginary numbers\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+i\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Groovy.swift",
    "content": "//\n//  GroovyLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct GroovyLanguage: LanguageDefinition {\n    let name = \"Groovy\"\n    let aliases: [String]? = [\"groovy\", \"gvy\", \"gy\", \"gsh\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\", \"as\", \"assert\", \"boolean\", \"break\", \"byte\", \"case\", \"catch\",\n            \"char\", \"class\", \"const\", \"continue\", \"def\", \"default\", \"do\", \"double\",\n            \"else\", \"enum\", \"extends\", \"false\", \"final\", \"finally\", \"float\", \"for\",\n            \"goto\", \"if\", \"implements\", \"import\", \"in\", \"instanceof\", \"int\", \"interface\",\n            \"long\", \"native\", \"new\", \"null\", \"package\", \"private\", \"protected\", \"public\",\n            \"return\", \"short\", \"static\", \"strictfp\", \"super\", \"switch\", \"synchronized\",\n            \"this\", \"throw\", \"throws\", \"trait\", \"transient\", \"true\", \"try\", \"void\",\n            \"volatile\", \"while\",\n            // Groovy-specific\n            \"as\", \"def\", \"in\", \"trait\", \"var\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Primitive wrapper classes\n            \"Boolean\", \"Byte\", \"Character\", \"Double\", \"Float\", \"Integer\", \"Long\",\n            \"Number\", \"Short\", \"String\", \"Void\",\n            // Common classes\n            \"Object\", \"Class\", \"Closure\", \"Range\", \"Binding\", \"Script\", \"GroovyObject\",\n            \"MetaClass\", \"ExpandoMetaClass\", \"Category\", \"Mixin\",\n            // Collections\n            \"Collection\", \"List\", \"ArrayList\", \"LinkedList\", \"Set\", \"HashSet\",\n            \"LinkedHashSet\", \"TreeSet\", \"SortedSet\", \"Map\", \"HashMap\", \"LinkedHashMap\",\n            \"TreeMap\", \"Hashtable\", \"Properties\", \"Queue\", \"Stack\", \"Vector\",\n            // GDK enhancements\n            \"each\", \"eachWithIndex\", \"collect\", \"collectMany\", \"findAll\", \"find\",\n            \"findIndexOf\", \"findLastIndexOf\", \"grep\", \"every\", \"any\", \"inject\",\n            \"sum\", \"max\", \"min\", \"sort\", \"unique\", \"reverse\", \"flatten\", \"transpose\",\n            \"intersect\", \"disjoint\", \"plus\", \"minus\", \"multiply\", \"power\", \"div\",\n            \"leftShift\", \"rightShift\", \"getAt\", \"putAt\", \"asType\", \"asBoolean\",\n            \"split\", \"tokenize\", \"join\", \"reverse\", \"padLeft\", \"padRight\", \"center\",\n            \"capitalize\", \"uncapitalize\", \"toUpperCase\", \"toLowerCase\", \"trim\",\n            \"stripIndent\", \"stripMargin\", \"eachLine\", \"readLines\", \"splitEachLine\",\n            \"withReader\", \"withWriter\", \"withStream\", \"withInputStream\", \"withOutputStream\",\n            \"withPrintWriter\", \"eachFile\", \"eachDir\", \"eachFileRecurse\", \"eachDirRecurse\",\n            \"eachFileMatch\", \"eachDirMatch\", \"traverse\", \"getText\", \"getBytes\",\n            \"newReader\", \"newWriter\", \"newInputStream\", \"newOutputStream\",\n            \"newPrintWriter\", \"append\", \"write\", \"leftShift\",\n            // I/O\n            \"File\", \"FileInputStream\", \"FileOutputStream\", \"FileReader\", \"FileWriter\",\n            \"BufferedReader\", \"BufferedWriter\", \"InputStreamReader\", \"OutputStreamWriter\",\n            \"PrintWriter\", \"PrintStream\", \"InputStream\", \"OutputStream\", \"Reader\",\n            \"Writer\", \"RandomAccessFile\",\n            // Date/Time\n            \"Date\", \"Calendar\", \"GregorianCalendar\", \"TimeZone\", \"SimpleDateFormat\",\n            \"DateFormat\", \"LocalDate\", \"LocalTime\", \"LocalDateTime\", \"ZonedDateTime\",\n            \"Duration\", \"Period\", \"Instant\",\n            // Utilities\n            \"Random\", \"UUID\", \"Timer\", \"TimerTask\", \"Optional\",\n            // Regex\n            \"Pattern\", \"Matcher\", \"RegEx\",\n            // SQL/Database\n            \"Sql\", \"GroovyRowResult\", \"DataSet\",\n            // XML\n            \"XmlParser\", \"XmlSlurper\", \"MarkupBuilder\", \"StreamingMarkupBuilder\",\n            \"Node\", \"NodeList\", \"GPathResult\",\n            // JSON\n            \"JsonSlurper\", \"JsonBuilder\", \"JsonOutput\", \"StreamingJsonBuilder\",\n            // HTTP/Network\n            \"URL\", \"URI\", \"URLConnection\", \"HttpURLConnection\", \"Socket\",\n            \"ServerSocket\", \"InetAddress\",\n            // Swing (common in Groovy)\n            \"SwingBuilder\", \"JFrame\", \"JPanel\", \"JButton\", \"JLabel\", \"JTextField\",\n            \"JTextArea\", \"JTable\", \"JList\", \"JTree\", \"JMenu\", \"JMenuItem\",\n            // Concurrency\n            \"Thread\", \"Runnable\", \"Callable\", \"Future\", \"ExecutorService\",\n            \"ThreadPoolExecutor\", \"ScheduledExecutorService\", \"Lock\", \"ReentrantLock\",\n            \"Semaphore\", \"CountDownLatch\", \"CyclicBarrier\",\n            // Groovy SQL\n            \"Sql\", \"DataSource\", \"Connection\", \"Statement\", \"PreparedStatement\",\n            \"ResultSet\", \"ResultSetMetaData\",\n            // Exceptions\n            \"Exception\", \"RuntimeException\", \"Throwable\", \"Error\",\n            \"IllegalArgumentException\", \"IllegalStateException\", \"NullPointerException\",\n            \"IndexOutOfBoundsException\", \"ArrayIndexOutOfBoundsException\",\n            \"ClassNotFoundException\", \"ClassCastException\", \"NumberFormatException\",\n            \"IOException\", \"FileNotFoundException\", \"SQLException\",\n            // Annotations\n            \"Override\", \"Deprecated\", \"SuppressWarnings\", \"FunctionalInterface\",\n            \"CompileStatic\", \"TypeChecked\", \"ToString\", \"EqualsAndHashCode\",\n            \"TupleConstructor\", \"Canonical\", \"Immutable\", \"Singleton\", \"Delegate\",\n            \"Lazy\", \"Newify\", \"Sortable\", \"Field\", \"PackageScope\", \"BaseScript\",\n            // AST Transformations\n            \"ASTTest\", \"AutoClone\", \"AutoExternalize\", \"Builder\", \"Canonical\",\n            \"Category\", \"CompileDynamic\", \"CompileStatic\", \"Delegate\", \"EqualsAndHashCode\",\n            \"ExternalizeMethods\", \"Field\", \"Grab\", \"GrabConfig\", \"GrabExclude\",\n            \"GrabResolver\", \"Grapes\", \"Immutable\", \"IndexedProperty\", \"InheritConstructors\",\n            \"Lazy\", \"ListenerList\", \"Log\", \"Memoized\", \"Mixin\", \"Newify\",\n            \"NotYetImplemented\", \"PackageScope\", \"Singleton\", \"Sortable\", \"Synchronized\",\n            \"ThreadInterrupt\", \"TimedInterrupt\", \"ToString\", \"TupleConstructor\",\n            \"TypeChecked\", \"Vetoable\", \"VisibilityOptions\", \"WithReadLock\", \"WithWriteLock\",\n            // Testing (Spock, etc.)\n            \"Specification\", \"given\", \"when\", \"then\", \"expect\", \"where\", \"and\",\n            \"cleanup\", \"setup\", \"setupSpec\", \"cleanupSpec\",\n            // Build tools (Gradle)\n            \"task\", \"tasks\", \"dependencies\", \"repositories\", \"buildscript\",\n            \"allprojects\", \"subprojects\", \"apply\", \"plugin\", \"ext\", \"configurations\",\n            \"sourceSets\", \"jar\", \"war\", \"test\", \"build\", \"clean\", \"assemble\",\n            \"compile\", \"implementation\", \"api\", \"testImplementation\", \"testCompile\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        \n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*(?:\\\\.[a-zA-Z_][a-zA-Z0-9_]*)*\"),\n        Mode(scope: \"class\", begin: \"\\\\b(?:class|interface|trait|enum)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b(?:def|void|public|private|protected|static)\\\\s+[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(?=\\\\()\"),\n        \n        // Triple-quoted strings (multi-line)\n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        Mode(scope: \"string\", begin: \"'''\", end: \"'''\"),\n        \n        // Slashy strings (regex-friendly)\n        Mode(scope: \"string\", begin: \"/(?![*/])\", end: \"/\"),\n        \n        // Dollar slashy strings\n        Mode(scope: \"string\", begin: \"\\\\$/\", end: \"/\\\\$\"),\n        \n        // GString (interpolated strings)\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Regular strings (single quotes, no interpolation)\n        CommonModes.stringSingle,\n        \n        // Character literals\n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)'\"),\n        \n        // Closures highlighting\n        Mode(scope: \"function\", begin: \"\\\\{\", end: \"\\\\}\"),\n        \n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+[lLgGiI]?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+[lLgGiI]?\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[lLgGiI]?\\\\b\"),\n        // Float/Double with suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+(?:[eE][+-]?\\\\d+)?[fFdDgG]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+[fFdDgG]?\\\\b\"),\n        // BigDecimal (G suffix)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[gG]\\\\b\"),\n        // BigInteger (G or I suffix)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[iI]\\\\b\"),\n        // Long (L suffix)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[lL]\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Haskell.swift",
    "content": "//\n//  HaskellLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct HaskellLanguage: LanguageDefinition {\n    let name = \"Haskell\"\n    let aliases: [String]? = [\"haskell\", \"hs\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"as\", \"case\", \"of\", \"class\", \"data\", \"family\", \"instance\", \"default\",\n            \"deriving\", \"do\", \"forall\", \"foreign\", \"hiding\", \"if\", \"then\", \"else\",\n            \"import\", \"infix\", \"infixl\", \"infixr\", \"let\", \"in\", \"mdo\", \"module\",\n            \"newtype\", \"proc\", \"qualified\", \"rec\", \"type\", \"where\",\n            // GHC extensions\n            \"pattern\", \"role\", \"via\", \"stock\", \"anyclass\", \"newtype\",\n            // Special keywords\n            \"safe\", \"unsafe\", \"interruptible\", \"ccall\", \"stdcall\", \"cplusplus\",\n            \"jvm\", \"dotnet\"\n        ],\n        \"literal\": [\"True\", \"False\"],\n        \"built_in\": [\n            // Basic types\n            \"Bool\", \"Char\", \"String\", \"Int\", \"Integer\", \"Float\", \"Double\",\n            \"Rational\", \"Word\", \"IO\", \"Maybe\", \"Either\", \"Ordering\",\n            // Type constructors\n            \"Just\", \"Nothing\", \"Left\", \"Right\", \"LT\", \"EQ\", \"GT\",\n            // List types\n            \"[]\", \"[a]\",\n            // Tuple types\n            \"()\", \"(,)\", \"(,,)\", \"(,,,)\", \"(,,,,)\",\n            // Numeric types\n            \"Int8\", \"Int16\", \"Int32\", \"Int64\",\n            \"Word8\", \"Word16\", \"Word32\", \"Word64\",\n            \"Natural\", \"Scientific\",\n            // Function types\n            \"->\", \"=>\",\n            // Type classes\n            \"Eq\", \"Ord\", \"Show\", \"Read\", \"Enum\", \"Bounded\", \"Num\", \"Real\",\n            \"Integral\", \"Fractional\", \"Floating\", \"RealFrac\", \"RealFloat\",\n            \"Semigroup\", \"Monoid\", \"Functor\", \"Applicative\", \"Monad\",\n            \"Alternative\", \"MonadPlus\", \"Foldable\", \"Traversable\",\n            \"Category\", \"Arrow\", \"ArrowChoice\", \"ArrowApply\", \"ArrowLoop\",\n            // Common functions\n            \"map\", \"filter\", \"foldr\", \"foldl\", \"foldr1\", \"foldl1\", \"foldMap\",\n            \"scanr\", \"scanl\", \"scanr1\", \"scanl1\", \"iterate\", \"repeat\", \"replicate\",\n            \"cycle\", \"take\", \"drop\", \"takeWhile\", \"dropWhile\", \"splitAt\", \"span\",\n            \"break\", \"reverse\", \"zip\", \"zip3\", \"zipWith\", \"zipWith3\", \"unzip\",\n            \"unzip3\", \"concat\", \"concatMap\", \"and\", \"or\", \"any\", \"all\", \"sum\",\n            \"product\", \"maximum\", \"minimum\", \"elem\", \"notElem\", \"lookup\",\n            \"head\", \"last\", \"tail\", \"init\", \"null\", \"length\",\n            // List comprehensions helpers\n            \"enumFrom\", \"enumFromTo\", \"enumFromThen\", \"enumFromThenTo\",\n            // Functor/Applicative/Monad\n            \"fmap\", \"<$>\", \"<*>\", \"*>\", \"<*\", \"pure\", \"return\", \">>=\", \">>\",\n            \"fail\", \"join\", \"liftM\", \"liftM2\", \"liftM3\", \"liftM4\", \"liftM5\",\n            \"ap\", \"liftA\", \"liftA2\", \"liftA3\", \"<|>\", \"empty\", \"guard\",\n            \"when\", \"unless\", \"forever\", \"void\", \"mapM\", \"mapM_\", \"forM\",\n            \"forM_\", \"sequence\", \"sequence_\", \"replicateM\", \"replicateM_\",\n            \"filterM\", \"zipWithM\", \"zipWithM_\", \"foldM\", \"foldM_\",\n            // Foldable/Traversable\n            \"fold\", \"foldMap\", \"foldr\", \"foldl\", \"foldr1\", \"foldl1\", \"toList\",\n            \"null\", \"length\", \"elem\", \"maximum\", \"minimum\", \"sum\", \"product\",\n            \"traverse\", \"sequenceA\", \"mapM\", \"sequence\",\n            // Maybe\n            \"maybe\", \"isJust\", \"isNothing\", \"fromJust\", \"fromMaybe\",\n            \"listToMaybe\", \"maybeToList\", \"catMaybes\", \"mapMaybe\",\n            // Either\n            \"either\", \"lefts\", \"rights\", \"partitionEithers\", \"isLeft\", \"isRight\",\n            \"fromLeft\", \"fromRight\",\n            // Bool\n            \"bool\", \"not\", \"otherwise\",\n            // Tuple\n            \"fst\", \"snd\", \"curry\", \"uncurry\", \"swap\",\n            // Char/String\n            \"lines\", \"words\", \"unlines\", \"unwords\", \"showChar\", \"showString\",\n            \"readParen\", \"showParen\", \"lex\", \"reads\", \"shows\", \"read\", \"show\",\n            // Numeric functions\n            \"abs\", \"signum\", \"negate\", \"recip\", \"div\", \"mod\", \"quot\", \"rem\",\n            \"divMod\", \"quotRem\", \"gcd\", \"lcm\", \"sqrt\", \"exp\", \"log\", \"logBase\",\n            \"sin\", \"cos\", \"tan\", \"asin\", \"acos\", \"atan\", \"atan2\", \"sinh\", \"cosh\",\n            \"tanh\", \"asinh\", \"acosh\", \"atanh\", \"pi\", \"(**)\", \"(^)\", \"(^^)\",\n            \"fromIntegral\", \"realToFrac\", \"truncate\", \"round\", \"ceiling\", \"floor\",\n            \"toInteger\", \"toRational\", \"properFraction\", \"even\", \"odd\", \"succ\", \"pred\",\n            // Comparison\n            \"compare\", \"max\", \"min\", \"comparing\", \"on\",\n            // Function composition\n            \".\", \"$\", \"$!\", \"flip\", \"const\", \"id\", \"until\", \"asTypeOf\", \"error\",\n            \"errorWithoutStackTrace\", \"undefined\", \"seq\", \"deepseq\", \"force\",\n            // IO\n            \"putChar\", \"putStr\", \"putStrLn\", \"print\", \"getChar\", \"getLine\",\n            \"getContents\", \"interact\", \"readFile\", \"writeFile\", \"appendFile\",\n            \"readIO\", \"readLn\",\n            // Control structures\n            \"if\", \"then\", \"else\", \"case\", \"of\", \"let\", \"in\", \"where\", \"do\",\n            // Data structures\n            \"Map\", \"Set\", \"IntMap\", \"IntSet\", \"Seq\", \"Array\", \"Vector\",\n            \"HashMap\", \"HashSet\", \"Text\", \"ByteString\",\n            // Common modules functions\n            \"insert\", \"delete\", \"member\", \"notMember\", \"lookup\", \"findWithDefault\",\n            \"empty\", \"singleton\", \"fromList\", \"toList\", \"union\", \"intersection\",\n            \"difference\", \"null\", \"size\", \"map\", \"filter\", \"partition\",\n            // Text/ByteString\n            \"pack\", \"unpack\", \"append\", \"concat\", \"intercalate\", \"split\",\n            \"splitOn\", \"strip\", \"stripPrefix\", \"stripSuffix\", \"replace\",\n            \"toLower\", \"toUpper\", \"reverse\", \"length\", \"null\", \"empty\",\n            // Parser combinators (common)\n            \"parse\", \"parseTest\", \"runParser\", \"many\", \"some\", \"optional\",\n            \"between\", \"sepBy\", \"sepBy1\", \"endBy\", \"endBy1\", \"count\", \"chainl\",\n            \"chainl1\", \"chainr\", \"chainr1\", \"choice\", \"option\", \"optionMaybe\",\n            \"try\", \"lookAhead\", \"notFollowedBy\",\n            // Exceptions\n            \"Exception\", \"SomeException\", \"IOException\", \"ArithException\",\n            \"ArrayException\", \"AssertionFailed\", \"AsyncException\",\n            \"BlockedIndefinitelyOnMVar\", \"BlockedIndefinitelyOnSTM\",\n            \"Deadlock\", \"ErrorCall\", \"NoMethodError\", \"PatternMatchFail\",\n            \"RecConError\", \"RecSelError\", \"RecUpdError\", \"TypeError\",\n            \"catch\", \"catchJust\", \"handle\", \"handleJust\", \"try\", \"tryJust\",\n            \"evaluate\", \"throw\", \"throwIO\", \"throwTo\", \"assert\", \"finally\",\n            \"bracket\", \"bracket_\", \"bracketOnError\", \"onException\",\n            // Concurrency\n            \"forkIO\", \"forkOS\", \"forkOn\", \"forkIOWithUnmask\", \"killThread\",\n            \"threadDelay\", \"yield\", \"myThreadId\", \"throwTo\", \"MVar\", \"newMVar\",\n            \"newEmptyMVar\", \"takeMVar\", \"putMVar\", \"readMVar\", \"swapMVar\",\n            \"tryTakeMVar\", \"tryPutMVar\", \"isEmptyMVar\", \"withMVar\", \"modifyMVar\",\n            \"modifyMVar_\", \"Chan\", \"newChan\", \"writeChan\", \"readChan\", \"dupChan\",\n            \"STM\", \"atomically\", \"retry\", \"orElse\", \"TVar\", \"newTVar\", \"readTVar\",\n            \"writeTVar\", \"modifyTVar\", \"modifyTVar'\", \"swapTVar\",\n            // Prelude re-exports\n            \"undefined\", \"error\", \"trace\", \"traceShow\", \"traceShowId\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Block comments (nested)\n        Mode(scope: \"comment\", begin: \"\\\\{-\", end: \"-\\\\}\"),\n        \n        // Line comments\n        Mode(scope: \"comment\", begin: \"--\", end: \"\\n\"),\n        \n        // Pragmas\n        Mode(scope: \"meta\", begin: \"\\\\{-#\", end: \"#-\\\\}\"),\n        \n        // Module declaration\n        Mode(scope: \"class\", begin: \"\\\\bmodule\\\\s+([A-Z][a-zA-Z0-9_]*(?:\\\\.[A-Z][a-zA-Z0-9_]*)*)\"),\n        \n        // Type declarations\n        Mode(scope: \"class\", begin: \"\\\\b(?:data|newtype|type|class|instance)\\\\s+([A-Z][a-zA-Z0-9_]*)\"),\n        \n        // Constructors (capital letter start)\n        Mode(scope: \"class\", begin: \"\\\\b[A-Z][a-zA-Z0-9_]*\\\\b\"),\n        \n        // Function definitions\n        Mode(scope: \"function\", begin: \"^[a-z_][a-zA-Z0-9_']*\\\\s*(?:::|=)\"),\n        \n        // Type variables (lowercase in type signatures)\n        Mode(scope: \"meta\", begin: \"\\\\b[a-z][a-zA-Z0-9_']*\\\\b(?=.*::)\"),\n        \n        // Operators (custom)\n        Mode(scope: \"keyword\", begin: \"(?:[!#$%&*+./<=>?@\\\\\\\\^|~-]+|`[a-zA-Z_][a-zA-Z0-9_']*`)\"),\n        \n        // Character literals\n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\(?:[abfnrtv\\\\\\\\\\\"'&]|o[0-7]+|x[0-9a-fA-F]+|[0-9]+|\\\\^[@-_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL))'\"),\n        \n        // String literals\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Multi-line strings (with backslash continuation)\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Numbers\n        // Binary (GHC 7.10+)\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[oO][0-7]+\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+(?:[eE][+-]?\\\\d+)?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Html.swift",
    "content": "//\n//  HTMLLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct HTMLLanguage: LanguageDefinition {\n    let name = \"HTML\"\n    let aliases: [String]? = [\"html\", \"htm\", \"xhtml\"]\n    let caseInsensitive = true\n    let keywords: [String: [String]]? = [\n        \"keyword\": [],\n        \"literal\": [],\n        \"built_in\": [\n            // Document structure\n            \"html\", \"head\", \"title\", \"base\", \"link\", \"meta\", \"style\", \"body\",\n            // Sections\n            \"header\", \"nav\", \"main\", \"section\", \"article\", \"aside\", \"footer\",\n            \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hgroup\", \"address\",\n            // Grouping content\n            \"p\", \"hr\", \"pre\", \"blockquote\", \"ol\", \"ul\", \"li\", \"dl\", \"dt\", \"dd\",\n            \"figure\", \"figcaption\", \"div\",\n            // Text-level semantics\n            \"a\", \"em\", \"strong\", \"small\", \"s\", \"cite\", \"q\", \"dfn\", \"abbr\", \"data\",\n            \"time\", \"code\", \"var\", \"samp\", \"kbd\", \"sub\", \"sup\", \"i\", \"b\", \"u\",\n            \"mark\", \"ruby\", \"rt\", \"rp\", \"bdi\", \"bdo\", \"span\", \"br\", \"wbr\",\n            // Edits\n            \"ins\", \"del\",\n            // Embedded content\n            \"img\", \"iframe\", \"embed\", \"object\", \"param\", \"video\", \"audio\", \"source\",\n            \"track\", \"canvas\", \"map\", \"area\", \"svg\", \"math\",\n            // Tabular data\n            \"table\", \"caption\", \"colgroup\", \"col\", \"tbody\", \"thead\", \"tfoot\", \"tr\",\n            \"td\", \"th\",\n            // Forms\n            \"form\", \"label\", \"input\", \"button\", \"select\", \"datalist\", \"optgroup\",\n            \"option\", \"textarea\", \"output\", \"progress\", \"meter\", \"fieldset\", \"legend\",\n            // Interactive elements\n            \"details\", \"summary\", \"dialog\", \"menu\",\n            // Scripting\n            \"script\", \"noscript\", \"template\", \"slot\", \"canvas\",\n            // Web Components\n            \"template\", \"slot\",\n            // Obsolete/deprecated (but still used)\n            \"center\", \"font\", \"strike\", \"big\", \"tt\", \"frame\", \"frameset\", \"noframes\",\n            \"acronym\", \"applet\", \"basefont\", \"dir\", \"isindex\", \"listing\", \"marquee\",\n            \"plaintext\", \"xmp\", \"nextid\", \"rb\", \"rtc\",\n            // HTML5 new elements\n            \"article\", \"aside\", \"bdi\", \"command\", \"details\", \"summary\", \"figure\",\n            \"figcaption\", \"footer\", \"header\", \"hgroup\", \"mark\", \"meter\", \"nav\",\n            \"progress\", \"ruby\", \"rt\", \"rp\", \"section\", \"time\", \"wbr\", \"datalist\",\n            \"keygen\", \"output\", \"canvas\", \"audio\", \"video\", \"source\", \"embed\",\n            \"track\", \"main\", \"picture\",\n            // Attributes (common)\n            \"class\", \"id\", \"style\", \"title\", \"lang\", \"dir\", \"hidden\", \"tabindex\",\n            \"accesskey\", \"contenteditable\", \"contextmenu\", \"draggable\", \"dropzone\",\n            \"spellcheck\", \"translate\", \"role\", \"aria-label\", \"aria-labelledby\",\n            \"aria-describedby\", \"aria-hidden\", \"data-\",\n            // Form attributes\n            \"action\", \"method\", \"enctype\", \"accept-charset\", \"novalidate\",\n            \"autocomplete\", \"autofocus\", \"disabled\", \"readonly\", \"required\",\n            \"placeholder\", \"pattern\", \"min\", \"max\", \"step\", \"minlength\", \"maxlength\",\n            \"size\", \"multiple\", \"checked\", \"selected\", \"value\", \"name\", \"type\",\n            \"for\", \"form\",\n            // Link/script attributes\n            \"href\", \"src\", \"alt\", \"crossorigin\", \"rel\", \"media\", \"hreflang\",\n            \"type\", \"sizes\", \"async\", \"defer\", \"charset\", \"integrity\",\n            // Image/media attributes\n            \"width\", \"height\", \"loading\", \"decoding\", \"srcset\", \"sizes\", \"poster\",\n            \"preload\", \"autoplay\", \"loop\", \"muted\", \"controls\", \"playsinline\",\n            // Table attributes\n            \"colspan\", \"rowspan\", \"headers\", \"scope\",\n            // Meta attributes\n            \"content\", \"http-equiv\", \"charset\", \"name\",\n            // Global event attributes\n            \"onclick\", \"ondblclick\", \"onmousedown\", \"onmouseup\", \"onmouseover\",\n            \"onmousemove\", \"onmouseout\", \"onkeypress\", \"onkeydown\", \"onkeyup\",\n            \"onfocus\", \"onblur\", \"onchange\", \"onsubmit\", \"onload\", \"onunload\",\n            \"onerror\", \"onresize\", \"onscroll\", \"onwheel\", \"oncopy\", \"oncut\",\n            \"onpaste\", \"ondrag\", \"ondragstart\", \"ondragend\", \"ondragover\",\n            \"ondragenter\", \"ondragleave\", \"ondrop\", \"ontouchstart\", \"ontouchmove\",\n            \"ontouchend\", \"ontouchcancel\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // HTML comments\n        Mode(scope: \"comment\", begin: \"<!--\", end: \"-->\"),\n        \n        // DOCTYPE declaration\n        Mode(scope: \"meta\", begin: \"<!DOCTYPE\", end: \">\"),\n        \n        // XML declaration\n        Mode(scope: \"meta\", begin: \"<\\\\?xml\", end: \"\\\\?>\"),\n        \n        // CDATA sections\n        Mode(scope: \"string\", begin: \"<!\\\\[CDATA\\\\[\", end: \"\\\\]\\\\]>\"),\n        \n        // Processing instructions\n        Mode(scope: \"meta\", begin: \"<\\\\?\", end: \"\\\\?>\"),\n        \n        // Opening tags with attributes\n        Mode(scope: \"keyword\", begin: \"<[a-zA-Z][a-zA-Z0-9-]*\"),\n        \n        // Closing tags\n        Mode(scope: \"keyword\", begin: \"</[a-zA-Z][a-zA-Z0-9-]*>\"),\n        \n        // Self-closing tags\n        Mode(scope: \"keyword\", begin: \"/>\"),\n        \n        // Attribute names\n        Mode(scope: \"meta\", begin: \"\\\\b[a-zA-Z][a-zA-Z0-9-]*(?==)\"),\n        \n        // Attribute values with double quotes\n        Mode(scope: \"string\", begin: \"=\\\"\", end: \"\\\"\"),\n        \n        // Attribute values with single quotes\n        Mode(scope: \"string\", begin: \"='\", end: \"'\"),\n        \n        // Entity references\n        Mode(scope: \"string\", begin: \"&[a-zA-Z]+;\"),\n        Mode(scope: \"string\", begin: \"&#[0-9]+;\"),\n        Mode(scope: \"string\", begin: \"&#x[0-9a-fA-F]+;\"),\n        \n        // Tag closing bracket\n        Mode(scope: \"keyword\", begin: \">\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Java.swift",
    "content": "//\n//  JavaLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct JavaLanguage: LanguageDefinition {\n    let name = \"Java\"\n    let aliases: [String]? = [\"java\", \"jsp\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\", \"assert\", \"boolean\", \"break\", \"byte\", \"case\", \"catch\",\n            \"char\", \"class\", \"const\", \"continue\", \"default\", \"do\", \"double\",\n            \"else\", \"enum\", \"extends\", \"final\", \"finally\", \"float\", \"for\",\n            \"goto\", \"if\", \"implements\", \"import\", \"instanceof\", \"int\", \"interface\",\n            \"long\", \"native\", \"new\", \"package\", \"private\", \"protected\", \"public\",\n            \"return\", \"short\", \"static\", \"strictfp\", \"super\", \"switch\", \"synchronized\",\n            \"this\", \"throw\", \"throws\", \"transient\", \"try\", \"void\", \"volatile\", \"while\",\n            // Java 9+\n            \"module\", \"requires\", \"exports\", \"opens\", \"to\", \"uses\", \"provides\", \"with\",\n            // Java 10+\n            \"var\",\n            // Java 14+\n            \"record\", \"sealed\", \"permits\", \"non-sealed\",\n            // Java 17+\n            \"yield\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Primitive wrapper classes\n            \"Boolean\", \"Byte\", \"Character\", \"Double\", \"Float\", \"Integer\", \"Long\", \"Short\",\n            \"Void\", \"Number\",\n            // Common classes\n            \"Object\", \"String\", \"StringBuffer\", \"StringBuilder\", \"Class\", \"System\",\n            \"Thread\", \"Runnable\", \"Throwable\", \"Exception\", \"Error\", \"RuntimeException\",\n            // Collections\n            \"Collection\", \"List\", \"ArrayList\", \"LinkedList\", \"Vector\", \"Stack\",\n            \"Set\", \"HashSet\", \"LinkedHashSet\", \"TreeSet\", \"SortedSet\", \"NavigableSet\",\n            \"Map\", \"HashMap\", \"LinkedHashMap\", \"TreeMap\", \"Hashtable\", \"SortedMap\", \"NavigableMap\",\n            \"Queue\", \"Deque\", \"PriorityQueue\", \"ArrayDeque\",\n            \"Collections\", \"Arrays\", \"Iterator\", \"ListIterator\", \"Enumeration\",\n            // I/O\n            \"File\", \"FileInputStream\", \"FileOutputStream\", \"FileReader\", \"FileWriter\",\n            \"BufferedReader\", \"BufferedWriter\", \"InputStreamReader\", \"OutputStreamWriter\",\n            \"InputStream\", \"OutputStream\", \"Reader\", \"Writer\", \"PrintStream\", \"PrintWriter\",\n            \"Scanner\", \"Console\",\n            // Utilities\n            \"Date\", \"Calendar\", \"GregorianCalendar\", \"TimeZone\", \"Locale\",\n            \"Random\", \"UUID\", \"Optional\", \"Objects\",\n            \"Math\", \"StrictMath\",\n            // Concurrency\n            \"Executor\", \"ExecutorService\", \"Callable\", \"Future\", \"CompletableFuture\",\n            \"Lock\", \"ReentrantLock\", \"Semaphore\", \"CountDownLatch\", \"CyclicBarrier\",\n            \"Atomic\", \"AtomicInteger\", \"AtomicLong\", \"AtomicBoolean\", \"AtomicReference\",\n            // Streams (Java 8+)\n            \"Stream\", \"IntStream\", \"LongStream\", \"DoubleStream\", \"Collector\", \"Collectors\",\n            // Functional interfaces (Java 8+)\n            \"Function\", \"BiFunction\", \"Consumer\", \"BiConsumer\", \"Supplier\",\n            \"Predicate\", \"BiPredicate\", \"UnaryOperator\", \"BinaryOperator\",\n            // Exceptions\n            \"IOException\", \"FileNotFoundException\", \"SQLException\", \"ClassNotFoundException\",\n            \"IllegalArgumentException\", \"IllegalStateException\", \"NullPointerException\",\n            \"IndexOutOfBoundsException\", \"ArrayIndexOutOfBoundsException\",\n            \"ConcurrentModificationException\", \"UnsupportedOperationException\",\n            \"NumberFormatException\", \"ArithmeticException\", \"ClassCastException\",\n            // Annotations\n            \"Override\", \"Deprecated\", \"SuppressWarnings\", \"SafeVarargs\", \"FunctionalInterface\",\n            // Reflection\n            \"Method\", \"Field\", \"Constructor\", \"Modifier\",\n            // Generics helpers\n            \"Comparable\", \"Comparator\", \"Cloneable\", \"Serializable\", \"AutoCloseable\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        // Однострочные комментарии\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*(?:\\\\.[a-zA-Z_][a-zA-Z0-9_]*)*\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\b(?:class|interface|enum|record)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\s*(?=\\\\()\"),\n        \n        // Text blocks (Java 15+)\n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        \n        CommonModes.stringDouble,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // Binary (Java 7+)\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+[lLfFdD]?\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[lLfFdD]?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+[lL]?\\\\b\"),\n        // Float/Double with suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[fFdD]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+[fFdD]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[eE][+-]?\\\\d+[fFdD]?\\\\b\"),\n        // Integer with underscores (Java 7+)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:_\\\\d+)*[lLfFdD]?\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[lLfFdD]?\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/JavaScript.swift",
    "content": "//\n//  JavaScriptLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 31.08.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct JavaScriptLanguage: LanguageDefinition {\n    let name = \"JavaScript\"\n    let aliases: [String]? = [\"js\", \"jsx\", \"mjs\", \"cjs\"]\n    let caseInsensitive = false\n\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"constructor\",\"this\",\"as\",\"in\",\"of\",\"if\",\"for\",\"while\",\"finally\",\"var\",\"new\",\"function\",\n            \"do\",\"return\",\"void\",\"else\",\"break\",\"catch\",\"instanceof\",\"with\",\n            \"throw\",\"case\",\"default\",\"try\",\"switch\",\"continue\",\"typeof\",\"delete\",\n            \"let\",\"yield\",\"const\",\"class\",\"debugger\",\"async\",\"await\",\"static\",\n            \"import\",\"from\",\"export\",\"extends\",\"using\"\n        ],\n        \"literal\": [\"true\",\"false\",\"null\",\"undefined\",\"NaN\",\"Infinity\"],\n        \"built_in\": [\n            \"Object\",\"Function\",\"Boolean\",\"Symbol\",\"Math\",\"Date\",\"Number\",\"BigInt\",\n            \"String\",\"RegExp\",\"Array\",\"Float32Array\",\"Float64Array\",\"Int8Array\",\n            \"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Int32Array\",\"Uint16Array\",\n            \"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\",\"Set\",\"Map\",\"WeakSet\",\n            \"WeakMap\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"Atomics\",\"DataView\",\"JSON\",\n            \"Promise\",\"Generator\",\"GeneratorFunction\",\"AsyncFunction\",\"Reflect\",\"Proxy\",\n            \"Intl\",\"WebAssembly\",\"Error\",\"EvalError\",\"InternalError\",\"RangeError\",\n            \"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\",\n            \"console\",\"window\",\"document\",\"localStorage\",\"sessionStorage\",\"module\",\"global\",\"this\",\"arguments\",\"super\"\n        ]\n    ]\n\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\bfunction\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bclass\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bextends\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n\n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n        \n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Kotlin.swift",
    "content": "//\n//  KotlinLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct KotlinLanguage: LanguageDefinition {\n    let name = \"Kotlin\"\n    let aliases: [String]? = [\"kt\", \"kts\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\", \"actual\", \"annotation\", \"as\", \"break\", \"by\", \"catch\", \"class\",\n            \"companion\", \"const\", \"constructor\", \"continue\", \"crossinline\", \"data\",\n            \"do\", \"dynamic\", \"else\", \"enum\", \"expect\", \"external\", \"final\", \"finally\",\n            \"for\", \"fun\", \"get\", \"if\", \"import\", \"in\", \"infix\", \"init\", \"inline\",\n            \"inner\", \"interface\", \"internal\", \"is\", \"lateinit\", \"noinline\", \"object\",\n            \"open\", \"operator\", \"out\", \"override\", \"package\", \"private\", \"protected\",\n            \"public\", \"reified\", \"return\", \"sealed\", \"set\", \"super\", \"suspend\",\n            \"tailrec\", \"this\", \"throw\", \"try\", \"typealias\", \"typeof\", \"val\", \"var\",\n            \"vararg\", \"when\", \"where\", \"while\",\n            // Soft keywords\n            \"by\", \"catch\", \"constructor\", \"delegate\", \"dynamic\", \"field\", \"file\",\n            \"finally\", \"get\", \"import\", \"init\", \"param\", \"property\", \"receiver\",\n            \"set\", \"setparam\", \"where\",\n            // Modifiers\n            \"actual\", \"abstract\", \"annotation\", \"companion\", \"const\", \"crossinline\",\n            \"data\", \"enum\", \"expect\", \"external\", \"final\", \"infix\", \"inline\", \"inner\",\n            \"internal\", \"lateinit\", \"noinline\", \"open\", \"operator\", \"out\", \"override\",\n            \"private\", \"protected\", \"public\", \"reified\", \"sealed\", \"suspend\", \"tailrec\",\n            \"vararg\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Primitive types\n            \"Boolean\", \"Byte\", \"Char\", \"Double\", \"Float\", \"Int\", \"Long\", \"Short\",\n            \"String\", \"Unit\", \"Nothing\", \"Any\",\n            // Unsigned types\n            \"UByte\", \"UShort\", \"UInt\", \"ULong\",\n            // Common types\n            \"Array\", \"BooleanArray\", \"ByteArray\", \"CharArray\", \"DoubleArray\",\n            \"FloatArray\", \"IntArray\", \"LongArray\", \"ShortArray\",\n            \"UByteArray\", \"UShortArray\", \"UIntArray\", \"ULongArray\",\n            \"List\", \"MutableList\", \"Set\", \"MutableSet\", \"Map\", \"MutableMap\",\n            \"ArrayList\", \"HashMap\", \"HashSet\", \"LinkedHashMap\", \"LinkedHashSet\",\n            \"Collection\", \"MutableCollection\", \"Iterable\", \"MutableIterable\",\n            \"Sequence\", \"Iterator\", \"MutableIterator\", \"ListIterator\", \"MutableListIterator\",\n            // Ranges\n            \"IntRange\", \"LongRange\", \"CharRange\", \"ClosedRange\", \"OpenEndRange\",\n            \"IntProgression\", \"LongProgression\", \"CharProgression\",\n            // Result and optionals\n            \"Result\", \"Pair\", \"Triple\",\n            // Kotlin stdlib functions\n            \"print\", \"println\", \"readLine\", \"readln\", \"TODO\", \"require\", \"requireNotNull\",\n            \"check\", \"checkNotNull\", \"error\", \"assert\", \"repeat\", \"run\", \"with\", \"let\",\n            \"also\", \"apply\", \"takeIf\", \"takeUnless\", \"lazy\", \"runCatching\",\n            // Collections functions\n            \"listOf\", \"mutableListOf\", \"arrayListOf\", \"setOf\", \"mutableSetOf\",\n            \"hashSetOf\", \"linkedSetOf\", \"sortedSetOf\", \"mapOf\", \"mutableMapOf\",\n            \"hashMapOf\", \"linkedMapOf\", \"sortedMapOf\", \"emptyList\", \"emptySet\",\n            \"emptyMap\", \"listOfNotNull\", \"arrayOf\", \"arrayOfNulls\", \"emptyArray\",\n            // String functions\n            \"buildString\", \"StringBuilder\",\n            // Coroutines\n            \"launch\", \"async\", \"runBlocking\", \"withContext\", \"coroutineScope\",\n            \"supervisorScope\", \"delay\", \"yield\", \"Job\", \"Deferred\", \"CoroutineScope\",\n            \"CoroutineContext\", \"Dispatchers\", \"Flow\", \"flow\", \"flowOf\", \"StateFlow\",\n            \"SharedFlow\", \"Channel\",\n            // Delegates\n            \"Lazy\", \"ObservableProperty\", \"Delegates\",\n            // Reflection\n            \"KClass\", \"KFunction\", \"KProperty\", \"KType\", \"KCallable\",\n            // Annotations\n            \"Deprecated\", \"Suppress\", \"SuppressWarnings\", \"JvmStatic\", \"JvmField\",\n            \"JvmOverloads\", \"JvmName\", \"Throws\", \"Synchronized\", \"Volatile\", \"Transient\",\n            // Exceptions\n            \"Exception\", \"RuntimeException\", \"IllegalArgumentException\",\n            \"IllegalStateException\", \"IndexOutOfBoundsException\", \"NoSuchElementException\",\n            \"NullPointerException\", \"ClassCastException\", \"NumberFormatException\",\n            \"UnsupportedOperationException\", \"ArithmeticException\",\n            // Comparisons\n            \"Comparable\", \"Comparator\",\n            // Regex\n            \"Regex\", \"MatchResult\", \"MatchGroup\",\n            // Math\n            \"kotlin.math\",\n            // Standard functions\n            \"maxOf\", \"minOf\", \"coerceIn\", \"coerceAtLeast\", \"coerceAtMost\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // KDoc comments\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        \n        // Multistring\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        // Onestring\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        // Annotattions\n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*(?:::[a-zA-Z_][a-zA-Z0-9_]*)?\"),\n        \n        Mode(scope: \"meta\", begin: \"[a-zA-Z_][a-zA-Z0-9_]*@\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\b(?:class|interface|object|enum class|data class|sealed class|sealed interface|value class|annotation class)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\bfun\\\\s+(?:<[^>]*>\\\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b(?:val|var)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01_]+[uU]?[lL]?\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F_]+[uU]?[lL]?\\\\b\"),\n        // Float/Double with suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.[0-9_]+(?:[eE][+-]?[0-9_]+)?[fFdD]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*[eE][+-]?[0-9_]+[fFdD]?\\\\b\"),\n        // Integer with underscores and suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*[uU]?[lL]?\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Lisp.swift",
    "content": "//\n//  LispLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct LispLanguage: LanguageDefinition {\n    let name = \"Lisp\"\n    let aliases: [String]? = [\"lisp\", \"cl\", \"common-lisp\", \"elisp\", \"emacs-lisp\"]\n    let caseInsensitive = true\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Special forms\n            \"quote\", \"function\", \"setq\", \"setf\", \"let\", \"let*\", \"flet\", \"labels\",\n            \"macrolet\", \"symbol-macrolet\", \"if\", \"when\", \"unless\", \"cond\", \"case\",\n            \"typecase\", \"and\", \"or\", \"prog1\", \"prog2\", \"progn\", \"progv\", \"go\",\n            \"return\", \"return-from\", \"throw\", \"catch\", \"unwind-protect\", \"block\",\n            \"tagbody\", \"multiple-value-call\", \"multiple-value-prog1\", \"the\",\n            \"locally\", \"declare\", \"eval-when\", \"load-time-value\",\n            // Defining forms\n            \"defun\", \"defmacro\", \"defgeneric\", \"defmethod\", \"defclass\", \"defstruct\",\n            \"deftype\", \"defvar\", \"defparameter\", \"defconstant\", \"define-compiler-macro\",\n            \"define-modify-macro\", \"define-setf-expander\", \"define-symbol-macro\",\n            \"defpackage\", \"in-package\", \"do-symbols\", \"do-external-symbols\",\n            \"do-all-symbols\",\n            // Loop facility\n            \"loop\", \"do\", \"do*\", \"dotimes\", \"dolist\",\n            // Conditionals\n            \"if\", \"when\", \"unless\", \"cond\", \"case\", \"ecase\", \"typecase\", \"etypecase\",\n            \"ctypecase\",\n            // Iteration\n            \"loop\", \"do\", \"do*\", \"dotimes\", \"dolist\", \"prog\", \"prog*\",\n            // Lambda\n            \"lambda\", \"function\", \"defun\", \"flet\", \"labels\",\n            // Macros\n            \"defmacro\", \"macrolet\", \"symbol-macrolet\", \"`\", \",\", \",@\",\n            // CLOS\n            \"defclass\", \"defgeneric\", \"defmethod\", \"call-next-method\",\n            \"next-method-p\", \"slot-value\", \"with-slots\", \"with-accessors\",\n            \"make-instance\", \"initialize-instance\", \"reinitialize-instance\",\n            \"shared-initialize\", \"update-instance-for-different-class\",\n            \"update-instance-for-redefined-class\", \"change-class\",\n            // Conditions\n            \"handler-case\", \"handler-bind\", \"ignore-errors\", \"define-condition\",\n            \"make-condition\", \"signal\", \"error\", \"cerror\", \"warn\", \"invoke-restart\",\n            \"invoke-restart-interactively\", \"restart-case\", \"restart-bind\",\n            \"with-simple-restart\", \"abort\", \"continue\", \"muffle-warning\",\n            \"store-value\", \"use-value\",\n            // Streams\n            \"with-open-file\", \"with-open-stream\", \"with-input-from-string\",\n            \"with-output-to-string\",\n            // Other\n            \"values\", \"multiple-value-bind\", \"multiple-value-list\",\n            \"multiple-value-setq\", \"nth-value\"\n        ],\n        \"literal\": [\"t\", \"nil\"],\n        \"built_in\": [\n            // Predicates\n            \"null\", \"atom\", \"symbolp\", \"numberp\", \"integerp\", \"floatp\", \"rationalp\",\n            \"complexp\", \"characterp\", \"stringp\", \"consp\", \"listp\", \"arrayp\", \"vectorp\",\n            \"bit-vector-p\", \"simple-vector-p\", \"simple-string-p\", \"simple-bit-vector-p\",\n            \"functionp\", \"compiled-function-p\", \"packagep\", \"streamp\", \"readtablep\",\n            \"hash-table-p\", \"pathnamep\", \"typep\", \"subtypep\", \"standard-char-p\",\n            \"graphic-char-p\", \"alpha-char-p\", \"upper-case-p\", \"lower-case-p\",\n            \"both-case-p\", \"digit-char-p\", \"alphanumericp\", \"evenp\", \"oddp\",\n            \"zerop\", \"plusp\", \"minusp\", \"boundp\", \"fboundp\", \"special-operator-p\",\n            \"constantp\", \"eq\", \"eql\", \"equal\", \"equalp\", \"endp\",\n            // Numeric functions\n            \"+\", \"-\", \"*\", \"/\", \"1+\", \"1-\", \"abs\", \"mod\", \"rem\", \"floor\", \"ceiling\",\n            \"truncate\", \"round\", \"sin\", \"cos\", \"tan\", \"asin\", \"acos\", \"atan\", \"sinh\",\n            \"cosh\", \"tanh\", \"asinh\", \"acosh\", \"atanh\", \"exp\", \"expt\", \"log\", \"sqrt\",\n            \"isqrt\", \"conjugate\", \"phase\", \"realpart\", \"imagpart\", \"numerator\",\n            \"denominator\", \"rational\", \"rationalize\", \"gcd\", \"lcm\", \"max\", \"min\",\n            \"signum\", \"random\", \"random-state-p\", \"make-random-state\", \"incf\", \"decf\",\n            \"=\", \"/=\", \"<\", \">\", \"<=\", \">=\",\n            // Bit operations\n            \"logand\", \"logior\", \"logxor\", \"logeqv\", \"lognand\", \"lognor\", \"logandc1\",\n            \"logandc2\", \"logorc1\", \"logorc2\", \"lognot\", \"logtest\", \"logbitp\",\n            \"logcount\", \"ash\", \"integer-length\", \"boole\", \"boole-and\", \"boole-ior\",\n            \"boole-xor\", \"boole-eqv\", \"boole-nand\", \"boole-nor\", \"boole-andc1\",\n            \"boole-andc2\", \"boole-orc1\", \"boole-orc2\", \"boole-c1\", \"boole-c2\",\n            \"boole-set\", \"boole-clr\",\n            // List functions\n            \"car\", \"cdr\", \"caar\", \"cadr\", \"cdar\", \"cddr\", \"caaar\", \"caadr\", \"cadar\",\n            \"caddr\", \"cdaar\", \"cdadr\", \"cddar\", \"cdddr\", \"cons\", \"list\", \"list*\",\n            \"append\", \"nconc\", \"revappend\", \"nreconc\", \"butlast\", \"nbutlast\",\n            \"last\", \"ldiff\", \"tailp\", \"nthcdr\", \"nth\", \"first\", \"second\", \"third\",\n            \"fourth\", \"fifth\", \"sixth\", \"seventh\", \"eighth\", \"ninth\", \"tenth\",\n            \"rest\", \"member\", \"member-if\", \"member-if-not\", \"assoc\", \"assoc-if\",\n            \"assoc-if-not\", \"rassoc\", \"rassoc-if\", \"rassoc-if-not\", \"acons\", \"pairlis\",\n            \"copy-list\", \"copy-alist\", \"copy-tree\", \"subst\", \"subst-if\", \"subst-if-not\",\n            \"nsubst\", \"nsubst-if\", \"nsubst-if-not\", \"sublis\", \"nsublis\", \"tree-equal\",\n            \"list-length\", \"make-list\", \"push\", \"pop\", \"pushnew\", \"adjoin\",\n            \"union\", \"nunion\", \"intersection\", \"nintersection\", \"set-difference\",\n            \"nset-difference\", \"set-exclusive-or\", \"nset-exclusive-or\", \"subsetp\",\n            \"mapc\", \"mapcar\", \"mapcan\", \"mapl\", \"maplist\", \"mapcon\",\n            // Sequence functions\n            \"length\", \"elt\", \"reverse\", \"nreverse\", \"sort\", \"stable-sort\", \"find\",\n            \"find-if\", \"find-if-not\", \"position\", \"position-if\", \"position-if-not\",\n            \"count\", \"count-if\", \"count-if-not\", \"mismatch\", \"search\", \"substitute\",\n            \"substitute-if\", \"substitute-if-not\", \"nsubstitute\", \"nsubstitute-if\",\n            \"nsubstitute-if-not\", \"concatenate\", \"merge\", \"remove\", \"remove-if\",\n            \"remove-if-not\", \"delete\", \"delete-if\", \"delete-if-not\", \"remove-duplicates\",\n            \"delete-duplicates\", \"subseq\", \"copy-seq\", \"fill\", \"replace\", \"reduce\",\n            \"map\", \"map-into\", \"some\", \"every\", \"notany\", \"notevery\",\n            // String functions\n            \"char\", \"schar\", \"string\", \"string=\", \"string/=\", \"string<\", \"string>\",\n            \"string<=\", \"string>=\", \"string-equal\", \"string-not-equal\", \"string-lessp\",\n            \"string-greaterp\", \"string-not-greaterp\", \"string-not-lessp\",\n            \"string-upcase\", \"string-downcase\", \"string-capitalize\", \"nstring-upcase\",\n            \"nstring-downcase\", \"nstring-capitalize\", \"string-trim\", \"string-left-trim\",\n            \"string-right-trim\", \"make-string\", \"char-code\", \"code-char\", \"character\",\n            \"char-upcase\", \"char-downcase\", \"char=\", \"char/=\", \"char<\", \"char>\",\n            \"char<=\", \"char>=\", \"char-equal\", \"char-not-equal\", \"char-lessp\",\n            \"char-greaterp\", \"char-not-greaterp\", \"char-not-lessp\", \"char-name\",\n            \"name-char\",\n            // Array functions\n            \"make-array\", \"array-dimensions\", \"array-dimension\", \"array-total-size\",\n            \"array-rank\", \"array-element-type\", \"array-row-major-index\", \"aref\",\n            \"svref\", \"bit\", \"sbit\", \"vector\", \"vector-push\", \"vector-push-extend\",\n            \"vector-pop\", \"adjust-array\", \"adjustable-array-p\", \"array-in-bounds-p\",\n            \"array-has-fill-pointer-p\", \"fill-pointer\", \"row-major-aref\",\n            // Hash table functions\n            \"make-hash-table\", \"gethash\", \"remhash\", \"maphash\", \"clrhash\",\n            \"hash-table-count\", \"hash-table-rehash-size\", \"hash-table-rehash-threshold\",\n            \"hash-table-size\", \"hash-table-test\", \"sxhash\", \"with-hash-table-iterator\",\n            // Symbol functions\n            \"symbol-name\", \"symbol-package\", \"symbol-value\", \"symbol-function\",\n            \"symbol-plist\", \"make-symbol\", \"copy-symbol\", \"gensym\", \"gentemp\",\n            \"keywordp\", \"intern\", \"unintern\", \"find-symbol\", \"import\", \"shadowing-import\",\n            \"shadow\", \"export\", \"unexport\", \"use-package\", \"unuse-package\",\n            // Package functions\n            \"make-package\", \"in-package\", \"find-package\", \"package-name\",\n            \"package-nicknames\", \"rename-package\", \"package-use-list\",\n            \"package-used-by-list\", \"package-shadowing-symbols\", \"list-all-packages\",\n            \"delete-package\", \"find-all-symbols\",\n            // I/O functions\n            \"read\", \"read-preserving-whitespace\", \"read-delimited-list\", \"read-line\",\n            \"read-char\", \"unread-char\", \"peek-char\", \"listen\", \"read-char-no-hang\",\n            \"clear-input\", \"read-from-string\", \"parse-integer\", \"read-byte\",\n            \"write\", \"prin1\", \"print\", \"pprint\", \"princ\", \"write-to-string\",\n            \"prin1-to-string\", \"princ-to-string\", \"write-char\", \"write-string\",\n            \"write-line\", \"terpri\", \"fresh-line\", \"finish-output\", \"force-output\",\n            \"clear-output\", \"write-byte\", \"format\",\n            // Stream functions\n            \"input-stream-p\", \"output-stream-p\", \"interactive-stream-p\",\n            \"open-stream-p\", \"stream-element-type\", \"streamp\", \"close\",\n            \"broadcast-stream-streams\", \"concatenated-stream-streams\",\n            \"echo-stream-input-stream\", \"echo-stream-output-stream\",\n            \"make-broadcast-stream\", \"make-concatenated-stream\", \"make-echo-stream\",\n            \"make-synonym-stream\", \"make-two-way-stream\", \"make-string-input-stream\",\n            \"make-string-output-stream\", \"get-output-stream-string\",\n            \"synonym-stream-symbol\", \"two-way-stream-input-stream\",\n            \"two-way-stream-output-stream\",\n            // File functions\n            \"open\", \"close\", \"pathname\", \"truename\", \"parse-namestring\",\n            \"merge-pathnames\", \"make-pathname\", \"pathnamep\", \"pathname-host\",\n            \"pathname-device\", \"pathname-directory\", \"pathname-name\", \"pathname-type\",\n            \"pathname-version\", \"namestring\", \"file-namestring\", \"directory-namestring\",\n            \"host-namestring\", \"enough-namestring\", \"user-homedir-pathname\",\n            \"directory\", \"probe-file\", \"ensure-directories-exist\", \"file-write-date\",\n            \"file-author\", \"file-position\", \"file-length\", \"file-string-length\",\n            \"load\", \"compile-file\", \"compile-file-pathname\",\n            // Control functions\n            \"apply\", \"funcall\", \"mapcar\", \"maplist\", \"mapc\", \"mapl\", \"mapcan\",\n            \"mapcon\", \"values\", \"values-list\", \"constantp\", \"complement\",\n            // Evaluation\n            \"eval\", \"compile\", \"disassemble\", \"macro-function\", \"macroexpand\",\n            \"macroexpand-1\", \"proclaim\", \"get-setf-expansion\", \"documentation\",\n            // Environment\n            \"apropos\", \"apropos-list\", \"describe\", \"inspect\", \"dribble\", \"ed\",\n            \"lisp-implementation-type\", \"lisp-implementation-version\",\n            \"machine-instance\", \"machine-type\", \"machine-version\", \"room\",\n            \"software-type\", \"software-version\", \"short-site-name\", \"long-site-name\",\n            // Time functions\n            \"get-decoded-time\", \"get-universal-time\", \"decode-universal-time\",\n            \"encode-universal-time\", \"get-internal-real-time\",\n            \"get-internal-run-time\", \"sleep\",\n            // Error handling\n            \"error\", \"cerror\", \"warn\", \"signal\", \"break\", \"invoke-debugger\",\n            // Type functions\n            \"coerce\", \"type-of\", \"upgraded-array-element-type\", \"upgraded-complex-part-type\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Comments\n        Mode(scope: \"comment\", begin: \";\", end: \"\\n\"),\n        \n        // Block comments (some Lisp dialects)\n        Mode(scope: \"comment\", begin: \"#\\\\|\", end: \"\\\\|#\"),\n        \n        // Shebang\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        \n        // Keywords (symbols starting with :)\n        Mode(scope: \"meta\", begin: \":[a-zA-Z][a-zA-Z0-9-+*/_<>=!?]*\"),\n        \n        // Quoted symbols\n        Mode(scope: \"meta\", begin: \"'[a-zA-Z][a-zA-Z0-9-+*/_<>=!?]*\"),\n        \n        // Symbols\n        Mode(scope: \"meta\", begin: \"\\\\b[a-zA-Z][a-zA-Z0-9-+*/_<>=!?]*\\\\b\"),\n        \n        // Strings\n        CommonModes.stringDouble,\n        \n        // Character literals\n        Mode(scope: \"string\", begin: \"#\\\\\\\\(?:[a-zA-Z][a-zA-Z0-9-]*|.)\"),\n        \n        // Numbers\n        // Ratio\n        Mode(scope: \"number\", begin: \"[+-]?\\\\d+/\\\\d+\"),\n        // Complex\n        Mode(scope: \"number\", begin: \"#[cC]\\\\([+-]?\\\\d+(?:\\\\.\\\\d+)?\\\\s+[+-]?\\\\d+(?:\\\\.\\\\d+)?\\\\)\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"[+-]?\\\\d+(?:\\\\.\\\\d+)?[eEsSfFdDlL][+-]?\\\\d+\"),\n        // Float\n        Mode(scope: \"number\", begin: \"[+-]?\\\\d+\\\\.\\\\d+\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"#[xX][0-9a-fA-F]+\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"#[oO][0-7]+\"),\n        // Binary\n        Mode(scope: \"number\", begin: \"#[bB][01]+\"),\n        // Radix notation (base 2-36)\n        Mode(scope: \"number\", begin: \"#\\\\d+[rR][0-9a-zA-Z]+\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"[+-]?\\\\d+\"),\n        \n        // Arrays/vectors\n        Mode(scope: \"meta\", begin: \"#\\\\(\"),\n        Mode(scope: \"meta\", begin: \"#\\\\d*[aA]\"),\n        \n        // Bit vectors\n        Mode(scope: \"meta\", begin: \"#\\\\*[01]*\"),\n        \n        // Backquote and unquote\n        Mode(scope: \"keyword\", begin: \"`\"),\n        Mode(scope: \"keyword\", begin: \",@?\"),\n        \n        // Function shorthand\n        Mode(scope: \"keyword\", begin: \"#'\"),\n        \n        // Parentheses (for structure)\n        Mode(scope: \"keyword\", begin: \"\\\\(\"),\n        Mode(scope: \"keyword\", begin: \"\\\\)\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Lua.swift",
    "content": "//\n//  LuaLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct LuaLanguage: LanguageDefinition {\n    let name = \"Lua\"\n    let aliases: [String]? = [\"lua\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"and\", \"break\", \"do\", \"else\", \"elseif\", \"end\", \"false\", \"for\", \"function\",\n            \"goto\", \"if\", \"in\", \"local\", \"nil\", \"not\", \"or\", \"repeat\", \"return\",\n            \"then\", \"true\", \"until\", \"while\"\n        ],\n        \"literal\": [\"true\", \"false\", \"nil\"],\n        \"built_in\": [\n            // Basic functions\n            \"assert\", \"collectgarbage\", \"dofile\", \"error\", \"getmetatable\",\n            \"setmetatable\", \"ipairs\", \"pairs\", \"load\", \"loadfile\", \"next\",\n            \"pcall\", \"xpcall\", \"print\", \"rawequal\", \"rawget\", \"rawset\", \"rawlen\",\n            \"select\", \"tonumber\", \"tostring\", \"type\", \"warn\",\n            // Lua 5.2+\n            \"require\", \"package\", \"_G\", \"_VERSION\",\n            // String library\n            \"string\", \"byte\", \"char\", \"dump\", \"find\", \"format\", \"gmatch\", \"gsub\",\n            \"len\", \"lower\", \"match\", \"pack\", \"packsize\", \"rep\", \"reverse\", \"sub\",\n            \"unpack\", \"upper\",\n            // String methods (can be called as string:method)\n            \"string.byte\", \"string.char\", \"string.dump\", \"string.find\",\n            \"string.format\", \"string.gmatch\", \"string.gsub\", \"string.len\",\n            \"string.lower\", \"string.match\", \"string.pack\", \"string.packsize\",\n            \"string.rep\", \"string.reverse\", \"string.sub\", \"string.unpack\",\n            \"string.upper\",\n            // Table library\n            \"table\", \"concat\", \"insert\", \"move\", \"pack\", \"remove\", \"sort\", \"unpack\",\n            \"table.concat\", \"table.insert\", \"table.move\", \"table.pack\",\n            \"table.remove\", \"table.sort\", \"table.unpack\",\n            // Math library\n            \"math\", \"abs\", \"acos\", \"asin\", \"atan\", \"atan2\", \"ceil\", \"cos\", \"cosh\",\n            \"deg\", \"exp\", \"floor\", \"fmod\", \"frexp\", \"huge\", \"ldexp\", \"log\", \"log10\",\n            \"max\", \"maxinteger\", \"min\", \"mininteger\", \"modf\", \"pi\", \"pow\", \"rad\",\n            \"random\", \"randomseed\", \"sin\", \"sinh\", \"sqrt\", \"tan\", \"tanh\", \"tointeger\",\n            \"type\", \"ult\",\n            \"math.abs\", \"math.acos\", \"math.asin\", \"math.atan\", \"math.atan2\",\n            \"math.ceil\", \"math.cos\", \"math.cosh\", \"math.deg\", \"math.exp\",\n            \"math.floor\", \"math.fmod\", \"math.frexp\", \"math.huge\", \"math.ldexp\",\n            \"math.log\", \"math.log10\", \"math.max\", \"math.maxinteger\", \"math.min\",\n            \"math.mininteger\", \"math.modf\", \"math.pi\", \"math.pow\", \"math.rad\",\n            \"math.random\", \"math.randomseed\", \"math.sin\", \"math.sinh\", \"math.sqrt\",\n            \"math.tan\", \"math.tanh\", \"math.tointeger\", \"math.type\", \"math.ult\",\n            // IO library\n            \"io\", \"close\", \"flush\", \"input\", \"lines\", \"open\", \"output\", \"popen\",\n            \"read\", \"tmpfile\", \"write\", \"stdin\", \"stdout\", \"stderr\",\n            \"io.close\", \"io.flush\", \"io.input\", \"io.lines\", \"io.open\", \"io.output\",\n            \"io.popen\", \"io.read\", \"io.tmpfile\", \"io.type\", \"io.write\",\n            \"io.stdin\", \"io.stdout\", \"io.stderr\",\n            // File methods\n            \"file:close\", \"file:flush\", \"file:lines\", \"file:read\", \"file:seek\",\n            \"file:setvbuf\", \"file:write\",\n            // OS library\n            \"os\", \"clock\", \"date\", \"difftime\", \"execute\", \"exit\", \"getenv\",\n            \"remove\", \"rename\", \"setlocale\", \"time\", \"tmpname\",\n            \"os.clock\", \"os.date\", \"os.difftime\", \"os.execute\", \"os.exit\",\n            \"os.getenv\", \"os.remove\", \"os.rename\", \"os.setlocale\", \"os.time\",\n            \"os.tmpname\",\n            // Debug library\n            \"debug\", \"gethook\", \"getinfo\", \"getlocal\", \"getmetatable\", \"getregistry\",\n            \"getupvalue\", \"getuservalue\", \"sethook\", \"setlocal\", \"setmetatable\",\n            \"setupvalue\", \"setuservalue\", \"traceback\", \"upvalueid\", \"upvaluejoin\",\n            \"debug.debug\", \"debug.gethook\", \"debug.getinfo\", \"debug.getlocal\",\n            \"debug.getmetatable\", \"debug.getregistry\", \"debug.getupvalue\",\n            \"debug.getuservalue\", \"debug.sethook\", \"debug.setlocal\",\n            \"debug.setmetatable\", \"debug.setupvalue\", \"debug.setuservalue\",\n            \"debug.traceback\", \"debug.upvalueid\", \"debug.upvaluejoin\",\n            // Package library\n            \"package\", \"config\", \"cpath\", \"loaded\", \"loadlib\", \"path\", \"preload\",\n            \"searchers\", \"searchpath\",\n            \"package.config\", \"package.cpath\", \"package.loaded\", \"package.loadlib\",\n            \"package.path\", \"package.preload\", \"package.searchers\", \"package.searchpath\",\n            // Coroutine library\n            \"coroutine\", \"create\", \"isyieldable\", \"resume\", \"running\", \"status\",\n            \"wrap\", \"yield\",\n            \"coroutine.create\", \"coroutine.isyieldable\", \"coroutine.resume\",\n            \"coroutine.running\", \"coroutine.status\", \"coroutine.wrap\",\n            \"coroutine.yield\",\n            // UTF8 library (Lua 5.3+)\n            \"utf8\", \"char\", \"charpattern\", \"codes\", \"codepoint\", \"len\", \"offset\",\n            \"utf8.char\", \"utf8.charpattern\", \"utf8.codes\", \"utf8.codepoint\",\n            \"utf8.len\", \"utf8.offset\",\n            // Bitwise operations (Lua 5.3+)\n            \"bit32\", \"arshift\", \"band\", \"bnot\", \"bor\", \"btest\", \"bxor\", \"extract\",\n            \"lrotate\", \"lshift\", \"replace\", \"rrotate\", \"rshift\",\n            // Metatables and metamethods\n            \"__index\", \"__newindex\", \"__call\", \"__concat\", \"__unm\", \"__add\",\n            \"__sub\", \"__mul\", \"__div\", \"__idiv\", \"__mod\", \"__pow\", \"__eq\",\n            \"__lt\", \"__le\", \"__tostring\", \"__metatable\", \"__gc\", \"__mode\",\n            \"__len\", \"__pairs\", \"__ipairs\", \"__close\", \"__name\",\n            // Special variables\n            \"_ENV\", \"_G\", \"_VERSION\", \"arg\",\n            // Common Lua patterns\n            \"self\", \"module\", \"export\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Multi-line comments (block comments)\n        Mode(scope: \"comment\", begin: \"--\\\\[\\\\[\", end: \"\\\\]\\\\]\"),\n        Mode(scope: \"comment\", begin: \"--\\\\[=\\\\[\", end: \"\\\\]=\\\\]\"),\n        Mode(scope: \"comment\", begin: \"--\\\\[==\\\\[\", end: \"\\\\]==\\\\]\"),\n        \n        // Single-line comments\n        Mode(scope: \"comment\", begin: \"--\", end: \"\\n\"),\n        \n        // Shebang\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        \n        // Function definitions\n        Mode(scope: \"function\", begin: \"\\\\bfunction\\\\s+(?:[a-zA-Z_][a-zA-Z0-9_]*[.:])?([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"function\", begin: \"\\\\blocal\\\\s+function\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Multi-line strings (long brackets)\n        Mode(scope: \"string\", begin: \"\\\\[\\\\[\", end: \"\\\\]\\\\]\"),\n        Mode(scope: \"string\", begin: \"\\\\[=\\\\[\", end: \"\\\\]=\\\\]\"),\n        Mode(scope: \"string\", begin: \"\\\\[==\\\\[\", end: \"\\\\]==\\\\]\"),\n        Mode(scope: \"string\", begin: \"\\\\[===\\\\[\", end: \"\\\\]===\\\\]\"),\n        \n        // Regular strings\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"'\", end: \"'\"),\n        \n        // Numbers\n        // Hex float (Lua 5.2+)\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+(?:\\\\.[0-9a-fA-F]+)?(?:[pP][+-]?[0-9]+)?\\\\b\"),\n        // Hex integer\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n        \n        // Labels (goto targets) - Lua 5.2+\n        Mode(scope: \"meta\", begin: \"::[a-zA-Z_][a-zA-Z0-9_]*::\"),\n        \n        // Table constructors (highlighting braces)\n        Mode(scope: \"meta\", begin: \"\\\\{\", end: \"\\\\}\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Matlab.swift",
    "content": "//\n//  MatlabLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct MatlabLanguage: LanguageDefinition {\n    let name = \"MATLAB\"\n    let aliases: [String]? = [\"matlab\", \"m\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"break\", \"case\", \"catch\", \"classdef\", \"continue\", \"else\", \"elseif\", \"end\",\n            \"for\", \"function\", \"global\", \"if\", \"otherwise\", \"parfor\", \"persistent\",\n            \"return\", \"spmd\", \"switch\", \"try\", \"while\",\n            // Additional keywords\n            \"arguments\", \"properties\", \"methods\", \"events\", \"enumeration\"\n        ],\n        \"literal\": [\"true\", \"false\", \"inf\", \"Inf\", \"nan\", \"NaN\", \"eps\", \"pi\"],\n        \"built_in\": [\n            // Basic functions\n            \"abs\", \"acos\", \"acosh\", \"acot\", \"acoth\", \"acsc\", \"acsch\", \"angle\",\n            \"asec\", \"asech\", \"asin\", \"asinh\", \"atan\", \"atan2\", \"atanh\", \"ceil\",\n            \"complex\", \"conj\", \"cos\", \"cosh\", \"cot\", \"coth\", \"csc\", \"csch\",\n            \"exp\", \"fix\", \"floor\", \"imag\", \"isreal\", \"log\", \"log10\", \"log2\",\n            \"real\", \"round\", \"sec\", \"sech\", \"sign\", \"sin\", \"sinh\", \"sqrt\",\n            \"tan\", \"tanh\", \"mod\", \"rem\", \"gcd\", \"lcm\",\n            // Matrix operations\n            \"det\", \"eig\", \"inv\", \"pinv\", \"rank\", \"trace\", \"norm\", \"cond\",\n            \"rcond\", \"expm\", \"logm\", \"sqrtm\", \"chol\", \"lu\", \"qr\", \"svd\",\n            \"schur\", \"hess\", \"balance\", \"kron\", \"cross\", \"dot\",\n            // Array operations\n            \"size\", \"length\", \"numel\", \"ndims\", \"isempty\", \"isequal\", \"isequaln\",\n            \"zeros\", \"ones\", \"eye\", \"rand\", \"randn\", \"randi\", \"true\", \"false\",\n            \"diag\", \"tril\", \"triu\", \"reshape\", \"repmat\", \"cat\", \"horzcat\", \"vertcat\",\n            \"transpose\", \"ctranspose\", \"permute\", \"ipermute\", \"circshift\", \"flip\",\n            \"fliplr\", \"flipud\", \"rot90\", \"squeeze\", \"shiftdim\",\n            // Indexing and sorting\n            \"find\", \"sort\", \"sortrows\", \"issorted\", \"unique\", \"union\", \"intersect\",\n            \"setdiff\", \"setxor\", \"ismember\", \"max\", \"min\", \"sum\", \"prod\", \"mean\",\n            \"median\", \"mode\", \"std\", \"var\", \"cov\", \"corrcoef\",\n            // Logical operations\n            \"all\", \"any\", \"and\", \"or\", \"not\", \"xor\", \"isnan\", \"isinf\", \"isfinite\",\n            \"logical\", \"bitand\", \"bitor\", \"bitxor\", \"bitcmp\", \"bitshift\", \"bitget\",\n            \"bitset\",\n            // String operations\n            \"char\", \"string\", \"strcat\", \"strcmp\", \"strcmpi\", \"strncmp\", \"strncmpi\",\n            \"strfind\", \"strrep\", \"strsplit\", \"strjoin\", \"strip\", \"lower\", \"upper\",\n            \"sprintf\", \"fprintf\", \"sscanf\", \"num2str\", \"str2num\", \"str2double\",\n            \"int2str\", \"mat2str\", \"blanks\", \"deblank\", \"strtrim\", \"pad\", \"strip\",\n            // Type conversion and testing\n            \"double\", \"single\", \"int8\", \"int16\", \"int32\", \"int64\", \"uint8\", \"uint16\",\n            \"uint32\", \"uint64\", \"cast\", \"typecast\", \"class\", \"isa\", \"isnumeric\",\n            \"ischar\", \"isstring\", \"islogical\", \"iscell\", \"isstruct\", \"istable\",\n            \"ismatrix\", \"isvector\", \"isscalar\", \"isrow\", \"iscolumn\",\n            // Cell and structure arrays\n            \"cell\", \"cell2mat\", \"cellstr\", \"num2cell\", \"mat2cell\", \"cellfun\",\n            \"celldisp\", \"struct\", \"struct2cell\", \"fieldnames\", \"isfield\",\n            \"rmfield\", \"orderfields\", \"structfun\",\n            // File I/O\n            \"load\", \"save\", \"importdata\", \"readmatrix\", \"readtable\", \"readcell\",\n            \"writematrix\", \"writetable\", \"writecell\", \"xlsread\", \"xlswrite\",\n            \"csvread\", \"csvwrite\", \"dlmread\", \"dlmwrite\", \"textscan\", \"fopen\",\n            \"fclose\", \"fread\", \"fwrite\", \"fprintf\", \"fscanf\", \"fgetl\", \"fgets\",\n            \"frewind\", \"fseek\", \"ftell\", \"feof\", \"ferror\",\n            // Plotting\n            \"plot\", \"plot3\", \"scatter\", \"scatter3\", \"bar\", \"barh\", \"histogram\",\n            \"pie\", \"pie3\", \"surf\", \"mesh\", \"contour\", \"contourf\", \"imagesc\",\n            \"image\", \"imshow\", \"pcolor\", \"quiver\", \"quiver3\", \"streamline\",\n            \"fill\", \"fill3\", \"area\", \"stem\", \"stem3\", \"stairs\", \"errorbar\",\n            \"polarplot\", \"compass\", \"feather\", \"comet\", \"comet3\",\n            // Plot annotation and formatting\n            \"title\", \"xlabel\", \"ylabel\", \"zlabel\", \"legend\", \"colorbar\", \"colormap\",\n            \"grid\", \"box\", \"axis\", \"xlim\", \"ylim\", \"zlim\", \"hold\", \"subplot\",\n            \"figure\", \"clf\", \"cla\", \"close\", \"axes\", \"gca\", \"gcf\", \"set\", \"get\",\n            \"text\", \"annotation\", \"line\", \"patch\", \"rectangle\", \"saveas\", \"print\",\n            // Statistical functions\n            \"histcounts\", \"histogram\", \"cumsum\", \"cumprod\", \"cummax\", \"cummin\",\n            \"movsum\", \"movmean\", \"movmedian\", \"movmax\", \"movmin\", \"movstd\", \"movvar\",\n            \"diff\", \"gradient\", \"del2\", \"trapz\", \"cumtrapz\",\n            // Interpolation and curve fitting\n            \"interp1\", \"interp2\", \"interp3\", \"interpn\", \"griddedInterpolant\",\n            \"scatteredInterpolant\", \"polyfit\", \"polyval\", \"polyvalm\", \"polyder\",\n            \"polyint\", \"spline\", \"pchip\", \"makima\",\n            // Linear algebra\n            \"linsolve\", \"mldivide\", \"mrdivide\", \"lsqr\", \"gmres\", \"bicg\", \"cgs\",\n            \"minres\", \"pcg\", \"symmlq\", \"tfqmr\", \"null\", \"orth\", \"rref\", \"subspace\",\n            // Optimization\n            \"fminbnd\", \"fminsearch\", \"fzero\", \"fsolve\", \"lsqnonlin\", \"lsqcurvefit\",\n            // ODE solvers\n            \"ode45\", \"ode23\", \"ode113\", \"ode15s\", \"ode23s\", \"ode23t\", \"ode23tb\",\n            \"ode15i\", \"deval\", \"odeset\", \"odeget\",\n            // FFT and signal processing\n            \"fft\", \"fft2\", \"fftn\", \"ifft\", \"ifft2\", \"ifftn\", \"fftshift\", \"ifftshift\",\n            \"conv\", \"conv2\", \"filter\", \"deconv\", \"xcorr\", \"xcorr2\", \"corrcoef\",\n            // Random number generation\n            \"rand\", \"randn\", \"randi\", \"randperm\", \"rng\",\n            // System and environment\n            \"pwd\", \"cd\", \"dir\", \"ls\", \"mkdir\", \"rmdir\", \"delete\", \"copyfile\",\n            \"movefile\", \"exist\", \"which\", \"what\", \"path\", \"addpath\", \"rmpath\",\n            \"matlabroot\", \"version\", \"computer\", \"ispc\", \"isunix\", \"ismac\",\n            // Program control\n            \"input\", \"disp\", \"display\", \"warning\", \"error\", \"assert\", \"pause\",\n            \"keyboard\", \"dbstop\", \"dbclear\", \"dbcont\", \"dbstep\", \"dbquit\",\n            \"diary\", \"echo\", \"eval\", \"evalc\", \"evalin\", \"assignin\", \"run\",\n            // Time and date\n            \"now\", \"date\", \"datenum\", \"datestr\", \"datevec\", \"datetime\", \"duration\",\n            \"tic\", \"toc\", \"cputime\", \"clock\", \"etime\",\n            // Table operations\n            \"table\", \"array2table\", \"cell2table\", \"struct2table\", \"table2array\",\n            \"table2cell\", \"table2struct\", \"readtable\", \"writetable\", \"join\",\n            \"innerjoin\", \"outerjoin\", \"sortrows\", \"unique\", \"ismember\",\n            // Miscellaneous\n            \"nargin\", \"nargout\", \"varargin\", \"varargout\", \"inputname\", \"mfilename\",\n            \"clc\", \"clear\", \"who\", \"whos\", \"help\", \"doc\", \"lookfor\", \"demo\",\n            \"format\", \"beep\", \"profile\", \"bench\", \"timeit\", \"tic\", \"toc\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Block comments\n        Mode(scope: \"comment\", begin: \"%\\\\{\", end: \"%\\\\}\"),\n        \n        // Line comments\n        Mode(scope: \"comment\", begin: \"%\", end: \"\\n\"),\n        \n        // Function definitions\n        Mode(scope: \"function\", begin: \"\\\\bfunction\\\\s+(?:\\\\[?[^\\\\]]*\\\\]?\\\\s*=\\\\s*)?([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Class definitions\n        Mode(scope: \"class\", begin: \"\\\\bclassdef\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // String with single quotes (MATLAB standard)\n        CommonModes.stringSingle,\n        \n        // String with double quotes (newer MATLAB versions)\n        CommonModes.stringDouble,\n        \n        // Transpose operator (should not be confused with string end)\n        Mode(scope: \"keyword\", begin: \"\\\\.?'(?!')\"),\n        \n        // Numbers\n        // Complex numbers with i or j suffix\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+[ij]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[ij]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[ij]\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+\\\\b\"),\n        // Regular numbers\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Mermaid.swift",
    "content": "//\n//  MermaidLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct MermaidLanguage: LanguageDefinition {\n    let name = \"Mermaid\"\n    let aliases: [String]? = [\"mermaid\", \"mmd\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Diagram types\n            \"graph\", \"flowchart\", \"sequenceDiagram\", \"classDiagram\", \"stateDiagram\",\n            \"stateDiagram-v2\", \"erDiagram\", \"journey\", \"gantt\", \"pie\", \"quadrantChart\",\n            \"requirementDiagram\", \"gitGraph\", \"mindmap\", \"timeline\", \"zenuml\",\n            \"sankey-beta\", \"xyChart\",\n            // Flowchart/Graph directions\n            \"TB\", \"TD\", \"BT\", \"RL\", \"LR\",\n            // Flowchart node types\n            \"subgraph\", \"end\",\n            // Sequence diagram\n            \"participant\", \"actor\", \"activate\", \"deactivate\", \"note\", \"loop\", \"alt\",\n            \"else\", \"opt\", \"par\", \"and\", \"rect\", \"autonumber\", \"over\", \"right of\",\n            \"left of\", \"link\", \"links\",\n            // Class diagram\n            \"class\", \"namespace\", \"direction\", \"link\", \"click\", \"callback\",\n            \"cssClass\", \"style\",\n            // State diagram\n            \"state\", \"note right of\", \"note left of\", \"fork\", \"join\", \"choice\",\n            \"concurrency\",\n            // ER diagram\n            \"entity\", \"relationship\",\n            // Gantt\n            \"title\", \"dateFormat\", \"axisFormat\", \"todayMarker\", \"excludes\", \"includes\",\n            \"section\", \"after\", \"active\", \"done\", \"crit\", \"milestone\",\n            // Git graph\n            \"commit\", \"branch\", \"checkout\", \"merge\", \"reset\", \"cherry-pick\", \"tag\",\n            \"type\", \"id\", \"msg\", \"REVERSE\", \"HIGHLIGHT\",\n            // Journey\n            \"title\", \"section\",\n            // Pie\n            \"title\", \"showData\",\n            // Requirement diagram\n            \"requirement\", \"functionalRequirement\", \"interfaceRequirement\",\n            \"performanceRequirement\", \"physicalRequirement\", \"designConstraint\",\n            \"element\", \"contains\", \"copies\", \"derives\", \"satisfies\", \"verifies\",\n            \"refines\", \"traces\",\n            // Styling\n            \"classDef\", \"class\", \"style\", \"linkStyle\", \"fill\", \"stroke\", \"stroke-width\",\n            \"color\", \"stroke-dasharray\",\n            // Configuration\n            \"%%{init:\", \"theme\", \"themeVariables\", \"logLevel\", \"securityLevel\",\n            \"startOnLoad\", \"arrowMarkerAbsolute\", \"flowchart\", \"sequence\", \"gantt\",\n            // Quadrant chart\n            \"x-axis\", \"y-axis\", \"quadrant-1\", \"quadrant-2\", \"quadrant-3\", \"quadrant-4\",\n            // Timeline\n            \"title\", \"section\",\n            // XY Chart\n            \"x-axis\", \"y-axis\", \"line\", \"bar\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Arrow types for flowchart\n            \"-->\", \"---\", \"-.->\", \"-.-\", \"==>\", \"===\", \"~~>\", \"~~~\",\n            // Arrow types with text\n            \"-- text -->\", \"-. text .->\", \"== text ==>\",\n            // Sequence diagram arrows\n            \"->>\", \"-->>\", \"->\", \"-->\", \"-x\", \"--x\", \"-)\", \"--)\", \"<<->>\", \"<<-->>\",\n            // Class relationships\n            \"<|--\", \"*--\", \"o--\", \"-->\", \"..|>\", \"..\", \"<--\", \"--|>\",\n            // State transitions\n            \"-->\", \":-->\",\n            // ER relationships\n            \"||--o{\", \"}o--||\", \"||--|{\", \"}|--||\", \"o{--||\", \"||--{o\",\n            \"||..o{\", \"}o..||\", \"||..|{\", \"}|..||\", \"o{..||\", \"||..{o\",\n            // Link text modifiers\n            \"|text|\", \"---|text|\", \"-->|text|\",\n            // Node shapes (flowchart)\n            \"()\", \"[]\", \"[()]\", \"[[]]\", \"[()]\", \"[([])]\", \"((()))\", \">]\", \"{}\",\n            \"{{}}\", \"[//]\", \"[\\\\\\\\]\", \"[/\\\\]\", \"[\\\\/]\",\n            // Special characters in text\n            \"#quot;\", \"#9829;\", \"#9830;\", \"#9827;\", \"#9824;\", \"#nbsp;\", \"#lt;\", \"#gt;\",\n            // Styling keywords\n            \"fill\", \"stroke\", \"stroke-width\", \"color\", \"fill-opacity\", \"stroke-opacity\",\n            \"class\", \"cssClass\", \"style\", \"classDef\", \"linkStyle\",\n            // Themes\n            \"default\", \"forest\", \"dark\", \"neutral\", \"base\",\n            // Security levels\n            \"strict\", \"loose\", \"antiscript\", \"sandbox\",\n            // Log levels\n            \"debug\", \"info\", \"warn\", \"error\", \"fatal\",\n            // Git graph types\n            \"NORMAL\", \"REVERSE\", \"HIGHLIGHT\",\n            // Journey scores\n            \"1\", \"2\", \"3\", \"4\", \"5\",\n            // ER cardinality\n            \"zero or one\", \"one or more\", \"one or many\", \"zero or more\",\n            \"only one\", \"zero or many\",\n            // Class visibility\n            \"+\", \"-\", \"#\", \"~\",\n            // Class annotations\n            \"<<interface>>\", \"<<abstract>>\", \"<<service>>\", \"<<enumeration>>\",\n            \"<<annotation>>\", \"<<utility>>\", \"<<metaclass>>\",\n            // State types\n            \"[*]\", \"<<fork>>\", \"<<join>>\", \"<<choice>>\",\n            // Time formats\n            \"YYYY-MM-DD\", \"HH:mm\", \"HH:mm:ss\", \"HH:mm:ss.SSS\",\n            // Axis formats\n            \"%Y-%m-%d\", \"%H:%M\", \"%H:%M:%S\", \"%d/%m\", \"%d/%m/%Y\",\n            // Actions\n            \"click\", \"call\", \"href\", \"tooltip\",\n            // Common properties\n            \"id\", \"title\", \"description\", \"type\", \"risk\", \"verifyMethod\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Comments\n        Mode(scope: \"comment\", begin: \"%%\", end: \"\\n\"),\n        \n        // Block comments (JSON-style config)\n        Mode(scope: \"comment\", begin: \"%%\\\\{\", end: \"\\\\}%%\"),\n        \n        // Diagram type declaration\n        Mode(scope: \"keyword\", begin: \"^\\\\s*(?:graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|stateDiagram-v2|erDiagram|journey|gantt|pie|quadrantChart|requirementDiagram|gitGraph|mindmap|timeline|zenuml|sankey-beta|xyChart)\\\\b\"),\n        \n        // Subgraph\n        Mode(scope: \"class\", begin: \"\\\\bsubgraph\\\\s+([a-zA-Z0-9_]+)\"),\n        \n        // Node IDs (various formats)\n        Mode(scope: \"meta\", begin: \"\\\\b[a-zA-Z][a-zA-Z0-9_-]*\\\\b\"),\n        \n        // Strings with double quotes\n        CommonModes.stringDouble,\n        \n        // Strings with single quotes (for labels)\n        CommonModes.stringSingle,\n        \n        // Strings with backticks (for special characters)\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Node text in square brackets\n        Mode(scope: \"string\", begin: \"\\\\[\", end: \"\\\\]\"),\n        \n        // Node text in round brackets\n        Mode(scope: \"string\", begin: \"\\\\(\", end: \"\\\\)\"),\n        \n        // Node text in curly brackets\n        Mode(scope: \"string\", begin: \"\\\\{\", end: \"\\\\}\"),\n        \n        // Arrow types\n        Mode(scope: \"keyword\", begin: \"(?:-->|---|-.->|-.-|==>|===|~~>|~~~|->>|-->>|->|-->|-x|--x|-\\\\)|--\\\\)|<<->>|<<-->>)\"),\n        \n        // Class relationships\n        Mode(scope: \"keyword\", begin: \"(?:<\\\\|--|\\\\*--|o--|--|\\\\.\\\\.\\\\|>|\\\\.\\\\.|<--|--\\\\|>)\"),\n        \n        // ER relationships\n        Mode(scope: \"keyword\", begin: \"(?:\\\\|\\\\|--o\\\\{|\\\\}o--\\\\|\\\\||\\\\|\\\\|--\\\\|\\\\{|\\\\}\\\\|--\\\\|\\\\||o\\\\{--\\\\|\\\\||\\\\|\\\\|--\\\\{o|\\\\|\\\\|\\\\.\\\\.o\\\\{|\\\\}o\\\\.\\\\.\\\\|\\\\||\\\\|\\\\|\\\\.\\\\.|\\\\{|\\\\}\\\\|\\\\.\\\\.|\\\\||o\\\\{\\\\.\\\\.|\\\\||\\\\|\\\\.\\\\.|\\\\{o)\"),\n        \n        // State transitions\n        Mode(scope: \"keyword\", begin: \"(?:-->|:-->)\"),\n        \n        // Link text (pipe separated)\n        Mode(scope: \"string\", begin: \"\\\\|\", end: \"\\\\|\"),\n        \n        // CSS class assignment\n        Mode(scope: \"meta\", begin: \":::\"),\n        \n        // Style definitions\n        Mode(scope: \"function\", begin: \"\\\\bstyle\\\\s+[a-zA-Z0-9_-]+\"),\n        Mode(scope: \"function\", begin: \"\\\\bclassDef\\\\s+[a-zA-Z0-9_-]+\"),\n        Mode(scope: \"function\", begin: \"\\\\blinkStyle\\\\s+\\\\d+\"),\n        \n        // Click/callback\n        Mode(scope: \"function\", begin: \"\\\\b(?:click|call)\\\\s+[a-zA-Z0-9_-]+\"),\n        \n        // Participants/Actors\n        Mode(scope: \"class\", begin: \"\\\\b(?:participant|actor)\\\\s+([a-zA-Z0-9_]+)\"),\n        \n        // Class names\n        Mode(scope: \"class\", begin: \"\\\\bclass\\\\s+([a-zA-Z0-9_]+)\"),\n        \n        // State names\n        Mode(scope: \"class\", begin: \"\\\\bstate\\\\s+(?:\\\"[^\\\"]*\\\"|[a-zA-Z0-9_]+)\"),\n        \n        // Numbers\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b\"),\n        \n        // Percentages (for pie charts)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:\\\\.\\\\d+)?%\"),\n        \n        // Dates (for Gantt)\n        Mode(scope: \"string\", begin: \"\\\\d{4}-\\\\d{2}-\\\\d{2}\"),\n        \n        // Colors (hex)\n        Mode(scope: \"number\", begin: \"#[0-9a-fA-F]{3,6}\\\\b\"),\n        \n        // Colors (rgb/rgba)\n        Mode(scope: \"function\", begin: \"rgba?\\\\(\"),\n        \n        // URLs\n        Mode(scope: \"string\", begin: \"https?://[^\\\\s]+\"),\n        \n        // Special state markers\n        Mode(scope: \"keyword\", begin: \"\\\\[\\\\*\\\\]\"),\n        \n        // Section headers\n        Mode(scope: \"class\", begin: \"^\\\\s*section\\\\s+.+$\"),\n        \n        // Title\n        Mode(scope: \"class\", begin: \"^\\\\s*title\\\\s+.+$\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/ObjectiveC.swift",
    "content": "//\n//  ObjectiveCLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct ObjectiveCLanguage: LanguageDefinition {\n    let name = \"Objective-C\"\n    let aliases: [String]? = [\"objc\", \"objective-c\", \"objectivec\", \"obj-c\", \"m\", \"mm\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // C keywords\n            \"auto\", \"break\", \"case\", \"char\", \"const\", \"continue\", \"default\", \"do\",\n            \"double\", \"else\", \"enum\", \"extern\", \"float\", \"for\", \"goto\", \"if\",\n            \"inline\", \"int\", \"long\", \"register\", \"restrict\", \"return\", \"short\",\n            \"signed\", \"sizeof\", \"static\", \"struct\", \"switch\", \"typedef\", \"union\",\n            \"unsigned\", \"void\", \"volatile\", \"while\",\n            // Objective-C keywords\n            \"@interface\", \"@implementation\", \"@protocol\", \"@end\", \"@private\",\n            \"@protected\", \"@public\", \"@package\", \"@property\", \"@synthesize\",\n            \"@dynamic\", \"@class\", \"@selector\", \"@encode\", \"@defs\", \"@synchronized\",\n            \"@try\", \"@catch\", \"@throw\", \"@finally\", \"@autoreleasepool\",\n            \"@optional\", \"@required\",\n            // Memory management\n            \"retain\", \"release\", \"autorelease\", \"dealloc\", \"alloc\", \"init\",\n            \"copy\", \"mutableCopy\",\n            // Modern Objective-C\n            \"strong\", \"weak\", \"unsafe_unretained\", \"assign\", \"nonatomic\", \"atomic\",\n            \"readonly\", \"readwrite\", \"getter\", \"setter\", \"nullable\", \"nonnull\",\n            \"null_resettable\", \"null_unspecified\", \"_Nullable\", \"_Nonnull\",\n            \"_Null_unspecified\",\n            // Special\n            \"self\", \"super\", \"_cmd\", \"id\", \"Class\", \"SEL\", \"IMP\", \"BOOL\",\n            \"YES\", \"NO\", \"nil\", \"Nil\", \"NULL\",\n            // Type qualifiers\n            \"in\", \"out\", \"inout\", \"bycopy\", \"byref\", \"oneway\",\n            // Blocks\n            \"__block\", \"__weak\", \"__strong\", \"__unsafe_unretained\", \"__autoreleasing\",\n            // ARC\n            \"__bridge\", \"__bridge_retained\", \"__bridge_transfer\",\n            // Availability\n            \"__deprecated\", \"__unavailable\", \"__attribute__\",\n            // Other\n            \"instancetype\", \"typeof\", \"__typeof__\"\n        ],\n        \"literal\": [\"YES\", \"NO\", \"nil\", \"Nil\", \"NULL\", \"true\", \"false\"],\n        \"built_in\": [\n            // Foundation - Basic types\n            \"NSObject\", \"NSString\", \"NSMutableString\", \"NSNumber\", \"NSValue\",\n            \"NSData\", \"NSMutableData\", \"NSDate\", \"NSCalendar\", \"NSDateComponents\",\n            \"NSTimeZone\", \"NSLocale\", \"NSURL\", \"NSURLComponents\", \"NSURLRequest\",\n            \"NSMutableURLRequest\", \"NSURLResponse\", \"NSHTTPURLResponse\",\n            \"NSURLSession\", \"NSURLSessionTask\", \"NSURLSessionDataTask\",\n            \"NSURLSessionDownloadTask\", \"NSURLSessionUploadTask\",\n            // Foundation - Collections\n            \"NSArray\", \"NSMutableArray\", \"NSDictionary\", \"NSMutableDictionary\",\n            \"NSSet\", \"NSMutableSet\", \"NSOrderedSet\", \"NSMutableOrderedSet\",\n            \"NSIndexSet\", \"NSMutableIndexSet\", \"NSEnumerator\", \"NSFastEnumeration\",\n            \"NSIndexPath\", \"NSPointerArray\", \"NSHashTable\", \"NSMapTable\",\n            // Foundation - Text processing\n            \"NSAttributedString\", \"NSMutableAttributedString\", \"NSScanner\",\n            \"NSCharacterSet\", \"NSMutableCharacterSet\", \"NSRegularExpression\",\n            \"NSTextCheckingResult\", \"NSDataDetector\", \"NSFormatter\",\n            \"NSNumberFormatter\", \"NSDateFormatter\", \"NSByteCountFormatter\",\n            \"NSLengthFormatter\", \"NSMassFormatter\", \"NSEnergyFormatter\",\n            // Foundation - Errors\n            \"NSError\", \"NSException\", \"NSAssertionHandler\",\n            // Foundation - File system\n            \"NSFileManager\", \"NSFileHandle\", \"NSFileWrapper\", \"NSBundle\",\n            \"NSProcessInfo\", \"NSUserDefaults\", \"NSNotificationCenter\",\n            \"NSNotification\", \"NSNotificationQueue\",\n            // Foundation - Threading\n            \"NSThread\", \"NSRunLoop\", \"NSOperation\", \"NSOperationQueue\",\n            \"NSBlockOperation\", \"NSInvocationOperation\", \"NSCondition\",\n            \"NSConditionLock\", \"NSLock\", \"NSRecursiveLock\", \"NSDistributedLock\",\n            // Foundation - Run loop\n            \"NSTimer\", \"NSPort\", \"NSPortMessage\",\n            // Foundation - Archiving\n            \"NSKeyedArchiver\", \"NSKeyedUnarchiver\", \"NSCoder\", \"NSArchiver\",\n            \"NSUnarchiver\", \"NSPropertyListSerialization\",\n            // Foundation - JSON\n            \"NSJSONSerialization\", \"NSJSONReadingOptions\", \"NSJSONWritingOptions\",\n            // Foundation - KVO/KVC\n            \"NSKeyValueObserving\", \"NSKeyValueCoding\",\n            // Foundation - Predicates\n            \"NSPredicate\", \"NSCompoundPredicate\", \"NSComparisonPredicate\",\n            \"NSExpression\",\n            // Foundation - Sort descriptors\n            \"NSSortDescriptor\",\n            // Foundation - UUID\n            \"NSUUID\",\n            // Foundation - Other\n            \"NSNull\", \"NSProxy\", \"NSInvocation\", \"NSMethodSignature\",\n            \"NSUndoManager\", \"NSCache\", \"NSPurgeableData\", \"NSProgress\",\n            // UIKit - View Controllers\n            \"UIViewController\", \"UINavigationController\", \"UITabBarController\",\n            \"UITableViewController\", \"UICollectionViewController\",\n            \"UISplitViewController\", \"UIPageViewController\", \"UISearchController\",\n            \"UIAlertController\", \"UIActivityViewController\", \"UIPopoverPresentationController\",\n            // UIKit - Views\n            \"UIView\", \"UIWindow\", \"UILabel\", \"UIButton\", \"UITextField\",\n            \"UITextView\", \"UIImageView\", \"UIScrollView\", \"UITableView\",\n            \"UICollectionView\", \"UIPickerView\", \"UIDatePicker\", \"UISwitch\",\n            \"UISlider\", \"UIStepper\", \"UISegmentedControl\", \"UIProgressView\",\n            \"UIActivityIndicatorView\", \"UIWebView\", \"WKWebView\", \"UIStackView\",\n            \"UIVisualEffectView\", \"UIToolbar\", \"UINavigationBar\", \"UITabBar\",\n            \"UISearchBar\", \"UIPageControl\", \"UIRefreshControl\",\n            // UIKit - Cells\n            \"UITableViewCell\", \"UICollectionViewCell\", \"UITableViewHeaderFooterView\",\n            // UIKit - Layout\n            \"NSLayoutConstraint\", \"NSLayoutAnchor\", \"UILayoutGuide\",\n            \"UIEdgeInsets\", \"CGRect\", \"CGPoint\", \"CGSize\", \"CGFloat\", \"CGAffineTransform\",\n            // UIKit - Graphics\n            \"UIColor\", \"UIImage\", \"UIFont\", \"UIBezierPath\", \"CALayer\",\n            \"CAShapeLayer\", \"CAGradientLayer\", \"CATextLayer\", \"CAScrollLayer\",\n            \"CAReplicatorLayer\", \"CATransformLayer\", \"CAEmitterLayer\",\n            \"CATiledLayer\",\n            // UIKit - Gestures\n            \"UIGestureRecognizer\", \"UITapGestureRecognizer\", \"UIPinchGestureRecognizer\",\n            \"UIRotationGestureRecognizer\", \"UISwipeGestureRecognizer\",\n            \"UIPanGestureRecognizer\", \"UIScreenEdgePanGestureRecognizer\",\n            \"UILongPressGestureRecognizer\",\n            // UIKit - Animation\n            \"UIViewPropertyAnimator\", \"CAAnimation\", \"CABasicAnimation\",\n            \"CAKeyframeAnimation\", \"CAAnimationGroup\", \"CATransition\",\n            \"CASpringAnimation\", \"UIViewAnimating\",\n            // UIKit - Other\n            \"UIApplication\", \"UIApplicationDelegate\", \"UIScreen\", \"UIDevice\",\n            \"UIResponder\", \"UIEvent\", \"UITouch\", \"UIPasteboard\", \"UIMenuController\",\n            \"UIPrintInteractionController\", \"UIDocumentInteractionController\",\n            \"UIDocumentPickerViewController\",\n            // Core Graphics\n            \"CGContext\", \"CGPath\", \"CGImage\", \"CGColor\", \"CGColorSpace\",\n            \"CGGradient\", \"CGPattern\", \"CGFont\", \"CGPDFDocument\", \"CGPDFPage\",\n            // Core Animation\n            \"CADisplayLink\", \"CAMediaTiming\", \"CAMediaTimingFunction\",\n            // Dispatch (GCD)\n            \"dispatch_queue_t\", \"dispatch_group_t\", \"dispatch_semaphore_t\",\n            \"dispatch_source_t\", \"dispatch_block_t\", \"dispatch_once_t\",\n            \"dispatch_async\", \"dispatch_sync\", \"dispatch_after\", \"dispatch_once\",\n            \"dispatch_get_main_queue\", \"dispatch_get_global_queue\",\n            \"dispatch_queue_create\", \"dispatch_group_create\", \"dispatch_semaphore_create\",\n            // Core Data\n            \"NSManagedObject\", \"NSManagedObjectContext\", \"NSManagedObjectModel\",\n            \"NSPersistentStoreCoordinator\", \"NSPersistentStore\", \"NSFetchRequest\",\n            \"NSEntityDescription\", \"NSAttributeDescription\", \"NSRelationshipDescription\",\n            \"NSFetchedResultsController\", \"NSPersistentContainer\",\n            // Core Location\n            \"CLLocationManager\", \"CLLocation\", \"CLLocationCoordinate2D\",\n            \"CLPlacemark\", \"CLGeocoder\", \"CLRegion\", \"CLCircularRegion\",\n            \"CLBeaconRegion\", \"CLHeading\", \"CLVisit\",\n            // MapKit\n            \"MKMapView\", \"MKAnnotation\", \"MKAnnotationView\", \"MKPinAnnotationView\",\n            \"MKPointAnnotation\", \"MKPolyline\", \"MKPolygon\", \"MKCircle\",\n            \"MKOverlay\", \"MKOverlayRenderer\", \"MKDirections\", \"MKRoute\",\n            // AVFoundation\n            \"AVPlayer\", \"AVPlayerItem\", \"AVPlayerLayer\", \"AVAsset\", \"AVURLAsset\",\n            \"AVAudioPlayer\", \"AVAudioRecorder\", \"AVAudioSession\",\n            \"AVCaptureDevice\", \"AVCaptureSession\", \"AVCaptureInput\", \"AVCaptureOutput\",\n            // StoreKit\n            \"SKProduct\", \"SKProductsRequest\", \"SKPayment\", \"SKPaymentQueue\",\n            \"SKPaymentTransaction\", \"SKStoreProductViewController\",\n            // Social/Contacts\n            \"CNContact\", \"CNContactStore\", \"CNContactPickerViewController\",\n            \"CNMutableContact\", \"CNLabeledValue\",\n            // UserNotifications\n            \"UNUserNotificationCenter\", \"UNNotificationRequest\", \"UNNotificationContent\",\n            \"UNMutableNotificationContent\", \"UNNotificationTrigger\",\n            // Other frameworks\n            \"NSLayoutManager\", \"NSTextContainer\", \"NSTextStorage\",\n            \"UICollectionViewLayout\", \"UICollectionViewFlowLayout\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"meta\", begin: \"^\\\\s*#\\\\s*(?:import|include|define|undef|if|ifdef|ifndef|else|elif|endif|error|pragma|warning)\\\\b.*$\"),\n\n        Mode(scope: \"keyword\", begin: \"@(?:interface|implementation|protocol|end|class|selector|encode|property|synthesize|dynamic|try|catch|throw|finally|synchronized|autoreleasepool|optional|required)\\\\b\"),\n        \n        Mode(scope: \"class\", begin: \"@interface\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"@protocol\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"@implementation\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"function\", begin: \"^\\\\s*[-+]\\\\s*\\\\([^)]+\\\\)\\\\s*[a-zA-Z_][a-zA-Z0-9_:]*\"),\n        \n        // Selectors\n        Mode(scope: \"meta\", begin: \"@selector\\\\s*\\\\(\", end: \"\\\\)\"),\n        \n        // NSString literals\n        Mode(scope: \"string\", begin: \"@\\\"\", end: \"\\\"\"),\n        \n        // C strings\n        CommonModes.stringDouble,\n        \n        // Character literals\n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // NSNumber literals\n        Mode(scope: \"number\", begin: \"@(?:\\\\d+\\\\.?\\\\d*|0[xX][0-9a-fA-F]+|YES|NO)\\\\b\"),\n        \n        // Array literals\n        Mode(scope: \"meta\", begin: \"@\\\\[\", end: \"\\\\]\"),\n        \n        // Dictionary literals\n        Mode(scope: \"meta\", begin: \"@\\\\{\", end: \"\\\\}\"),\n        \n        // Blocks\n        Mode(scope: \"function\", begin: \"\\\\^\\\\s*(?:\\\\([^)]*\\\\))?\\\\s*\\\\{\", end: \"\\\\}\"),\n        \n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[uUlL]*\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+[uUlL]*\\\\b\"),\n        // Float/Double\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[fFlL]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+[fFlL]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[eE][+-]?\\\\d+[fFlL]?\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[uUlL]*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Perl.swift",
    "content": "//\n//  PerlLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct PerlLanguage: LanguageDefinition {\n    let name = \"Perl\"\n    let aliases: [String]? = [\"perl\", \"pl\", \"pm\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Control flow\n            \"if\", \"elsif\", \"else\", \"unless\", \"given\", \"when\", \"default\",\n            \"while\", \"until\", \"for\", \"foreach\", \"do\", \"continue\",\n            // Jumps\n            \"last\", \"next\", \"redo\", \"goto\",\n            // Declarations\n            \"sub\", \"my\", \"our\", \"local\", \"state\",\n            // Package/Module\n            \"package\", \"use\", \"require\", \"no\",\n            // Special\n            \"BEGIN\", \"END\", \"CHECK\", \"INIT\", \"UNITCHECK\",\n            // References\n            \"ref\", \"bless\",\n            // Operators\n            \"and\", \"or\", \"not\", \"xor\", \"eq\", \"ne\", \"lt\", \"gt\", \"le\", \"ge\", \"cmp\",\n            \"x\", \"xx\",\n            // Others\n            \"return\", \"undef\", \"defined\", \"exists\", \"delete\", \"eval\", \"exec\",\n            \"die\", \"warn\", \"exit\", \"fork\", \"wait\", \"waitpid\", \"system\", \"exec\",\n            \"caller\", \"wantarray\", \"prototype\", \"tied\", \"untie\",\n            // File tests\n            \"-r\", \"-w\", \"-x\", \"-o\", \"-R\", \"-W\", \"-X\", \"-O\", \"-e\", \"-z\", \"-s\",\n            \"-f\", \"-d\", \"-l\", \"-p\", \"-S\", \"-b\", \"-c\", \"-t\", \"-u\", \"-g\", \"-k\",\n            \"-T\", \"-B\", \"-M\", \"-A\", \"-C\",\n            // Special keywords\n            \"__FILE__\", \"__LINE__\", \"__PACKAGE__\", \"__SUB__\", \"__END__\", \"__DATA__\",\n            // Try-catch (Perl 5.34+)\n            \"try\", \"catch\", \"finally\"\n        ],\n        \"literal\": [\"undef\"],\n        \"built_in\": [\n            // String functions\n            \"chomp\", \"chop\", \"chr\", \"crypt\", \"fc\", \"hex\", \"index\", \"lc\", \"lcfirst\",\n            \"length\", \"oct\", \"ord\", \"pack\", \"reverse\", \"rindex\", \"sprintf\", \"substr\",\n            \"tr\", \"uc\", \"ucfirst\", \"y\", \"quotemeta\", \"split\", \"join\",\n            // Array functions\n            \"pop\", \"push\", \"shift\", \"unshift\", \"splice\", \"grep\", \"map\", \"sort\",\n            \"reverse\", \"keys\", \"values\", \"each\", \"delete\", \"exists\",\n            // Hash functions\n            \"keys\", \"values\", \"each\", \"exists\", \"delete\",\n            // List functions\n            \"grep\", \"map\", \"sort\", \"reverse\",\n            // Regex functions\n            \"m\", \"qr\", \"s\", \"tr\", \"y\", \"match\", \"split\", \"pos\", \"study\",\n            // I/O functions\n            \"open\", \"close\", \"opendir\", \"closedir\", \"chdir\", \"read\", \"write\",\n            \"print\", \"printf\", \"say\", \"readline\", \"readdir\", \"rewinddir\", \"seekdir\",\n            \"telldir\", \"eof\", \"fileno\", \"flock\", \"select\", \"getc\", \"binmode\",\n            \"sysopen\", \"sysread\", \"syswrite\", \"sysseek\", \"truncate\", \"stat\", \"lstat\",\n            \"readlink\", \"symlink\", \"link\", \"unlink\", \"rename\", \"chmod\", \"chown\",\n            \"chroot\", \"umask\", \"utime\",\n            // File test operators (as functions)\n            \"abs\", \"accept\", \"alarm\", \"atan2\", \"bind\", \"binmode\", \"bless\", \"caller\",\n            \"chdir\", \"chmod\", \"chomp\", \"chop\", \"chown\", \"chr\", \"chroot\", \"close\",\n            \"closedir\", \"connect\", \"cos\", \"crypt\", \"dbmclose\", \"dbmopen\", \"defined\",\n            \"delete\", \"die\", \"do\", \"dump\", \"each\", \"endgrent\", \"endhostent\",\n            \"endnetent\", \"endprotoent\", \"endpwent\", \"endservent\", \"eof\", \"eval\",\n            \"exec\", \"exists\", \"exit\", \"exp\", \"fcntl\", \"fileno\", \"flock\", \"fork\",\n            \"format\", \"formline\", \"getc\", \"getgrent\", \"getgrgid\", \"getgrnam\",\n            \"gethostbyaddr\", \"gethostbyname\", \"gethostent\", \"getlogin\", \"getnetbyaddr\",\n            \"getnetbyname\", \"getnetent\", \"getpeername\", \"getpgrp\", \"getppid\",\n            \"getpriority\", \"getprotobyname\", \"getprotobynumber\", \"getprotoent\",\n            \"getpwent\", \"getpwnam\", \"getpwuid\", \"getservbyname\", \"getservbyport\",\n            \"getservent\", \"getsockname\", \"getsockopt\", \"glob\", \"gmtime\", \"goto\",\n            \"grep\", \"hex\", \"import\", \"index\", \"int\", \"ioctl\", \"join\", \"keys\", \"kill\",\n            \"last\", \"lc\", \"lcfirst\", \"length\", \"link\", \"listen\", \"local\", \"localtime\",\n            \"lock\", \"log\", \"lstat\", \"map\", \"mkdir\", \"msgctl\", \"msgget\", \"msgrcv\",\n            \"msgsnd\", \"my\", \"next\", \"no\", \"oct\", \"open\", \"opendir\", \"ord\", \"our\",\n            \"pack\", \"package\", \"pipe\", \"pop\", \"pos\", \"print\", \"printf\", \"prototype\",\n            \"push\", \"quotemeta\", \"rand\", \"read\", \"readdir\", \"readline\", \"readlink\",\n            \"readpipe\", \"recv\", \"redo\", \"ref\", \"rename\", \"require\", \"reset\", \"return\",\n            \"reverse\", \"rewinddir\", \"rindex\", \"rmdir\", \"say\", \"scalar\", \"seek\",\n            \"seekdir\", \"select\", \"semctl\", \"semget\", \"semop\", \"send\", \"setgrent\",\n            \"sethostent\", \"setnetent\", \"setpgrp\", \"setpriority\", \"setprotoent\",\n            \"setpwent\", \"setservent\", \"setsockopt\", \"shift\", \"shmctl\", \"shmget\",\n            \"shmread\", \"shmwrite\", \"shutdown\", \"sin\", \"sleep\", \"socket\", \"socketpair\",\n            \"sort\", \"splice\", \"split\", \"sprintf\", \"sqrt\", \"srand\", \"stat\", \"state\",\n            \"study\", \"sub\", \"substr\", \"symlink\", \"syscall\", \"sysopen\", \"sysread\",\n            \"sysseek\", \"system\", \"syswrite\", \"tell\", \"telldir\", \"tie\", \"tied\", \"time\",\n            \"times\", \"tr\", \"truncate\", \"uc\", \"ucfirst\", \"umask\", \"undef\", \"unlink\",\n            \"unpack\", \"unshift\", \"untie\", \"use\", \"utime\", \"values\", \"vec\", \"wait\",\n            \"waitpid\", \"wantarray\", \"warn\", \"write\",\n            // Special variables\n            \"$_\", \"@_\", \"$!\", \"$@\", \"$$\", \"$.\", \"$,\", \"$\\\\\", \"$\\\"\", \"$;\", \"$#\",\n            \"$%\", \"$=\", \"$-\", \"$~\", \"$^\", \"$:\", \"$?\", \"$0\", \"$ARGV\",\n            \"$a\", \"$b\", \"%ENV\", \"@ARGV\", \"@INC\", \"%INC\", \"%SIG\", \"$STDIN\",\n            \"$STDOUT\", \"$STDERR\", \"$^O\", \"$^X\", \"$]\", \"$^V\",\n            // Pragmas\n            \"strict\", \"warnings\", \"utf8\", \"vars\", \"subs\", \"constant\", \"integer\",\n            \"locale\", \"bytes\", \"open\", \"less\", \"feature\", \"experimental\",\n            \"autodie\", \"autouse\", \"base\", \"bigint\", \"bignum\", \"bigrat\", \"blib\",\n            \"diagnostics\", \"encoding\", \"fields\", \"filetest\", \"if\", \"lib\", \"mro\",\n            \"ops\", \"overload\", \"overloading\", \"parent\", \"re\", \"sigtrap\", \"sort\",\n            \"threads\", \"vmsish\",\n            // Common modules\n            \"Carp\", \"Data::Dumper\", \"Exporter\", \"File::Basename\", \"File::Copy\",\n            \"File::Find\", \"File::Path\", \"File::Spec\", \"Getopt::Long\", \"Getopt::Std\",\n            \"IO::File\", \"IO::Handle\", \"IO::Socket\", \"List::Util\", \"POSIX\",\n            \"Scalar::Util\", \"Storable\", \"Time::HiRes\", \"Time::Local\",\n            // Object-oriented\n            \"bless\", \"DESTROY\", \"AUTOLOAD\", \"can\", \"isa\", \"VERSION\",\n            // Modern Perl features\n            \"state\", \"say\", \"given\", \"when\", \"default\", \"break\", \"__SUB__\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // POD (Plain Old Documentation)\n        Mode(scope: \"comment.doc\", begin: \"^=\\\\w+\", end: \"^=cut\"),\n        \n        // Comments\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        \n        // Shebang\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        \n        // Subroutine definitions\n        Mode(scope: \"function\", begin: \"\\\\bsub\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Package declaration\n        Mode(scope: \"class\", begin: \"\\\\bpackage\\\\s+([a-zA-Z_][a-zA-Z0-9_:]*)\"),\n        \n        // Regular expressions (with various delimiters)\n        // m// or //\n        Mode(scope: \"string\", begin: \"\\\\b(?:m|qr)/\", end: \"/[gimosxaludn]*\"),\n        // m{}\n        Mode(scope: \"string\", begin: \"\\\\b(?:m|qr)\\\\{\", end: \"\\\\}[gimosxaludn]*\"),\n        // m[]\n        Mode(scope: \"string\", begin: \"\\\\b(?:m|qr)\\\\[\", end: \"\\\\][gimosxaludn]*\"),\n        // m()\n        Mode(scope: \"string\", begin: \"\\\\b(?:m|qr)\\\\(\", end: \"\\\\)[gimosxaludn]*\"),\n        // Bare //\n        Mode(scope: \"string\", begin: \"/(?![*/])\", end: \"/[gimosxaludn]*\"),\n        \n        // Substitution s///\n        Mode(scope: \"string\", begin: \"\\\\bs/\", end: \"/[gimosxaludn]*\"),\n        Mode(scope: \"string\", begin: \"\\\\bs\\\\{\", end: \"\\\\}[gimosxaludn]*\"),\n        Mode(scope: \"string\", begin: \"\\\\bs\\\\[\", end: \"\\\\][gimosxaludn]*\"),\n        Mode(scope: \"string\", begin: \"\\\\bs\\\\(\", end: \"\\\\)[gimosxaludn]*\"),\n        \n        // Transliteration tr/// or y///\n        Mode(scope: \"string\", begin: \"\\\\b(?:tr|y)/\", end: \"/[cdsr]*\"),\n        \n        // Quote-like operators\n        // q{} qq{} qw{} qx{}\n        Mode(scope: \"string\", begin: \"\\\\bqq?\\\\{\", end: \"\\\\}\"),\n        Mode(scope: \"string\", begin: \"\\\\bqq?\\\\[\", end: \"\\\\]\"),\n        Mode(scope: \"string\", begin: \"\\\\bqq?\\\\(\", end: \"\\\\)\"),\n        Mode(scope: \"string\", begin: \"\\\\bqq?/\", end: \"/\"),\n        Mode(scope: \"string\", begin: \"\\\\bqw\\\\{\", end: \"\\\\}\"),\n        Mode(scope: \"string\", begin: \"\\\\bqw\\\\[\", end: \"\\\\]\"),\n        Mode(scope: \"string\", begin: \"\\\\bqw\\\\(\", end: \"\\\\)\"),\n        Mode(scope: \"string\", begin: \"\\\\bqx\\\\{\", end: \"\\\\}\"),\n        \n        // Here-docs\n        Mode(scope: \"string\", begin: \"<<['\\\"]?([A-Z_][A-Z0-9_]*)['\\\"]?\", end: \"^\\\\1$\"),\n        Mode(scope: \"string\", begin: \"<<~['\\\"]?([A-Z_][A-Z0-9_]*)['\\\"]?\", end: \"^\\\\s*\\\\1$\"),\n        \n        // Variables\n        Mode(scope: \"meta\", begin: \"[$@%](?:[a-zA-Z_][a-zA-Z0-9_]*|\\\\{[^}]+\\\\}|\\\\^[A-Z]|[0-9]+|[!@#$%^&*()_+=\\\\[\\\\]{}|;:,.<>?/~`-])\"),\n        \n        // Typeglobs\n        Mode(scope: \"meta\", begin: \"\\\\*[a-zA-Z_][a-zA-Z0-9_]*\"),\n        \n        // Double-quoted strings (with interpolation)\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Single-quoted strings (no interpolation)\n        CommonModes.stringSingle,\n        \n        // Backtick strings (command execution)\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Numbers\n        // Binary (0b)\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01_]+\\\\b\"),\n        // Octal (0 or 0o)\n        Mode(scope: \"number\", begin: \"\\\\b0[oO]?[0-7_]+\\\\b\"),\n        // Hex (0x)\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F_]+\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.\\\\d[0-9_]*(?:[eE][+-]?\\\\d[0-9_]*)?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*[eE][+-]?\\\\d[0-9_]*\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.\\\\d[0-9_]*\\\\b\"),\n        // Integer with underscores (version numbers)\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\b\"),\n        // Version strings (v5.10.1)\n        Mode(scope: \"number\", begin: \"\\\\bv\\\\d+(?:\\\\.\\\\d+)*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Php.swift",
    "content": "//\n//  PhpLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 31.08.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct PHPLanguage: LanguageDefinition {\n    let name = \"PHP\"\n    let aliases: [String]? = [\"php\"]\n    let caseInsensitive = false\n\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\",\"bool\", \"boolean\", \"class\",\"final\",\"public\",\"private\",\"protected\",\"static\",\"interface\",\"trait\",\"and\",\"as\",\"break\",\"callable\",\"case\",\"catch\",\"continue\",\"declare\",\"default\",\n            \"do\",\"double\",\"else\",\"elseif\",\"empty\",\"enddeclare\",\"endfor\",\"endforeach\",\n            \"endif\",\"endswitch\",\"endwhile\",\"enum\",\"eval\",\"extends\",\"finally\",\"for\",\"foreach\",\n            \"from\",\"function\",\"global\",\"goto\",\"if\",\"implements\",\"instanceof\",\"insteadof\",\n            \"int\",\"integer\",\"isset\",\"iterable\",\"list\",\"match\",\"mixed\",\"new\",\"never\",\"object\",\n            \"or\",\"readonly\",\"real\",\"return\",\"string\",\"switch\",\"throw\",\"try\",\"unset\",\"use\",\n            \"var\",\"void\",\"while\",\"xor\",\"yield\",\"die\",\"echo\",\"exit\",\"include\",\"include_once\",\n            \"print\",\"require\",\"require_once\", \"var_dump\"\n        ],\n        \"literal\": [\"true\",\"false\",\"null\",\"TRUE\",\"FALSE\",\"NULL\"],\n        \"built_in\": [\n            \"ArrayAccess\",\"BackedEnum\",\"Closure\",\"Error\",\"AppendIterator\",\"ArgumentCountError\",\"ArithmeticError\",\n            \"ArrayIterator\",\"ArrayObject\",\"AssertionError\",\"BadFunctionCallException\",\"BadMethodCallException\",\n            \"CachingIterator\",\"CallbackFilterIterator\",\"CompileError\",\"Countable\",\"DirectoryIterator\",\"DivisionByZeroError\",\n            \"DomainException\",\"EmptyIterator\",\"ErrorException\",\"Exception\",\"FilesystemIterator\",\"FilterIterator\",\n            \"GlobIterator\",\"InfiniteIterator\",\"InvalidArgumentException\",\"IteratorIterator\",\"LengthException\",\n            \"LimitIterator\",\"LogicException\",\"MultipleIterator\",\"NoRewindIterator\",\"OutOfBoundsException\",\n            \"OutOfRangeException\",\"OuterIterator\",\"OverflowException\",\"ParentIterator\",\"ParseError\",\"RangeException\",\n            \"RecursiveArrayIterator\",\"RecursiveCachingIterator\",\"RecursiveCallbackFilterIterator\",\"RecursiveDirectoryIterator\",\n            \"RecursiveFilterIterator\",\"RecursiveIterator\",\"RecursiveIteratorIterator\",\"RecursiveRegexIterator\",\n            \"RecursiveTreeIterator\",\"RegexIterator\",\"RuntimeException\",\"SeekableIterator\",\"SplDoublyLinkedList\",\n            \"SplFileInfo\",\"SplFileObject\",\"SplFixedArray\",\"SplHeap\",\"SplMaxHeap\",\"SplMinHeap\",\"SplObjectStorage\",\n            \"SplObserver\",\"SplPriorityQueue\",\"SplQueue\",\"SplStack\",\"SplSubject\",\"SplTempFileObject\",\"TypeError\",\n            \"UnderflowException\",\"UnexpectedValueException\",\"UnhandledMatchError\",\"Stringable\",\"Throwable\",\n            \"Traversable\",\"UnitEnum\",\"WeakReference\",\"WeakMap\",\"Directory\",\"__PHP_Incomplete_Class\",\"parent\",\"php_user_filter\",\n            \"self\",\"static\",\"stdClass\"\n        ]\n    ]\n\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//[^\\n]*\"),\n        Mode(scope: \"comment\", begin: \"#[^\\n]*\"),\n\n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n\n        Mode(scope: \"number\", begin: \"\\\\b(0[xX][0-9a-fA-F]+|0[bB][01]+|0[oO][0-7]+|\\\\d+(?:_\\\\d+)*(?:\\\\.\\\\d+(?:_\\\\d+)*)?(?:[eE][+-]?\\\\d+)?)\\\\b\"),\n        \n        Mode(scope: \"variable\", begin: \"\\\\$[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"),\n\n        Mode(scope: \"meta\", begin: \"<\\\\?php\\\\b\"),\n        Mode(scope: \"meta\", begin: \"<\\\\?(?!=\\\\?)\"),\n        Mode(scope: \"meta\", begin: \"\\\\?>\"),\n\n        Mode(scope: \"class\", begin: \"\\\\b(?:class|interface|trait)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bextends\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bimplements\\\\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\\\\s*,\\\\s*[a-zA-Z_][a-zA-Z0-9_]*)*)\"),\n\n        Mode(\n            scope: \"function\",\n            begin: \"\\\\b(?:fn|function)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"\n        )\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Python.swift",
    "content": "//\n//  PythonLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct PythonLanguage: LanguageDefinition {\n    let name = \"Python\"\n    let aliases: [String]? = [\"py\", \"gyp\", \"ipython\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"and\", \"as\", \"assert\", \"async\", \"await\", \"break\", \"case\", \"class\", \"continue\",\n            \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\", \"for\", \"from\", \"global\",\n            \"if\", \"import\", \"in\", \"is\", \"lambda\", \"match\", \"nonlocal\", \"not\", \"or\",\n            \"pass\", \"raise\", \"return\", \"try\", \"while\", \"with\", \"yield\"\n        ],\n        \"literal\": [\"True\", \"False\", \"None\"],\n        \"built_in\": [\n            // Встроенные функции\n            \"abs\", \"all\", \"any\", \"ascii\", \"bin\", \"bool\", \"breakpoint\", \"bytearray\",\n            \"bytes\", \"callable\", \"chr\", \"classmethod\", \"compile\", \"complex\", \"delattr\",\n            \"dict\", \"dir\", \"divmod\", \"enumerate\", \"eval\", \"exec\", \"filter\", \"float\",\n            \"format\", \"frozenset\", \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\",\n            \"hex\", \"id\", \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\",\n            \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\", \"object\",\n            \"oct\", \"open\", \"ord\", \"pow\", \"print\", \"property\", \"range\", \"repr\",\n            \"reversed\", \"round\", \"set\", \"setattr\", \"slice\", \"sorted\", \"staticmethod\",\n            \"str\", \"sum\", \"super\", \"tuple\", \"type\", \"vars\", \"zip\",\n            // Встроенные исключения\n            \"BaseException\", \"Exception\", \"ArithmeticError\", \"AssertionError\",\n            \"AttributeError\", \"BlockingIOError\", \"BrokenPipeError\", \"BufferError\",\n            \"BytesWarning\", \"ChildProcessError\", \"ConnectionError\", \"EOFError\",\n            \"EnvironmentError\", \"FileExistsError\", \"FileNotFoundError\", \"FloatingPointError\",\n            \"FutureWarning\", \"GeneratorExit\", \"IOError\", \"ImportError\", \"ImportWarning\",\n            \"IndentationError\", \"IndexError\", \"InterruptedError\", \"IsADirectoryError\",\n            \"KeyError\", \"KeyboardInterrupt\", \"LookupError\", \"MemoryError\", \"ModuleNotFoundError\",\n            \"NameError\", \"NotADirectoryError\", \"NotImplementedError\", \"OSError\",\n            \"Overflow Error\", \"PendingDeprecationWarning\", \"PermissionError\", \"ProcessLookupError\",\n            \"RecursionError\", \"ReferenceError\", \"ResourceWarning\", \"RuntimeError\",\n            \"RuntimeWarning\", \"StopAsyncIteration\", \"StopIteration\", \"SyntaxError\",\n            \"SyntaxWarning\", \"SystemError\", \"SystemExit\", \"TabError\", \"TimeoutError\",\n            \"TypeError\", \"UnboundLocalError\", \"UnicodeDecodeError\", \"UnicodeEncodeError\",\n            \"UnicodeError\", \"UnicodeTranslateError\", \"UnicodeWarning\", \"UserWarning\",\n            \"ValueError\", \"Warning\", \"ZeroDivisionError\",\n            // Специальные\n            \"__import__\", \"__name__\", \"__doc__\", \"__file__\", \"__dict__\", \"__class__\",\n            \"self\", \"cls\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        \n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*(?:\\\\.[a-zA-Z_][a-zA-Z0-9_]*)*\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\bdef\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\bclass\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        Mode(scope: \"string\", begin: \"'''\", end: \"'''\"),\n        \n        Mode(scope: \"string\", begin: \"f\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"f'\", end: \"'\"),\n        \n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n        \n        Mode(scope: \"string\", begin: \"r\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\"),\n        Mode(scope: \"string\", begin: \"r'(?:[^'\\\\\\\\]|\\\\\\\\.)*'\"),\n        \n        CommonModes.number,\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"), // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[oO][0-7]+\\\\b\"),        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+\\\\b\"),         // Binary\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/R.swift",
    "content": "//\n//  RLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct RLanguage: LanguageDefinition {\n    let name = \"R\"\n    let aliases: [String]? = [\"r\", \"R\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"if\", \"else\", \"repeat\", \"while\", \"function\", \"for\", \"in\", \"next\", \"break\",\n            \"return\", \"switch\", \"function\", \"library\", \"require\", \"source\"\n        ],\n        \"literal\": [\n            \"TRUE\", \"FALSE\", \"NULL\", \"NA\", \"NA_integer_\", \"NA_real_\", \"NA_complex_\",\n            \"NA_character_\", \"Inf\", \"NaN\"\n        ],\n        \"built_in\": [\n            // Base functions\n            \"c\", \"list\", \"vector\", \"matrix\", \"array\", \"data.frame\", \"factor\",\n            \"length\", \"dim\", \"nrow\", \"ncol\", \"names\", \"colnames\", \"rownames\",\n            \"class\", \"typeof\", \"mode\", \"str\", \"summary\", \"head\", \"tail\", \"View\",\n            // Math functions\n            \"abs\", \"sign\", \"sqrt\", \"floor\", \"ceiling\", \"trunc\", \"round\", \"signif\",\n            \"exp\", \"log\", \"log10\", \"log2\", \"sin\", \"cos\", \"tan\", \"asin\", \"acos\", \"atan\",\n            \"sinh\", \"cosh\", \"tanh\", \"min\", \"max\", \"sum\", \"prod\", \"mean\", \"median\",\n            \"var\", \"sd\", \"range\", \"quantile\", \"cumsum\", \"cumprod\", \"cummin\", \"cummax\",\n            // Statistical functions\n            \"cor\", \"cov\", \"lm\", \"glm\", \"anova\", \"aov\", \"t.test\", \"chisq.test\",\n            \"wilcox.test\", \"fisher.test\", \"shapiro.test\", \"ks.test\", \"var.test\",\n            \"prop.test\", \"binom.test\", \"poisson.test\",\n            // Probability distributions\n            \"rnorm\", \"dnorm\", \"pnorm\", \"qnorm\", \"runif\", \"dunif\", \"punif\", \"qunif\",\n            \"rbinom\", \"dbinom\", \"pbinom\", \"qbinom\", \"rpois\", \"dpois\", \"ppois\", \"qpois\",\n            \"rexp\", \"dexp\", \"pexp\", \"qexp\", \"rgamma\", \"dgamma\", \"pgamma\", \"qgamma\",\n            \"rbeta\", \"dbeta\", \"pbeta\", \"qbeta\", \"rt\", \"dt\", \"pt\", \"qt\",\n            \"rchisq\", \"dchisq\", \"pchisq\", \"qchisq\", \"rf\", \"df\", \"pf\", \"qf\",\n            // Data manipulation\n            \"subset\", \"merge\", \"aggregate\", \"apply\", \"lapply\", \"sapply\", \"tapply\",\n            \"mapply\", \"vapply\", \"replicate\", \"by\", \"split\", \"unsplit\", \"stack\", \"unstack\",\n            \"reshape\", \"transform\", \"within\", \"attach\", \"detach\", \"with\",\n            // Logical functions\n            \"all\", \"any\", \"which\", \"which.max\", \"which.min\", \"ifelse\",\n            // Character functions\n            \"paste\", \"paste0\", \"cat\", \"print\", \"sprintf\", \"format\", \"toString\",\n            \"substr\", \"substring\", \"strsplit\", \"grep\", \"grepl\", \"sub\", \"gsub\",\n            \"regexpr\", \"gregexpr\", \"regmatches\", \"nchar\", \"tolower\", \"toupper\",\n            \"chartr\", \"trimws\",\n            // Type conversion\n            \"as.numeric\", \"as.integer\", \"as.logical\", \"as.character\", \"as.factor\",\n            \"as.Date\", \"as.POSIXct\", \"as.POSIXlt\", \"as.matrix\", \"as.data.frame\",\n            \"as.list\", \"as.vector\",\n            // Type checking\n            \"is.numeric\", \"is.integer\", \"is.logical\", \"is.character\", \"is.factor\",\n            \"is.na\", \"is.null\", \"is.nan\", \"is.infinite\", \"is.finite\",\n            \"is.matrix\", \"is.data.frame\", \"is.list\", \"is.vector\", \"is.array\",\n            // File I/O\n            \"read.csv\", \"read.table\", \"read.delim\", \"readLines\", \"readRDS\",\n            \"write.csv\", \"write.table\", \"writeLines\", \"saveRDS\", \"save\", \"load\",\n            \"scan\", \"file\", \"open\", \"close\", \"readChar\", \"writeChar\",\n            // Data generation\n            \"seq\", \"seq_along\", \"seq_len\", \"rep\", \"rep_len\", \"gl\", \"expand.grid\",\n            \"sample\", \"set.seed\",\n            // Sorting and ordering\n            \"sort\", \"order\", \"rank\", \"rev\", \"unique\", \"duplicated\", \"match\",\n            // Missing data\n            \"na.omit\", \"na.exclude\", \"na.fail\", \"na.pass\", \"complete.cases\",\n            // Graphics (base)\n            \"plot\", \"points\", \"lines\", \"abline\", \"polygon\", \"rect\", \"arrows\",\n            \"hist\", \"barplot\", \"boxplot\", \"pie\", \"pairs\", \"matplot\", \"curve\",\n            \"par\", \"layout\", \"mfrow\", \"mfcol\", \"legend\", \"title\", \"axis\", \"grid\",\n            \"text\", \"mtext\", \"points\", \"segments\", \"polygon\",\n            // Graphics devices\n            \"pdf\", \"png\", \"jpeg\", \"tiff\", \"svg\", \"dev.new\", \"dev.off\", \"dev.cur\",\n            \"dev.list\", \"dev.set\",\n            // Environment and system\n            \"ls\", \"rm\", \"exists\", \"get\", \"assign\", \"environment\", \"parent.frame\",\n            \"sys.call\", \"sys.frame\", \"getwd\", \"setwd\", \"dir\", \"list.files\",\n            \"file.exists\", \"file.info\", \"dir.create\", \"file.create\", \"file.remove\",\n            \"Sys.time\", \"Sys.Date\", \"Sys.getenv\", \"Sys.setenv\", \"system\", \"system2\",\n            // Package management\n            \"install.packages\", \"library\", \"require\", \"loaded.packages\",\n            \"search\", \"sessionInfo\",\n            // Debugging\n            \"debug\", \"undebug\", \"browser\", \"trace\", \"untrace\", \"traceback\",\n            \"stop\", \"warning\", \"message\", \"stopifnot\",\n            // Apply family\n            \"apply\", \"lapply\", \"sapply\", \"vapply\", \"mapply\", \"tapply\", \"rapply\",\n            // Flow control helpers\n            \"tryCatch\", \"try\", \"withCallingHandlers\", \"suppressWarnings\",\n            \"suppressMessages\", \"invisible\",\n            // Special operators\n            \"cbind\", \"rbind\", \"t\", \"solve\", \"det\", \"eigen\", \"svd\", \"qr\",\n            \"chol\", \"diag\", \"crossprod\", \"tcrossprod\", \"outer\",\n            // Date/Time\n            \"Sys.time\", \"Sys.Date\", \"as.Date\", \"strptime\", \"strftime\",\n            \"difftime\", \"ISOdate\", \"ISOdatetime\",\n            // Popular packages functions (commonly used)\n            \"ggplot\", \"aes\", \"geom_point\", \"geom_line\", \"geom_bar\", \"geom_histogram\",\n            \"facet_wrap\", \"facet_grid\", \"theme\", \"labs\", \"scale_x_continuous\",\n            \"dplyr\", \"select\", \"filter\", \"mutate\", \"arrange\", \"group_by\", \"summarize\",\n            \"summarise\", \"left_join\", \"right_join\", \"inner_join\", \"full_join\",\n            \"tidyr\", \"gather\", \"spread\", \"pivot_longer\", \"pivot_wider\",\n            \"data.table\", \"fread\", \"fwrite\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Roxygen comments (documentation)\n        Mode(scope: \"comment.doc\", begin: \"#'\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b([a-zA-Z_][a-zA-Z0-9._]*)\\\\s*(?:=|<-)\\\\s*function\"),\n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9._]*\\\\s*(?=\\\\()\"),\n        \n        // Raw strings (R 4.0+)\n        Mode(scope: \"string\", begin: \"[rR]\\\"\\\\(\", end: \"\\\\)\\\"\"),\n        Mode(scope: \"string\", begin: \"[rR]'\\\\(\", end: \"\\\\)'\"),\n        \n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n        \n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[Ll]?\\\\b\"),\n        // Scientific notation\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+[Ll]?\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[Ll]?\\\\b\"),\n        // Integer with L suffix\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[Ll]\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n        // Special numeric values\n        Mode(scope: \"number\", begin: \"\\\\b(?:Inf|NaN)\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Ruby.swift",
    "content": "//\n//  RubyLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct RubyLanguage: LanguageDefinition {\n    let name = \"Ruby\"\n    let aliases: [String]? = [\"rb\", \"ruby\", \"rbw\", \"rake\", \"gemspec\", \"podspec\", \"thor\", \"irb\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"alias\", \"and\", \"begin\", \"break\", \"case\", \"class\", \"def\", \"defined?\",\n            \"do\", \"else\", \"elsif\", \"end\", \"ensure\", \"for\", \"if\", \"in\", \"module\",\n            \"next\", \"not\", \"or\", \"redo\", \"rescue\", \"retry\", \"return\", \"self\", \"super\",\n            \"then\", \"undef\", \"unless\", \"until\", \"when\", \"while\", \"yield\",\n            // Special variables/constants\n            \"__FILE__\", \"__LINE__\", \"__ENCODING__\",\n            // Additional keywords\n            \"BEGIN\", \"END\"\n        ],\n        \"literal\": [\"true\", \"false\", \"nil\"],\n        \"built_in\": [\n            // Core classes\n            \"Array\", \"BasicObject\", \"Binding\", \"Class\", \"Comparable\", \"Complex\",\n            \"Data\", \"Dir\", \"Encoding\", \"Enumerator\", \"Enumerable\", \"ENV\", \"Exception\",\n            \"FalseClass\", \"File\", \"FileTest\", \"Float\", \"GC\", \"Hash\", \"Integer\", \"IO\",\n            \"Kernel\", \"Marshal\", \"MatchData\", \"Method\", \"Module\", \"Mutex\", \"NilClass\",\n            \"Numeric\", \"Object\", \"ObjectSpace\", \"Proc\", \"Process\", \"Random\", \"Range\",\n            \"Rational\", \"Regexp\", \"Signal\", \"String\", \"Struct\", \"Symbol\", \"Thread\",\n            \"ThreadGroup\", \"Time\", \"TrueClass\", \"UnboundMethod\",\n            // Common methods\n            \"puts\", \"print\", \"printf\", \"p\", \"pp\", \"warn\", \"raise\", \"fail\", \"catch\",\n            \"throw\", \"abort\", \"exit\", \"exit!\", \"at_exit\", \"gets\", \"readline\", \"readlines\",\n            \"chomp\", \"chomp!\", \"chop\", \"chop!\", \"strip\", \"strip!\", \"lstrip\", \"lstrip!\",\n            \"rstrip\", \"rstrip!\", \"upcase\", \"upcase!\", \"downcase\", \"downcase!\",\n            \"capitalize\", \"capitalize!\", \"swapcase\", \"swapcase!\", \"reverse\", \"reverse!\",\n            \"concat\", \"prepend\", \"insert\", \"delete\", \"delete!\", \"tr\", \"tr!\", \"squeeze\",\n            \"squeeze!\", \"split\", \"scan\", \"match\", \"sub\", \"sub!\", \"gsub\", \"gsub!\",\n            \"start_with?\", \"end_with?\", \"include?\", \"index\", \"rindex\", \"slice\", \"slice!\",\n            // Array methods\n            \"push\", \"pop\", \"shift\", \"unshift\", \"first\", \"last\", \"take\", \"drop\",\n            \"each\", \"each_with_index\", \"each_index\", \"map\", \"collect\", \"select\", \"filter\",\n            \"reject\", \"find\", \"detect\", \"find_all\", \"any?\", \"all?\", \"none?\", \"one?\",\n            \"reduce\", \"inject\", \"sum\", \"min\", \"max\", \"minmax\", \"sort\", \"sort!\", \"sort_by\",\n            \"reverse\", \"reverse!\", \"flatten\", \"flatten!\", \"compact\", \"compact!\", \"uniq\",\n            \"uniq!\", \"zip\", \"transpose\", \"rotate\", \"rotate!\", \"sample\", \"shuffle\",\n            \"shuffle!\", \"join\", \"concat\", \"length\", \"size\", \"count\", \"empty?\",\n            // Hash methods\n            \"keys\", \"values\", \"has_key?\", \"key?\", \"has_value?\", \"value?\", \"fetch\",\n            \"store\", \"delete\", \"delete_if\", \"keep_if\", \"select!\", \"reject!\", \"merge\",\n            \"merge!\", \"update\", \"invert\", \"to_a\", \"to_h\", \"transform_keys\",\n            \"transform_values\", \"dig\",\n            // Enumerable methods\n            \"each_cons\", \"each_slice\", \"cycle\", \"take_while\", \"drop_while\", \"group_by\",\n            \"partition\", \"chunk\", \"slice_before\", \"slice_after\", \"slice_when\",\n            // Numeric methods\n            \"abs\", \"ceil\", \"floor\", \"round\", \"truncate\", \"to_i\", \"to_f\", \"to_s\", \"to_r\",\n            \"next\", \"succ\", \"pred\", \"times\", \"upto\", \"downto\", \"step\", \"even?\", \"odd?\",\n            \"zero?\", \"positive?\", \"negative?\", \"finite?\", \"infinite?\", \"nan?\",\n            // String methods\n            \"chars\", \"bytes\", \"lines\", \"codepoints\", \"bytesize\", \"encoding\", \"force_encoding\",\n            \"encode\", \"encode!\", \"intern\", \"to_sym\", \"ord\", \"chr\", \"center\", \"ljust\",\n            \"rjust\", \"partition\", \"rpartition\", \"casecmp\", \"casecmp?\", \"hex\", \"oct\",\n            // File/IO methods\n            \"open\", \"read\", \"write\", \"close\", \"closed?\", \"eof\", \"eof?\", \"rewind\",\n            \"seek\", \"pos\", \"tell\", \"flush\", \"sync\", \"binmode\", \"readlines\", \"each_line\",\n            \"getc\", \"getbyte\", \"ungetc\", \"ungetbyte\", \"sysread\", \"syswrite\",\n            // File class methods\n            \"exist?\", \"exists?\", \"file?\", \"directory?\", \"dirname\", \"basename\", \"extname\",\n            \"expand_path\", \"absolute_path\", \"realpath\", \"join\", \"split\", \"chmod\",\n            \"chown\", \"delete\", \"unlink\", \"rename\", \"stat\", \"lstat\", \"mtime\", \"atime\",\n            \"ctime\", \"size\", \"size?\",\n            // Object methods\n            \"class\", \"is_a?\", \"kind_of?\", \"instance_of?\", \"respond_to?\", \"methods\",\n            \"instance_variables\", \"instance_variable_get\", \"instance_variable_set\",\n            \"send\", \"public_send\", \"define_method\", \"define_singleton_method\",\n            \"method_missing\", \"const_get\", \"const_set\", \"const_defined?\",\n            \"ancestors\", \"included_modules\", \"superclass\", \"singleton_class\",\n            \"freeze\", \"frozen?\", \"dup\", \"clone\", \"taint\", \"tainted?\", \"untaint\",\n            \"trust\", \"untrust\", \"untrusted?\", \"tap\", \"then\", \"yield_self\",\n            \"to_enum\", \"enum_for\", \"extend\", \"include\", \"prepend\",\n            // Kernel methods\n            \"require\", \"require_relative\", \"load\", \"autoload\", \"autoload?\",\n            \"eval\", \"exec\", \"system\", \"spawn\", \"syscall\", \"test\", \"trap\",\n            \"caller\", \"caller_locations\", \"binding\", \"block_given?\", \"iterator?\",\n            \"lambda\", \"proc\", \"loop\", \"sleep\", \"rand\", \"srand\", \"format\", \"sprintf\",\n            // Comparable\n            \"between?\", \"clamp\",\n            // Math\n            \"sqrt\", \"exp\", \"log\", \"log10\", \"log2\", \"sin\", \"cos\", \"tan\", \"asin\",\n            \"acos\", \"atan\", \"atan2\", \"sinh\", \"cosh\", \"tanh\", \"asinh\", \"acosh\", \"atanh\",\n            // Module/Class methods\n            \"attr_reader\", \"attr_writer\", \"attr_accessor\", \"attr\", \"alias_method\",\n            \"private\", \"protected\", \"public\", \"module_function\", \"remove_method\",\n            \"undef_method\", \"method_defined?\", \"private_method_defined?\",\n            \"protected_method_defined?\", \"public_method_defined?\",\n            // Exception classes\n            \"StandardError\", \"RuntimeError\", \"TypeError\", \"ArgumentError\", \"IndexError\",\n            \"KeyError\", \"RangeError\", \"ScriptError\", \"SyntaxError\", \"LoadError\",\n            \"NotImplementedError\", \"NameError\", \"NoMethodError\", \"IOError\", \"EOFError\",\n            \"SystemCallError\", \"ZeroDivisionError\", \"FloatDomainError\", \"StopIteration\",\n            \"LocalJumpError\", \"SystemExit\", \"Interrupt\", \"SignalException\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment.doc\", begin: \"^=begin\", end: \"^=end\"),\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        \n        // Symbols\n        Mode(scope: \"meta\", begin: \":[a-zA-Z_][a-zA-Z0-9_]*[!?=]?\"),\n        Mode(scope: \"meta\", begin: \":\\\"\", end: \"\\\"\"),\n        Mode(scope: \"meta\", begin: \":'\", end: \"'\"),\n        \n        // Instance variables\n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*\"),\n        \n        // Class variables\n        Mode(scope: \"meta\", begin: \"@@[a-zA-Z_][a-zA-Z0-9_]*\"),\n        \n        // Global variables\n        Mode(scope: \"meta\", begin: \"\\\\$[a-zA-Z_][a-zA-Z0-9_]*\"),\n        Mode(scope: \"meta\", begin: \"\\\\$[0-9]+\"),\n        Mode(scope: \"meta\", begin: \"\\\\$[!@&`'+~=/\\\\\\\\,;.<>*$?:\\\"]\"),\n\n        Mode(scope: \"class\", begin: \"\\\\bclass\\\\s+([A-Z][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bmodule\\\\s+([A-Z][a-zA-Z0-9_]*)\"),\n        \n        // Определение методов\n        Mode(scope: \"function\", begin: \"\\\\bdef\\\\s+(?:self\\\\.)?([a-zA-Z_][a-zA-Z0-9_]*[!?=]?)\"),\n        \n        // Percent literals - strings\n        Mode(scope: \"string\", begin: \"%[qQ]?\\\\{\", end: \"\\\\}\"),\n        Mode(scope: \"string\", begin: \"%[qQ]?\\\\[\", end: \"\\\\]\"),\n        Mode(scope: \"string\", begin: \"%[qQ]?\\\\(\", end: \"\\\\)\"),\n        Mode(scope: \"string\", begin: \"%[qQ]?<\", end: \">\"),\n        Mode(scope: \"string\", begin: \"%[qQ]?\\\\|\", end: \"\\\\|\"),\n        Mode(scope: \"string\", begin: \"%[qQ]?/\", end: \"/\"),\n        \n        // Percent literals - arrays\n        Mode(scope: \"string\", begin: \"%[wW]\\\\{\", end: \"\\\\}\"),\n        Mode(scope: \"string\", begin: \"%[wW]\\\\[\", end: \"\\\\]\"),\n        Mode(scope: \"string\", begin: \"%[wW]\\\\(\", end: \"\\\\)\"),\n        \n        // Heredocs\n        Mode(scope: \"string\", begin: \"<<[-~]?['\\\"]?([A-Z_]+)['\\\"]?\", end: \"^\\\\1$\"),\n        \n        // Regular expressions\n        Mode(scope: \"string\", begin: \"/(?![*/])\", end: \"/[imxo]*\"),\n        Mode(scope: \"string\", begin: \"%r\\\\{\", end: \"\\\\}[imxo]*\"),\n        Mode(scope: \"string\", begin: \"%r\\\\[\", end: \"\\\\][imxo]*\"),\n        Mode(scope: \"string\", begin: \"%r\\\\(\", end: \"\\\\)[imxo]*\"),\n        Mode(scope: \"string\", begin: \"%r<\", end: \">[imxo]*\"),\n        Mode(scope: \"string\", begin: \"%r\\\\|\", end: \"\\\\|[imxo]*\"),\n        \n        // String interpolation\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Single quoted strings (no interpolation)\n        CommonModes.stringSingle,\n        \n        // Backtick strings (command execution)\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01_]+\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[oO][0-7_]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7_]+\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F_]+\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.\\\\d[0-9_]*[eE][+-]?\\\\d[0-9_]*\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*[eE][+-]?\\\\d[0-9_]*\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.\\\\d[0-9_]*\\\\b\"),\n        // Integer with underscores\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Rust.swift",
    "content": "//\n//  RustLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct RustLanguage: LanguageDefinition {\n    let name = \"Rust\"\n    let aliases: [String]? = [\"rs\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"as\", \"async\", \"await\", \"break\", \"const\", \"continue\", \"crate\", \"dyn\",\n            \"else\", \"enum\", \"extern\", \"false\", \"fn\", \"for\", \"if\", \"impl\", \"in\",\n            \"let\", \"loop\", \"match\", \"mod\", \"move\", \"mut\", \"pub\", \"ref\", \"return\",\n            \"self\", \"Self\", \"static\", \"struct\", \"super\", \"trait\", \"true\", \"type\",\n            \"unsafe\", \"use\", \"where\", \"while\",\n            // Reserved keywords\n            \"abstract\", \"become\", \"box\", \"do\", \"final\", \"macro\", \"override\",\n            \"priv\", \"typeof\", \"unsized\", \"virtual\", \"yield\",\n            // Edition 2018+\n            \"try\"\n        ],\n        \"literal\": [\"true\", \"false\"],\n        \"built_in\": [\n            // Primitive types\n            \"bool\", \"char\", \"str\",\n            \"i8\", \"i16\", \"i32\", \"i64\", \"i128\", \"isize\",\n            \"u8\", \"u16\", \"u32\", \"u64\", \"u128\", \"usize\",\n            \"f32\", \"f64\",\n            // Common types\n            \"String\", \"Vec\", \"Box\", \"Option\", \"Result\", \"Some\", \"None\", \"Ok\", \"Err\",\n            \"HashMap\", \"HashSet\", \"BTreeMap\", \"BTreeSet\", \"LinkedList\", \"VecDeque\",\n            \"BinaryHeap\", \"Rc\", \"Arc\", \"Cell\", \"RefCell\", \"Cow\", \"Mutex\", \"RwLock\",\n            \"Path\", \"PathBuf\", \"OsString\", \"OsStr\",\n            // Traits\n            \"Copy\", \"Clone\", \"Debug\", \"Display\", \"Default\", \"Drop\", \"Eq\", \"PartialEq\",\n            \"Ord\", \"PartialOrd\", \"Hash\", \"Iterator\", \"IntoIterator\", \"FromIterator\",\n            \"Extend\", \"From\", \"Into\", \"AsRef\", \"AsMut\", \"Deref\", \"DerefMut\",\n            \"Add\", \"Sub\", \"Mul\", \"Div\", \"Rem\", \"Not\", \"BitAnd\", \"BitOr\", \"BitXor\",\n            \"Shl\", \"Shr\", \"Index\", \"IndexMut\", \"Fn\", \"FnMut\", \"FnOnce\",\n            \"Read\", \"Write\", \"Seek\", \"BufRead\", \"Send\", \"Sync\", \"Sized\", \"Unpin\",\n            // Macros\n            \"println\", \"print\", \"eprintln\", \"eprint\", \"format\", \"panic\", \"assert\",\n            \"assert_eq\", \"assert_ne\", \"debug_assert\", \"debug_assert_eq\", \"debug_assert_ne\",\n            \"vec\", \"concat\", \"include\", \"include_str\", \"include_bytes\", \"env\",\n            \"option_env\", \"cfg\", \"line\", \"column\", \"file\", \"stringify\", \"module_path\",\n            \"compile_error\", \"unimplemented\", \"unreachable\", \"todo\", \"matches\",\n            \"dbg\", \"write\", \"writeln\",\n            // Common functions and methods\n            \"unwrap\", \"expect\", \"unwrap_or\", \"unwrap_or_else\", \"unwrap_or_default\",\n            \"map\", \"and_then\", \"or_else\", \"filter\", \"collect\", \"iter\", \"into_iter\",\n            \"iter_mut\", \"len\", \"is_empty\", \"push\", \"pop\", \"insert\", \"remove\", \"clear\",\n            \"get\", \"get_mut\", \"contains\", \"split\", \"join\", \"trim\", \"to_string\",\n            \"to_owned\", \"clone\", \"chars\", \"bytes\", \"lines\", \"parse\", \"replace\",\n            // std modules\n            \"std\", \"core\", \"alloc\", \"collections\", \"sync\", \"thread\", \"io\", \"fs\",\n            \"net\", \"process\", \"time\", \"env\", \"path\", \"fmt\", \"mem\", \"ptr\", \"slice\",\n            \"convert\", \"ops\", \"cmp\", \"any\", \"marker\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Doc comments\n        Mode(scope: \"comment.doc\", begin: \"///\", end: \"\\n\"),\n        Mode(scope: \"comment.doc\", begin: \"//!\", end: \"\\n\"),\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*!\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        Mode(scope: \"meta\", begin: \"#!?\\\\[\", end: \"\\\\]\"),\n        \n        // Lifetime annotations\n        Mode(scope: \"meta\", begin: \"'[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*!\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\bfn\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        Mode(scope: \"class\", begin: \"\\\\b(?:struct|enum|trait|type|union)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Raw string literals\n        Mode(scope: \"string\", begin: \"r#+\\\"\", end: \"\\\"#+\"),\n        Mode(scope: \"string\", begin: \"r\\\"\", end: \"\\\"\"),\n        \n        // Byte string literals\n        Mode(scope: \"string\", begin: \"b\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"br#+\\\"\", end: \"\\\"#+\"),\n        Mode(scope: \"string\", begin: \"br\\\"\", end: \"\\\"\"),\n        \n        CommonModes.stringDouble,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // Byte literals\n        Mode(scope: \"string\", begin: \"b'(?:[^'\\\\\\\\]|\\\\\\\\.)+'\"),\n        \n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0b[01_]+(?:[ui](?:8|16|32|64|128|size))?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0o[0-7_]+(?:[ui](?:8|16|32|64|128|size))?\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0x[0-9a-fA-F_]+(?:[ui](?:8|16|32|64|128|size))?\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*(?:\\\\.[0-9_]+)?[eE][+-]?[0-9_]+(?:f(?:32|64))?\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\.[0-9_]+(?:f(?:32|64))?\\\\b\"),\n        // Integer with suffix\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*(?:[ui](?:8|16|32|64|128|size)|f(?:32|64))\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d[0-9_]*\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Scala.swift",
    "content": "//\n//  ScalaLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct ScalaLanguage: LanguageDefinition {\n    let name = \"Scala\"\n    let aliases: [String]? = [\"scala\", \"sc\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"abstract\", \"case\", \"catch\", \"class\", \"def\", \"do\", \"else\", \"extends\",\n            \"false\", \"final\", \"finally\", \"for\", \"forSome\", \"if\", \"implicit\",\n            \"import\", \"lazy\", \"match\", \"new\", \"null\", \"object\", \"override\",\n            \"package\", \"private\", \"protected\", \"return\", \"sealed\", \"super\",\n            \"this\", \"throw\", \"trait\", \"try\", \"true\", \"type\", \"val\", \"var\",\n            \"while\", \"with\", \"yield\",\n            // Scala 3 keywords\n            \"enum\", \"export\", \"given\", \"then\", \"using\", \"extension\", \"inline\",\n            \"opaque\", \"open\", \"transparent\", \"infix\", \"end\",\n            // Contextual keywords\n            \"as\", \"derives\", \"macro\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\"],\n        \"built_in\": [\n            // Basic types\n            \"Unit\", \"Boolean\", \"Byte\", \"Short\", \"Int\", \"Long\", \"Float\", \"Double\",\n            \"Char\", \"String\", \"Symbol\", \"Any\", \"AnyRef\", \"AnyVal\", \"Nothing\", \"Null\",\n            // Collections - immutable\n            \"List\", \"Vector\", \"Set\", \"Map\", \"Seq\", \"Array\", \"ArrayBuffer\",\n            \"IndexedSeq\", \"LinearSeq\", \"Queue\", \"Stack\", \"Stream\", \"LazyList\",\n            \"Range\", \"NumericRange\", \"Iterator\", \"Iterable\", \"Traversable\",\n            \"HashSet\", \"TreeSet\", \"BitSet\", \"ListSet\",\n            \"HashMap\", \"TreeMap\", \"ListMap\", \"LinkedHashMap\", \"WeakHashMap\",\n            // Collections - mutable\n            \"ArraySeq\", \"ListBuffer\", \"ArrayBuffer\", \"StringBuilder\",\n            \"HashSet\", \"LinkedHashSet\", \"TreeSet\", \"BitSet\",\n            \"HashMap\", \"LinkedHashMap\", \"TreeMap\", \"WeakHashMap\",\n            \"Queue\", \"Stack\", \"PriorityQueue\", \"ArrayDeque\",\n            // Option and Either\n            \"Option\", \"Some\", \"None\", \"Either\", \"Left\", \"Right\",\n            \"Try\", \"Success\", \"Failure\",\n            // Tuple types\n            \"Tuple1\", \"Tuple2\", \"Tuple3\", \"Tuple4\", \"Tuple5\", \"Tuple6\", \"Tuple7\",\n            \"Tuple8\", \"Tuple9\", \"Tuple10\", \"Tuple11\", \"Tuple12\", \"Tuple13\", \"Tuple14\",\n            \"Tuple15\", \"Tuple16\", \"Tuple17\", \"Tuple18\", \"Tuple19\", \"Tuple20\",\n            \"Tuple21\", \"Tuple22\",\n            // Function types\n            \"Function\", \"Function0\", \"Function1\", \"Function2\", \"Function3\",\n            \"PartialFunction\", \"Function22\",\n            // Numeric types\n            \"BigInt\", \"BigDecimal\", \"Numeric\", \"Integral\", \"Fractional\",\n            \"Ordering\", \"Ordered\",\n            // Common methods\n            \"map\", \"flatMap\", \"filter\", \"foreach\", \"fold\", \"foldLeft\", \"foldRight\",\n            \"reduce\", \"reduceLeft\", \"reduceRight\", \"collect\", \"find\", \"exists\",\n            \"forall\", \"count\", \"sum\", \"product\", \"min\", \"max\", \"minBy\", \"maxBy\",\n            \"head\", \"tail\", \"headOption\", \"last\", \"lastOption\", \"init\", \"take\",\n            \"drop\", \"takeWhile\", \"dropWhile\", \"slice\", \"splitAt\", \"span\",\n            \"partition\", \"groupBy\", \"grouped\", \"sliding\", \"zip\", \"zipWithIndex\",\n            \"unzip\", \"flatten\", \"distinct\", \"sorted\", \"sortBy\", \"sortWith\",\n            \"reverse\", \"reverseMap\", \"contains\", \"containsSlice\", \"corresponds\",\n            \"startsWith\", \"endsWith\", \"indexWhere\", \"lastIndexWhere\", \"indexOf\",\n            \"lastIndexOf\", \"isEmpty\", \"nonEmpty\", \"size\", \"length\", \"mkString\",\n            // String methods\n            \"toUpperCase\", \"toLowerCase\", \"trim\", \"split\", \"replace\", \"replaceAll\",\n            \"replaceFirst\", \"matches\", \"substring\", \"charAt\", \"concat\",\n            // Conversion methods\n            \"toList\", \"toVector\", \"toSet\", \"toMap\", \"toSeq\", \"toArray\", \"toStream\",\n            \"toIterator\", \"toIndexedSeq\", \"toBuffer\", \"toString\", \"toInt\", \"toLong\",\n            \"toDouble\", \"toFloat\", \"toBoolean\", \"toByte\", \"toShort\", \"toChar\",\n            // Concurrency\n            \"Future\", \"Promise\", \"Await\", \"ExecutionContext\", \"Executor\",\n            \"Actor\", \"ActorRef\", \"ActorSystem\", \"Props\", \"Receive\",\n            // IO\n            \"Source\", \"BufferedSource\", \"Codec\", \"File\", \"Path\", \"URL\", \"URI\",\n            // Implicit conversions\n            \"implicitly\", \"Predef\",\n            // Scala objects\n            \"App\", \"Array\", \"Console\", \"List\", \"Nil\", \"StringContext\",\n            // Type classes\n            \"Numeric\", \"Ordering\", \"Equiv\", \"Manifest\", \"ClassTag\", \"TypeTag\",\n            \"WeakTypeTag\",\n            // Reflection\n            \"reflect\", \"ClassTag\", \"TypeTag\", \"Mirror\", \"Universe\",\n            // XML (built-in)\n            \"Elem\", \"Node\", \"NodeSeq\", \"Text\", \"XML\",\n            // Common traits\n            \"Serializable\", \"Cloneable\", \"Product\", \"Equals\",\n            // Math\n            \"Math\", \"abs\", \"min\", \"max\", \"sqrt\", \"pow\", \"exp\", \"log\", \"log10\",\n            \"sin\", \"cos\", \"tan\", \"asin\", \"acos\", \"atan\", \"atan2\", \"sinh\", \"cosh\",\n            \"tanh\", \"ceil\", \"floor\", \"round\", \"signum\", \"random\",\n            // Exceptions\n            \"Exception\", \"RuntimeException\", \"Throwable\", \"Error\",\n            \"IllegalArgumentException\", \"IllegalStateException\",\n            \"IndexOutOfBoundsException\", \"NoSuchElementException\",\n            \"NullPointerException\", \"ClassCastException\", \"NumberFormatException\",\n            \"UnsupportedOperationException\", \"ArithmeticException\",\n            \"MatchError\", \"NotImplementedError\",\n            // Annotations\n            \"deprecated\", \"inline\", \"native\", \"specialized\", \"tailrec\",\n            \"throws\", \"transient\", \"unchecked\", \"volatile\", \"SerialVersionUID\",\n            \"annotation\", \"implicitNotFound\", \"implicitAmbiguous\",\n            // Scala 3 specific\n            \"CanEqual\", \"Matchable\", \"Singleton\", \"Selectable\",\n            // Common patterns\n            \"unapply\", \"apply\", \"update\", \"equals\", \"hashCode\", \"toString\",\n            \"clone\", \"finalize\", \"getClass\", \"notify\", \"notifyAll\", \"wait\",\n            // Builder pattern\n            \"Builder\", \"CanBuildFrom\", \"IterableFactory\",\n            // Parallel collections\n            \"par\", \"ParSeq\", \"ParSet\", \"ParMap\", \"ParIterable\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Scaladoc comments\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*\"),\n        Mode(scope: \"meta\", begin: \"'[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"),\n        Mode(scope: \"class\", begin: \"\\\\b(?:class|object|trait|enum|case class|case object)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"class\", begin: \"\\\\bpackage\\\\s+([a-zA-Z_][a-zA-Z0-9_.]*)\"),\n        Mode(scope: \"function\", begin: \"\\\\bdef\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        Mode(scope: \"meta\", begin: \"\\\\b(?:val|var)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // String interpolation\n        Mode(scope: \"string\", begin: \"s\\\"\", end: \"\\\"\"),\n        Mode(scope: \"string\", begin: \"f\\\"\", end: \"\\\"\"),\n        \n        // Raw strings\n        Mode(scope: \"string\", begin: \"raw\\\"\", end: \"\\\"\"),\n        \n        // Triple-quoted strings (multiline)\n        Mode(scope: \"string\", begin: \"\\\"\\\"\\\"\", end: \"\\\"\\\"\\\"\"),\n        \n        CommonModes.stringDouble,\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)'\"),\n\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+[lLfFdD]?\\\\b\"),\n        // Binary (Scala 2.13+)\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01]+[lL]?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+[lL]?\\\\b\"),\n        // Float/Double with suffixes\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+(?:[eE][+-]?\\\\d+)?[fFdD]?\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[eE][+-]?\\\\d+[fFdD]?\\\\b\"),\n        // Integer with suffix\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[lLfFdD]\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Scratch.swift",
    "content": "//\n//  ScratchLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct ScratchLanguage: LanguageDefinition {\n    let name = \"Scratch\"\n    let aliases: [String]? = [\"scratch\", \"sb3\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Motion blocks\n            \"move\", \"steps\", \"turn\", \"right\", \"left\", \"degrees\", \"go\", \"to\", \"goto\",\n            \"random\", \"position\", \"glide\", \"secs\", \"point\", \"in\", \"direction\",\n            \"towards\", \"mouse-pointer\", \"change\", \"x\", \"by\", \"y\", \"set\", \"if\", \"on\",\n            \"edge\", \"bounce\", \"rotation\", \"style\", \"don't\", \"rotate\", \"left-right\",\n            \"all\", \"around\",\n            // Looks blocks\n            \"say\", \"for\", \"think\", \"show\", \"hide\", \"switch\", \"costume\", \"next\",\n            \"backdrop\", \"size\", \"effect\", \"clear\", \"graphic\", \"effects\",\n            // Sound blocks\n            \"start\", \"sound\", \"play\", \"until\", \"done\", \"stop\", \"all\", \"sounds\",\n            \"volume\", \"pitch\", \"pan\", \"left\", \"right\",\n            // Events blocks\n            \"when\", \"green\", \"flag\", \"clicked\", \"key\", \"pressed\", \"sprite\",\n            \"stage\", \"backdrop\", \"switches\", \"loudness\", \"timer\", \"greater\", \"than\",\n            \"broadcast\", \"message\", \"wait\", \"receive\",\n            // Control blocks\n            \"forever\", \"repeat\", \"times\", \"else\", \"stop\", \"this\", \"script\",\n            \"other\", \"scripts\", \"everything\", \"clone\", \"create\", \"myself\", \"delete\",\n            // Sensing blocks\n            \"touching\", \"color\", \"distance\", \"ask\", \"answer\", \"down\", \"username\",\n            \"current\", \"year\", \"month\", \"date\", \"day\", \"of\", \"week\", \"hour\", \"minute\",\n            \"second\", \"days\", \"since\", \"2000\",\n            // Operators blocks\n            \"mod\", \"round\", \"abs\", \"floor\", \"ceiling\", \"sqrt\", \"sin\", \"cos\", \"tan\",\n            \"asin\", \"acos\", \"atan\", \"ln\", \"log\", \"pow\", \"join\", \"letter\", \"length\",\n            \"contains\",\n            // Variables blocks\n            \"make\", \"variable\", \"list\", \"add\", \"item\", \"insert\", \"at\", \"replace\",\n            \"with\", \"contains\", \"show\", \"hide\",\n            // My Blocks (custom blocks)\n            \"define\", \"run\", \"without\", \"screen\", \"refresh\"\n        ],\n        \"literal\": [\"true\", \"false\"],\n        \"built_in\": [\n            // Motion reporters\n            \"x position\", \"y position\", \"direction\",\n            // Looks reporters\n            \"costume number\", \"costume name\", \"backdrop number\", \"backdrop name\",\n            \"size\",\n            // Sound reporters\n            \"volume\",\n            // Sensing reporters\n            \"answer\", \"loudness\", \"timer\", \"username\",\n            \"mouse x\", \"mouse y\", \"mouse down\",\n            // Operators\n            \"abs\", \"floor\", \"ceiling\", \"sqrt\", \"sin\", \"cos\", \"tan\",\n            \"asin\", \"acos\", \"atan\", \"ln\", \"log\", \"e ^\", \"10 ^\",\n            \"round\", \"mod\", \"pick random\", \"join\", \"letter of\", \"length of\",\n            \"contains\", \"mathop\",\n            // Data\n            \"item of\", \"length\", \"item #\", \"contains\",\n            // Special values\n            \"mouse-pointer\", \"random position\", \"edge\",\n            // Backdrops and costumes\n            \"next backdrop\", \"previous backdrop\", \"random backdrop\",\n            \"next costume\", \"previous costume\",\n            // Effects\n            \"color\", \"fisheye\", \"whirl\", \"pixelate\", \"mosaic\", \"brightness\", \"ghost\",\n            // Sound effects\n            \"pitch\", \"pan left/right\",\n            // Keys\n            \"space\", \"up arrow\", \"down arrow\", \"right arrow\", \"left arrow\",\n            \"any\", \"enter\",\n            // Special sprites\n            \"Stage\", \"Sprite1\",\n            // Pen (extension)\n            \"pen down\", \"pen up\", \"set pen color\", \"change pen size\",\n            \"set pen size\", \"stamp\", \"erase all\",\n            // Music (extension)\n            \"play drum\", \"rest\", \"play note\", \"set instrument\", \"set tempo\",\n            \"change tempo\",\n            // Text to Speech (extension)\n            \"speak\", \"set voice\", \"set language\",\n            // Translate (extension)\n            \"translate\", \"language\",\n            // Video Sensing (extension)\n            \"video\", \"motion\", \"when motion\",\n            // Makey Makey (extension)\n            \"when pressed\",\n            // LEGO (extension)\n            \"motor\", \"turn on\", \"turn off\",\n            // micro:bit (extension)\n            \"display\", \"button\"\n        ]\n    ]\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"function\", begin: \"\\\\b(?:define|when|forever|repeat|if|else)\\\\b\"),\n        \n        Mode(scope: \"meta\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b(?=\\\\s*(?:=|<-))\"),\n        \n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n        \n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n        // Negative numbers\n        Mode(scope: \"number\", begin: \"-\\\\d+\\\\.?\\\\d*\\\\b\"),\n        \n        Mode(scope: \"literal\", begin: \"\\\\b(?:true|false)\\\\b\"),\n        Mode(scope: \"keyword\", begin: \"(?:and|or|not|<|>|=)\"),\n        \n        Mode(scope: \"number\", begin: \"#[0-9a-fA-F]{6}\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Shell.swift",
    "content": "//\n//  ShellLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct ShellLanguage: LanguageDefinition {\n    let name = \"Shell\"\n    let aliases: [String]? = [\"sh\", \"shell\", \"zsh\", \"ksh\", \"dash\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // Control flow\n            \"if\", \"then\", \"else\", \"elif\", \"fi\", \"case\", \"esac\", \"for\", \"select\",\n            \"while\", \"until\", \"do\", \"done\", \"in\", \"function\", \"time\",\n            // Declarations\n            \"declare\", \"typeset\", \"local\", \"export\", \"readonly\", \"unset\",\n            // Built-in commands\n            \"break\", \"continue\", \"return\", \"exit\", \"shift\", \"eval\", \"exec\",\n            \"source\", \".\", \"trap\", \"wait\", \"jobs\", \"bg\", \"fg\", \"disown\",\n            \"suspend\", \"alias\", \"unalias\", \"set\", \"unset\", \"shopt\",\n            \"enable\", \"command\", \"builtin\", \"caller\", \"true\", \"false\",\n            // Test commands\n            \"test\", \"[\", \"[[\",\n            // Compound commands\n            \"{\", \"}\", \"((\", \"))\", \"[[\", \"]]\"\n        ],\n        \"literal\": [\"true\", \"false\"],\n        \"built_in\": [\n            // File operations\n            \"cat\", \"cp\", \"mv\", \"rm\", \"rmdir\", \"mkdir\", \"touch\", \"ln\", \"chmod\",\n            \"chown\", \"chgrp\", \"ls\", \"pwd\", \"cd\", \"pushd\", \"popd\", \"dirs\",\n            \"find\", \"locate\", \"which\", \"whereis\", \"file\", \"stat\", \"du\", \"df\",\n            \"mount\", \"umount\", \"dd\", \"tar\", \"gzip\", \"gunzip\", \"bzip2\", \"bunzip2\",\n            \"zip\", \"unzip\", \"compress\", \"uncompress\", \"rsync\", \"scp\", \"sftp\",\n            // Text processing\n            \"echo\", \"printf\", \"read\", \"cat\", \"head\", \"tail\", \"less\", \"more\",\n            \"grep\", \"egrep\", \"fgrep\", \"sed\", \"awk\", \"cut\", \"paste\", \"join\",\n            \"sort\", \"uniq\", \"wc\", \"tr\", \"expand\", \"unexpand\", \"fold\", \"fmt\",\n            \"nl\", \"pr\", \"tee\", \"split\", \"csplit\", \"diff\", \"patch\", \"cmp\",\n            \"comm\", \"column\", \"iconv\", \"dos2unix\", \"unix2dos\",\n            // Process management\n            \"ps\", \"top\", \"htop\", \"kill\", \"killall\", \"pkill\", \"pgrep\", \"pidof\",\n            \"nice\", \"renice\", \"nohup\", \"screen\", \"tmux\", \"at\", \"batch\", \"cron\",\n            \"crontab\", \"sleep\", \"timeout\", \"watch\", \"xargs\",\n            // System information\n            \"uname\", \"hostname\", \"uptime\", \"who\", \"whoami\", \"id\", \"groups\",\n            \"users\", \"last\", \"lastlog\", \"w\", \"finger\", \"date\", \"cal\", \"time\",\n            \"timedatectl\", \"localectl\", \"hostnamectl\",\n            // Network\n            \"ping\", \"traceroute\", \"netstat\", \"ss\", \"ip\", \"ifconfig\", \"route\",\n            \"arp\", \"dig\", \"nslookup\", \"host\", \"wget\", \"curl\", \"nc\", \"netcat\",\n            \"telnet\", \"ftp\", \"ssh\", \"scp\", \"rsync\", \"nmap\", \"tcpdump\",\n            // User management\n            \"useradd\", \"usermod\", \"userdel\", \"groupadd\", \"groupmod\", \"groupdel\",\n            \"passwd\", \"chpasswd\", \"su\", \"sudo\", \"visudo\",\n            // Package management\n            \"apt\", \"apt-get\", \"aptitude\", \"dpkg\", \"yum\", \"dnf\", \"rpm\", \"zypper\",\n            \"pacman\", \"brew\", \"snap\", \"flatpak\",\n            // System management\n            \"systemctl\", \"service\", \"journalctl\", \"dmesg\", \"shutdown\", \"reboot\",\n            \"poweroff\", \"halt\", \"init\", \"telinit\",\n            // Shell built-ins\n            \"alias\", \"bg\", \"bind\", \"builtin\", \"caller\", \"cd\", \"command\",\n            \"compgen\", \"complete\", \"compopt\", \"continue\", \"declare\", \"dirs\",\n            \"disown\", \"echo\", \"enable\", \"eval\", \"exec\", \"exit\", \"export\",\n            \"false\", \"fc\", \"fg\", \"getopts\", \"hash\", \"help\", \"history\", \"jobs\",\n            \"kill\", \"let\", \"local\", \"logout\", \"mapfile\", \"popd\", \"printf\",\n            \"pushd\", \"pwd\", \"read\", \"readarray\", \"readonly\", \"return\", \"set\",\n            \"shift\", \"shopt\", \"source\", \"suspend\", \"test\", \"times\", \"trap\",\n            \"true\", \"type\", \"typeset\", \"ulimit\", \"umask\", \"unalias\", \"unset\",\n            \"wait\",\n            // Common utilities\n            \"basename\", \"dirname\", \"expr\", \"bc\", \"dc\", \"seq\", \"yes\", \"tty\",\n            \"stty\", \"clear\", \"reset\", \"script\", \"rev\", \"factor\", \"env\",\n            \"printenv\", \"getopt\", \"getopts\", \"mktemp\", \"mkfifo\", \"tput\",\n            // Archiving\n            \"tar\", \"cpio\", \"zip\", \"unzip\", \"gzip\", \"gunzip\", \"bzip2\", \"bunzip2\",\n            \"xz\", \"unxz\", \"7z\", \"rar\", \"unrar\",\n            // Disk operations\n            \"fdisk\", \"parted\", \"mkfs\", \"fsck\", \"tune2fs\", \"resize2fs\", \"blkid\",\n            \"lsblk\", \"hdparm\", \"smartctl\",\n            // Variables\n            \"PATH\", \"HOME\", \"USER\", \"SHELL\", \"PWD\", \"OLDPWD\", \"TMPDIR\", \"LANG\",\n            \"LC_ALL\", \"TERM\", \"EDITOR\", \"VISUAL\", \"PAGER\", \"PS1\", \"PS2\", \"PS3\",\n            \"PS4\", \"IFS\", \"RANDOM\", \"SECONDS\", \"LINENO\", \"BASHPID\", \"BASH_VERSION\",\n            \"HOSTNAME\", \"UID\", \"EUID\", \"GROUPS\", \"PPID\", \"SHLVL\", \"BASH_SUBSHELL\",\n            // Special parameters\n            \"$@\", \"$*\", \"$#\", \"$$\", \"$!\", \"$?\", \"$-\", \"$_\", \"$0\",\n            // Test operators\n            \"-e\", \"-f\", \"-d\", \"-L\", \"-h\", \"-b\", \"-c\", \"-p\", \"-S\", \"-t\",\n            \"-r\", \"-w\", \"-x\", \"-s\", \"-u\", \"-g\", \"-k\", \"-O\", \"-G\", \"-N\",\n            \"-nt\", \"-ot\", \"-ef\", \"-z\", \"-n\", \"=\", \"!=\", \"==\", \"-eq\", \"-ne\",\n            \"-lt\", \"-le\", \"-gt\", \"-ge\", \"&&\", \"||\", \"!\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // Shebang\n        Mode(scope: \"comment\", begin: \"^#!\", end: \"\\n\"),\n        \n        // Comments\n        Mode(scope: \"comment\", begin: \"#\", end: \"\\n\"),\n        \n        // Heredoc\n        Mode(scope: \"string\", begin: \"<<-?\\\\s*(['\\\"]?)([a-zA-Z_][a-zA-Z0-9_]*)\\\\1\", end: \"^\\\\2$\"),\n        \n        // Variables\n        Mode(scope: \"meta\", begin: \"\\\\$[a-zA-Z_][a-zA-Z0-9_]*\"),\n        Mode(scope: \"meta\", begin: \"\\\\$\\\\{[^}]+\\\\}\"),\n        Mode(scope: \"meta\", begin: \"\\\\$\\\\([^)]+\\\\)\"),\n        Mode(scope: \"meta\", begin: \"\\\\$\\\\(\\\\([^)]+\\\\)\\\\)\"),\n        \n        // Special variables\n        Mode(scope: \"meta\", begin: \"\\\\$[0-9@*#?$!_-]\"),\n        \n        // Command substitution (backticks)\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Strings with double quotes (allows variable expansion)\n        Mode(scope: \"string\", begin: \"\\\"\", end: \"\\\"\"),\n        \n        // Strings with single quotes (no expansion)\n        CommonModes.stringSingle,\n        \n        // ANSI-C quoting\n        Mode(scope: \"string\", begin: \"\\\\$'\", end: \"'\"),\n        \n        // Functions\n        Mode(scope: \"function\", begin: \"^\\\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\\\s*\\\\(\\\\s*\\\\)\"),\n        Mode(scope: \"function\", begin: \"\\\\bfunction\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Numbers\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b0[0-7]+\\\\b\"),\n        Mode(scope: \"number\", begin: \"\\\\b[0-9]+\\\\b\"),\n        \n        // Redirection operators\n        Mode(scope: \"keyword\", begin: \"[0-9]*(?:>>|>|<<|<|&>|&>>|<&|>&|<>)\"),\n        \n        // Pipe\n        Mode(scope: \"keyword\", begin: \"\\\\|\\\\|?|&&?|;|&\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Sql.swift",
    "content": "struct SQLLanguage: LanguageDefinition {\n    let name = \"SQL\"\n    let aliases: [String]? = [\"sql\", \"mysql\", \"postgresql\", \"sqlite\"]\n    let caseInsensitive = true\n\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // DDL (Data Definition Language)\n            \"CREATE\", \"ALTER\", \"DROP\", \"TRUNCATE\", \"RENAME\",\n            \"ADD\", \"MODIFY\", \"CHANGE\", \"COLUMN\", \"TABLE\", \"VIEW\", \"INDEX\", \"DATABASE\", \"SCHEMA\",\n            \n            // DML (Data Manipulation Language)\n            \"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\", \"REPLACE\",\n            \"INTO\", \"VALUES\", \"SET\",\n            \n            // DQL (Data Query Language)\n            \"FROM\", \"WHERE\", \"GROUP\", \"BY\", \"HAVING\", \"ORDER\",\n            \"ASC\", \"DESC\", \"LIMIT\", \"OFFSET\", \"TOP\",\n            \n            // Joins\n            \"JOIN\", \"INNER\", \"LEFT\", \"RIGHT\", \"FULL\", \"OUTER\", \"CROSS\",\n            \"ON\", \"USING\",\n            \n            // Logical operators\n            \"AND\", \"OR\", \"NOT\", \"IN\", \"EXISTS\", \"BETWEEN\", \"LIKE\",\n            \"IS\", \"NULL\", \"ISNULL\",\n            \n            // Set operations\n            \"UNION\", \"INTERSECT\", \"EXCEPT\", \"MINUS\",\n            \n            // Subqueries\n            \"ALL\", \"ANY\", \"SOME\",\n            \n            // Constraints\n            \"PRIMARY\", \"KEY\", \"FOREIGN\", \"REFERENCES\", \"UNIQUE\",\n            \"CHECK\", \"DEFAULT\", \"AUTO_INCREMENT\",\n            \n            // Transactions\n            \"BEGIN\", \"COMMIT\", \"ROLLBACK\", \"TRANSACTION\", \"SAVEPOINT\",\n            \n            // Other\n            \"AS\", \"DISTINCT\", \"CASE\", \"WHEN\", \"THEN\", \"ELSE\", \"END\",\n            \"IF\", \"ELSEIF\", \"ENDIF\", \"WHILE\", \"LOOP\", \"REPEAT\",\n            \"DECLARE\", \"CURSOR\", \"FETCH\", \"CLOSE\", \"OPEN\",\n            \n            \"FUNCTION\", \"PROCEDURE\", \"DIV\", \"CALL\", \"FOR\", \"CONTINUE\", \"HANDLER\", \"LEAVE\",\n            \n            \"GRANT\", \"TO\", \"USER\", \"IDENTIFIED\", \"CASCADE\", \"FOREIGN_KEY_CHECKS\", \"COLLATE\",\n            \"CHARSET\", \"RETURNS\"\n        ],\n        \n        \"built_in\": [\n            // Aggregate functions\n            \"COUNT\", \"SUM\", \"AVG\", \"MIN\", \"MAX\", \"GROUP_CONCAT\",\n            \"STDDEV\", \"VARIANCE\",\n            \n            // String functions\n            \"CONCAT\", \"LENGTH\", \"SUBSTRING\", \"SUBSTR\", \"TRIM\", \"LTRIM\", \"RTRIM\",\n            \"UPPER\", \"LOWER\", \"REPLACE\", \"REVERSE\", \"LEFT\", \"RIGHT\",\n            \"CHARINDEX\", \"INSTR\", \"LOCATE\", \"POSITION\", \"ASCII\", \"CHAR\",\n            \n            // Date/Time functions\n            \"NOW\", \"CURDATE\", \"CURTIME\",\n            \"YEAR\", \"MONTH\", \"DAY\", \"HOUR\", \"MINUTE\", \"SECOND\",\n            \"DATEDIFF\", \"DATEADD\", \"DATE_FORMAT\", \"STR_TO_DATE\",\n            \n            // Math functions\n            \"ABS\", \"CEIL\", \"CEILING\", \"FLOOR\", \"ROUND\", \"TRUNCATE\",\n            \"MOD\", \"POWER\", \"SQRT\", \"RAND\", \"PI\", \"SIN\", \"COS\", \"TAN\",\n            \n            // Conditional functions\n            \"IFNULL\", \"NULLIF\", \"COALESCE\",\n            \n            // Conversion functions\n            \"CAST\", \"CONVERT\", \"FORMAT\"\n        ],\n        \n        \"type\": [\n            // Numeric types\n            \"INT\", \"INTEGER\", \"SMALLINT\", \"TINYINT\", \"MEDIUMINT\", \"BIGINT\",\n            \"DECIMAL\", \"NUMERIC\", \"FLOAT\", \"DOUBLE\", \"REAL\", \"BIT\",\n            \"BOOLEAN\", \"BOOL\", \"SERIAL\", \"UNSIGNED\",\n            \n            // String types\n            \"CHAR\", \"VARCHAR\", \"TEXT\", \"TINYTEXT\", \"MEDIUMTEXT\", \"LONGTEXT\",\n            \"BINARY\", \"VARBINARY\", \"BLOB\", \"TINYBLOB\", \"MEDIUMBLOB\", \"LONGBLOB\",\n            \"ENUM\", \"SET\",\n            \n            // Date/Time types\n            \"DATE\", \"TIME\", \"DATETIME\", \"TIMESTAMP\", \"YEAR\",\n            \n            // JSON and other types\n            \"JSON\", \"UUID\", \"POINT\", \"GEOMETRY\", \"LINESTRING\", \"POLYGON\"\n        ],\n        \n        \"literal\": [\n            \"TRUE\", \"FALSE\", \"NULL\", \"UNKNOWN\"\n        ]\n    ]\n\n    let contains: [Mode] = [\n        Mode(scope: \"comment\", begin: \"--.*$\"),\n        Mode(scope: \"comment\", begin: \"\\\\#.*$\"),\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)*'\"),\n        Mode(scope: \"string\", begin: \"\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\"),\n        \n        Mode(scope: \"number\", begin: \"\\\\b(?:0[xX][0-9a-fA-F]+|\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?)\\\\b\"),\n        \n        Mode(scope: \"variable\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"),\n        Mode(scope: \"variable\", begin: \"@@[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"),\n        Mode(scope: \"variable\", begin: \"\\\\$[a-zA-Z_][a-zA-Z0-9_]*\\\\b\")\n        ,\n        Mode(scope: \"class\", begin: \"`([a-zA-Z_][a-zA-Z0-9_]*)`\"),\n        Mode(scope: \"function\", begin: \"\\\\b([a-zA-Z_][a-zA-Z0-9_]*)(?=\\\\s*\\\\()\"),\n        \n        Mode(scope: \"operator\", begin: \"\\\\+|\\\\-|\\\\*|/|%|=|!=|<>|<=|>=|<|>|\\\\|\\\\||&&\")\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Swift.swift",
    "content": "//  SwiftLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 31.08.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct SwiftLanguage: LanguageDefinition {\n    let name = \"Swift\"\n    let aliases: [String]? = [\"swift\"]\n    let caseInsensitive = false\n\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"class\",\"struct\",\"enum\",\"protocol\",\"extension\",\"func\",\"init\",\"deinit\", \n            \"var\",\"let\",\"if\",\"else\",\"switch\",\"case\",\"default\",\"for\",\"while\",\"repeat\",\n            \"break\",\"continue\",\"return\",\"throw\",\"try\",\"catch\",\"guard\",\"defer\",\"import\",\n            \"in\",\"as\",\"is\",\"super\",\"self\",\"Type\",\"where\",\"associatedtype\",\"subscript\"\n        ],\n        \"modifier\": [\n            \"public\",\"private\",\"internal\",\"fileprivate\",\"open\", \n            \"static\",\"final\",\"override\",\"lazy\",\"weak\",\"unowned\",\n            \"required\",\"convenience\",\"mutating\",\"nonmutating\",\"throws\",\"rethrows\"\n        ],\n        \"literal\": [\"true\",\"false\",\"nil\",\"self\",\"super\"],\n        \"built_in\": [\n            \"Array\",\"Dictionary\",\"Set\",\"String\",\"Character\",\"Int\",\"UInt\",\"Double\",\"Float\", \n            \"Bool\",\"Optional\",\"Result\",\"Error\",\"Any\",\"Never\",\"Void\"\n        ]\n    ]\n\n    let contains: [Mode] = [\n        CommonModes.comment(begin: \"//\", end: \"\\n\"),\n        CommonModes.comment(begin: \"/\\\\*\", end: \"\\\\*/\"),\n\n        CommonModes.stringDouble,\n        CommonModes.number,\n\n        Mode(\n            scope: \"variable\",\n            begin: \"\\\\b(?:let|var)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"\n        ),\n\n        Mode(\n            scope: \"function\",\n            begin: \"\\\\bfunc\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"\n        ),\n\n        Mode(\n            scope: \"function\",\n            begin: \"\\\\binit\\\\s*(?:\\\\(|\\\\s)\"\n        ),\n\n        Mode(\n            scope: \"function\",\n            begin: \"\\\\bdeinit\\\\s*(?:\\\\{|\\\\s|$)\"\n        ),\n\n        Mode(\n            scope: \"class\",\n            begin: \"\\\\b(?:class|struct|enum|protocol|extension)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"\n        ),\n\n        Mode(\n            scope: \"class\",\n            begin: \":\\\\s*([a-zA-Z_][a-zA-Z0-9_]*(?:\\\\s*,\\\\s*[a-zA-Z_][a-zA-Z0-9_]*)*)\"\n        ),\n\n        Mode(\n            scope: \"class\",\n            begin: \":\\\\s*([a-zA-Z_][a-zA-Z0-9_]*(?:<[^>]*>)?(?:\\\\?|!)?)\"\n        ),\n\n        Mode(\n            scope: \"class\",\n            begin: \"\\\\bas\\\\s+([a-zA-Z_][a-zA-Z0-9_]*(?:<[^>]*>)?(?:\\\\?|!)?)\"\n        ),\n\n        Mode(\n            scope: \"class\",\n            begin: \"\\\\bis\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"\n        )\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/TypeScript.swift",
    "content": "//\n//  TypeScriptLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct TypeScriptLanguage: LanguageDefinition {\n    let name = \"TypeScript\"\n    let aliases: [String]? = [\"typescript\", \"ts\", \"tsx\"]\n    let caseInsensitive = false\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            // JavaScript keywords\n            \"as\", \"async\", \"await\", \"break\", \"case\", \"catch\", \"class\", \"const\",\n            \"continue\", \"debugger\", \"default\", \"delete\", \"do\", \"else\", \"enum\",\n            \"export\", \"extends\", \"false\", \"finally\", \"for\", \"from\", \"function\",\n            \"get\", \"if\", \"import\", \"in\", \"instanceof\", \"let\", \"new\", \"null\",\n            \"of\", \"return\", \"set\", \"static\", \"super\", \"switch\", \"this\", \"throw\",\n            \"true\", \"try\", \"typeof\", \"var\", \"void\", \"while\", \"with\", \"yield\",\n            // TypeScript specific\n            \"abstract\", \"as\", \"asserts\", \"any\", \"boolean\", \"constructor\", \"declare\",\n            \"get\", \"infer\", \"interface\", \"is\", \"keyof\", \"module\", \"namespace\",\n            \"never\", \"readonly\", \"require\", \"number\", \"object\", \"set\", \"string\",\n            \"symbol\", \"type\", \"undefined\", \"unique\", \"unknown\", \"from\", \"global\",\n            \"bigint\", \"of\", \"implements\", \"private\", \"protected\", \"public\",\n            // Modifiers\n            \"abstract\", \"async\", \"const\", \"declare\", \"export\", \"private\", \"protected\",\n            \"public\", \"readonly\", \"static\", \"override\"\n        ],\n        \"literal\": [\"true\", \"false\", \"null\", \"undefined\", \"NaN\", \"Infinity\"],\n        \"built_in\": [\n            // Primitive types\n            \"any\", \"boolean\", \"number\", \"string\", \"symbol\", \"void\", \"undefined\",\n            \"null\", \"never\", \"unknown\", \"bigint\", \"object\",\n            // Built-in types\n            \"Array\", \"ArrayBuffer\", \"AsyncIterable\", \"AsyncIterableIterator\",\n            \"AsyncIterator\", \"Atomics\", \"BigInt\", \"BigInt64Array\", \"BigUint64Array\",\n            \"Boolean\", \"DataView\", \"Date\", \"Error\", \"EvalError\", \"Float32Array\",\n            \"Float64Array\", \"Function\", \"Generator\", \"GeneratorFunction\", \"Infinity\",\n            \"Int8Array\", \"Int16Array\", \"Int32Array\", \"Intl\", \"InternalError\",\n            \"Iterable\", \"IterableIterator\", \"Iterator\", \"JSON\", \"Map\", \"Math\",\n            \"NaN\", \"Number\", \"Object\", \"Promise\", \"Proxy\", \"RangeError\",\n            \"ReferenceError\", \"Reflect\", \"RegExp\", \"Set\", \"SharedArrayBuffer\",\n            \"String\", \"Symbol\", \"SyntaxError\", \"TypeError\", \"Uint8Array\",\n            \"Uint8ClampedArray\", \"Uint16Array\", \"Uint32Array\", \"URIError\",\n            \"WeakMap\", \"WeakSet\", \"WebAssembly\",\n            // Utility types\n            \"Partial\", \"Required\", \"Readonly\", \"Record\", \"Pick\", \"Omit\", \"Exclude\",\n            \"Extract\", \"NonNullable\", \"Parameters\", \"ConstructorParameters\",\n            \"ReturnType\", \"InstanceType\", \"ThisParameterType\", \"OmitThisParameter\",\n            \"ThisType\", \"Uppercase\", \"Lowercase\", \"Capitalize\", \"Uncapitalize\",\n            \"Awaited\",\n            // Global functions\n            \"eval\", \"isFinite\", \"isNaN\", \"parseFloat\", \"parseInt\", \"decodeURI\",\n            \"decodeURIComponent\", \"encodeURI\", \"encodeURIComponent\", \"escape\",\n            \"unescape\",\n            // Console\n            \"console\", \"log\", \"warn\", \"error\", \"info\", \"debug\", \"trace\", \"assert\",\n            \"clear\", \"count\", \"countReset\", \"dir\", \"dirxml\", \"group\", \"groupCollapsed\",\n            \"groupEnd\", \"table\", \"time\", \"timeEnd\", \"timeLog\", \"profile\", \"profileEnd\",\n            // Common methods\n            \"toString\", \"toLocaleString\", \"valueOf\", \"hasOwnProperty\",\n            \"isPrototypeOf\", \"propertyIsEnumerable\", \"constructor\",\n            // Array methods\n            \"concat\", \"copyWithin\", \"entries\", \"every\", \"fill\", \"filter\", \"find\",\n            \"findIndex\", \"flat\", \"flatMap\", \"forEach\", \"from\", \"includes\", \"indexOf\",\n            \"isArray\", \"join\", \"keys\", \"lastIndexOf\", \"map\", \"of\", \"pop\", \"push\",\n            \"reduce\", \"reduceRight\", \"reverse\", \"shift\", \"slice\", \"some\", \"sort\",\n            \"splice\", \"toLocaleString\", \"toString\", \"unshift\", \"values\",\n            // String methods\n            \"charAt\", \"charCodeAt\", \"codePointAt\", \"concat\", \"endsWith\", \"includes\",\n            \"indexOf\", \"lastIndexOf\", \"localeCompare\", \"match\", \"matchAll\", \"normalize\",\n            \"padEnd\", \"padStart\", \"repeat\", \"replace\", \"replaceAll\", \"search\", \"slice\",\n            \"split\", \"startsWith\", \"substring\", \"toLowerCase\", \"toLocaleLowerCase\",\n            \"toUpperCase\", \"toLocaleUpperCase\", \"trim\", \"trimEnd\", \"trimStart\",\n            // Object methods\n            \"assign\", \"create\", \"defineProperties\", \"defineProperty\", \"entries\",\n            \"freeze\", \"fromEntries\", \"getOwnPropertyDescriptor\",\n            \"getOwnPropertyDescriptors\", \"getOwnPropertyNames\",\n            \"getOwnPropertySymbols\", \"getPrototypeOf\", \"is\", \"isExtensible\",\n            \"isFrozen\", \"isSealed\", \"keys\", \"preventExtensions\", \"seal\",\n            \"setPrototypeOf\", \"values\",\n            // Promise methods\n            \"all\", \"allSettled\", \"any\", \"race\", \"reject\", \"resolve\", \"then\",\n            \"catch\", \"finally\",\n            // Map/Set methods\n            \"clear\", \"delete\", \"entries\", \"forEach\", \"get\", \"has\", \"keys\", \"set\",\n            \"size\", \"values\",\n            // Math methods\n            \"abs\", \"acos\", \"acosh\", \"asin\", \"asinh\", \"atan\", \"atan2\", \"atanh\",\n            \"cbrt\", \"ceil\", \"clz32\", \"cos\", \"cosh\", \"exp\", \"expm1\", \"floor\",\n            \"fround\", \"hypot\", \"imul\", \"log\", \"log10\", \"log1p\", \"log2\", \"max\",\n            \"min\", \"pow\", \"random\", \"round\", \"sign\", \"sin\", \"sinh\", \"sqrt\", \"tan\",\n            \"tanh\", \"trunc\", \"E\", \"LN2\", \"LN10\", \"LOG2E\", \"LOG10E\", \"PI\",\n            \"SQRT1_2\", \"SQRT2\",\n            // Number methods\n            \"isFinite\", \"isInteger\", \"isNaN\", \"isSafeInteger\", \"parseFloat\",\n            \"parseInt\", \"toExponential\", \"toFixed\", \"toPrecision\",\n            // JSON methods\n            \"parse\", \"stringify\",\n            // Module/namespace\n            \"require\", \"module\", \"exports\", \"__dirname\", \"__filename\", \"global\",\n            // TypeScript globals\n            \"NodeJS\", \"RequestInit\", \"Response\", \"Request\", \"Headers\", \"FormData\",\n            \"Blob\", \"File\", \"ReadableStream\", \"WritableStream\", \"TextEncoder\",\n            \"TextDecoder\", \"URL\", \"URLSearchParams\", \"Event\", \"EventTarget\",\n            \"AbortController\", \"AbortSignal\",\n            // React (for TSX)\n            \"React\", \"Component\", \"PureComponent\", \"Fragment\", \"createElement\",\n            \"cloneElement\", \"createContext\", \"forwardRef\", \"lazy\", \"memo\",\n            \"startTransition\", \"useCallback\", \"useContext\", \"useDebugValue\",\n            \"useDeferredValue\", \"useEffect\", \"useId\", \"useImperativeHandle\",\n            \"useInsertionEffect\", \"useLayoutEffect\", \"useMemo\", \"useReducer\",\n            \"useRef\", \"useState\", \"useSyncExternalStore\", \"useTransition\",\n            \"JSX\", \"ReactElement\", \"ReactNode\", \"FC\", \"PropsWithChildren\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // JSDoc comments\n        Mode(scope: \"comment.doc\", begin: \"/\\\\*\\\\*\", end: \"\\\\*/\"),\n        \n        // Multi-line comments\n        Mode(scope: \"comment\", begin: \"/\\\\*\", end: \"\\\\*/\"),\n        \n        // Single-line comments\n        Mode(scope: \"comment\", begin: \"//\", end: \"\\n\"),\n        \n        // Type annotations\n        Mode(scope: \"meta\", begin: \":\\\\s*[a-zA-Z_][a-zA-Z0-9_<>\\\\[\\\\]|&,\\\\s]*\"),\n        \n        // Generic type parameters\n        Mode(scope: \"meta\", begin: \"<[a-zA-Z_][a-zA-Z0-9_<>\\\\[\\\\]|&,\\\\s]*>\"),\n        \n        // Type assertions\n        Mode(scope: \"meta\", begin: \"\\\\bas\\\\s+[a-zA-Z_][a-zA-Z0-9_<>\\\\[\\\\]|&]*\"),\n        Mode(scope: \"meta\", begin: \"<[a-zA-Z_][a-zA-Z0-9_<>\\\\[\\\\]|&]*>(?=\\\\s*[a-zA-Z_({['\\\"])\"),\n        \n        // Interface/Type definitions\n        Mode(scope: \"class\", begin: \"\\\\b(?:interface|type|enum|namespace|module|declare)\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Class definitions\n        Mode(scope: \"class\", begin: \"\\\\bclass\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Function definitions\n        Mode(scope: \"function\", begin: \"\\\\bfunction\\\\s+([a-zA-Z_][a-zA-Z0-9_]*)\"),\n        \n        // Arrow functions\n        Mode(scope: \"function\", begin: \"\\\\([^)]*\\\\)\\\\s*=>\"),\n        Mode(scope: \"function\", begin: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\s*=>\"),\n        \n        // Method definitions\n        Mode(scope: \"function\", begin: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\s*\\\\(\"),\n        \n        // Decorators\n        Mode(scope: \"meta\", begin: \"@[a-zA-Z_][a-zA-Z0-9_]*\"),\n        \n        // Template literals\n        Mode(scope: \"string\", begin: \"`\", end: \"`\"),\n        \n        // Regular strings\n        CommonModes.stringDouble,\n        CommonModes.stringSingle,\n        \n        // Regular expressions\n        Mode(scope: \"string\", begin: \"/(?![*/])\", end: \"/[gimsuvy]*\"),\n        \n        // JSX/TSX tags\n        Mode(scope: \"keyword\", begin: \"</?[A-Z][a-zA-Z0-9]*\"),\n        Mode(scope: \"keyword\", begin: \"</?[a-z][a-zA-Z0-9-]*\"),\n        \n        // Numbers\n        // Binary\n        Mode(scope: \"number\", begin: \"\\\\b0[bB][01_]+n?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b0[oO][0-7_]+n?\\\\b\"),\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b0[xX][0-9a-fA-F_]+n?\\\\b\"),\n        // BigInt\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+n\\\\b\"),\n        // Float with exponent\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:\\\\.\\\\d+)?[eE][+-]?\\\\d+\\\\b\"),\n        // Float\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"),\n        // Integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Languages/Vb.swift",
    "content": "//\n//  VisualBasicLanguage.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 04.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct VbLanguage: LanguageDefinition {\n    let name = \"Visual Basic\"\n    let aliases: [String]? = [\"vb\", \"vba\", \"vbnet\", \"vb.net\"]\n    let caseInsensitive = true\n    let keywords: [String: [String]]? = [\n        \"keyword\": [\n            \"AddHandler\", \"AddressOf\", \"Alias\", \"And\", \"AndAlso\", \"As\", \"Boolean\",\n            \"ByRef\", \"Byte\", \"ByVal\", \"Call\", \"Case\", \"Catch\", \"CBool\", \"CByte\",\n            \"CChar\", \"CDate\", \"CDbl\", \"CDec\", \"Char\", \"CInt\", \"Class\", \"CLng\",\n            \"CObj\", \"Const\", \"Continue\", \"CSByte\", \"CShort\", \"CSng\", \"CStr\",\n            \"CType\", \"CUInt\", \"CULng\", \"CUShort\", \"Date\", \"Decimal\", \"Declare\",\n            \"Default\", \"Delegate\", \"Dim\", \"DirectCast\", \"Do\", \"Double\", \"Each\",\n            \"Else\", \"ElseIf\", \"End\", \"EndIf\", \"Enum\", \"Erase\", \"Error\", \"Event\",\n            \"Exit\", \"False\", \"Finally\", \"For\", \"Friend\", \"Function\", \"Get\",\n            \"GetType\", \"GetXMLNamespace\", \"Global\", \"GoSub\", \"GoTo\", \"Handles\",\n            \"If\", \"Implements\", \"Imports\", \"In\", \"Inherits\", \"Integer\", \"Interface\",\n            \"Is\", \"IsNot\", \"Let\", \"Lib\", \"Like\", \"Long\", \"Loop\", \"Me\", \"Mod\",\n            \"Module\", \"MustInherit\", \"MustOverride\", \"MyBase\", \"MyClass\",\n            \"Namespace\", \"Narrowing\", \"New\", \"Next\", \"Not\", \"Nothing\",\n            \"NotInheritable\", \"NotOverridable\", \"Object\", \"Of\", \"On\", \"Operator\",\n            \"Option\", \"Optional\", \"Or\", \"OrElse\", \"Out\", \"Overloads\", \"Overridable\",\n            \"Overrides\", \"ParamArray\", \"Partial\", \"Private\", \"Property\", \"Protected\",\n            \"Public\", \"RaiseEvent\", \"ReadOnly\", \"ReDim\", \"REM\", \"RemoveHandler\",\n            \"Resume\", \"Return\", \"SByte\", \"Select\", \"Set\", \"Shadows\", \"Shared\",\n            \"Short\", \"Single\", \"Static\", \"Step\", \"Stop\", \"String\", \"Structure\",\n            \"Sub\", \"SyncLock\", \"Then\", \"Throw\", \"To\", \"True\", \"Try\", \"TryCast\",\n            \"TypeOf\", \"UInteger\", \"ULong\", \"UShort\", \"Using\", \"Variant\", \"Wend\",\n            \"When\", \"While\", \"Widening\", \"With\", \"WithEvents\", \"WriteOnly\", \"Xor\",\n            // VB.NET async\n            \"Async\", \"Await\", \"Iterator\", \"Yield\"\n        ],\n        \"literal\": [\"True\", \"False\", \"Nothing\", \"vbTrue\", \"vbFalse\", \"vbNull\", \"vbEmpty\"],\n        \"built_in\": [\n            // Data types\n            \"Boolean\", \"Byte\", \"Char\", \"Date\", \"Decimal\", \"Double\", \"Integer\",\n            \"Long\", \"Object\", \"SByte\", \"Short\", \"Single\", \"String\", \"UInteger\",\n            \"ULong\", \"UShort\", \"Variant\",\n            // Common classes\n            \"Array\", \"ArrayList\", \"Collection\", \"Dictionary\", \"List\", \"Queue\",\n            \"Stack\", \"HashSet\", \"LinkedList\", \"SortedList\", \"SortedSet\",\n            \"StringBuilder\", \"StringComparer\", \"Regex\", \"Match\", \"MatchCollection\",\n            \"DateTime\", \"TimeSpan\", \"DateTimeOffset\", \"Guid\", \"Version\", \"Uri\",\n            // Conversion functions\n            \"CBool\", \"CByte\", \"CChar\", \"CDate\", \"CDbl\", \"CDec\", \"CInt\", \"CLng\",\n            \"CObj\", \"CSByte\", \"CShort\", \"CSng\", \"CStr\", \"CType\", \"CUInt\", \"CULng\",\n            \"CUShort\", \"Val\", \"Str\", \"Hex\", \"Oct\", \"Format\", \"FormatNumber\",\n            \"FormatCurrency\", \"FormatPercent\", \"FormatDateTime\",\n            // String functions\n            \"Len\", \"Left\", \"Right\", \"Mid\", \"InStr\", \"InStrRev\", \"Replace\", \"StrComp\",\n            \"StrConv\", \"String\", \"Space\", \"LCase\", \"UCase\", \"Trim\", \"LTrim\", \"RTrim\",\n            \"Split\", \"Join\", \"Filter\", \"StrReverse\", \"Asc\", \"AscW\", \"Chr\", \"ChrW\",\n            // Math functions\n            \"Abs\", \"Atn\", \"Cos\", \"Exp\", \"Fix\", \"Int\", \"Log\", \"Rnd\", \"Sgn\", \"Sin\",\n            \"Sqr\", \"Tan\", \"Ceiling\", \"Floor\", \"Round\", \"Max\", \"Min\", \"Sqrt\", \"Pow\",\n            // Array functions\n            \"UBound\", \"LBound\", \"IsArray\", \"Join\", \"Split\", \"Filter\", \"Array\",\n            \"ReDim\", \"Erase\",\n            // File I/O\n            \"FileOpen\", \"FileClose\", \"FileGet\", \"FilePut\", \"Input\", \"LineInput\",\n            \"Print\", \"Write\", \"FileAttr\", \"EOF\", \"Loc\", \"LOF\", \"Seek\", \"FileLen\",\n            \"Dir\", \"ChDir\", \"ChDrive\", \"CurDir\", \"MkDir\", \"RmDir\", \"Kill\", \"Name\",\n            \"FileCopy\", \"FileDateTime\", \"FileExists\", \"GetAttr\", \"SetAttr\",\n            \"File\", \"FileInfo\", \"Directory\", \"DirectoryInfo\", \"Path\", \"StreamReader\",\n            \"StreamWriter\", \"FileStream\", \"BinaryReader\", \"BinaryWriter\",\n            // Console I/O\n            \"MsgBox\", \"InputBox\", \"Console\", \"WriteLine\", \"ReadLine\", \"Write\", \"Read\",\n            // Type checking\n            \"IsNumeric\", \"IsDate\", \"IsArray\", \"IsError\", \"IsNothing\", \"IsDBNull\",\n            \"IsReference\", \"TypeOf\", \"GetType\", \"TypeName\", \"VarType\",\n            // Control flow helpers\n            \"IIf\", \"Choose\", \"Switch\",\n            // Date/Time functions\n            \"Now\", \"Today\", \"TimeOfDay\", \"DateAdd\", \"DateDiff\", \"DatePart\",\n            \"DateSerial\", \"DateValue\", \"Day\", \"Month\", \"Year\", \"Hour\", \"Minute\",\n            \"Second\", \"Weekday\", \"WeekdayName\", \"MonthName\", \"TimeSerial\", \"TimeValue\",\n            \"Timer\",\n            // Interaction functions\n            \"Shell\", \"AppActivate\", \"SendKeys\", \"Beep\", \"Environ\", \"Command\",\n            // Error handling\n            \"Err\", \"Error\", \"Erl\", \"On\", \"Resume\", \"Raise\", \"Clear\", \"Description\",\n            \"Number\", \"Source\", \"Exception\", \"StackTrace\",\n            // Financial functions\n            \"DDB\", \"FV\", \"IPmt\", \"IRR\", \"MIRR\", \"NPer\", \"NPV\", \"Pmt\", \"PPmt\",\n            \"PV\", \"Rate\", \"SLN\", \"SYD\",\n            // Miscellaneous\n            \"RGB\", \"QBColor\", \"CreateObject\", \"GetObject\", \"CallByName\", \"Partition\",\n            \"InStrRev\", \"StrDup\", \"Like\", \"Randomize\", \"DoEvents\",\n            // Collections\n            \"Add\", \"Remove\", \"RemoveAt\", \"Clear\", \"Contains\", \"Count\", \"Item\",\n            \"IndexOf\", \"Insert\", \"CopyTo\", \"ToArray\",\n            // LINQ (VB.NET)\n            \"From\", \"Where\", \"Select\", \"Order\", \"By\", \"Group\", \"Into\", \"Aggregate\",\n            \"Join\", \"Let\", \"Skip\", \"Take\", \"Distinct\", \"Union\", \"Intersect\", \"Except\",\n            // Exceptions\n            \"Exception\", \"SystemException\", \"ApplicationException\", \"ArgumentException\",\n            \"ArgumentNullException\", \"InvalidOperationException\", \"NotImplementedException\",\n            \"NotSupportedException\", \"NullReferenceException\", \"IndexOutOfRangeException\",\n            \"OverflowException\", \"DivideByZeroException\", \"FormatException\", \"IOException\",\n            \"OutOfMemoryException\",\n            // System\n            \"Environment\", \"GC\", \"Math\", \"Random\", \"Convert\", \"BitConverter\",\n            \"Buffer\", \"Activator\", \"AppDomain\", \"Type\", \"Assembly\",\n            // Threading\n            \"Thread\", \"ThreadPool\", \"Monitor\", \"Mutex\", \"Semaphore\", \"AutoResetEvent\",\n            \"ManualResetEvent\", \"Task\", \"Parallel\",\n            // ADO.NET (common)\n            \"Connection\", \"Command\", \"DataReader\", \"DataAdapter\", \"DataSet\", \"DataTable\",\n            \"DataRow\", \"DataColumn\", \"SqlConnection\", \"SqlCommand\", \"OleDbConnection\",\n            \"OleDbCommand\"\n        ]\n    ]\n    let contains: [Mode] = [\n        // XML Documentation comments\n        Mode(scope: \"comment.doc\", begin: \"'''\", end: \"\\n\"),\n        \n        // REM comments (legacy)\n        Mode(scope: \"comment\", begin: \"(?i)\\\\bREM\\\\b\", end: \"\\n\"),\n        \n        // Single quote comments\n        Mode(scope: \"comment\", begin: \"'\", end: \"\\n\"),\n        \n        // Preprocessor directives\n        Mode(scope: \"meta\", begin: \"^\\\\s*#(?:If|ElseIf|Else|End If|Region|End Region|Const|ExternalSource|End ExternalSource)\\\\b.*$\"),\n        \n        // Attributes\n        Mode(scope: \"meta\", begin: \"<\", end: \">\"),\n        \n        // Labels (for GoTo)\n        Mode(scope: \"meta\", begin: \"^\\\\s*[a-zA-Z_][a-zA-Z0-9_]*:\"),\n        \n        // Date literals\n        Mode(scope: \"string\", begin: \"#\", end: \"#\"),\n        \n        // Strings with double quotes\n        CommonModes.stringDouble,\n        \n        // Character literals (VB.NET)\n        Mode(scope: \"string\", begin: \"\\\"[cC]\", end: \"\\\"\"),\n        \n        // Numbers\n        // Hex\n        Mode(scope: \"number\", begin: \"\\\\b&[hH][0-9a-fA-F]+[sSlL%&!#@]?\\\\b\"),\n        // Octal\n        Mode(scope: \"number\", begin: \"\\\\b&[oO][0-7]+[sSlL%&!#@]?\\\\b\"),\n        // Binary (VB 14+)\n        Mode(scope: \"number\", begin: \"\\\\b&[bB][01]+[sSlL%&!#@]?\\\\b\"),\n        // Scientific notation\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.?\\\\d*[eE][+-]?\\\\d+[fFdDrR]?\\\\b\"),\n        // Float with type suffix\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\.\\\\d+[fFdDrR]?\\\\b\"),\n        // Integer with type suffix\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+[sSlLiI%&!#@fFdDrR]\\\\b\"),\n        // Regular integer\n        Mode(scope: \"number\", begin: \"\\\\b\\\\d+\\\\b\"),\n    ]\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Platform.swift",
    "content": "//\n//  PlatformColor.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 14.11.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\n#if os(OSX)\nimport AppKit\n\npublic typealias PlatformFont = NSFont\npublic typealias PlatformColor = NSColor\npublic typealias FontTraits = NSFontDescriptor.SymbolicTraits\n#else\nimport UIKit\n\npublic typealias PlatformFont = UIFont\npublic typealias PlatformColor = UIColor\npublic typealias FontTraits = UIFontDescriptor.SymbolicTraits\n\npublic extension FontTraits {\n    static let bold: FontTraits = .traitBold\n    static let italic: FontTraits = .traitItalic\n}\n#endif\n\nextension PlatformColor {\n    convenience init(hex: String) {\n        let trimHex = hex.trimmingCharacters(in: .whitespacesAndNewlines)\n        let hexString: String\n        if trimHex.hasPrefix(\"#\") {\n            hexString = String(trimHex.dropFirst())\n        } else {\n            hexString = trimHex\n        }\n\n        var value: UInt64 = 0\n        Scanner(string: hexString).scanHexInt64(&value)\n\n        let r, g, b, a: CGFloat\n\n        switch hexString.count {\n        case 6: // RRGGBB\n            r = CGFloat((value >> 16) & 0xFF) / 255\n            g = CGFloat((value >> 8) & 0xFF) / 255\n            b = CGFloat(value & 0xFF) / 255\n            a = 1.0\n        case 8: // RRGGBBAA\n            r = CGFloat((value >> 24) & 0xFF) / 255\n            g = CGFloat((value >> 16) & 0xFF) / 255\n            b = CGFloat((value >> 8) & 0xFF) / 255\n            a = CGFloat(value & 0xFF) / 255\n        default:\n            // Некорректный формат — делаем черный цвет\n            r = 0; g = 0; b = 0; a = 1\n        }\n\n        self.init(red: r, green: g, blue: b, alpha: a)\n    }\n\n    public static var label: PlatformColor {\n        #if os(OSX)\n        return NSColor.lightGray\n        #else\n        return UIColor.lightGray\n        #endif\n    }\n}\n\nextension PlatformFont {\n    static func withTraits(font: PlatformFont, traits: FontTraits) -> PlatformFont {\n        #if os(OSX)\n        let manager = NSFontManager.shared\n        var desiredTraits: NSFontTraitMask = []\n\n        if traits.contains(.bold) {\n            desiredTraits.insert(.boldFontMask)\n        }\n\n        if traits.contains(.italic) {\n            desiredTraits.insert(.italicFontMask)\n        }\n\n        return manager.convert(font, toHaveTrait: desiredTraits)\n        #else\n        if let descriptor = font.fontDescriptor.withSymbolicTraits(traits) {\n            return PlatformFont(descriptor: descriptor, size: font.pointSize)\n        }\n        return font\n        #endif\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/SwiftHighlighter.swift",
    "content": "import Foundation\n#if os(OSX)\nimport AppKit\n#else\nimport UIKit\n#endif\n\n// MARK: - Core Types\n\npublic protocol LanguageDefinition {\n    var name: String { get }\n    var aliases: [String]? { get }\n    var keywords: [String: [String]]? { get }\n    var contains: [Mode] { get }\n    var caseInsensitive: Bool { get }\n}\n\npublic struct Mode {\n    var scope: String?\n    var begin: String?\n    var end: String?\n    var keywords: [String: [String]]?\n    var contains: [Mode]?\n\n    private var _beginRegex: NSRegularExpression?\n    private var _endRegex: NSRegularExpression?\n\n    public init(\n        scope: String? = nil,\n        begin: String? = nil,\n        end: String? = nil,\n        keywords: [String: [String]]? = nil,\n        contains: [Mode]? = nil\n    ) {\n        self.scope = scope\n        self.begin = begin\n        self.end = end\n        self.keywords = keywords\n        self.contains = contains\n\n        if let begin = begin {\n            self._beginRegex = try? NSRegularExpression(pattern: begin, options: [.anchorsMatchLines])\n        }\n        \n        if let end = end {\n            self._endRegex = try? NSRegularExpression(pattern: end, options: [.anchorsMatchLines])\n        }\n    }\n\n    var beginRegex: NSRegularExpression? { _beginRegex }\n    var endRegex: NSRegularExpression? { _endRegex }\n}\n\npublic struct Match {\n    let range: Range<String.Index>\n    let scope: String\n    let text: String\n}\n\nextension Match {\n    var substring: Substring {\n        text[range]\n    }\n\n    var nsRange: NSRange {\n        NSRange(range, in: text)\n    }\n}\n\n// MARK: - Highlight Style\n\npublic struct HighlightStyle {\n    public struct TextStyle {\n        public var color: PlatformColor\n        public var traits: FontTraits = []\n    }\n\n    public var font: PlatformFont = PlatformFont.systemFont(ofSize: 14)\n    public var foregroundColor: PlatformColor = .black\n    public var backgroundColor: PlatformColor = .white\n    public var styles: [String: TextStyle] = [:]\n\n    public init() {}\n\n    public func attributes(for scope: String) -> [NSAttributedString.Key: Any] {\n        guard let style = styles[scope] else {\n            return [.font: font, .foregroundColor: PlatformColor.label]\n        }\n\n        let customFont = PlatformFont.withTraits(font: font, traits: style.traits)\n        return [.font: customFont, .foregroundColor: style.color]\n    }\n}\n\n// MARK: - Renderer\n\nclass AttributedStringRenderer {\n    private let style: HighlightStyle\n    private let baseAttributes: [NSAttributedString.Key: Any]\n\n    init(style: HighlightStyle = HighlightStyle()) {\n        self.style = style\n        self.baseAttributes = [\n            .font: style.font,\n            .foregroundColor: PlatformColor.label\n        ]\n    }\n\n    func render(text: String, matches: [Match]) -> NSAttributedString {\n        let attributedString = NSMutableAttributedString(string: text, attributes: baseAttributes)\n        let sortedMatches = matches.sorted { $0.range.lowerBound < $1.range.lowerBound }\n\n        for match in sortedMatches {\n            let nsRange = match.nsRange\n            if nsRange.location + nsRange.length <= attributedString.length {\n                attributedString.addAttributes(style.attributes(for: match.scope), range: nsRange)\n            }\n        }\n        return attributedString\n    }\n\n    func apply(matches: [Match], to textStorage: NSMutableAttributedString, offset: Int) {\n        let sortedMatches = matches.sorted { $0.range.lowerBound < $1.range.lowerBound }\n        for match in sortedMatches {\n            let nsRange = match.nsRange\n            let convertedRange = NSRange(location: offset + nsRange.location, length: nsRange.length)\n            if convertedRange.location + convertedRange.length <= textStorage.length {\n                textStorage.addAttributes(style.attributes(for: match.scope), range: convertedRange)\n            }\n        }\n    }\n}\n\n// MARK: - Swift Highlighter\n\npublic class SwiftHighlighter {\n    private static var languages: [String: LanguageDefinition] = [:]\n\n    private var aliases: [String: String] = [:]\n    private var renderer: AttributedStringRenderer\n    public var options: Options\n\n    public struct Options {\n        public var style: HighlightStyle = HighlightStyle()\n        public static let `default` = Options()\n\n        public init(style: HighlightStyle = HighlightStyle()) {\n            self.style = style\n        }\n    }\n\n    public init(options: Options = .default) {\n        self.options = options\n        self.renderer = AttributedStringRenderer(style: options.style)\n\n        if SwiftHighlighter.languages.isEmpty {\n            self.registerLanguage(\"swift\", definition: SwiftLanguage())\n            self.registerLanguage(\"php\", definition: PHPLanguage())\n            self.registerLanguage(\"javascript\", definition: JavaScriptLanguage())\n            self.registerLanguage(\"sql\", definition: SQLLanguage())\n            self.registerLanguage(\"python\", definition: PythonLanguage())\n            self.registerLanguage(\"c\", definition: CLanguage())\n            self.registerLanguage(\"cpp\", definition: CppLanguage())\n            self.registerLanguage(\"java\", definition: JavaLanguage())\n            self.registerLanguage(\"go\", definition: GoLanguage())\n            self.registerLanguage(\"rust\", definition: RustLanguage())\n            self.registerLanguage(\"csharp\", definition: CSharpLanguage())\n            self.registerLanguage(\"kotlin\", definition: KotlinLanguage())\n            self.registerLanguage(\"r\", definition: RLanguage())\n            self.registerLanguage(\"ruby\", definition: RubyLanguage())\n            self.registerLanguage(\"matlab\", definition: MatlabLanguage())\n            self.registerLanguage(\"dart\", definition: DartLanguage())\n            self.registerLanguage(\"vb\", definition: VbLanguage())\n            self.registerLanguage(\"assembly\", definition: AssemblyLanguage())\n            self.registerLanguage(\"scratch\", definition: ScratchLanguage())\n            self.registerLanguage(\"groovy\", definition: GroovyLanguage())\n            self.registerLanguage(\"objectivec\", definition: ObjectiveCLanguage())\n            self.registerLanguage(\"scala\", definition: ScalaLanguage())\n            self.registerLanguage(\"bash\", definition: BashLanguage())\n            self.registerLanguage(\"haskell\", definition: HaskellLanguage())\n            self.registerLanguage(\"erlang\", definition: ErlangLanguage())\n            self.registerLanguage(\"perl\", definition: PerlLanguage())\n            self.registerLanguage(\"lua\", definition: LuaLanguage())\n            self.registerLanguage(\"clojure\", definition: ClojureLanguage())\n            self.registerLanguage(\"html\", definition: HTMLLanguage())\n            self.registerLanguage(\"css\", definition: CSSLanguage())\n            self.registerLanguage(\"sh\", definition: ShellLanguage())\n            self.registerLanguage(\"ts\", definition: TypeScriptLanguage())\n            self.registerLanguage(\"lisp\", definition: LispLanguage())\n            self.registerLanguage(\"mermaid\", definition: MermaidLanguage())\n            \n        }\n    }\n\n    public func getLanguages() -> [String] {\n        Array(SwiftHighlighter.languages.keys)\n    }\n\n    public func updateStyle(_ style: HighlightStyle) {\n        self.options.style = style\n        self.renderer = AttributedStringRenderer(style: style)\n    }\n\n    public func registerLanguage(_ name: String, definition: LanguageDefinition) {\n        SwiftHighlighter.languages[name.lowercased()] = definition\n        if let aliases = definition.aliases {\n            for alias in aliases { self.aliases[alias.lowercased()] = name.lowercased() }\n        }\n    }\n\n    public func getLanguage(_ name: String) -> LanguageDefinition? {\n        let lower = name.lowercased()\n        return SwiftHighlighter.languages[lower] ?? SwiftHighlighter.languages[aliases[lower] ?? \"\"]\n    }\n\n    public func highlight(_ code: String, language: String) -> NSAttributedString {\n        guard let langDef = getLanguage(language) else {\n            let baseAttrs: [NSAttributedString.Key: Any] = [\n                .font: options.style.font,\n                .foregroundColor: PlatformColor.label\n            ]\n            return NSAttributedString(string: code, attributes: baseAttrs)\n        }\n        let matches = processLanguage(langDef, text: code)\n        return renderer.render(text: code, matches: matches)\n    }\n\n    private func processLanguage(_ language: LanguageDefinition, text: String) -> [Match] {\n        var matches: [Match] = []\n        var protectedRanges: [Range<String.Index>] = []\n\n        for mode in language.contains {\n            let modeMatches = processMode(\n                mode,\n                text: text,\n                searchRange: text.startIndex..<text.endIndex,\n                protectedRanges: protectedRanges\n            )\n            \n            for modeMatch in modeMatches {\n                if !protectedRanges.contains(where: { $0.overlaps(modeMatch.range) }) {\n                    matches.append(modeMatch)\n                    if [\"comment\", \"string\", \"comment.doc\", \"subst\"].contains(modeMatch.scope) {\n                        protectedRanges.append(modeMatch.range)\n                    }\n                }\n            }\n        }\n\n        if let keywords = language.keywords {\n            for (scope, words) in keywords {\n                for word in words {\n                    let pattern = \"\\\\b\\(NSRegularExpression.escapedPattern(for: word))\\\\b\"\n                    let options: NSRegularExpression.Options = language.caseInsensitive ? [.caseInsensitive] : []\n                    if let regex = try? NSRegularExpression(pattern: pattern, options: options) {\n                        let nsRange = NSRange(text.startIndex..<text.endIndex, in: text)\n                        for m in regex.matches(in: text, range: nsRange) {\n                            if let range = Range(m.range, in: text),\n                               !protectedRanges.contains(where: { $0.overlaps(range) }) {\n                                matches.append(Match(range: range, scope: scope, text: text))\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        return matches\n    }\n\n    private func processMode(\n        _ mode: Mode,\n        text: String,\n        searchRange: Range<String.Index>,\n        protectedRanges: [Range<String.Index>] = []\n    ) -> [Match] {\n        var matches: [Match] = []\n        var currentIndex = searchRange.lowerBound\n\n        while currentIndex < searchRange.upperBound {\n            guard let regex = mode.beginRegex else { break }\n\n            let nsSearchRange = NSRange(currentIndex..<searchRange.upperBound, in: text)\n            guard let match = regex.firstMatch(in: text, range: nsSearchRange),\n                  let matchRange = Range(match.range, in: text)\n            else { break }\n\n            if protectedRanges.contains(where: { $0.contains(matchRange.lowerBound) }) {\n                if let protectedRange = protectedRanges.first(where: { $0.contains(matchRange.lowerBound) }) {\n                    currentIndex = protectedRange.upperBound\n                } else {\n                    currentIndex = text.index(after: matchRange.lowerBound)\n                }\n                continue\n            }\n\n            var matchEnd = matchRange.upperBound\n\n            if let endRegex = mode.endRegex {\n                let nsEndRange = NSRange(matchEnd..<searchRange.upperBound, in: text)\n                if let endMatch = endRegex.firstMatch(in: text, range: nsEndRange),\n                   let endRange = Range(endMatch.range, in: text) {\n                    \n                    if mode.scope == \"comment\" && mode.end == \"\\n\" {\n                        matchEnd = endRange.lowerBound\n                    } else {\n                        matchEnd = endRange.upperBound\n                    }\n                }\n            }\n\n            let finalRange = matchRange.lowerBound..<matchEnd\n\n            if let scope = mode.scope {\n                matches.append(Match(range: finalRange, scope: scope, text: text))\n            }\n\n            currentIndex = finalRange.upperBound\n        }\n\n        return matches\n    }\n\n    public func highlight(\n        in attributedString: NSMutableAttributedString,\n        fullRange: NSRange,\n        editedRange: NSRange? = nil\n    ) {\n        let language = getLanguage(from: attributedString, startingAt: fullRange.location)\n        let langDefinition = language.flatMap { getLanguage($0) }\n        let shouldHighlightTicks = editedRange.map { fullRange.location == $0.location } ?? true\n        \n        var codeRange = calculateCodeRange(\n            fullRange: fullRange,\n            language: language\n        )\n        \n        // Expand for comments\n        if let editedRange = editedRange, editedRange.location != fullRange.location {\n            if let result = expandRangeForMultilineConstructs(\n                in: attributedString,\n                editedRange: editedRange,\n                codeRange: codeRange,\n                language: langDefinition\n            ) {\n                codeRange = result\n            } else {\n                codeRange = editedRange\n            }\n        }\n        \n        // Reset formatting (no language)\n        attributedString.addAttributes([\n            .font: options.style.font,\n            .foregroundColor: options.style.foregroundColor\n        ], range: codeRange)\n        \n        // Apply code highlighting\n        if let langDefinition = langDefinition,\n           codeRange.length > 0,\n           let codePlainRange = Range(codeRange, in: attributedString.string) {\n            let codeText = String(attributedString.string[codePlainRange])\n            let matches = processLanguage(langDefinition, text: codeText)\n            renderer.apply(matches: matches, to: attributedString, offset: codeRange.location)\n        }\n        \n        attributedString.fixAttributes(in: codeRange)\n        \n        // Apply ticks and lang highlighting\n        if shouldHighlightTicks {\n            highlightCodeBlockDelimiters(\n                in: attributedString,\n                range: fullRange,\n                language: language,\n                hasLanguageDefinition: langDefinition != nil\n            )\n        }\n    }\n\n    private func calculateCodeRange(\n        fullRange: NSRange,\n        language: String?\n    ) -> NSRange {\n        let codeStartOffset = language.map { 3 + $0.count } ?? 0\n        \n        return NSRange(\n            location: fullRange.location + codeStartOffset,\n            length: max(0, fullRange.length - codeStartOffset - 3)\n        )\n    }\n\n    private func highlightCodeBlockDelimiters(\n        in attributedString: NSMutableAttributedString,\n        range: NSRange,\n        language: String?,\n        hasLanguageDefinition: Bool\n    ) {\n        let grayColor = Color.lightGray\n        let greenColor = Color(red: 0.18, green: 0.61, blue: 0.25, alpha: 1.0)\n        \n        // open ```\n        let openRange = NSRange(location: range.location, length: 3)\n        attributedString.addAttributes([\n            .foregroundColor: grayColor,\n            .font: NotesTextProcessor.codeFont\n        ], range: openRange)\n        \n        // lang\n        if hasLanguageDefinition, let language = language, !language.isEmpty {\n            let langRange = NSRange(location: range.location + 3, length: language.count)\n            attributedString.addAttribute(.foregroundColor, value: greenColor, range: langRange)\n        }\n        \n        // close ```\n        let closeRange = NSRange(location: range.upperBound - 4, length: 4)\n        attributedString.addAttributes([\n            .foregroundColor: grayColor,\n            .font: NotesTextProcessor.codeFont\n        ], range: closeRange)\n    }\n    \n    private func getLanguage(from attributedString: NSMutableAttributedString, startingAt start: Int) -> String? {\n        let nsString = attributedString.string as NSString\n        guard start + 3 <= nsString.length else { return nil }\n        \n        // Check for ```\n        guard nsString.character(at: start) == 0x60,\n              nsString.character(at: start + 1) == 0x60,\n              nsString.character(at: start + 2) == 0x60 else { return nil }\n        \n        var end = start + 3\n        let len = nsString.length\n        \n        // Find whitespace\n        while end < len {\n            let char = nsString.character(at: end)\n            if char == 0x0A || char == 0x20 { break }\n            end += 1\n        }\n        \n        guard end > start + 3 else { return nil }\n        return nsString.substring(with: NSRange(location: start + 3, length: end - start - 3))\n            .trimmingCharacters(in: .whitespaces)\n    }\n    \n    private func expandRangeForMultilineConstructs(\n        in attributedString: NSAttributedString,\n        editedRange: NSRange,\n        codeRange: NSRange,\n        language: LanguageDefinition?\n    ) -> NSRange? {\n        guard let language = language else { return nil }\n        \n        let multilineModes = language.contains.filter { $0.begin != nil && $0.end != nil }\n        guard !multilineModes.isEmpty else { return nil }\n        \n        var expandedLocation = editedRange.location\n        var expandedEnd = editedRange.location + editedRange.length\n        \n        for mode in multilineModes {\n            guard let beginRegex = mode.beginRegex,\n                  let endRegex = mode.endRegex else { continue }\n            \n            let isPaired = mode.begin == mode.end\n            let allMatches = beginRegex.matches(in: attributedString.string, range: codeRange)\n            \n            if isPaired {\n                var openMatch: NSTextCheckingResult?\n                for match in allMatches {\n                    if match.range.location < editedRange.location {\n                        openMatch = (openMatch == nil) ? match : nil // toggle\n                    } else if openMatch != nil {\n                        expandedLocation = min(expandedLocation, openMatch!.range.location)\n                        expandedEnd = max(expandedEnd, match.range.location + match.range.length)\n                        break\n                    }\n                }\n            } else {\n                for beginMatch in allMatches.reversed() {\n                    if beginMatch.range.location > editedRange.location + editedRange.length {\n                        continue\n                    }\n                    \n                    let searchStart = beginMatch.range.location + beginMatch.range.length\n                    let searchEnd = codeRange.location + codeRange.length\n                    \n                    guard searchEnd > searchStart else { continue }\n                    \n                    let searchRange = NSRange(\n                        location: searchStart,\n                        length: searchEnd - searchStart\n                    )\n                    \n                    if let endMatch = endRegex.firstMatch(in: attributedString.string, range: searchRange) {\n                        let endMatchEnd = endMatch.range.location + endMatch.range.length\n                        \n                        if editedRange.location >= beginMatch.range.location &&\n                           editedRange.location <= endMatchEnd {\n                            expandedLocation = min(expandedLocation, beginMatch.range.location)\n                            expandedEnd = max(expandedEnd, endMatchEnd)\n                            break\n                        }\n                    }\n                }\n            }\n        }\n        \n        // Safe\n        expandedLocation = max(expandedLocation, codeRange.location)\n        expandedEnd = min(expandedEnd, codeRange.location + codeRange.length)\n        \n        guard expandedEnd > expandedLocation,\n              expandedLocation != editedRange.location || expandedEnd != editedRange.location + editedRange.length else {\n            return nil\n        }\n        \n        return NSRange(location: expandedLocation, length: expandedEnd - expandedLocation)\n    }\n}\n\n// MARK: - Common Modes\n\npublic struct CommonModes {\n    public static let stringDouble = Mode(scope: \"string\", begin: \"\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"\")\n    public static let stringSingle = Mode(scope: \"string\", begin: \"'(?:[^'\\\\\\\\]|\\\\\\\\.)*'\")\n    public static let number = Mode(scope: \"number\", begin: \"\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b\")\n    public static func comment(begin: String, end: String? = nil) -> Mode {\n        Mode(scope: \"comment\", begin: begin + (end != nil ? \".*?\\(end!)\" : \".*$\"))\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Theme.swift",
    "content": "//\n//  Theme.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 01.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nenum EditorTheme: String, CaseIterable, Codable {\n    case github\n    case atomOne\n    case solarized\n    \n    init?(themeName: String) {\n        switch themeName.lowercased() {\n        case \"github\":\n            self = .github\n        case \"atom-one\":\n            self = .atomOne\n        case \"solarized\":\n            self = .solarized\n        default:\n            return nil\n        }\n    }\n\n    func makeStyle(isDark: Bool) -> HighlightStyle {\n        switch (self, isDark) {\n        case (.github, false):\n            return GitHubLightTheme.make()\n        case (.github, true):\n            return GitHubDarkTheme.make()\n\n        case (.atomOne, false):\n            return AtomOneLightTheme.make()\n        case (.atomOne, true):\n            return AtomOneDarkTheme.make()\n\n        case (.solarized, false):\n            return SolarizedLightTheme.make()\n        case (.solarized, true):\n            return SolarizedDarkTheme.make()\n        }\n    }\n    \n    func getName() -> String {\n        switch self {\n        case .github:\n            return \"github\"\n        case .atomOne:\n            return \"atom-one\"\n        case .solarized:\n            return \"solarized\"\n        }\n    }\n    \n    func getCssName(isDark: Bool) -> String {\n        switch self {\n        case .github:\n            return \"github-\" + (isDark ? \"dark\" : \"light\")\n        case .atomOne:\n            return \"atom-one-\" + (isDark ? \"dark\" : \"light\")\n        case .solarized:\n            return \"solarized-\" + (isDark ? \"dark\" : \"light\")\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Themes/AtomOneDark.swift",
    "content": "//\n//  AtomOneDark.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 01.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct AtomOneDarkTheme {\n    static func make() -> HighlightStyle {\n        var style = HighlightStyle()\n\n        style.font = UserDefaultsManagement.codeFont\n\n        // .hljs\n        style.foregroundColor = PlatformColor(hex: \"#abb2bf\")\n        style.backgroundColor = PlatformColor(hex: \"#3a3f4a\")\n\n        // .hljs-comment, .hljs-quote (italic)\n        style.styles[\"comment\"] = .init(\n            color: PlatformColor(hex: \"#5c6370\"),\n            traits: [.italic]\n        )\n        style.styles[\"quote\"] = .init(\n            color: PlatformColor(hex: \"#5c6370\"),\n            traits: [.italic]\n        )\n\n        // .hljs-doctag, .hljs-keyword, .hljs-formula\n        style.styles[\"keyword\"] = .init(color: PlatformColor(hex: \"#c678dd\"))\n        style.styles[\"formula\"] = .init(color: PlatformColor(hex: \"#c678dd\"))\n\n        // .hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst\n        style.styles[\"section\"]  = .init(color: PlatformColor(hex: \"#e06c75\"))\n        style.styles[\"name\"]     = .init(color: PlatformColor(hex: \"#e06c75\"))\n        style.styles[\"tag\"]      = .init(color: PlatformColor(hex: \"#e06c75\"))\n        style.styles[\"deletion\"] = .init(color: PlatformColor(hex: \"#e06c75\"))\n        style.styles[\"subst\"]    = .init(color: PlatformColor(hex: \"#e06c75\"))\n\n        // .hljs-literal\n        style.styles[\"literal\"] = .init(color: PlatformColor(hex: \"#56b6c2\"))\n\n        // .hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string\n        style.styles[\"string\"]    = .init(color: PlatformColor(hex: \"#98c379\"))\n        style.styles[\"regexp\"]    = .init(color: PlatformColor(hex: \"#98c379\"))\n        style.styles[\"addition\"]  = .init(color: PlatformColor(hex: \"#98c379\"))\n        style.styles[\"attribute\"] = .init(color: PlatformColor(hex: \"#98c379\"))\n\n        // .hljs-built_in, .hljs-class .hljs-title\n        style.styles[\"built_in\"] = .init(color: PlatformColor(hex: \"#e6c07b\"))\n        style.styles[\"class\"]    = .init(color: PlatformColor(hex: \"#e6c07b\"))\n\n        // .hljs-attr, .hljs-variable, .hljs-template-variable,\n        // .hljs-type, .hljs-selector-class, .hljs-number\n        style.styles[\"attr\"]     = .init(color: PlatformColor(hex: \"#d19a66\"))\n        style.styles[\"variable\"] = .init(color: PlatformColor(hex: \"#d19a66\"))\n        style.styles[\"type\"]     = .init(color: PlatformColor(hex: \"#d19a66\"))\n        style.styles[\"number\"]   = .init(color: PlatformColor(hex: \"#d19a66\"))\n\n        // .hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title\n        style.styles[\"symbol\"] = .init(color: PlatformColor(hex: \"#61aeee\"))\n        style.styles[\"bullet\"] = .init(color: PlatformColor(hex: \"#61aeee\"))\n        style.styles[\"link\"]   = .init(color: PlatformColor(hex: \"#61aeee\"))\n        style.styles[\"meta\"]  = .init(color: PlatformColor(hex: \"#61aeee\"))\n        style.styles[\"id\"]    = .init(color: PlatformColor(hex: \"#61aeee\"))\n        style.styles[\"title\"] = .init(color: PlatformColor(hex: \"#61aeee\"))\n\n        // emphasis / strong\n        style.styles[\"emphasis\"] = .init(\n            color: PlatformColor(hex: \"#e06c75\"), traits: [.italic]\n        )\n        style.styles[\"strong\"] = .init(\n            color: PlatformColor(hex: \"#e06c75\"), traits: [.bold]\n        )\n\n        return style\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Themes/AtomOneLight.swift",
    "content": "//\n//  AtomOneLight.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 01.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct AtomOneLightTheme {\n    static func make() -> HighlightStyle {\n        var style = HighlightStyle()\n\n        style.font = UserDefaultsManagement.codeFont\n\n        // .hljs\n        style.foregroundColor = PlatformColor(hex: \"#383a42\")\n        style.backgroundColor = PlatformColor(hex: \"#fafafa\")\n\n        // .hljs-comment, .hljs-quote (italic)\n        style.styles[\"comment\"] = .init(\n            color: PlatformColor(hex: \"#a0a1a7\"),\n            traits: [.italic]\n        )\n        style.styles[\"quote\"] = .init(\n            color: PlatformColor(hex: \"#a0a1a7\"),\n            traits: [.italic]\n        )\n\n        // .hljs-doctag, .hljs-keyword, .hljs-formula\n        style.styles[\"keyword\"] = .init(color: PlatformColor(hex: \"#a626a4\"))\n        style.styles[\"formula\"] = .init(color: PlatformColor(hex: \"#a626a4\"))\n\n        // .hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst\n        style.styles[\"section\"]  = .init(color: PlatformColor(hex: \"#e45649\"))\n        style.styles[\"name\"]     = .init(color: PlatformColor(hex: \"#e45649\"))\n        style.styles[\"tag\"]      = .init(color: PlatformColor(hex: \"#e45649\"))\n        style.styles[\"deletion\"] = .init(color: PlatformColor(hex: \"#e45649\"))\n        style.styles[\"subst\"]    = .init(color: PlatformColor(hex: \"#e45649\"))\n\n        // .hljs-literal\n        style.styles[\"literal\"] = .init(color: PlatformColor(hex: \"#0184bb\"))\n\n        // .hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string\n        style.styles[\"string\"]    = .init(color: PlatformColor(hex: \"#50a14f\"))\n        style.styles[\"regexp\"]    = .init(color: PlatformColor(hex: \"#50a14f\"))\n        style.styles[\"addition\"]  = .init(color: PlatformColor(hex: \"#50a14f\"))\n        style.styles[\"attribute\"] = .init(color: PlatformColor(hex: \"#50a14f\"))\n\n        // .hljs-built_in, .hljs-class .hljs-title\n        style.styles[\"built_in\"] = .init(color: PlatformColor(hex: \"#c18401\"))\n        style.styles[\"class\"]    = .init(color: PlatformColor(hex: \"#c18401\"))\n\n        // .hljs-attr, .hljs-variable, .hljs-template-variable,\n        // .hljs-type, .hljs-selector-class, .hljs-number\n        style.styles[\"attr\"]     = .init(color: PlatformColor(hex: \"#986801\"))\n        style.styles[\"variable\"] = .init(color: PlatformColor(hex: \"#986801\"))\n        style.styles[\"type\"]     = .init(color: PlatformColor(hex: \"#986801\"))\n        style.styles[\"number\"]   = .init(color: PlatformColor(hex: \"#986801\"))\n\n        // .hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title\n        style.styles[\"symbol\"] = .init(color: PlatformColor(hex: \"#4078f2\"))\n        style.styles[\"bullet\"] = .init(color: PlatformColor(hex: \"#4078f2\"))\n        style.styles[\"link\"]   = .init(color: PlatformColor(hex: \"#4078f2\"))\n        style.styles[\"meta\"]   = .init(color: PlatformColor(hex: \"#4078f2\"))\n        style.styles[\"id\"]     = .init(color: PlatformColor(hex: \"#4078f2\"))\n        style.styles[\"title\"]  = .init(color: PlatformColor(hex: \"#4078f2\"))\n\n        // emphasis / strong\n        style.styles[\"emphasis\"] = .init(\n            color: PlatformColor(hex: \"#e45649\"), traits: [.italic]\n        )\n\n        style.styles[\"strong\"] = .init(\n            color: PlatformColor(hex: \"#e45649\"), traits: [.bold]\n        )\n\n        return style\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Themes/GitHubDark.swift",
    "content": "//\n//  GitHubDark.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 01.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct GitHubDarkTheme {\n    static func make() -> HighlightStyle {\n        var style = HighlightStyle()\n\n        style.font = UserDefaultsManagement.codeFont\n\n        // .hljs { color, background }\n        style.foregroundColor = PlatformColor(hex: \"#F1F1F1\")\n        style.backgroundColor = PlatformColor(hex: \"#232520\")\n\n        // .hljs-keyword, .hljs-type, .hljs-template-*, .hljs-doctag\n        style.styles[\"keyword\"]   = .init(color: PlatformColor(hex: \"#ff7b72\"))\n        style.styles[\"type\"]      = .init(color: PlatformColor(hex: \"#ff7b72\"))\n        style.styles[\"modifier\"]  = .init(color: PlatformColor(hex: \"#ff7b72\"))\n\n        // .hljs-title (function, class)\n        style.styles[\"function\"]  = .init(color: PlatformColor(hex: \"#d2a8ff\"))\n        style.styles[\"class\"]     = .init(color: PlatformColor(hex: \"#d2a8ff\"))\n\n        // .hljs-attr, .hljs-literal, .hljs-number, .hljs-variable, etc\n        style.styles[\"attribute\"] = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"literal\"]   = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"number\"]    = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"variable\"]  = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"operator\"]  = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"meta\"]      = .init(color: PlatformColor(hex: \"#79c0ff\"))\n\n        // .hljs-string, .hljs-regexp\n        style.styles[\"string\"]    = .init(color: PlatformColor(hex: \"#a5d6ff\"))\n        style.styles[\"regexp\"]    = .init(color: PlatformColor(hex: \"#a5d6ff\"))\n        style.styles[\"quote\"]     = .init(color: PlatformColor(hex: \"#a5d6ff\"))\n\n        // .hljs-built_in, .hljs-symbol\n        style.styles[\"built_in\"]  = .init(color: PlatformColor(hex: \"#ffa657\"))\n        style.styles[\"symbol\"]    = .init(color: PlatformColor(hex: \"#ffa657\"))\n\n        // .hljs-comment, .hljs-code, .hljs-formula\n        style.styles[\"comment\"]   = .init(\n            color: PlatformColor(hex: \"#8b949e\"),\n            traits: [.italic]\n        )\n\n        // .hljs-name, .hljs-selector-tag\n        style.styles[\"name\"]      = .init(color: PlatformColor(hex: \"#7ee787\"))\n        style.styles[\"tag\"]       = .init(color: PlatformColor(hex: \"#7ee787\"))\n\n        // .hljs-subst\n        style.styles[\"subst\"]     = .init(color: PlatformColor(hex: \"#c9d1d9\"))\n\n        // .hljs-section\n        style.styles[\"section\"]   = .init(\n            color: PlatformColor(hex: \"#1f6feb\"),\n            traits: [.bold]\n        )\n\n        // .hljs-bullet\n        style.styles[\"bullet\"]    = .init(color: PlatformColor(hex: \"#f2cc60\"))\n\n        // .hljs-emphasis\n        style.styles[\"emphasis\"]  = .init(\n            color: PlatformColor(hex: \"#c9d1d9\"),\n            traits: [.italic]\n        )\n\n        // .hljs-strong\n        style.styles[\"strong\"]    = .init(\n            color: PlatformColor(hex: \"#c9d1d9\"),\n            traits: [.bold]\n        )\n\n        // .hljs-addition\n        style.styles[\"addition\"]  = .init(\n            color: PlatformColor(hex: \"#aff5b4\"),\n        )\n\n        // .hljs-deletion\n        style.styles[\"deletion\"]  = .init(\n            color: PlatformColor(hex: \"#ffdcd7\"),\n        )\n\n        // punctuation / params / property — deliberately default\n        style.styles[\"punctuation\"] = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"params\"]      = .init(color: PlatformColor(hex: \"#79c0ff\"))\n        style.styles[\"property\"]    = .init(color: PlatformColor(hex: \"#79c0ff\"))\n\n        return style\n    }\n}\n\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Themes/GitHubLight.swift",
    "content": "//\n//  GitHubTheme.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 31.08.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\n#if os(OSX)\nimport AppKit\n#else\nimport UIKit\n#endif\n\nstruct GitHubLightTheme {\n    static func make() -> HighlightStyle {\n        var style = HighlightStyle()\n        style.font = UserDefaultsManagement.codeFont\n        \n        style.foregroundColor = PlatformColor(hex: \"#24292e\")\n        style.backgroundColor = PlatformColor(hex: \"#ffffff\")\n\n        style.styles[\"keyword\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#d73a49\"))\n        style.styles[\"doctag\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#d73a49\"))\n        style.styles[\"template-tag\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#d73a49\"))\n        style.styles[\"template-variable\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#d73a49\"))\n        style.styles[\"type\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#d73a49\"))\n        style.styles[\"variable.language\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#d73a49\"))\n        style.styles[\"title\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#6f42c1\"))\n        style.styles[\"class\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#6f42c1\"))\n        style.styles[\"function\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#6f42c1\"))\n        style.styles[\"attr\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"attribute\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"literal\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"meta\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"number\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"operator\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"variable\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"selector-attr\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"selector-class\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"selector-id\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"))\n        style.styles[\"section\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#005cc5\"), traits: [.bold])\n        style.styles[\"string\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#032f62\"))\n        style.styles[\"regexp\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#032f62\"))\n        style.styles[\"built_in\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#e36209\"))\n        style.styles[\"symbol\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#e36209\"))\n        style.styles[\"comment\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#6a737d\"))\n        style.styles[\"code\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#6a737d\"))\n        style.styles[\"formula\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#6a737d\"))\n        style.styles[\"name\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#22863a\"))\n        style.styles[\"quote\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#22863a\"))\n        style.styles[\"selector-tag\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#22863a\"))\n        style.styles[\"selector-pseudo\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#22863a\"))\n        style.styles[\"tag\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#22863a\"))\n        style.styles[\"subst\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#24292e\"))\n        style.styles[\"bullet\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#735c0f\"))\n        style.styles[\"emphasis\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#24292e\"), traits: [.italic])\n        style.styles[\"strong\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#24292e\"), traits: [.bold])\n        style.styles[\"addition\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#22863a\"))\n        style.styles[\"deletion\"] = HighlightStyle.TextStyle(color: PlatformColor(hex: \"#b31d28\"))\n        \n        return style\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Themes/SolarizedDark.swift",
    "content": "//\n//  SolarizedDark.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 01.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct SolarizedDarkTheme {\n    static func make() -> HighlightStyle {\n        var style = HighlightStyle()\n\n        style.font = UserDefaultsManagement.codeFont\n\n        // .hljs\n        style.foregroundColor = PlatformColor(hex: \"#839496\")\n        style.backgroundColor = PlatformColor(hex: \"#002b36\")\n\n        // .hljs-comment, .hljs-quote\n        style.styles[\"comment\"] = .init(color: PlatformColor(hex: \"#586e75\"))\n        style.styles[\"quote\"]   = .init(color: PlatformColor(hex: \"#586e75\"))\n\n        // .hljs-keyword, .hljs-selector-tag, .hljs-addition\n        style.styles[\"keyword\"]  = .init(color: PlatformColor(hex: \"#859900\"))\n        style.styles[\"tag\"]      = .init(color: PlatformColor(hex: \"#859900\"))\n        style.styles[\"addition\"] = .init(color: PlatformColor(hex: \"#859900\"))\n\n        // .hljs-number, .hljs-string, .hljs-literal, .hljs-regexp, doctag\n        style.styles[\"number\"]  = .init(color: PlatformColor(hex: \"#2aa198\"))\n        style.styles[\"string\"]  = .init(color: PlatformColor(hex: \"#2aa198\"))\n        style.styles[\"literal\"] = .init(color: PlatformColor(hex: \"#2aa198\"))\n        style.styles[\"regexp\"]  = .init(color: PlatformColor(hex: \"#2aa198\"))\n\n        // .hljs-title, .hljs-section, .hljs-name, selectors\n        style.styles[\"function\"] = .init(color: PlatformColor(hex: \"#268bd2\"))\n        style.styles[\"section\"]  = .init(color: PlatformColor(hex: \"#268bd2\"))\n        style.styles[\"name\"]     = .init(color: PlatformColor(hex: \"#268bd2\"))\n        style.styles[\"class\"]    = .init(color: PlatformColor(hex: \"#268bd2\"))\n\n        // .hljs-attribute, .hljs-variable, .hljs-type\n        style.styles[\"attribute\"] = .init(color: PlatformColor(hex: \"#b58900\"))\n        style.styles[\"variable\"]  = .init(color: PlatformColor(hex: \"#b58900\"))\n        style.styles[\"type\"]      = .init(color: PlatformColor(hex: \"#b58900\"))\n\n        // .hljs-symbol, .hljs-bullet, .hljs-subst, .hljs-meta, .hljs-link\n        style.styles[\"symbol\"]  = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"bullet\"]  = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"subst\"]   = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"meta\"]    = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"link\"]    = .init(color: PlatformColor(hex: \"#cb4b16\"))\n\n        // .hljs-built_in, .hljs-deletion\n        style.styles[\"built_in\"] = .init(color: PlatformColor(hex: \"#dc322f\"))\n        style.styles[\"deletion\"] = .init(color: PlatformColor(hex: \"#dc322f\"))\n\n//        // .hljs-formula\n//        style.styles[\"formula\"] = .init(\n//            //backgroundColor: PlatformColor(hex: \"#073642\")\n//        )\n\n        // font styles\n        style.styles[\"emphasis\"] = .init(\n            color: PlatformColor(hex: \"#cb4b16\"), traits: [.italic]\n        )\n\n        style.styles[\"strong\"] = .init(\n            color: PlatformColor(hex: \"#cb4b16\"), traits: [.bold]\n        )\n\n        return style\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/SwiftHighlighter/Themes/SolarizedLight.swift",
    "content": "//\n//  SolarizedLight.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 01.12.2025.\n//  Copyright © 2025 Oleksandr Hlushchenko. All rights reserved.\n//\n\nstruct SolarizedLightTheme {\n    static func make() -> HighlightStyle {\n        var style = HighlightStyle()\n\n        style.font = UserDefaultsManagement.codeFont\n\n        // .hljs\n        style.foregroundColor = PlatformColor(hex: \"#657b83\")\n        style.backgroundColor = PlatformColor(hex: \"#fdf6e3\")\n\n        // .hljs-comment, .hljs-quote\n        style.styles[\"comment\"] = .init(color: PlatformColor(hex: \"#93a1a1\"))\n        style.styles[\"quote\"]   = .init(color: PlatformColor(hex: \"#93a1a1\"))\n\n        // .hljs-keyword, .hljs-selector-tag, .hljs-addition\n        style.styles[\"keyword\"]  = .init(color: PlatformColor(hex: \"#859900\"))\n        style.styles[\"tag\"]      = .init(color: PlatformColor(hex: \"#859900\"))\n        style.styles[\"addition\"] = .init(color: PlatformColor(hex: \"#859900\"))\n\n        // .hljs-number, .hljs-string, .hljs-literal, .hljs-regexp\n        style.styles[\"number\"]  = .init(color: PlatformColor(hex: \"#2aa198\"))\n        style.styles[\"string\"]  = .init(color: PlatformColor(hex: \"#2aa198\"))\n        style.styles[\"literal\"] = .init(color: PlatformColor(hex: \"#2aa198\"))\n        style.styles[\"regexp\"]  = .init(color: PlatformColor(hex: \"#2aa198\"))\n\n        // .hljs-title, .hljs-section, .hljs-name\n        style.styles[\"function\"] = .init(color: PlatformColor(hex: \"#268bd2\"))\n        style.styles[\"section\"]  = .init(color: PlatformColor(hex: \"#268bd2\"))\n        style.styles[\"name\"]     = .init(color: PlatformColor(hex: \"#268bd2\"))\n        style.styles[\"class\"]    = .init(color: PlatformColor(hex: \"#268bd2\"))\n\n        // .hljs-attribute, .hljs-variable, .hljs-type\n        style.styles[\"attribute\"] = .init(color: PlatformColor(hex: \"#b58900\"))\n        style.styles[\"variable\"]  = .init(color: PlatformColor(hex: \"#b58900\"))\n        style.styles[\"type\"]      = .init(color: PlatformColor(hex: \"#b58900\"))\n\n        // .hljs-symbol, .hljs-bullet, .hljs-subst, .hljs-meta, .hljs-link\n        style.styles[\"symbol\"]  = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"bullet\"]  = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"subst\"]   = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"meta\"]    = .init(color: PlatformColor(hex: \"#cb4b16\"))\n        style.styles[\"link\"]    = .init(color: PlatformColor(hex: \"#cb4b16\"))\n\n        // .hljs-built_in, .hljs-deletion\n        style.styles[\"built_in\"] = .init(color: PlatformColor(hex: \"#dc322f\"))\n        style.styles[\"deletion\"] = .init(color: PlatformColor(hex: \"#dc322f\"))\n\n        // font styles\n        style.styles[\"emphasis\"] = .init(\n            color: PlatformColor(hex: \"#cb4b16\"), traits: [.italic]\n        )\n\n        style.styles[\"strong\"] = .init(\n            color: PlatformColor(hex: \"#cb4b16\"), traits: [.bold]\n        )\n\n        return style\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/TextFormatter.swift",
    "content": "//\n//  TextFormatter.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 3/6/18.\n//  Copyright © 2018 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(OSX)\n    import Cocoa\n    import Carbon.HIToolbox\n    typealias Font = NSFont\n    typealias TextView = EditTextView\n    typealias Color = NSColor\n#else\n    import UIKit\n    typealias Font = UIFont\n    typealias TextView = EditTextView\n    typealias Color = UIColor\n#endif\n\npublic class TextFormatter {\n    private var attributedString: NSMutableAttributedString\n    private var attributedSelected: NSAttributedString\n    private var type: NoteType\n    private var textView: TextView\n    private var note: Note\n    private var storage: NSTextStorage\n    private var selectedRange: NSRange\n    private var range: NSRange\n    private var newSelectedRange: NSRange?\n    private var cursor: Int?\n    \n    private var prevSelectedString: NSAttributedString\n    private var prevSelectedRange: NSRange\n    \n    private var isAutomaticQuoteSubstitutionEnabled: Bool = false\n    private var isAutomaticDashSubstitutionEnabled: Bool = false\n    \n    init(textView: TextView, note: Note) {\n        range = textView.selectedRange\n        \n        #if os(OSX)\n            storage = textView.textStorage!\n            attributedSelected = textView.attributedString()\n            if textView.typingAttributes[.font] == nil {\n                textView.typingAttributes[.font] = UserDefaultsManagement.noteFont\n            }\n        #else\n            storage = textView.textStorage\n            attributedSelected = textView.attributedText\n        #endif\n        \n        self.attributedString = NSMutableAttributedString(attributedString: attributedSelected.attributedSubstring(from: range))\n        self.selectedRange = NSRange(0..<attributedString.length)\n        \n        self.type = note.type\n        self.textView = textView\n        self.note = note\n        \n        prevSelectedRange = range\n        prevSelectedString = storage.attributedSubstring(from: prevSelectedRange)\n        \n        #if os(OSX)\n            self.isAutomaticQuoteSubstitutionEnabled = textView.isAutomaticQuoteSubstitutionEnabled\n            self.isAutomaticDashSubstitutionEnabled = textView.isAutomaticDashSubstitutionEnabled\n        \n            textView.isAutomaticQuoteSubstitutionEnabled = false\n            textView.isAutomaticDashSubstitutionEnabled = false\n        #endif\n    }\n    \n    func getString() -> NSMutableAttributedString {\n        return attributedString\n    }\n    \n    func bold() {\n        if note.isMarkdown() {\n\n            // UnBold if not selected\n            if range.length == 0 {\n                var resultFound = false\n                let string = getAttributedString().string\n\n                NotesTextProcessor.boldRegex.matches(string, range: NSRange(0..<string.count)) { (result) -> Void in\n                    guard let range = result?.range else { return }\n\n                    if range.intersection(self.range) != nil {\n                        let boldAttributed = self.getAttributedString().attributedSubstring(from: range)\n\n                        self.unBold(attributedString: boldAttributed, range: range)\n                        resultFound = true\n                    }\n                }\n\n                if resultFound {\n                    return\n                }\n            }\n\n            // UnBold selected\n            if attributedString.string.contains(\"**\") || attributedString.string.contains(\"__\") {\n                unBold(attributedString: attributedString, range: range)\n                return\n            }\n\n            var selectRange = NSMakeRange(range.location + 2, 0)\n            let string = attributedString.string\n            let length = string.count\n\n            if length != 0 {\n                selectRange = NSMakeRange(range.location, length + 4)\n            }\n\n            let char = UserDefaultsManagement.bold\n            insertText(char + string + char, selectRange: selectRange)\n        }\n    }\n    \n    func italic() {\n        if note.isMarkdown() {\n\n            // UnItalic if not selected\n            if range.length == 0 {\n                var resultFound = false\n                let string = getAttributedString().string\n\n                NotesTextProcessor.italicRegex.matches(string, range: NSRange(0..<string.count)) { (result) -> Void in\n                    guard let range = result?.range else { return }\n\n                    if range.intersection(self.range) != nil {\n                        let italicAttributed = self.getAttributedString().attributedSubstring(from: range)\n\n                        self.unItalic(attributedString: italicAttributed, range: range)\n                        resultFound = true\n                    }\n                }\n\n                if resultFound {\n                    return\n                }\n            }\n\n            // UnItalic\n            if attributedString.string.contains(\"*\") || attributedString.string.contains(\"_\") {\n                unItalic(attributedString: attributedString, range: range)\n                return\n            }\n\n            var selectRange = NSMakeRange(range.location + 1, 0)\n            let string = attributedString.string\n            let length = string.count\n\n            if length != 0 {\n                selectRange = NSMakeRange(range.location, length + 2)\n            }\n\n            let char = UserDefaultsManagement.italic\n            insertText(char + string + char, selectRange: selectRange)\n        }\n    }\n\n    private func unBold(attributedString: NSAttributedString, range: NSRange) {\n        let unBold = attributedString\n            .string\n            .replacingOccurrences(of: \"**\", with: \"\")\n            .replacingOccurrences(of: \"__\", with: \"\")\n\n        let selectRange = NSRange(location: range.location, length: unBold.count)\n        insertText(unBold, replacementRange: range, selectRange: selectRange)\n    }\n\n    private func unItalic(attributedString: NSAttributedString, range: NSRange) {\n        let unItalic = attributedString\n            .string\n            .replacingOccurrences(of: \"*\", with: \"\")\n            .replacingOccurrences(of: \"_\", with: \"\")\n\n        let selectRange = NSRange(location: range.location, length: unItalic.count)\n        insertText(unItalic, replacementRange: range, selectRange: selectRange)\n    }\n\n    private func unStrike(attributedString: NSAttributedString, range: NSRange) {\n        let unStrike = attributedString\n            .string\n            .replacingOccurrences(of: \"~~\", with: \"\")\n\n        let selectRange = NSRange(location: range.location, length: unStrike.count)\n        insertText(unStrike, replacementRange: range, selectRange: selectRange)\n    }\n    \n    public func underline() {\n\n    }\n    \n    public func strike() {\n        // UnStrike if not selected\n        if range.length == 0 {\n            var resultFound = false\n            let string = getAttributedString().string\n\n            NotesTextProcessor.strikeRegex.matches(string, range: NSRange(0..<string.count)) { (result) -> Void in\n                guard let range = result?.range else { return }\n\n                if range.intersection(self.range) != nil {\n                    let italicAttributed = self.getAttributedString().attributedSubstring(from: range)\n\n                    self.unStrike(attributedString: italicAttributed, range: range)\n                    resultFound = true\n                }\n            }\n\n            if resultFound {\n                return\n            }\n        }\n\n        // UnStrike\n        if attributedString.string.contains(\"~~\") {\n            unStrike(attributedString: attributedString, range: range)\n            return\n        }\n\n        var selectRange = NSMakeRange(range.location + 2, 0)\n        let string = attributedString.string\n        let length = string.count\n\n        if length != 0 {\n            selectRange = NSMakeRange(range.location, length + 4)\n        }\n\n        insertText(\"~~\" + string + \"~~\", selectRange: selectRange)\n    }\n    \n    public func tab() {\n        guard let pRange = getParagraphRange() else { return }\n        \n        var padding = \"\\t\"\n        \n        if UserDefaultsManagement.indentUsing == 0x01 {\n            padding = \"  \"\n        }\n\n        if UserDefaultsManagement.indentUsing == 0x02 {\n            padding = \"    \"\n        }\n        \n        let mutable = NSMutableAttributedString(attributedString: getAttributedString().attributedSubstring(from: pRange)).unloadTasks()\n\n        let string = mutable.string\n        var result = String()\n        var addsChars = 0\n\n        let location = textView.selectedRange.location\n        let length = textView.selectedRange.length\n\n        var isFirstLine = true\n        string.enumerateLines { (line, _) in\n            result.append(padding + line + \"\\n\")\n\n            if isFirstLine {\n                isFirstLine = false\n            } else {\n                addsChars += padding.count\n            }\n        }\n\n        let selectRange = NSRange(location: location + padding.count, length: length + addsChars)\n        \n        let mutableResult = NSMutableAttributedString(string: result)\n        mutableResult.loadTasks()\n\n        #if os(OSX)\n            textView.textStorage?.removeAttribute(.todo, range: pRange)\n        #else\n            textView.textStorage.removeAttribute(.todo, range: pRange)\n\n            // Fixes font size issue #1271\n            let parFont = NotesTextProcessor.font\n            let parRange = NSRange(location: 0, length:   mutableResult.length)\n            mutableResult.addAttribute(.font, value: parFont, range: parRange)\n            mutableResult.fixAttributes(in: parRange)\n        #endif\n\n        insertText(mutableResult, replacementRange: pRange, selectRange: selectRange)\n    }\n    \n    public func unTab() {\n        guard let pRange = getParagraphRange() else { return }\n\n        let mutable = NSMutableAttributedString(attributedString: storage.attributedSubstring(from: pRange)).unloadTasks()\n        let string = mutable.string\n\n        var result = String()\n\n        let location = textView.selectedRange.location\n        let length = textView.selectedRange.length\n\n        var padding = 0\n        var dropChars = 0\n\n        if string.starts(with: \"\\t\") {\n            padding = 1\n        } else if string.starts(with: \"  \") && UserDefaultsManagement.indentUsing == 0x01 {\n            padding = 2\n        } else if string.starts(with: \"    \") {\n            padding = 4\n        }\n\n        if padding == 0 {\n            return\n        }\n\n        var isFirstLine = true\n        \n        string.enumerateLines { (line, _) in\n            var line = line\n\n            if !line.isEmpty {\n                var firstCharsToDrop: Int?\n                \n                if line.first == \"\\t\" {\n                    firstCharsToDrop = 1\n                } else if UserDefaultsManagement.indentUsing == 0x01 && line.starts(with: \"  \") {\n                    firstCharsToDrop = 2\n                } else if line.starts(with: \"    \") {\n                    firstCharsToDrop = 4\n                }\n                \n                if let x = firstCharsToDrop {\n                    line = String(line.dropFirst(x))\n                    \n                    if length == 0 {\n                        dropChars = 0\n                    } else {\n                        if isFirstLine {\n                            isFirstLine = false\n                        } else {\n                            dropChars += x\n                        }\n                    }\n                }\n            }\n            \n            result.append(line + \"\\n\")\n        }\n\n        let diffLocation = location - padding\n        \n        var selectLength = length - dropChars\n        var selectLocation = diffLocation > 0 ? diffLocation : 0\n\n        if selectLocation < pRange.location {\n            selectLocation = pRange.location\n        }\n\n        if selectLength > result.count {\n            selectLength = result.count\n        }\n\n        let selectRange = NSRange(location: selectLocation, length: selectLength)\n        let mutableResult = NSMutableAttributedString(string: result)\n        mutableResult.loadTasks()\n\n        #if os(OSX)\n            textView.textStorage?.removeAttribute(.todo, range: pRange)\n        #else\n            textView.textStorage.removeAttribute(.todo, range: pRange)\n\n            // Fixes font size issue #1271\n            let parFont = NotesTextProcessor.font\n            let parRange = NSRange(location: 0, length:   mutableResult.length)\n            mutableResult.addAttribute(.font, value: parFont, range: parRange)\n            mutableResult.fixAttributes(in: parRange)\n        #endif\n\n        insertText(mutableResult, replacementRange: pRange, selectRange: selectRange)\n    }\n    \n    public func header(_ string: String) {\n        let fullSelection = selectedRange.length > 0\n        guard let pRange = getParagraphRange() else { return }\n\n#if os(iOS)\n        var prefix = String()\n        var paragraph = storage.mutableString.substring(with: pRange)\n\n        if paragraph.starts(with: \"######\") {\n            paragraph = paragraph\n                .replacingOccurrences(of: \"#\", with: \"\")\n                .trimSpaces()\n        } else if paragraph.starts(with: \"#\") {\n            prefix = string\n        } else {\n            prefix = string + \" \"\n        }\n\n        let diff = paragraph.contains(\"\\n\") ? 1 : 0\n        let selectRange = NSRange(location: pRange.location + (prefix + paragraph).count - diff, length: 0)\n        insertText(prefix + paragraph, replacementRange: pRange, selectRange: selectRange)\n#else\n        let prefix = string + \" \"\n        var paragraph = storage.mutableString\n            .substring(with: pRange)\n\n        if paragraph.starts(with: prefix) {\n            paragraph = paragraph.replacingOccurrences(of: prefix, with: \"\")\n        } else {\n            paragraph =\n                prefix + paragraph.replacingOccurrences(of: \"#\", with: \"\").trimSpaces()\n        }\n\n        let diff = paragraph.contains(\"\\n\") ? 1 : 0\n\n        var selectRange = NSRange(location: pRange.location + paragraph.count - diff, length: 0)\n\n        if fullSelection {\n            selectRange = NSRange(location: pRange.location, length: paragraph.count - diff)\n        }\n\n        insertText(paragraph, replacementRange: pRange, selectRange: selectRange)\n#endif\n    }\n    \n    public func link() {\n        textView.undoManager?.beginUndoGrouping()\n\n        let text = \"[\" + attributedString.string + \"]()\"\n        replaceWith(string: text, range: range)\n        \n        if (attributedString.length == 4) {\n            setSelectedRange(NSMakeRange(range.location + 1, 0))\n        } else {\n            setSelectedRange(NSMakeRange(range.upperBound + 3, 0))\n        }\n\n        textView.undoManager?.endUndoGrouping()\n    }\n\n    public func wikiLink() {\n        textView.undoManager?.beginUndoGrouping()\n\n        let text = \"[[\" + attributedString.string + \"]]\"\n        replaceWith(string: text, range: range)\n\n        if (text.count == 4) {\n            setSelectedRange(NSMakeRange(range.location + 2, 0))\n\n            #if os(OSX)\n            textView.complete(nil)\n            #endif\n        } else {\n            setSelectedRange(NSMakeRange(range.location + 2, text.count - 4))\n        }\n\n        textView.undoManager?.endUndoGrouping()\n    }\n\n    public func image() {\n        textView.undoManager?.beginUndoGrouping()\n\n        let text = \"![\" + attributedString.string + \"]()\"\n        replaceWith(string: text)\n        \n        if (attributedString.length == 5) {\n            setSelectedRange(NSMakeRange(range.location + 2, 0))\n        } else {\n            setSelectedRange(NSMakeRange(range.upperBound + 4, 0))\n        }\n\n        textView.undoManager?.endUndoGrouping()\n    }\n    \n    public func isListParagraph() -> Bool {\n        guard let currentPR = getParagraphRange() else { return false }\n        let paragraph = storage.attributedSubstring(from: currentPR)\n        \n        if TextFormatter.getAutocompleteCharsMatch(string: paragraph.string) != nil {\n            return true\n        }\n\n        if TextFormatter.getAutocompleteDigitsMatch(string: paragraph.string) != nil {\n            return true\n        }\n        \n        if paragraph.hasTodoAttribute() {\n            return true\n        }\n        \n        return false\n    }\n\n    public func tabKey() {\n        guard let currentPR = getParagraphRange() else { return }\n        let paragraph = storage.attributedSubstring(from: currentPR).string\n        let sRange = self.textView.selectedRange\n        \n        // Middle\n        if (sRange.location != 0 || sRange.location != storage.length)\n            && paragraph.count == 1\n            && self.note.isMarkdown()\n        {\n            self.insertText(\"\\t\", replacementRange: sRange)\n            return\n        }\n        \n        // First & Last\n        if (sRange.location == 0 || sRange.location == self.storage.length) && paragraph.count == 0 && self.note.isMarkdown() {\n            self.insertText(\"\\t\\n\", replacementRange: sRange)\n            self.setSelectedRange(NSRange(location: sRange.location + 1, length: 0))\n            return\n        }\n        \n        self.insertText(\"\\t\")\n    }\n\n    public static func getAutocompleteCharsMatch(string: String) -> NSTextCheckingResult? {\n        guard let regex = try? NSRegularExpression(pattern:\n            \"^(( |\\t)*\\\\- \\\\[[x| ]*\\\\] )|^(( |\\t)*[-|–|—|*|•|>|\\\\+]{1} )\"), let result = regex.firstMatch(in: string, range: NSRange(0..<string.count)) else { return nil }\n\n        return result\n    }\n\n    public static func getAutocompleteDigitsMatch(string: String) -> NSTextCheckingResult? {\n        guard let regex = try? NSRegularExpression(pattern: \"^(( |\\t)*[0-9]+\\\\. )\"), let result = regex.firstMatch(in: string, range: NSRange(0..<string.count)) else { return nil }\n\n        return result\n    }\n\n    private func matchChars(string: NSAttributedString, match: NSTextCheckingResult, prefix: String? = nil) {\n        guard string.length >= match.range.upperBound else { return }\n\n        let found = string.attributedSubstring(from: match.range).string\n        var newLine = 1\n\n        if textView.selectedRange.upperBound == storage.length {\n            newLine = 0\n        }\n\n        if found.count + newLine == string.length {\n            let range = storage.mutableString.paragraphRange(for: textView.selectedRange)\n            let selectRange = NSRange(location: range.location, length: 0)\n            insertText(\"\\n\", replacementRange: range, selectRange: selectRange)\n        } else {\n            insertText(\"\\n\" + found)\n        }\n\n        updateCurrentParagraph()\n    }\n\n    private func matchDigits(string: NSAttributedString, match: NSTextCheckingResult) {\n        guard string.length >= match.range.upperBound else { return }\n\n        let found = string.attributedSubstring(from: match.range).string\n        var newLine = 1\n\n        if textView.selectedRange.upperBound == storage.length {\n            newLine = 0\n        }\n\n        if found.count + newLine == string.length {\n            let range = storage.mutableString.paragraphRange(for: textView.selectedRange)\n            let selectRange = NSRange(location: range.location, length: 0)\n            insertText(\"\\n\", replacementRange: range, selectRange: selectRange)\n        } else if let position = Int(found.replacingOccurrences(of:\"[^0-9]\", with: \"\", options: .regularExpression)) {\n            let newDigit = found.replacingOccurrences(of: String(position), with: String(position + 1))\n            insertText(\"\\n\" + newDigit)\n        }\n\n        updateCurrentParagraph()\n    }\n\n    private func updateCurrentParagraph() {\n        let parRange = getParagraphRange(for: textView.selectedRange.location)\n\n        #if os(iOS)\n            textView.textStorage.updateParagraphStyle(range: parRange)\n        #else\n            textView.textStorage?.updateParagraphStyle(range: parRange)\n        #endif\n    }\n\n    public func newLine() {\n        guard let currentParagraphRange = self.getParagraphRange() else { return }\n\n        let currentParagraph = storage.attributedSubstring(from: currentParagraphRange)\n        let selectedRange = self.textView.selectedRange\n\n        // Autocomplete todo lists\n\n        if selectedRange.location != currentParagraphRange.location && currentParagraphRange.upperBound - 2 < selectedRange.location, currentParagraph.length >= 2 {\n\n            if textView.selectedRange.upperBound > 2 {\n                let char = storage.attributedSubstring(from: NSRange(location: textView.selectedRange.upperBound - 2, length: 1))\n\n                if let _ = char.attribute(.todo, at: 0, effectiveRange: nil) {\n                    let selectRange = NSRange(location: currentParagraphRange.location, length: 0)\n\n                    insertText(\"\", replacementRange: currentParagraphRange, selectRange: selectRange)\n\n                    #if os(OSX)\n                        textView.insertNewline(nil)\n                        textView.setSelectedRange(selectRange)\n                    #else\n                        textView.insertText(\"\\n\")\n                        textView.selectedRange = selectRange\n                    #endif\n\n                    return\n                }\n            }\n\n            var todoLocation = -1\n            currentParagraph.enumerateAttribute(.todo, in: NSRange(0..<currentParagraph.length), options: []) { (value, range, stop) -> Void in\n                guard value != nil else { return }\n\n                todoLocation = range.location\n                stop.pointee = true\n            }\n\n            if todoLocation > -1 {\n                let unchecked = AttributedBox.getUnChecked()?.attributedSubstring(from: NSRange(0..<2))\n                var prefix = String()\n\n                if todoLocation > 0 {\n                    prefix = currentParagraph.attributedSubstring(from: NSRange(0..<todoLocation)).string\n                }\n\n            #if os(OSX)\n                let string = NSMutableAttributedString(string: \"\\n\" + prefix)\n                string.append(unchecked!)\n                self.insertText(string)\n            #else\n                let selectedRange = textView.selectedRange\n                let selectedTextRange = textView.selectedTextRange!\n                let checkbox = NSMutableAttributedString(string: \"\\n\" + prefix)\n                checkbox.append(unchecked!)\n\n                textView.undoManager?.beginUndoGrouping()\n                textView.replace(selectedTextRange, withText: checkbox.string)\n                textView.textStorage.replaceCharacters(in: NSRange(location: selectedRange.location, length: checkbox.length), with: checkbox)\n                textView.undoManager?.endUndoGrouping()\n            #endif\n                return\n            }\n        }\n\n        // Autocomplete ordered and unordered lists\n\n        if selectedRange.location != currentParagraphRange.location && currentParagraphRange.upperBound - 2 < selectedRange.location {\n            if let charsMatch = TextFormatter.getAutocompleteCharsMatch(string: currentParagraph.string) {\n                self.matchChars(string: currentParagraph, match: charsMatch)\n                return\n            }\n\n            if let digitsMatch = TextFormatter.getAutocompleteDigitsMatch(string: currentParagraph.string) {\n                self.matchDigits(string: currentParagraph, match: digitsMatch)\n                return\n            }\n        }\n\n        // New Line insertion\n\n        var newLine = \"\\n\"\n        var prefix: String?\n        \n        if currentParagraph.string.starts(with: \"\\t\") {\n            prefix = currentParagraph.string.getPrefixMatchSequentially(char: \"\\t\")\n        } else if currentParagraph.string.starts(with: \"  \") {\n            prefix = currentParagraph.string.getPrefixMatchSequentially(char: \" \")\n        }\n\n        if let x = prefix {\n            if selectedRange.location != currentParagraphRange.location {\n                newLine += x\n            }\n\n            let string = TextFormatter.getAttributedCode(string: newLine)\n            self.insertText(string)\n            return\n        }\n\n        #if os(iOS)\n            self.textView.insertText(\"\\n\")\n        #else\n            self.textView.insertNewline(nil)\n        #endif\n    }\n\n    public func todo() {\n        guard let pRange = getParagraphRange() else { return }\n\n        let attributedString = getAttributedString().attributedSubstring(from: pRange)\n        let mutable = NSMutableAttributedString(attributedString: attributedString).unloadTasks()\n\n        if !attributedString.hasTodoAttribute() && selectedRange.length == 0 {\n            var offset = 0\n            let symbols = [\"\\t\", \" \"]\n            for char in mutable.string {\n                if symbols.contains(String(char)) {\n                    offset += 1\n                } else {\n                    break\n                }\n            }\n\n            let insertRange = NSRange(location: pRange.location + offset, length: 0)\n            let selectRange = NSRange(location: range.location + 2, length: range.length)\n            insertText(AttributedBox.getUnChecked()!, replacementRange: insertRange, selectRange: selectRange)\n            return\n        }\n\n        var lines = [String]()\n        var addPrefixes = false\n        var addCompleted = false\n        let string = mutable.string\n\n        string.enumerateLines { (line, _) in\n            let result = self.parseTodo(line: line)\n            addPrefixes = !result.0\n            addCompleted = result.1\n            lines.append(result.2)\n        }\n\n        var result = String()\n        for line in lines {\n\n            // Removes extra chars identified as list items start\n            var line = line\n\n            let digitRegex = try! NSRegularExpression(pattern: \"^([0-9]+\\\\. )\")\n            let digitRegexResult = digitRegex.firstMatch(in: line, range: NSRange(0..<line.count))\n\n            let charRegex = try! NSRegularExpression(pattern: \"^([-*–+]+ )\")\n            let charRegexResult = charRegex.firstMatch(in: line, range: NSRange(0..<line.count))\n\n            if let result = digitRegexResult {\n                let qty = result.range.length\n                line = String(line.dropFirst(qty))\n            } else if let result = charRegexResult, !line.contains(\"- [\") {\n                let qty = result.range.length\n                line = String(line.dropFirst(qty))\n            }\n\n            if addPrefixes {\n                let task = addCompleted ? \"- [x] \" : \"- [ ] \"\n                var empty = String()\n                var scanFinished = false\n\n                if line.count > 0 {\n                    var j = 0\n                    for char in line {\n                        j += 1\n\n                        if (char.isWhitespace || char == \"\\t\")\n                            && !scanFinished {\n                            if j == line.count {\n                                empty.append(\"\\(char)\" + task)\n                            } else {\n                                empty.append(char)\n                            }\n                        } else {\n                            if !scanFinished {\n                                empty.append(task + \"\\(char)\")\n                                scanFinished = true\n                            } else {\n                                empty.append(char)\n                            }\n                        }\n                    }\n\n                    result += empty + \"\\n\"\n                } else {\n                    result += task + \"\\n\"\n                }\n            } else {\n                result += line + \"\\n\"\n            }\n        }\n\n        let mutableResult = NSMutableAttributedString(string: result)\n        \n        #if os(iOS)\n            let textColor: UIColor = UIColor.blackWhite\n        #else\n            let textColor: NSColor = NotesTextProcessor.fontColor\n        #endif\n        \n        mutableResult.addAttribute(.foregroundColor, value: textColor, range: NSRange(location: 0, length: mutableResult.length))\n        mutableResult.addAttribute(.font, value: NotesTextProcessor.font, range: NSRange(location: 0, length: mutableResult.length))\n        mutableResult.fixAttributes(in: NSRange(location: 0, length: mutableResult.length))\n        mutableResult.loadTasks()\n\n        let diff = mutableResult.length - attributedString.length\n        let selectRange = selectedRange.length == 0 || lines.count == 1\n            ? NSRange(location: pRange.location + pRange.length + diff - 1, length: 0)\n            : NSRange(location: pRange.location, length: mutableResult.length)\n        \n        // Fixes clicked area\n        storage.removeAttribute(.todo, range: pRange)\n\n        insertText(mutableResult, replacementRange: pRange, selectRange: selectRange)\n    }\n\n    public func toggleTodo(_ location: Int? = nil) {\n        if let location = location, let todoAttr = storage.attribute(.todo, at: location, effectiveRange: nil) as? Int {\n            #if os(OSX)\n                if textView.window?.firstResponder != textView {\n                    textView.window?.makeFirstResponder(textView)\n                }\n            #endif\n            \n            guard let paragraph = getParagraphRange(for: location) else { return }\n            let paragraphTextNonMutable = storage.attributedSubstring(from: paragraph)\n            let paragraphText = NSMutableAttributedString(attributedString: paragraphTextNonMutable)\n            \n            let attributedText = (todoAttr == 0) ?\n                AttributedBox.getChecked(clean: true) :\n                AttributedBox.getUnChecked(clean: true)\n            \n            let checkboxLocation = location - paragraph.location\n            paragraphText.replaceCharacters(in: NSRange(location: checkboxLocation, length: 1), with: attributedText!)\n            \n            if todoAttr == 0 {\n                paragraphText.addAttribute(.strikethroughStyle, value: 1, range: NSRange(location: 0, length: paragraphText.length))\n                textView.typingAttributes[.strikethroughStyle] = 1\n            } else {\n                paragraphText.removeAttribute(.strikethroughStyle, range: NSRange(location: 0, length: paragraphText.length))\n                textView.typingAttributes.removeValue(forKey: .strikethroughStyle)\n            }\n\n            insertText(paragraphText, replacementRange: paragraph)\n\n            if todoAttr == 1 {\n                storage.removeAttribute(.strikethroughStyle, range: paragraph)\n            }\n            \n            updateCurrentParagraph()\n            \n            return\n        }\n\n        guard let paragraphRange = getParagraphRange() else { return }\n        let paragraph = self.storage.attributedSubstring(from: paragraphRange)\n        \n        if let index = paragraph.string.range(of: \"- [ ] \") {\n            let local = paragraph.string.nsRange(from: index).location\n            let range = NSMakeRange(paragraphRange.location + local, 6)\n            if let attributedText = AttributedBox.getChecked() {\n                self.insertText(attributedText, replacementRange: range)\n            }\n            \n            return\n\n        } else if let index = paragraph.string.range(of: \"- [x] \") {\n            let local = paragraph.string.nsRange(from: index).location\n            let range = NSMakeRange(paragraphRange.location + local, 6)\n            if let attributedText = AttributedBox.getUnChecked() {\n                self.insertText(attributedText, replacementRange: range)\n            }\n            \n            return\n        }\n    }\n\n    public func backTick() {\n        let selectedRange = textView.selectedRange\n\n        if selectedRange.length > 0 {\n            let text = storage.attributedSubstring(from: selectedRange).string\n            let string = \"`\\(text)`\"\n            let codeFont = UserDefaultsManagement.codeFont\n\n            let mutableString = NSMutableAttributedString(string: string)\n            mutableString.addAttribute(.font, value: codeFont, range: NSRange(0..<string.count))\n            mutableString.fixAttributes(in: NSRange(0..<string.count))\n\n            insertText(mutableString, replacementRange: selectedRange)\n            return\n        }\n\n        insertText(\"``\")\n        setSelectedRange(NSRange(location: selectedRange.location, length: selectedRange.length + 1))\n    }\n\n    public func codeBlock() {\n        let currentRange = textView.selectedRange\n        if currentRange.length > 0 {\n            let substring = storage.attributedSubstring(from: currentRange)\n            let mutable = NSMutableAttributedString(string: \"```\\n\")\n            mutable.append(substring)\n\n            if substring.string.last != \"\\n\" {\n                mutable.append(NSAttributedString(string: \"\\n\"))\n            }\n            \n            mutable.append(NSAttributedString(string: \"```\\n\"))\n\n            insertText(mutable.string, replacementRange: currentRange)\n            setSelectedRange(NSRange(location: currentRange.location + 3, length: 0))\n            return\n        }\n\n        insertText(\"```\\n\\n```\\n\")\n        setSelectedRange(NSRange(location: currentRange.location + 4, length: 0))\n    }\n\n    public func quote() {\n        guard let pRange = getParagraphRange() else { return }\n        let paragraph = storage.mutableString.substring(with: pRange)\n\n        guard paragraph.isContainsLetters else {\n            insertText(\"> \")\n            return\n        }\n\n        var hasPrefix = false\n        var lines = [String]()\n\n        paragraph.enumerateLines { (line, _) in\n            hasPrefix = line.starts(with: \"> \")\n\n            var skipNext = false\n            var scanFinished = false\n            var cleanLine = String()\n\n            for char in line {\n                if skipNext {\n                    skipNext = false\n                    continue\n                }\n\n                if char == \">\" && !scanFinished {\n                    skipNext = true\n                    scanFinished = true\n                } else {\n                    cleanLine.append(char)\n                }\n            }\n\n            lines.append(cleanLine)\n        }\n\n        var result = String()\n        for line in lines {\n            if hasPrefix {\n                result += line + \"\\n\"\n            } else {\n                result += \"> \" + line + \"\\n\"\n            }\n        }\n\n        let selectRange = selectedRange.length == 0 || lines.count == 1\n            ? NSRange(location: pRange.location + result.count - 1, length: 0)\n            : NSRange(location: pRange.location, length: result.count)\n\n        insertText(result, replacementRange: pRange, selectRange: selectRange)\n    }\n    \n    private func getAttributedTodoString(_ string: String) -> NSAttributedString {\n        let string = NSMutableAttributedString(string: string)\n        string.addAttribute(.foregroundColor, value: NotesTextProcessor.syntaxColor, range: NSRange(0..<1))\n\n        var color = Color.black\n\n        #if os(OSX)\n            color = NSColor(named: \"mainText\")!\n        #endif\n\n        string.addAttribute(.foregroundColor, value: color, range: NSRange(1..<string.length))\n        return string\n    }\n    \n    private func replaceWith(string: String, range: NSRange? = nil) {\n        #if os(iOS)\n            var selectedRange: UITextRange\n        \n            if let range = range,\n                let start = textView.position(from: textView.beginningOfDocument, offset: range.location),\n                let end = textView.position(from: start, offset: range.length),\n                let sRange = textView.textRange(from: start, to: end) {\n                selectedRange = sRange\n            } else {\n                selectedRange = textView.selectedTextRange!\n            }\n\n            textView.replace(selectedRange, withText: string)\n        #else\n            var r = textView.selectedRange\n            if let range = range {\n                r = range\n            }\n        \n            textView.insertText(string, replacementRange: r)\n        #endif\n    }\n    \n    deinit {\n        #if os(OSX)\n            textView.isAutomaticQuoteSubstitutionEnabled = self.isAutomaticQuoteSubstitutionEnabled\n            textView.isAutomaticDashSubstitutionEnabled = self.isAutomaticDashSubstitutionEnabled\n        #endif\n\n        setTypingAttributes(font: UserDefaultsManagement.noteFont)\n        var text: NSAttributedString?\n\n        #if os(OSX)\n            text = textView.attributedString()\n        #else\n            text = textView.attributedText\n        #endif\n\n        if let attributed = text {\n            note.save(attributed: attributed)\n        }\n\n        #if os(iOS)\n            textView.initUndoRedoButons()\n        #endif\n    }\n    \n    func getParagraphRange() -> NSRange? {\n        if range.upperBound <= storage.length {\n            let paragraph = storage.mutableString.paragraphRange(for: range)\n            return paragraph\n        }\n        \n        return nil\n    }\n    \n    private func getParagraphRange(for location: Int) -> NSRange? {\n        guard location <= storage.length else { return nil}\n\n        let range = NSRange(location: location, length: 0)\n        let paragraphRange = storage.mutableString.paragraphRange(for: range)\n        \n        return paragraphRange\n    }\n            \n    func getTypingAttributes() -> Font {\n        #if os(OSX)\n            return textView.typingAttributes[.font] as! Font\n        #else\n            if let typingFont = textView.typingFont {\n                textView.typingFont = nil\n                return typingFont\n            }\n\n            guard textView.textStorage.length > 0, textView.selectedRange.location > 0 else { return UserDefaultsManagement.noteFont }\n\n            let i = textView.selectedRange.location - 1\n            let upper = textView.selectedRange.upperBound\n            let substring = textView.attributedText.attributedSubstring(from: NSRange(i..<upper))\n\n            if let prevFont = substring.attribute(.font, at: 0, effectiveRange: nil) as? UIFont {\n                return prevFont\n            }\n\n            return UserDefaultsManagement.noteFont\n        #endif\n    }\n\n    #if os(OSX)\n    private func getDefaultColor() -> NSColor {\n        var color = NSColor(named: \"mainText\")!\n        \n        return color\n    }\n    #endif\n    \n    func setTypingAttributes(font: Font) {\n        #if os(OSX)\n            textView.typingAttributes[.font] = font\n        #else\n            textView.typingFont = font\n            textView.typingAttributes[.font] = font\n        #endif\n    }\n        \n    public func setSelectedRange(_ range: NSRange) {\n        #if os(OSX)\n            if range.upperBound <= storage.length {\n                textView.setSelectedRange(range)\n            }\n        #else\n            textView.selectedRange = range\n        #endif\n    }\n    \n    func getAttributedString() -> NSAttributedString {\n        #if os(OSX)\n            return textView.attributedString()\n        #else\n            return textView.attributedText\n        #endif\n    }\n    \n    private func insertText(_ string: Any, replacementRange: NSRange? = nil, selectRange: NSRange? = nil) {\n        let range = replacementRange ?? self.textView.selectedRange\n        \n    #if os(iOS)\n        guard\n            let start = textView.position(from: self.textView.beginningOfDocument, offset: range.location),\n            let end = textView.position(from: start, offset: range.length),\n            let selectedRange = textView.textRange(from: start, to: end)\n        else { return }\n    \n        var replaceString = String()\n        if let attributedString = string as? NSAttributedString {\n            replaceString = attributedString.string\n        }\n\n        if let plainString = string as? String {\n            replaceString = plainString\n        }\n\n        self.textView.undoManager?.beginUndoGrouping()\n        self.textView.replace(selectedRange, withText: replaceString)\n\n        if let string = string as? NSAttributedString {\n            let editedRange = NSRange(location: range.location, length: replaceString.count)\n            storage.replaceCharacters(in: editedRange, with: string)\n            storage.delegate?.textStorage!(storage, didProcessEditing: NSTextStorage.EditActions.editedCharacters, range: editedRange, changeInLength: 1)\n        } else {\n            let parRange = NSRange(location: range.location, length: replaceString.count)\n            let parStyle = NSMutableParagraphStyle()\n            parStyle.alignment = .left\n            parStyle.lineSpacing = CGFloat(UserDefaultsManagement.editorLineSpacing)\n            self.textView.textStorage.addAttribute(.paragraphStyle, value: parStyle, range: parRange)\n        }\n\n        self.textView.undoManager?.endUndoGrouping()\n    #else\n        textView.insertText(string, replacementRange: range)\n    #endif\n        \n        if let select = selectRange {\n            setSelectedRange(select)\n        }\n    }\n\n    public static func getAttributedCode(string: String) -> NSMutableAttributedString {\n        let attributedString = NSMutableAttributedString(string: string)\n        let range = NSRange(0..<attributedString.length)\n\n        attributedString.addAttribute(.font, value: NotesTextProcessor.codeFont as Any, range: range)\n        attributedString.fixAttributes(in: range)\n        return attributedString\n    }\n\n    public func list() {\n        guard let pRange = getParagraphRange() else { return }\n\n        let attributedString = getAttributedString().attributedSubstring(from: pRange)\n        let mutable = NSMutableAttributedString(attributedString: attributedString)\n        let string = mutable.unloadTasks().string\n\n        guard string.isContainsLetters else {\n            insertText(\"- \")\n            return\n        }\n\n        var lines = [String]()\n        var addPrefixes = false\n\n        string.enumerateLines { (line, _) in\n            addPrefixes = !self.hasPrefix(line: line, numbers: false)\n            let cleanLine = self.cleanListItem(line: line)\n            lines.append(cleanLine)\n        }\n\n        var result = String()\n        for line in lines {\n            if addPrefixes {\n                var empty = String()\n                var scanFinished = false\n\n                for char in line {\n                    if char.isWhitespace && !scanFinished {\n                        empty.append(char)\n                    } else {\n                        if !scanFinished {\n                            empty.append(\"- \\(char)\")\n                            scanFinished = true\n                        } else {\n                            empty.append(char)\n                        }\n                    }\n                }\n\n                result += empty + \"\\n\"\n            } else {\n                result += line + \"\\n\"\n            }\n        }\n\n        let selectRange = selectedRange.length == 0 || lines.count == 1\n            ? NSRange(location: pRange.location + result.count - 1, length: 0)\n            : NSRange(location: pRange.location, length: result.count)\n        \n        reset(pRange: pRange)\n        insertText(result, replacementRange: pRange, selectRange: selectRange)\n        \n        // Fixes small font bug\n        //storage.addAttribute(.font, value: NotesTextProcessor.font, range: NSRange(location: pRange.location, length: result.count))\n    }\n\n    public func orderedList() {\n        guard let pRange = getParagraphRange() else { return }\n\n        let attributedString = getAttributedString().attributedSubstring(from: pRange)\n        let mutable = NSMutableAttributedString(attributedString: attributedString)\n        let string = mutable.unloadTasks().string\n\n        guard string.isContainsLetters else {\n            insertText(\"1. \")\n            return\n        }\n\n        var lines = [String]()\n        var addPrefixes = false\n\n        string.enumerateLines { (line, _) in\n            addPrefixes = !self.hasPrefix(line: line, numbers: true)\n            let cleanLine = self.cleanListItem(line: line)\n            lines.append(cleanLine)\n        }\n\n        var result = String()\n        var i = 1\n        var deep = 0\n\n        for line in lines {\n            if addPrefixes {\n                var empty = String()\n                var scanFinished = false\n                var lineDeep = 0\n\n                for char in line {\n                    if char.isWhitespace && !scanFinished {\n                        empty.append(char)\n                        lineDeep += 1\n                    } else {\n                        if !scanFinished {\n\n                            // Resets numeration on deeper lvl\n                            if lineDeep != deep {\n                                i = 1\n                                deep = lineDeep\n                            }\n\n                            empty.append(\"\\(i). \\(char)\")\n                            scanFinished = true\n                        } else {\n                            empty.append(char)\n                        }\n                    }\n                }\n\n\n                result += empty + \"\\n\"\n                i += 1\n            } else {\n                result += line + \"\\n\"\n            }\n        }\n\n        let selectRange = selectedRange.length == 0 || lines.count == 1\n            ? NSRange(location: pRange.location + result.count - 1, length: 0)\n            : NSRange(location: pRange.location, length: result.count)\n\n        reset(pRange: pRange)\n        insertText(result, replacementRange: pRange, selectRange: selectRange)\n        \n        // Fixes small font bug\n        //storage.addAttribute(.font, value: NotesTextProcessor.font, range: NSRange(location: pRange.location, length: result.count))\n    }\n    \n    private func reset(pRange: NSRange) {\n        storage.removeAttribute(.strikethroughStyle, range: pRange)\n        storage.removeAttribute(.todo, range: pRange)\n    }\n\n    private func cleanListItem(line: String) -> String {\n        var line = line\n\n        let digitRegex = try! NSRegularExpression(pattern: \"^([0-9]+\\\\. )\")\n        let digitRegexResult = digitRegex.firstMatch(in: line, range: NSRange(0..<line.count))\n\n        let charRegex = try! NSRegularExpression(pattern: \"^([-*–+]+ )\")\n        let charRegexResult = charRegex.firstMatch(in: line, range: NSRange(0..<line.count))\n\n        if line.starts(with: \"- [ ] \") || line.starts(with: \"- [x] \") {\n            line = String(line.dropFirst(6))\n        } else if let result = digitRegexResult {\n            let qty = result.range.length\n            line = String(line.dropFirst(qty))\n        } else if let result = charRegexResult, !line.contains(\"- [\") {\n            let qty = result.range.length\n            line = String(line.dropFirst(qty))\n        }\n\n        return line\n    }\n\n    private func parseTodo(line: String) -> (Bool, Bool, String) {\n        var count = 0\n        var hasTodoPrefix = false\n        var hasIncompletedTask = false\n        var charFound = false\n        var whitespacePrefix = String()\n        var letterPrefix = String()\n\n        for char in line {\n            if char.isWhitespace && !charFound {\n                count += 1\n                whitespacePrefix.append(char)\n                continue\n            } else {\n                charFound = true\n                letterPrefix.append(char)\n            }\n        }\n\n        if letterPrefix.starts(with: \"- [ ] \") {\n            hasTodoPrefix = false\n            hasIncompletedTask = true\n        }\n\n        if letterPrefix.starts(with: \"- [x] \") {\n            hasTodoPrefix = true\n        }\n\n        letterPrefix =\n            letterPrefix\n                .replacingOccurrences(of: \"- [ ] \", with: \"\")\n                .replacingOccurrences(of: \"- [x] \", with: \"\")\n\n        return (hasTodoPrefix, hasIncompletedTask, whitespacePrefix + letterPrefix)\n    }\n\n    private func hasPrefix(line: String, numbers: Bool) -> Bool {\n        if line.starts(with: \"- [ ] \") || line.starts(with: \"- [x] \") {\n            return false\n        }\n\n        var checkNumberDot = false\n\n        for char in line {\n            if checkNumberDot {\n                if char == \".\" {\n                    return numbers\n                }\n            }\n\n            if char.isWhitespace {\n                continue\n            } else {\n                if char.isNumber {\n                    checkNumberDot = true\n                    continue\n                } else if char == \"-\" {\n                    return !numbers\n                } else {\n                    return false\n                }\n            }\n        }\n\n        return false\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/TextStorageProcessor.swift",
    "content": "//\n//  TextStorageProcessor.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 26.06.2022.\n//  Copyright © 2022 Oleksandr Hlushchenko. All rights reserved.\n//\n\n#if os(OSX)\nimport Cocoa\nimport AVKit\n#else\nimport UIKit\nimport AVKit\n#endif\n\nclass TextStorageProcessor: NSObject, NSTextStorageDelegate {\n    public var editor: EditTextView?\n    public var detector = CodeBlockDetector()\n\n#if os(iOS)\n    public func textStorage(\n        _ textStorage: NSTextStorage,\n        didProcessEditing editedMask: NSTextStorage.EditActions,\n        range editedRange: NSRange,\n        changeInLength delta: Int) {\n\n        guard editedMask != .editedAttributes else { return }\n        process(textStorage: textStorage, range: editedRange, changeInLength: delta)\n    }\n#else\n    public func textStorage(\n        _ textStorage: NSTextStorage,\n        didProcessEditing editedMask: NSTextStorageEditActions,\n        range editedRange: NSRange,\n        changeInLength delta: Int) {\n\n        guard editedMask != .editedAttributes else { return }\n        process(textStorage: textStorage, range: editedRange, changeInLength: delta)\n            \n        if editedMask.contains(.editedCharacters), delta < 0 {\n            if let layoutManager = textStorage.layoutManagers.first,\n               let textContainer = layoutManager.textContainers.first,\n               let textView = textContainer.textView {\n                textView.needsDisplay = true\n            }\n        }\n    }\n#endif\n\n    private func process(textStorage: NSTextStorage, range editedRange: NSRange, changeInLength delta: Int) {\n        guard let note = editor?.note, textStorage.length > 0 else { return }\n\n        defer {\n            loadImages(textStorage: textStorage, checkRange: editedRange)\n            textStorage.updateParagraphStyle(range: editedRange)\n        }\n\n        if note.content.length == textStorage.length && (\n            note.content.string.fnv1a == note.cacheHash\n        ) { return }\n        \n        // Full load\n        if editedRange.length == textStorage.length {\n            NotesTextProcessor.highlight(attributedString: textStorage)\n            return\n        }\n\n        let codeBlockRanges = detector.findCodeBlocks(in: textStorage)\n        let paragraphRange = (textStorage.string as NSString).paragraphRange(for: editedRange)\n\n        NotesTextProcessor.highlightMarkdown(attributedString: textStorage, paragraphRange: paragraphRange, codeBlockRanges: codeBlockRanges)\n\n        // Code block founds\n        var result = detector.codeBlocks(textStorage: textStorage, editedRange: editedRange, delta: delta, newRanges: codeBlockRanges)\n        note.codeBlockRangesCache = codeBlockRanges\n\n        // Highlight code block end (```), that wiped previously in highlightMarkdown\n        for range in codeBlockRanges {\n            if NSIntersectionRange(range, paragraphRange).length > 0 {\n                if result.edited == nil {\n                    result.code?.append(range)\n                }\n            }\n        }\n\n        if let ranges = result.code {\n            for range in ranges {\n                NotesTextProcessor\n                    .getHighlighter()\n                    .highlight(in: textStorage, fullRange: range)\n            }\n        }\n\n        if let editedBlock = result.edited, let editedParagraph = result.editedParagraph {\n            NotesTextProcessor\n                .getHighlighter()\n                .highlight(in: textStorage, fullRange: editedBlock, editedRange: editedParagraph)\n        }\n\n        if let ranges = result.md {\n            for range in ranges {\n                let safeRange = safeRange(range, in: textStorage)\n                NotesTextProcessor.resetFont(attributedString: textStorage, paragraphRange: safeRange)\n                NotesTextProcessor.highlightMarkdown(attributedString: textStorage, paragraphRange: safeRange)\n            }\n        }\n    }\n\n    private func loadImages(textStorage: NSTextStorage, checkRange: NSRange) {\n        guard let note = editor?.note else { return }\n\n        var start = checkRange.lowerBound\n        var finish = checkRange.upperBound\n\n        if checkRange.upperBound < textStorage.length {\n            finish = checkRange.upperBound + 1\n        }\n\n        if checkRange.lowerBound > 1 {\n            start = checkRange.lowerBound - 1\n        }\n\n        let affectedRange = NSRange(start..<finish)\n        textStorage.enumerateAttribute(.attachment, in: affectedRange) { (value, range, _) in\n            guard let attachment = value as? NSTextAttachment,\n                  let meta = textStorage.getMeta(at: range.location) else { return }\n\n            var url = meta.url\n\n            // 1. check data to save (copy/paste, drag/drop)\n            if let data = textStorage.getData(at: range.location),\n               let result = note.save(data: data, preferredName: meta.url.lastPathComponent) {\n\n                textStorage.addAttributes([\n                    .attachmentUrl: result.1,\n                    .attachmentPath: result.0\n                ], range: range)\n\n                url = result.1\n            }\n\n            // 2. load\n            let maxWidth = getImageMaxWidth()\n            loadImage(attachment: attachment, url: url, range: range, textStorage: textStorage, maxWidth: maxWidth)\n        }\n    }\n\n    public func loadImage(attachment: NSTextAttachment, url: URL, range: NSRange, textStorage: NSTextStorage, maxWidth: CGFloat) {\n        editor?.imagesLoaderQueue.addOperation {\n            var image: PlatformImage?\n            var size: CGSize?\n\n            if url.isMedia {\n                let imageSize = url.getBorderSize(maxWidth: maxWidth)\n\n                size = imageSize\n                image = NoteAttachment.getImage(url: url, size: imageSize)\n            } else {\n                let attachment = NoteAttachment(url: url)\n                if let attachmentImage = attachment.getAttachmentImage() {\n                    size = attachmentImage.size\n                    image = attachmentImage\n                }\n            }\n\n            DispatchQueue.main.async {\n                guard let manager = self.editor?.layoutManager as? NSLayoutManager else { return }\n\n            #if os(iOS)\n                attachment.image = image\n                if let size = size {\n                    attachment.bounds = CGRect(x: 0, y: 0, width: size.width, height: size.height)\n                }\n\n                // iOS only unknown behaviour\n                let paragraphStyle = NSMutableParagraphStyle()\n                paragraphStyle.alignment = url.isMedia ? .center : .left\n                textStorage.addAttribute(.paragraphStyle, value: paragraphStyle, range: range)\n            #elseif os(OSX)\n                guard let container = self.editor?.textContainer,\n                      let attachmentImage = image,\n                      let size = size else { return }\n\n                let cell = FSNTextAttachmentCell(textContainer: container, image: attachmentImage)\n                cell.image?.size = size\n                attachment.image = nil\n                attachment.attachmentCell = cell\n                attachment.bounds = NSRect(x: 0, y: 0, width: size.width, height: size.height)\n            #endif\n\n                let safe = self.safeRange(range, in: textStorage)\n\n                textStorage.edited(.editedAttributes, range: safe, changeInLength: 0)\n                manager.invalidateLayout(forCharacterRange: safe, actualCharacterRange: nil)\n            }\n        }\n    }\n\n    private func getImageMaxWidth() -> CGFloat {\n        #if os(iOS)\n            return UIApplication.getVC().view.frame.width - 35\n        #else\n            return CGFloat(UserDefaultsManagement.imagesWidth)\n        #endif\n    }\n\n    private func safeRange(_ range: NSRange, in textStorage: NSTextStorage) -> NSRange {\n        let storageLength = textStorage.length\n        let loc = min(max(0, range.location), storageLength)\n        let end = min(max(0, range.location + range.length), storageLength)\n        return NSRange(location: loc, length: end - loc)\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/UserDefaultsManagement.swift",
    "content": "//\n//  Preferences.swift\n//  FSNotes\n//\n//  Created by Oleksandr Glushchenko on 8/8/17.\n//  Copyright © 2017 Oleksandr Glushchenko. All rights reserved.\n//\n\nimport Foundation\n\n#if os(OSX)\n    import Cocoa\n#else\n    import UIKit\n#endif\n\npublic class UserDefaultsManagement {\n    \n    static var apiPath = \"https://api.fsnot.es/\"\n    static var webPath = \"https://p.fsnot.es/\"\n\n    public static var global = NSUbiquitousKeyValueStore.default\n    \n#if os(OSX)\n    typealias Color = NSColor\n    typealias Image = NSImage\n    typealias Font = NSFont\n\n    public static var shared: UserDefaults? = UserDefaults.standard\n    public static var DefaultFontSize = 14\n#else\n    typealias Color = UIColor\n    typealias Image = UIImage\n    typealias Font = UIFont\n\n    public static var shared: UserDefaults? = UserDefaults(suiteName: \"group.es.fsnot.user.defaults\")\n    static var DefaultFontSize = 17\n#endif\n\n    static var DefaultSnapshotsInterval = 1\n    static var DefaultSnapshotsIntervalMinutes = 5\n    \n    static var DefaultFontColor = Color.black\n    static var DefaultBgColor = Color.white\n\n    private struct Constants {\n        static let AllowTouchID = \"allowTouchID\"\n        static let AppearanceTypeKey = \"appearanceType\"\n        static let AskCommitMessage = \"askCommitMessage\"\n        static let ApiBookmarksData = \"apiBookmarksData\"\n        static let AutoInsertHeader = \"autoInsertHeader\"\n        static let AutoVersioning = \"autoVersioning\"\n        static let AutomaticSpellingCorrection = \"automaticSpellingCorrection\"\n        static let AutomaticQuoteSubstitution = \"automaticQuoteSubstitution\"\n        static let AutomaticDataDetection = \"automaticDataDetection\"\n        static let AutomaticLinkDetection = \"automaticLinkDetection\"\n        static let AutomaticTextReplacement = \"automaticTextReplacement\"\n        static let AutomaticDashSubstitution = \"automaticDashSubstitution\"\n        static let AutomaticConflictsResolution = \"automaticConflictsResolution\"\n        static let BackupManually = \"backupManually\"\n        static let BgColorKey = \"bgColorKeyed\"\n        static let boldKey = \"boldKeyed\"\n        static let CacheDiff = \"cacheDiff\"\n        static let CellSpacing = \"cellSpacing\"\n        static let CellFrameOriginY = \"cellFrameOriginY\"\n        static let ClickableLinks = \"clickableLinks\"\n        static let CodeFontNameKey = \"codeFont\"\n        static let CodeFontSizeKey = \"codeFontSize\"\n        static let codeBlockHighlight = \"codeBlockHighlight\"\n        static let CodeBlocksWithSyntaxHighlighting = \"codeBlocksWithSyntaxHighlighting\"\n        static let codeTheme = \"codeTheme2025\"\n        static let ContinuousSpellChecking = \"continuousSpellChecking\"\n        static let CrashedLastTime = \"crashedLastTime\"\n        static let CustomWebServer = \"customWebServer\"\n        static let DefaultLanguageKey = \"defaultLanguage\"\n        static let DefaultKeyboardKey = \"defaultKeyboard\"\n        static let FontNameKey = \"font\"\n        static let FontSizeKey = \"fontsize\"\n        static let FontColorKey = \"fontColorKeyed\"\n        static let FullScreen = \"fullScreen\"\n        static let FirstLineAsTitle = \"firstLineAsTitle\"\n        static let MaxChildDirs = \"maxChildDirs\"\n        static let NoteType = \"noteType\"\n        static let NoteExtension = \"noteExtension\"\n        static let GrammarChecking = \"grammarChecking\"\n        static let GitStorage = \"gitStorage\"\n        static let GitUsername = \"gitUsername\"\n        static let GitPassword = \"gitPassword\"\n        static let GitOrigin = \"gitOrigin\"\n        static let GitPrivateKeyData = \"gitPrivateKeyData\"\n        static let GitPasspharse = \"gitPasspharse\"\n        static let HideDate = \"hideDate\"\n        static let HideOnDeactivate = \"hideOnDeactivate\"\n        static let HideSidebar = \"hideSidebar\"\n        static let HidePreviewKey = \"hidePreview\"\n        static let HidePreviewImages = \"hidePreviewImages\"\n        static let iCloudDrive = \"iCloudDrive\"\n        static let ImagesWidthKey = \"imagesWidthKey\"\n        static let IndentUsing = \"indentUsing\"\n        static let InlineTags = \"inlineTags\"\n        static let IsFirstLaunch = \"isFirstLaunch\"\n        static let italicKey = \"italicKeyed\"\n        static let LastCommitMessage = \"lastCommitMessage\"\n        static let LastNews = \"lastNews\"\n        static let LastSelectedPath = \"lastSelectedPath\"\n        static let LastScreenX = \"lastScreenX\"\n        static let LastScreenY = \"lastScreenY\"\n        static let LastSidebarItem = \"lastSidebarItem\"\n        static let LastProjectURL = \"lastProjectUrl\"\n        static let LineHeightMultipleKey = \"lineHeightMultipleKey\"\n        static let LineSpacingEditorKey = \"lineSpacingEditor\"\n        static let LineWidthKey = \"lineWidth\"\n        static let LockOnSleep = \"lockOnSleep\"\n        static let LockOnScreenActivated = \"lockOnScreenActivated\"\n        static let LockAfterIDLE = \"lockAfterIdle\"\n        static let LockAfterUserSwitch = \"lockAfterUserSwitch\"\n        static let MarginSizeKey = \"marginSize\"\n        static let MasterPasswordHint = \"masterPasswordHint\"\n        static let MathJaxPreview = \"mathJaxPreview\"\n        static let NonContiguousLayout = \"allowsNonContiguousLayout\"\n        static let NoteContainer = \"noteContainer\"\n        static let Preview = \"preview\"\n        static let PreviewFontSize = \"previewFontSize\"\n        static let ProjectsKey = \"projects\"\n        static let ProjectsKeyNew = \"ProjectsKeyNew\"\n        static let RecentSearches = \"recentSearches\"\n        static let PullInterval = \"pullInterval\"\n        static let SaveInKeychain = \"saveInKeychain\"\n        static let SearchHighlight = \"searchHighlighting\"\n        static let SeparateRepo = \"separateRepo\"\n        static let SftpHost = \"sftpHost\"\n        static let SftpPort = \"sftpPort\"\n        static let SftpPath = \"sftpPath\"\n        static let SftpPasspharse = \"sftpPassphrase\"\n        static let SftpWeb = \"sftpWeb\"\n        static let SftpUsername = \"sftpUsername\"\n        static let SftpPassword = \"sftpPassword\"\n        static let SftpKeysAccessData = \"sftpKeysAccessData\"\n        static let SftpUploadBookmarksData = \"sftpUploadBookmarksData\"\n        static let SharedContainerKey = \"sharedContainer\"\n        static let ShowDockIcon = \"showDockIcon\"\n        static let shouldFocusSearchOnESCKeyDown = \"shouldFocusSearchOnESCKeyDown\"\n        static let ShowInMenuBar = \"showInMenuBar\"\n        static let SmartInsertDelete = \"smartInsertDelete\"\n        static let SnapshotsInterval = \"snapshotsInterval\"\n        static let SnapshotsIntervalMinutes = \"snapshotsIntervalMinutes\"\n        static let SortBy = \"sortBy\"\n        static let StorageType = \"storageType\"\n        static let StoragePathKey = \"storageUrl\"\n        static let TableOrientation = \"isUseHorizontalMode\"\n        static let TextMatchAutoSelection = \"textMatchAutoSelection\"\n        static let TrashKey = \"trashKey\"\n        static let UploadKey = \"uploadKey\"\n        static let UseTextBundleToStoreDates = \"useTextBundleToStoreDates\"\n        static let AutocloseBrackets = \"autocloseBrackets\"\n        static let Welcome = \"welcome2026\"\n    }\n\n    static var codeFontName: String {\n        get {\n            if let returnFontName = shared?.object(forKey: Constants.CodeFontNameKey) as? String {\n                return returnFontName\n            } else {\n                return \"Source Code Pro\"\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CodeFontNameKey)\n        }\n    }\n\n    static var codeFontSize: Int {\n        get {\n            if let returnFontSize = shared?.object(forKey: Constants.CodeFontSizeKey) as? Int {\n                return returnFontSize\n            } else {\n                return self.DefaultFontSize\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CodeFontSizeKey)\n        }\n    }\n\n    static var fontName: String? {\n        get {\n            if let returnFontName = shared?.object(forKey: Constants.FontNameKey) as? String {\n                return returnFontName\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.FontNameKey)\n        }\n    }\n    \n    static var fontSize: Int {\n        get {\n            if let returnFontSize = shared?.object(forKey: Constants.FontSizeKey) as? Int {\n                return returnFontSize\n            } else {\n                return self.DefaultFontSize\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.FontSizeKey)\n        }\n    }\n    \n    static var externalEditor: String {\n        get {\n            \n            if let name = shared?.object(forKey: \"externalEditorApp\") as? String, name.count > 0 {\n                return name\n            } else {\n                return \"TextEdit\"\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: \"externalEditorApp\")\n        }\n    }\n\n    static var horizontalOrientation: Bool {\n        get {\n            if let returnHorizontalOrientation = shared?.object(forKey: Constants.TableOrientation) as? Bool {\n                return returnHorizontalOrientation\n            } else {\n                return false\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.TableOrientation)\n            \n            // reset the note list height / width\n            shared?.removeObject(forKey: \"NSSplitView Subview Frames EditorSplitView\")\n            \n            if (newValue){\n                // for top-to-bottom layout, set note list cell height to 0\n                cellSpacing = 0\n            } else {\n                // for side-by-side layout, reset note list cell height to default\n                shared?.removeObject(forKey: Constants.CellSpacing)\n            }\n        }\n    }\n    \n    static var iCloudDocumentsContainer: URL? {\n        get {\n            if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent(\"Documents\").standardized {\n                if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) {\n                    do {\n                        try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil)\n                        \n                        return iCloudDocumentsURL.standardized\n                    } catch {\n                        print(\"Home directory creation: \\(error)\")\n                    }\n                } else {\n                   return iCloudDocumentsURL.standardized\n                }\n            }\n\n            return nil\n        }\n    }\n    \n    static var localDocumentsContainer: URL? {\n        get {\n            if var path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {\n\n#if os(iOS)\n                if path.starts(with: \"/var\") {\n                    path = \"/private\\(path)\"\n                }\n#endif\n\n                return URL(fileURLWithPath: path, isDirectory: true)\n            }\n \n            return nil\n        }\n    }\n    \n    static var customStoragePath: String? {\n        get {\n            if let storagePath = shared?.object(forKey: Constants.StoragePathKey) as? String {\n                if FileManager.default.isWritableFile(atPath: storagePath) {\n                    storageType = .custom\n                    return storagePath\n                } else {\n                    print(\"Storage path not accessible, settings resetted to default\")\n                }\n            }\n            \n            return nil\n        }\n        \n        set {\n            shared?.set(newValue, forKey: Constants.StoragePathKey)\n        }\n    }\n    \n    static var storagePath: String? {\n        get {\n            if let customStoragePath = self.customStoragePath {\n                return customStoragePath\n            }\n\n            if let iCloudDocumentsURL = self.iCloudDocumentsContainer {\n                storageType = .iCloudDrive\n                return iCloudDocumentsURL.path\n            }\n\n            if let localDocumentsContainer = localDocumentsContainer {\n                storageType = .local\n                return localDocumentsContainer.path\n            }\n\n            return nil\n        }\n    }\n\n    public static var storageType: StorageType {\n        get {\n            if let type = shared?.object(forKey: Constants.StorageType) as? Int {\n                return StorageType(rawValue: type) ?? .none\n            }\n            return .none\n        }\n        set {\n            shared?.set(newValue.rawValue, forKey: Constants.StorageType)\n        }\n    }\n    \n    static var storageUrl: URL? {\n        get {\n            if let path = storagePath {\n                let expanded = NSString(string: path).expandingTildeInPath\n\n                return URL.init(fileURLWithPath: expanded, isDirectory: true).standardized\n            }\n            \n            return nil\n        }\n    }\n\n    static var preview: Bool {\n        get {\n            if let preview = shared?.object(forKey: Constants.Preview) as? Bool {\n                return preview\n            } else {\n                return false\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.Preview)\n        }\n    }\n    \n    static var lastSync: Date? {\n        get {\n            if let sync = shared?.object(forKey: \"lastSync\") as? Date {\n                return sync\n            } else {\n                return nil\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: \"lastSync\")\n        }\n    }\n    \n    static var hideOnDeactivate: Bool {\n        get {\n            if let hideOnDeactivate = shared?.object(forKey: Constants.HideOnDeactivate) as? Bool {\n                return hideOnDeactivate\n            } else {\n                return false\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.HideOnDeactivate)\n        }\n    }\n    \n    static var cellSpacing: Int {\n        get {\n            if let cellSpacing = shared?.object(forKey: Constants.CellSpacing) as? NSNumber {\n                return cellSpacing.intValue\n            } else {\n                return 33\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CellSpacing)\n        }\n    }\n        \n    static var cellViewFrameOriginY: CGFloat? {\n        get {\n            if let number = shared?.object(forKey: Constants.CellFrameOriginY) as? NSNumber {\n                return CGFloat(number.doubleValue)\n            }\n            return nil\n        }\n        set {\n            if let newValue = newValue {\n                shared?.set(Double(newValue), forKey: Constants.CellFrameOriginY)\n            } else {\n                shared?.removeObject(forKey: Constants.CellFrameOriginY)\n            }\n        }\n    }\n    \n    static var hidePreview: Bool {\n        get {\n            if let returnMode = shared?.object(forKey: Constants.HidePreviewKey) as? Bool {\n                return returnMode\n            } else {\n                return false\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.HidePreviewKey)\n        }\n    }\n        \n    static var sort: SortBy {\n        get {\n            if let result = global.object(forKey: \"sortBy\") as? String, let sortBy = SortBy(rawValue: result) {\n                return sortBy\n            } else {\n                return .modificationDate\n            }\n        }\n        set {\n            global.set(newValue.rawValue, forKey: \"sortBy\")\n        }\n    }\n    \n    static var sortDirection: Bool {\n        get {\n            if let returnMode = global.object(forKey: \"sortDirection\") as? Bool {\n                return returnMode\n            } else {\n                return true\n            }\n        }\n        set {\n            global.set(newValue, forKey: \"sortDirection\")\n        }\n    }\n    \n    static var hideSidebar: Bool {\n        get {\n            if let hide = shared?.object(forKey: \"hideSidebar\") as? Bool {\n                return hide\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: \"hideSidebar\")\n        }\n    }\n    \n    static var notesTableWidth: CGFloat {\n        get {\n            if let value = shared?.object(forKey: \"sidebarSize\") as? Int {\n                return CGFloat(value)\n            }\n\n            #if os(iOS)\n                return 0\n            #else\n                return 300\n            #endif\n        }\n        set {\n            shared?.set(Int(newValue), forKey: \"sidebarSize\")\n        }\n    }\n    \n    static var hideSidebarTable: Bool {\n        get {\n            if let hide = shared?.object(forKey: \"hideRealSidebar\") as? Bool {\n                return hide\n            }\n            \n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: \"hideRealSidebar\")\n        }\n    }\n    \n    static var sidebarTableWidth: CGFloat {\n        get {\n            if let size = shared?.object(forKey: \"realSidebarSize\") as? Int {\n                return CGFloat(size)\n            }\n            return 150\n        }\n        set {\n            shared?.set(Int(newValue), forKey: \"realSidebarSize\")\n        }\n    }\n    \n    static var codeBlockHighlight: Bool {\n        get {\n            if let highlight = shared?.object(forKey: Constants.codeBlockHighlight) as? Bool {\n                return highlight\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.codeBlockHighlight)\n        }\n    }\n\n    static var lastSelectedURL: URL? {\n        get {\n            if let url = shared?.url(forKey: Constants.LastSelectedPath) {\n                return url\n            }\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LastSelectedPath)\n        }\n    }\n    \n    static var focusInEditorOnNoteSelect: Bool {\n        get {\n            if let result = shared?.object(forKey: \"focusInEditorOnNoteSelect\") as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: \"focusInEditorOnNoteSelect\")\n        }\n    }\n    \n    static var defaultKeyboard: String? {\n        get {\n            if let dk = shared?.string(forKey: Constants.DefaultKeyboardKey) as? String {\n                return dk\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.DefaultKeyboardKey)\n        }\n    }\n    \n    static var defaultLanguage: Int {\n        get {\n            if let dl = shared?.object(forKey: Constants.DefaultLanguageKey) as? Int {\n                return dl\n            }\n\n            if let code = NSLocale.current.languageCode {\n                return LanguageType.withCode(rawValue: code)\n            }\n            \n            return 0\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.DefaultLanguageKey)\n        }\n    }\n    \n    static var autocloseBrackets: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutocloseBrackets) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutocloseBrackets)\n        }\n    }\n    \n    static var lastProjectURL: URL? {\n        get {\n            if let lastProject = shared?.url(forKey: Constants.LastProjectURL) {\n                return lastProject\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LastProjectURL)\n        }\n    }\n\n    static var lastSidebarItem: Int? {\n        get {\n            if let index = shared?.object(forKey: Constants.LastSidebarItem) as? Int {\n                return index\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LastSidebarItem)\n        }\n    }\n    \n    static var showDockIcon: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.ShowDockIcon) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.ShowDockIcon)\n        }\n    }\n    \n    static var editorLineSpacing: Float {\n        get {\n            if let result = shared?.object(forKey: Constants.LineSpacingEditorKey) as? Float {\n                return Float(Int(result))\n            } else {\n                #if os(iOS)\n                    return 6\n                #else\n                    return 4\n                #endif\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LineSpacingEditorKey)\n        }\n    }\n    \n    static var lineHeightMultiple: CGFloat {\n        get {\n            if let result = shared?.object(forKey: Constants.LineHeightMultipleKey) as? Float {\n                return CGFloat(result)\n            } else {\n                return 1.4\n            }\n        }\n        set {\n            shared?.set(Float(newValue), forKey: Constants.LineHeightMultipleKey)\n        }\n    }\n\n    static var imagesWidth: Float {\n        get {\n            if let result = shared?.object(forKey: Constants.ImagesWidthKey) as? Float {\n                return result\n            }\n            return 450\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.ImagesWidthKey)\n        }\n    }\n\n    static var lineWidth: Float {\n        get {\n            if let result = shared?.object(forKey: Constants.LineWidthKey) as? Float {\n                return result\n            }\n            return 1000\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LineWidthKey)\n        }\n    }\n    \n    static var textMatchAutoSelection: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.TextMatchAutoSelection) as? Bool {\n                return result\n            }\n            \n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.TextMatchAutoSelection)\n        }\n    }\n    \n    static var continuousSpellChecking: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.ContinuousSpellChecking) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.ContinuousSpellChecking)\n        }\n    }\n    \n    static var grammarChecking: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.GrammarChecking) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GrammarChecking)\n        }\n    }\n    \n    static var smartInsertDelete: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.SmartInsertDelete) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SmartInsertDelete)\n        }\n    }\n    \n    static var automaticSpellingCorrection: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutomaticSpellingCorrection) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutomaticSpellingCorrection)\n        }\n    }\n    \n    static var automaticQuoteSubstitution: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutomaticQuoteSubstitution) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutomaticQuoteSubstitution)\n        }\n    }\n    \n    static var automaticDataDetection: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutomaticDataDetection) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutomaticDataDetection)\n        }\n    }\n    \n    static var automaticLinkDetection: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutomaticLinkDetection) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutomaticLinkDetection)\n        }\n    }\n        \n    static var automaticTextReplacement: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutomaticTextReplacement) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutomaticTextReplacement)\n        }\n    }\n    \n    static var automaticDashSubstitution: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutomaticDashSubstitution) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutomaticDashSubstitution)\n        }\n    }\n\n    static var isHiddenSidebar: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.HideSidebar) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.HideSidebar)\n        }\n    }\n    \n    static var shouldFocusSearchOnESCKeyDown: Bool {\n        get {\n            if let result = UserDefaults.standard.object(forKey: Constants.shouldFocusSearchOnESCKeyDown) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            UserDefaults.standard.set(newValue, forKey: Constants.shouldFocusSearchOnESCKeyDown)\n        }\n    }\n    \n    static var automaticConflictsResolution: Bool {\n        get {\n            if let result = UserDefaults.standard.object(forKey: Constants.AutomaticConflictsResolution) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            UserDefaults.standard.set(newValue, forKey: Constants.AutomaticConflictsResolution)\n        }\n    }\n\n    static var useTextBundleMetaToStoreDates: Bool {\n        get {\n            if let result = UserDefaults.standard.object(forKey: Constants.UseTextBundleToStoreDates) as? Bool {\n                return result\n            }\n            \n            return false\n        }\n        set {\n            UserDefaults.standard.set(newValue, forKey: Constants.UseTextBundleToStoreDates)\n        }\n    }\n\n    static var showInMenuBar: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.ShowInMenuBar) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.ShowInMenuBar)\n        }\n    }\n    \n    static var fileContainer: NoteContainer {\n        get {\n            #if SHARE_EXT\n                let defaults = UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\")\n                if let result = defaults?.object(forKey: Constants.SharedContainerKey) as? Int, let container = NoteContainer(rawValue: result) {\n                    return container\n                }\n            #endif\n\n            if let result = shared?.object(forKey: Constants.NoteContainer) as? Int, let container = NoteContainer(rawValue: result) {\n                return container\n            }\n            return .none\n        }\n        set {\n            #if os(iOS)\n            UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\")?.set(newValue.rawValue, forKey: Constants.SharedContainerKey)\n            #endif\n\n            shared?.set(newValue.rawValue, forKey: Constants.NoteContainer)\n        }\n    }\n\n    static var fileFormat: NoteType {\n        get {\n            return .Markdown\n        }\n        set {\n            shared?.set(newValue.tag, forKey: Constants.NoteType)\n        }\n    }\n\n    static var noteExtension: String {\n        get {\n            if let result = shared?.object(forKey: Constants.NoteExtension) as? String {\n                return result\n            }\n\n            return \"markdown\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.NoteExtension)\n        }\n    }\n\n    static var previewFontSize: Int {\n        get {\n            if let result = shared?.object(forKey: Constants.PreviewFontSize) as? Int {\n                return result\n            }\n            return 11\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.PreviewFontSize)\n        }\n    }\n\n    static var hidePreviewImages: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.HidePreviewImages) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.HidePreviewImages)\n        }\n    }\n\n    static var masterPasswordHint: String {\n        get {\n            if let hint = shared?.object(forKey: Constants.MasterPasswordHint) as? String {\n                return hint\n            }\n            return String()\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.MasterPasswordHint)\n        }\n    }\n\n    static var lockOnSleep: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.LockOnSleep) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LockOnSleep)\n        }\n    }\n\n    static var lockOnScreenActivated: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.LockOnScreenActivated) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LockOnScreenActivated)\n        }\n    }\n\n    static var lockOnUserSwitch: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.LockAfterUserSwitch) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LockAfterUserSwitch)\n        }\n    }\n\n    static var allowTouchID: Bool {\n        get {\n            if NSClassFromString(\"NSTouchBar\") == nil {\n                return false\n            }\n\n            if let result = shared?.object(forKey: Constants.AllowTouchID) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AllowTouchID)\n        }\n    }\n\n    static var hideDate: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.HideDate) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.HideDate)\n        }\n    }\n\n    static var indentUsing: Int {\n        get {\n            if let result = shared?.integer(forKey: Constants.IndentUsing) {\n                return result\n            }\n\n            return 0\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.IndentUsing)\n        }\n    }\n\n    static var firstLineAsTitle: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.FirstLineAsTitle) as? Bool {\n                return result\n            }\n\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.FirstLineAsTitle)\n        }\n    }\n\n    static var marginSize: Float {\n        get {\n            if let result = shared?.object(forKey: Constants.MarginSizeKey) as? Float {\n                return result\n            }\n            return 20\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.MarginSizeKey)\n        }\n    }\n\n    static var gitStorage: URL? {\n        get {\n            if let repositories = shared?.url(forKey: Constants.GitStorage) {\n                if !FileManager.default.fileExists(atPath: repositories.path) {\n                    try? FileManager.default.createDirectory(at: repositories, withIntermediateDirectories: true, attributes: nil)\n                }\n\n                return repositories\n            }\n\n            if let applicationSupport = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first {\n                let repositories = applicationSupport.appendingPathComponent(\"Repositories\")\n                \n                if !FileManager.default.fileExists(atPath: repositories.path) {\n                    try? FileManager.default.createDirectory(at: repositories, withIntermediateDirectories: true, attributes: nil)\n                }\n                \n                return repositories\n            }\n            \n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GitStorage)\n        }\n    }\n    \n    static var gitUsername: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.GitUsername) as? String {\n                if result.count == 0 {\n                    return nil\n                }\n                \n                return result\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GitUsername)\n        }\n    }\n    \n    static var gitPassword: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.GitPassword) as? String {\n                if result.count == 0 {\n                    return nil\n                }\n                \n                return result\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GitPassword)\n        }\n    }\n    \n    static var gitOrigin: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.GitOrigin) as? String {\n                if result.count == 0 {\n                    return nil\n                }\n                \n                return result\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GitOrigin)\n        }\n    }\n\n    static var snapshotsInterval: Int {\n        get {\n            if let interval = shared?.object(forKey: Constants.SnapshotsInterval) as? Int {\n                return interval\n            }\n\n            return self.DefaultSnapshotsInterval\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SnapshotsInterval)\n        }\n    }\n    \n    static var pullInterval: Int {\n        get {\n            if let interval = shared?.object(forKey: Constants.PullInterval) as? Int {\n                return interval\n            }\n\n            return 10\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.PullInterval)\n        }\n    }\n\n    static var snapshotsIntervalMinutes: Int {\n        get {\n            if let interval = shared?.object(forKey: Constants.SnapshotsIntervalMinutes) as? Int {\n                return interval\n            }\n\n            return self.DefaultSnapshotsIntervalMinutes\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SnapshotsIntervalMinutes)\n        }\n    }\n\n    static var backupManually: Bool {\n        get {\n            if let returnMode = shared?.object(forKey: Constants.BackupManually) as? Bool {\n                return returnMode\n            } else {\n                return true\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.BackupManually)\n        }\n    }\n\n    static var fullScreen: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.FullScreen) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.FullScreen)\n        }\n    }\n\n    static var inlineTags: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.InlineTags) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.InlineTags)\n        }\n    }\n\n    static var showWelcome: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.Welcome) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.Welcome)\n        }\n    }\n\n    static var mathJaxPreview: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.MathJaxPreview) as? Bool {\n                return result\n            }\n\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.MathJaxPreview)\n        }\n    }\n    \n    static var sidebarVisibilityInbox: Bool {\n        get {\n            if let result = shared?.object(forKey: \"sidebarVisibilityInbox\") as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: \"sidebarVisibilityInbox\")\n        }\n    }\n\n    static var sidebarVisibilityNotes: Bool {\n        get {\n            if let result = shared?.object(forKey: \"sidebarVisibilityNotes\") as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: \"sidebarVisibilityNotes\")\n        }\n    }\n\n    static var sidebarVisibilityTodo: Bool {\n        get {\n            if let result = shared?.object(forKey: \"sidebarVisibilityTodo\") as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: \"sidebarVisibilityTodo\")\n        }\n    }\n\n    static var sidebarVisibilityUntagged: Bool {\n        get {\n            if let result = shared?.object(forKey: \"sidebarVisibilityUntagged\") as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: \"sidebarVisibilityUntagged\")\n        }\n    }\n\n    static var sidebarVisibilityTrash: Bool {\n        get {\n            if let result = shared?.object(forKey: \"sidebarVisibilityTrash\") as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: \"sidebarVisibilityTrash\")\n        }\n    }\n\n    static var crashedLastTime: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.CrashedLastTime) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CrashedLastTime)\n        }\n    }\n\n    static var lastNews: Date? {\n        get {\n            if let sync = shared?.object(forKey: \"lastNews\") {\n                return sync as? Date\n            } else {\n                return nil\n            }\n        }\n        set {\n            shared?.set(newValue, forKey: \"lastNews\")\n        }\n    }\n\n    static var naming: SettingsFilesNaming {\n        get {\n            if let result = shared?.object(forKey: \"naming\") as? Int, let settings = SettingsFilesNaming(rawValue: result) {\n                return settings\n            }\n\n            return .autoRename\n        }\n        set {\n            shared?.set(newValue.rawValue, forKey: \"naming\")\n        }\n    }\n\n    static var autoInsertHeader: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutoInsertHeader) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutoInsertHeader)\n        }\n    }\n\n    static var nonContiguousLayout: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.NonContiguousLayout), let data = result as? Bool {\n                return data\n            }\n\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.NonContiguousLayout)\n        }\n    }\n\n    static var codeBlocksWithSyntaxHighlighting: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.CodeBlocksWithSyntaxHighlighting) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CodeBlocksWithSyntaxHighlighting)\n        }\n    }\n\n    static var lastScreenX: Int? {\n        get {\n            if let value = shared?.object(forKey: Constants.LastScreenX) as? Int {\n                return value\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LastScreenX)\n        }\n    }\n\n    static var lastScreenY: Int? {\n        get {\n            if let value = shared?.object(forKey: Constants.LastScreenY) as? Int {\n                return value\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.LastScreenY)\n        }\n    }\n\n    static var recentSearches: [String]? {\n        get {\n            if let value = shared?.array(forKey: Constants.RecentSearches) as? [String] {\n                return value\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.RecentSearches)\n        }\n    }\n\n    static var searchHighlight: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.SearchHighlight) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SearchHighlight)\n        }\n    }\n\n    static var autoVersioning: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AutoVersioning) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AutoVersioning)\n        }\n    }\n    \n    static var iCloudDrive: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.iCloudDrive) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.iCloudDrive)\n        }\n    }\n    \n    static var customWebServer: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.CustomWebServer) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CustomWebServer)\n        }\n    }\n    \n    static var sftpHost: String {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpHost) as? String {\n                return result\n            }\n\n            return \"\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpHost)\n        }\n    }\n    \n    static var sftpPort: Int32 {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpPort) as? Int32 {\n                return result\n            }\n\n            return 22\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpPort)\n        }\n    }\n    \n    static var sftpUsername: String {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpUsername) as? String {\n                return result\n            }\n\n            return \"\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpUsername)\n        }\n    }\n    \n    static var sftpPassword: String {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpPassword) as? String {\n                return result\n            }\n\n            return \"\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpPassword)\n        }\n    }\n    \n    static var sftpPath: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpPath) as? String {\n                if result.count == 0 {\n                    return nil\n                }\n                \n                let suffix = result.hasSuffix(\"/\") ? \"\" : \"/\"\n                return result + suffix\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpPath)\n        }\n    }\n    \n    static var sftpPassphrase: String {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpPasspharse) as? String {\n                return result\n            }\n\n            return \"\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpPasspharse)\n        }\n    }\n    \n    static var sftpWeb: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.SftpWeb) as? String {\n                if result.count == 0 {\n                    return nil\n                }\n                \n                if result.last != \"/\" {\n                    return result + \"/\"\n                }\n                \n                return result\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpWeb)\n        }\n    }\n    \n    static var sftpAccessData: Data? {\n        get {\n            return shared?.data(forKey: Constants.SftpKeysAccessData)\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpKeysAccessData)\n        }\n    }\n    \n    static var sftpUploadBookmarksData: Data? {\n        get {\n            return shared?.data(forKey: Constants.SftpUploadBookmarksData)\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SftpUploadBookmarksData)\n        }\n    }\n    \n    static var apiBookmarksData: Data? {\n        get {\n            return shared?.data(forKey: Constants.ApiBookmarksData)\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.ApiBookmarksData)\n        }\n    }\n    \n    static var gitPrivateKeyData: Data? {\n        get {\n            return shared?.data(forKey: Constants.GitPrivateKeyData)\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GitPrivateKeyData)\n        }\n    }\n    \n    static var gitPassphrase: String {\n        get {\n            if let result = shared?.object(forKey: Constants.GitPasspharse) as? String {\n                return result\n            }\n\n            return \"\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.GitPasspharse)\n        }\n    }\n    \n    static var uploadKey: String {\n        get {\n            if let result = global.object(forKey: Constants.UploadKey) as? String, result.count > 0 {\n                return result\n            }\n\n            let key = String.random(length: 20)\n            global.set(key, forKey: Constants.UploadKey)\n\n            return key\n        }\n        set {\n            global.set(newValue, forKey: Constants.UploadKey)\n        }\n    }\n\n    static var deprecatedUploadKey: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.UploadKey) as? String, result.count > 0 {\n                return result\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.UploadKey)\n        }\n    }\n\n    static var clickableLinks: Bool {\n        get {\n            if let highlight = shared?.object(forKey: Constants.ClickableLinks) as? Bool {\n                return highlight\n            }\n            \n            #if os(iOS)\n                return true\n            #else\n                return false\n            #endif\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.ClickableLinks)\n        }\n    }\n    \n    static var trashURL: URL? {\n        get {\n            if let trashUrl = shared?.url(forKey: Constants.TrashKey) {\n                return trashUrl\n            }\n\n            return nil\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.TrashKey)\n        }\n    }\n    \n    static var separateRepo: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.SeparateRepo) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.SeparateRepo)\n        }\n    }\n    \n    static var askCommitMessage: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.AskCommitMessage) as? Bool {\n                return result\n            }\n            return false\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.AskCommitMessage)\n        }\n    }\n    \n    static var lastCommitMessage: String? {\n        get {\n            if let result = shared?.object(forKey: Constants.LastCommitMessage) as? String, result.count > 0 {\n                return result\n            }\n            \n            return nil\n        }\n        \n        set {\n            shared?.set(newValue, forKey: Constants.LastCommitMessage)\n        }\n    }\n    \n    static var lightCodeTheme: String {\n        get {\n            if let theme = UserDefaults.standard.object(forKey: Constants.codeTheme) as? String {\n                return theme\n            }\n\n            return \"github\"\n        }\n        set {\n            UserDefaults.standard.set(newValue, forKey: Constants.codeTheme)\n        }\n    }\n    \n    static var projects: [URL] {\n        get {\n            guard let defaults = UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\") else { return [] }\n\n            if let data = defaults.data(forKey: Constants.ProjectsKeyNew), let urls = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSURL.self], from: data) as? [URL] {\n                return urls\n            }\n\n            return []\n        }\n        set {\n            guard let defaults = UserDefaults.init(suiteName: \"group.es.fsnot.user.defaults\") else { return }\n\n            if let data = try? NSKeyedArchiver.archivedData(withRootObject: newValue, requiringSecureCoding: true) {\n                defaults.set(data, forKey: Constants.ProjectsKeyNew)\n            }\n        }\n    }\n\n    static var maxChildDirs: Int {\n        get {\n            if let returnFontSize = shared?.object(forKey: Constants.MaxChildDirs), \n                let value = returnFontSize as? Int {\n\n                if value < 200 {\n                    return 200\n                }\n\n                return value\n            }\n\n            return 200\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.CodeFontSizeKey)\n        }\n    }\n\n#if !SHARE_EXT\n    static var codeTheme: EditorTheme {\n        get {\n            guard\n                let raw = UserDefaults.standard.string(forKey: Constants.codeTheme),\n                let theme = EditorTheme(rawValue: raw)\n            else {\n                return .atomOne\n            }\n                \n            return theme\n        }\n        set {\n            UserDefaults.standard.set(newValue.rawValue, forKey: Constants.codeTheme)\n        }\n    }\n#endif\n    \n    static var isFirstLaunch: Bool {\n        get {\n            if let result = shared?.object(forKey: Constants.IsFirstLaunch) as? Bool {\n                return result\n            }\n            return true\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.IsFirstLaunch)\n        }\n    }\n    \n    static var italic: String {\n        get {\n            if let returnFontName = shared?.object(forKey: Constants.italicKey) as? String {\n                return returnFontName\n            }\n            \n            return \"*\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.italicKey)\n        }\n    }\n    \n    static var bold: String {\n        get {\n            if let returnFontName = shared?.object(forKey: Constants.boldKey) as? String {\n                return returnFontName\n            }\n            \n            return \"__\"\n        }\n        set {\n            shared?.set(newValue, forKey: Constants.boldKey)\n        }\n    }\n}\n"
  },
  {
    "path": "FSNotesCore/ViewController+WebApi.swift",
    "content": "//\n//  ViewController+WebApi.swift\n//  FSNotes\n//\n//  Created by Oleksandr Hlushchenko on 24.05.2023.\n//  Copyright © 2023 Oleksandr Hlushchenko. All rights reserved.\n//\n\n#if os(OSX)\nimport Cocoa\n#else\nimport UIKit\n#endif\n\nextension ViewController {\n    public func deleteAPI(note: Note, completion: (() -> Void)? = nil) {\n        guard let noteId = note.apiId else { return }\n\n        let api = UserDefaultsManagement.apiPath\n        let boundary = generateBoundaryString()\n        let session = URLSession.shared\n        let url = URL(string: \"\\(api)?method=delete\")!\n\n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n        request.setValue(\"multipart/form-data; boundary=\\(boundary)\", forHTTPHeaderField: \"Content-Type\")\n\n        let key = UserDefaultsManagement.uploadKey\n        let parameters = [\"key\": key, \"note_id\": noteId]\n\n        do {\n            request.httpBody = try createBody(with: parameters, filePathKey: \"file\", urls: [], boundary: boundary)\n        } catch {\n            print(\"Request creation: \\(error)\")\n            return\n        }\n\n        let task = session.dataTask(with: request) { data, response, error in\n            guard let httpResponse = response as? HTTPURLResponse,\n                  (200...299).contains(httpResponse.statusCode) && error == nil\n            else {\n                self.showAlert(message: \"FSNotes server is down at this moment, please try later\")\n                return\n            }\n\n            guard let responseData = data else {\n                self.showAlert(message: \"Empty response\")\n              return\n            }\n\n            let decoder = JSONDecoder()\n            if let api = try? decoder.decode(APIResponse.self, from: responseData) {\n                if let msg = api.error {\n                    self.showAlert(message: msg)\n                    if msg == \"Wrong key\" {\n                        note.apiId = nil\n                        note.project.saveWebAPI()\n\n                        completion?()\n                    }\n                } else if api.id != nil {\n                    note.apiId = nil\n                    note.project.saveWebAPI()\n\n                    completion?()\n                }\n            }\n        }\n\n        task.resume()\n    }\n\n    public func createAPI(note: Note, completion: ((_ url: URL?) -> Void)? = nil) {\n        let web = UserDefaultsManagement.webPath\n        let api = UserDefaultsManagement.apiPath\n\n        let dst = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(\"Upload\")\n        try? FileManager.default.removeItem(at: dst)\n\n        guard let localURL = MPreviewView.buildPage(for: note, at: dst, web: true) else { return }\n\n        let zipUrl = localURL.deletingLastPathComponent().appendingPathComponent(note.getLatinName()).appendingPathExtension(\"zip\")\n        let privateKey = UserDefaultsManagement.uploadKey\n\n        var parameters = [\"key\": privateKey]\n        if let noteId = note.apiId {\n            parameters[\"note_id\"] = noteId\n        }\n\n        let boundary = generateBoundaryString()\n\n        let method = note.apiId != nil ? \"update\" : \"create\"\n        let url = URL(string: \"\\(api)?method=\\(method)\")!\n\n        let session = URLSession.shared\n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n        request.setValue(\"multipart/form-data; boundary=\\(boundary)\", forHTTPHeaderField: \"Content-Type\")\n\n        var urls = [URL]()\n        let items = note.content.getImagesAndFiles()\n\n        for item in items {\n            urls.append(item.url)\n        }\n\n        urls.append(localURL)\n        urls.append(zipUrl)\n\n        guard let body = try? createBody(with: parameters, filePathKey: \"file\", urls: urls, boundary: boundary) else { return }\n        request.httpBody = body\n\n        let task = session.dataTask(with: request) { data, response, error in\n            guard let httpResponse = response as? HTTPURLResponse,\n                  (200...299).contains(httpResponse.statusCode) && error == nil\n            else {\n                self.showAlert(message: \"FSNotes server is down at this moment, please try later\")\n                return\n            }\n\n            guard let responseData = data else {\n                self.showAlert(message: \"Empty response\")\n              return\n            }\n\n            let decoder = JSONDecoder()\n            if let api = try? decoder.decode(APIResponse.self, from: responseData) {\n                if let msg = api.error {\n                    self.showAlert(message: msg)\n                } else if let noteId = api.id {\n                    note.apiId = noteId\n                    note.project.saveWebAPI()\n\n                    let resultUrl = \"\\(web)\\(noteId)/\"\n                    let url = URL(string: resultUrl)!\n\n                    completion?(url)\n                }\n            }\n        }\n\n        task.resume()\n    }\n\n    private func createBody(with parameters: [String: String]? = nil, filePathKey: String, urls: [URL], boundary: String) throws -> Data {\n        var body = Data()\n\n        parameters?.forEach { (key, value) in\n            body.append(\"--\\(boundary)\\r\\n\")\n            body.append(\"Content-Disposition: form-data; name=\\\"\\(key)\\\"\\r\\n\\r\\n\")\n            body.append(\"\\(value)\\r\\n\")\n        }\n\n        var urlNum = 0\n        for url in urls {\n            urlNum += 1\n\n            let filename = url.lastPathComponent\n            let data = try Data(contentsOf: url)\n\n            body.append(\"--\\(boundary)\\r\\n\")\n            body.append(\"Content-Disposition: form-data; name=\\\"entity_\\(urlNum)\\\"; filename=\\\"\\(filename)\\\"\\r\\n\")\n            body.append(\"Content-Type: \\(url.mimeType)\\r\\n\\r\\n\")\n            body.append(data)\n            body.append(\"\\r\\n\")\n        }\n\n        body.append(\"--\\(boundary)--\\r\\n\")\n        return body\n    }\n\n    private func generateBoundaryString() -> String {\n        return \"Boundary-\\(UUID().uuidString)\"\n    }\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Oleksandr Glushchenko\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Logo/License",
    "content": "MIT License\n\nCopyright (c) 2018 Baran Pirinçal\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Podfile",
    "content": "use_frameworks!\n\nMAC_TARGET_VERSION = '10.14'\nIOS_TARGET_VERSION = '14'\n\ndef mac_pods\n    pod 'MASShortcut', :git => 'https://github.com/glushchenko/MASShortcut.git', :branch => 'master'\nend\n\ndef ios_pods\n    pod 'SSZipArchive', :git => 'https://github.com/glushchenko/ZipArchive.git', :branch => 'master'\n    pod 'DropDown', '2.3.13'\n    pod 'SwipeCellKit', :git => 'https://github.com/glushchenko/SwipeCellKit.git', :branch => 'develop'\n    pod 'CropViewController'\nend\n\ndef common_pods\n    pod 'libcmark_gfm', :git => 'https://github.com/glushchenko/libcmark_gfm', :branch => 'master' \n    pod 'RNCryptor', '~> 5.1.0'\n    pod 'SSZipArchive', :git => 'https://github.com/glushchenko/ZipArchive.git', :branch => 'master'\n    pod 'Punycode'\nend\n\ndef framework_pods\n    pod 'SwiftLint', '~> 0.30.0'\nend\n\ntarget 'FSNotes' do\n    platform :osx, MAC_TARGET_VERSION\n\n    mac_pods\n    common_pods\nend\n\ntarget 'FSNotes (iCloud)' do\n    platform :osx, MAC_TARGET_VERSION\n\n    mac_pods\n    common_pods\nend\n\ntarget 'FSNotes iOS' do\n    platform :ios, IOS_TARGET_VERSION\n\n    common_pods\n    ios_pods\nend\n\ntarget 'FSNotes iOS Share Extension' do\n    platform :ios, IOS_TARGET_VERSION\n\n    pod 'RNCryptor', '~> 5.1.0'\n    pod 'SSZipArchive', :git => 'https://github.com/glushchenko/ZipArchive.git', :branch => 'master'\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    if target.name == 'cmark-gfm-swift-macOS'\n      source_files = target.source_build_phase.files\n      dummy = source_files.find do |file|\n        file.file_ref.name == 'scanners.re'\n      end\n      source_files.delete dummy\n\n      dummyM = source_files.find do |file|\n        file.file_ref.name == 'module.modulemap'\n      end\n      source_files.delete dummyM\n      puts \"Deleting source file #{dummy.inspect} from target #{target.inspect}.\"\n    end\n\n    if target.name == 'libcmark_gfm-macOS' ||\n      target.name == 'MASShortcut' ||\n      target.name == 'SSZipArchive-macOS' ||\n      target.name == 'RNCryptor-macOS'\n\n      target.build_configurations.each do |config|\n        config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '10.14'\n      end\n    end\n\n    if target.name == 'SSZipArchive-iOS' ||\n      target.name == 'RNCryptor-iOS' ||\n      target.name == 'DropDown' ||\n      target.name == 'DKCamera' ||\n      target.name == 'CropViewController'\n\n      target.build_configurations.each do |config|\n        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "README.md",
    "content": "# FSNotes\n\n[简体中文](README_zh_CN.md)\n[繁體中文](README_zh_TW.md)\n\nFSNotes is modern notes manager for macOS and iOS.\n\n## macOS app\n\n<a href=\"https://itunes.apple.com/app/fsnotes/id1277179284\">\n\t<img src=\"https://fsnot.es/img/badge-download-on-the-mac-app-store.svg\" alt=\"\">\n</a>\n\n<img src=\"https://fsnot.es/img/fsnotes7/FSNotes7_macOS_Dark.webp?v=2\" alt=\"macOS FSNotes\" style=\"max-width:100%;\">\n\n### Key features\n\n- **Markdown-first**. Also supports any plaintext files.\n- **Fast and lightweight**. Works smoothly with 10k+ files.\n- **Access anywhere**. Sync with iCloud Drive or Dropbox.\n- **Multi-folder** storage.\n- **Keyboard-centric**.  \n- **Syntax highlighting** within code blocks. Supports over 30 programming languages.\n- **In-line image** support.\n- Organize with **tags**.\n- **Cross-note links** using `[[double brackets]]`.\n- **Elastic two-pane view**.\n- **External editor** support (changes seamless live sync with UI).\n- **Pin** important notes.\n- **Quickly copy notes** to the clipboard.\n- **Dark mode**.\n- AES-256 **encryption**.\n- **Mermaid and MathJax** support.\n- Optional **Git versioning** and **backups**.\n\n---\n\n## iOS app\n\n<a href=\"https://itunes.apple.com/app/fsnotes-manager/id1346501102\">\n\t<img src=\"https://fsnot.es/img/badge-download-on-the-app-store.svg\" alt=\"\">\n</a>\n\n<img width=\"300\" alt=\"FSNotes for iOS\" src=\"https://fsnot.es/img/fsnotes7/FSNotes7_iOS.webp?v=2\"> <img width=\"300\" alt=\"FSNotes for iOS\" src=\"https://fsnot.es/img/fsnotes7/FSNotes7_iOS_Dark.webp?v=2\">\n\n### Key features\n\n- **Sync via iCloud Drive**.\n- **3D Touch** and **configurable keyboard**.\n- **TextBundle** and **EncryptedTextBundle** containers.\n- **Pinned** notes kept in sync with the desktop app.\n- **Dynamic fonts**.\n- **Dark mode**.\n- **Sharing** extension.\n- **Encrypted note** support.\n- **Encrypted folders** support.\n- **Git** integration.\n- **Web Pages** Creation.\n\n## License\n\nFSNotes is written in **Swift 5** and is open source (MIT license).\n"
  },
  {
    "path": "README_zh_CN.md",
    "content": "# FSNotes\n\n[English](README.md)\n[繁體中文](README_zh_TW.md)\n\nFSNotes是适用于 macOS 和 iOS 的现代笔记管理器。\n\n## macOS 应用\n\n<a href=\"https://itunes.apple.com/app/fsnotes/id1277179284\">\n\t<img src=\"https://fsnot.es/img/badge-download-on-the-mac-app-store.svg\" alt=\"\">\n</a>\n\n<img src=\"https://raw.githubusercontent.com/glushchenko/fsnotes/master/code.png\" alt=\"macOS FSNotes\" style=\"max-width:100%;\">\n\n### 主要功能\n\n- **优先支持 Markdown**。也支持任何纯文本文件。\n- **快速且轻量**。能够流畅处理 10k+ 个文件。\n- **随时随地访问**。与 iCloud Drive 或 Dropbox 同步。\n- **多文件夹**存储。\n- **键盘为中心**。受 [nvalt](https://brettterpstra.com/projects/nvalt/) 启发的控件和快捷键。\n- **代码块内语法高亮**。支持超过 170 种编程语言。\n- **内联图片**支持。\n- 使用**标签**进行组织。\n- 使用 `[[双括号]]` 进行**跨笔记链接**。\n- **弹性两窗格视图**。选择垂直或水平布局。\n- 支持**外部编辑器**（更改会与 UI 实时同步）。\n- **置顶**重要笔记。\n- **快速复制笔记**到剪贴板。\n- **暗黑模式**。\n- AES-256 **加密**。\n- **Mermaid 和 MathJax** 支持。\n- 可选的**Git 版本控制**和**备份**。\n\n---\n\n## iOS 应用\n\n<a href=\"https://itunes.apple.com/app/fsnotes-manager/id1346501102\">\n\t<img src=\"https://fsnot.es/img/badge-download-on-the-app-store.svg\" alt=\"\">\n</a>\n\n<img width=\"300\" alt=\"FSNotes for iOS\" src=\"https://fsnot.es/img/fsnotes6-ios/s1x.webp?v=1.0\"> <img width=\"300\" alt=\"FSNotes for iOS\" src=\"https://fsnot.es/img/fsnotes6-ios/s2x.webp?v=1.0\">\n\n### 主要功能\n\n- 通过 iCloud Drive 进行**同步**。\n- **3D Touch** 和**可配置键盘**。\n- **TextBundle** 和 **EncryptedTextBundle** 容器。\n- 保持与桌面应用同步的**置顶**笔记。\n- **动态字体**。\n- **暗黑模式**。\n- **分享**扩展。\n- **加密笔记**支持。\n- **加密文件夹**支持。\n- **Git** 集成。\n- **网页**创建。\n\n## 许可证\n\nFSNotes 使用 **Swift 5** 编写，采用 MIT 许可证开源。\n\n## 特别鸣谢\n\n@zcohan（https://soulver.app）提供了 Soulver 核心框架 https://github.com/soulverteam/SoulverCore，用于简单的内联计算。\n"
  },
  {
    "path": "README_zh_TW.md",
    "content": "# FSNotes\n\n[English](README.md)\n[简体中文](README_zh_CN.md)\n\nFSNotes是一款適用於 macOS 和 iOS 的現代筆記管理器。\n\n## macOS 應用程式\n\n<a href=\"https://itunes.apple.com/app/fsnotes/id1277179284\">\n\t<img src=\"https://fsnot.es/img/badge-download-on-the-mac-app-store.svg\" alt=\"\">\n</a>\n\n<img src=\"https://raw.githubusercontent.com/glushchenko/fsnotes/master/code.png\" alt=\"macOS FSNotes\" style=\"max-width:100%;\">\n\n### 主要功能\n\n- **Markdown 优先**。也支持任何纯文本文件。\n- **快速且輕量**。能夠流暢處理 10k+ 個文件。\n- **隨時隨地訪問**。與 iCloud Drive 或 Dropbox 同步。\n- **多資料夾**存儲。\n- **鍵盤為中心**。受 [nvalt](https://brettterpstra.com/projects/nvalt/) 啟發的控件和快捷鍵。\n- **程式碼塊內語法高亮**。支持超過 170 種編程語言。\n- **內嵌圖片**支持。\n- 使用**標籤**進行組織。\n- 使用 `[[雙括號]]` 進行**跨筆記鏈接**。\n- **彈性兩窗格視圖**。選擇垂直或水平佈局。\n- 支持**外部編輯器**（更改會與 UI 實時同步）。\n- **置頂**重要筆記。\n- **快速複製筆記**到剪貼板。\n- **暗黑模式**。\n- AES-256 **加密**。\n- **Mermaid 和 MathJax** 支持。\n- 可選的**Git 版本控制**和**備份**。\n\n---\n\n## iOS 應用程式\n\n<a href=\"https://itunes.apple.com/app/fsnotes-manager/id1346501102\">\n\t<img src=\"https://fsnot.es/img/badge-download-on-the-app-store.svg\" alt=\"\">\n</a>\n\n<img width=\"300\" alt=\"FSNotes for iOS\" src=\"https://fsnot.es/img/fsnotes6-ios/s1x.webp?v=1.0\"> <img width=\"300\" alt=\"FSNotes for iOS\" src=\"https://fsnot.es/img/fsnotes6-ios/s2x.webp?v=1.0\">\n\n### 主要功能\n\n- 通過 iCloud Drive 進行**同步**。\n- **3D Touch** 和**可配置鍵盤**。\n- **TextBundle** 和 **EncryptedTextBundle** 容器。\n- 保持與桌面應用同步的**置頂**筆記。\n- **動態字體**。\n- **暗黑模式**。\n- **分享**擴展。\n- **加密筆記**支持。\n- **加密資料夾**支持。\n- **Git** 集成。\n- **網頁**創建。\n\n## 許可證\n\nFSNotes 使用 **Swift 5** 編寫，採用 MIT 許可證開源。\n\n## 特別鳴謝\n\n@zcohan（https://soulver.app）提供了 Soulver 核心框架 https://github.com/soulverteam/SoulverCore，用於簡單的內嵌計算。\n"
  },
  {
    "path": "Resources/Initial/FSNotes - Readme.md",
    "content": "## FSNotes – File System Notes Manager\n\nFSNotes lets write and store notes in portable and non vendor locked formats, catalog and manage large amounts of data.\n\nYou can view, edit, and copy data in your favourite external editor and see live results in FSNotes.  It's simple and blazing fast!\n\nMemorizing [keyboard shortcuts](https://github.com/glushchenko/fsnotes/wiki/Keyboard-Shortcuts) takes some work, but once you have, shortcuts make using FSNotes so much more efficient.\n\n### Key features\n\n- Markdown-first. Also supports any plaintext files.\n- Fast and lightweight. Works smoothly with 10k+ files.\n- Access anywhere. Sync with iCloud Drive or Dropbox.\n- Multi-folder storage.\n- Keyboard-centric. nvalt-inspired controls and shortcuts.\n- Syntax highlighting within code blocks. Supports over 170 programming languages.\n- In-line image support.\n- Organize with tags.\n\n### Screen\n\n![](https://raw.githubusercontent.com/glushchenko/fsnotes/master/code.png)\n\n### And many more\n\n- Cross-note links using [[double brackets]].\n- Elastic two-pane view. Choose a vertical or horizontal layout.\n- External editor support (changes seamless live sync with UI).\n- Pin important notes.\n- Quickly copy notes to the clipboard.\n- Dark mode.\n- Lock sensitive notes with AES-256 encryption.\n- Mermaid and MathJax support.\n- Optional Git versioning and backups.\n- iOS app with sync via iCloud Drive.\n\n### Wiki\n\n[Alfred Workflow](https://github.com/glushchenko/fsnotes/wiki/Alfred-Workflow)\n[Backup & Versioning of Notes](https://github.com/glushchenko/fsnotes/wiki/Backup-&-Versioning-of-Notes)\n[Containers](https://github.com/glushchenko/fsnotes/wiki/Containers)\n[Finding & creating documents via URLs](https://github.com/glushchenko/fsnotes/wiki/Finding-&-creating-documents-via-URLs)\n[Markdown Reference](https://github.com/glushchenko/fsnotes/wiki/Markdown-Reference)\n[Report Bugs or Request Features](https://github.com/glushchenko/fsnotes/wiki/Report-Bugs-or-Request-Features)\n[Keyboard Shortcuts](https://github.com/glushchenko/fsnotes/wiki/Keyboard-Shortcuts)\n\nSpecial thanks to [Matt Sephton](https://www.gingerbeardman.com) 👍\n\n### Author\n\n© Oleksandr Hlushchenko and [Contributors](https://github.com/glushchenko/fsnotes/graphs/contributors), 2017–2020\n"
  },
  {
    "path": "Resources/Initial/FSNotes 4.0 Change Log.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Initial/FSNotes 4.0 Change Log.textbundle/text.markdown",
    "content": "# FSNotes 4 is here!\n\n![](assets/128.png)\n\nAppreciate the patience while i worked on this update. Thanks to pledgers, testers and all FSNotes community, love you all guys.\n\nThis is biggest update in FSNotes history, so i have some news:\n\n## Polished iCloud Drive sync\n\nYep! Now more stable. Fixed bug with data missing 😱\n\nNew folder appears in sidebar without app restarting. \n\n4.0 fixes crashes related to notes import.\n\n## User interface\n\nNew generation of iPhones with notches supports properly now 🥳\n\nMain controller completely reimplemented with parallax effect. Sidebar opens with flawless animation.\n\nNew notes and projects adds/removes without tables reloading.\n\n## App speedup\n\nThe new caching system allows you to launch the application very quick.\n\nI have almost 10000 notes and this pretty fast. Projects selection and search speed improved too.\n\n## True dark mode\n\nThe app uses true, hex black — #000000 — for the majority of the dark theme. \n\nThis is really good news for iPhones with OLED displays.\n\n## Preview mode\n\nFSNotes 4.0 adds new preview mode, that always on. Off course, you can make always off in one tap. Just double tap for edit note or click appropriate icon in navigation bar.\n\nAdded full screen in landscape.\n\nIn preview, you even can mark checkboxes 🔥\n\n## Handoff\n\nThis is a new feature that i use regularly on iOS and macOS. \n\nOpen note in FSNotes on iPhone and continue your task on MacBook in one click.\n\nI think more info you can read on official site https://support.apple.com/en-us/HT209455\n\n## Auto renaming\n\nNow you can choose in settings — use UUID for files naming or auto rename files by title from first line.\n\n## Projects and tags managements\n\nIn FSNotes 4.0 you can easily manage your folders and tags.\n\nCreate, rename and delete folders and tags in a couple of tap. Just long press item in sidebar or tap on project/tag title in navigation bar.\n\n## Wikilinks\n\nNow you can link one document to another easily. Look for the document icon in the editor toolbar.\n\n## Fin\n\nThanks for choosing FSNotes. \n\n— Oleksandr"
  },
  {
    "path": "Resources/Initial/FSNotes 4.0 for iOS.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Initial/FSNotes 4.0 for iOS.textbundle/text.markdown",
    "content": "# Hello, folks!\n\n![](assets/128.png)\n\nFSNotes is **modern** notes manager for macOS and iOS.\n\nThis app respects open formats like _Markdown_ and _GitHub Flavored Markdown_, so you can easily write documents on iPhone and MacBook.\n\n> You can quote\n> Multiple lines\n\nInsert #tags and #multi/level/tags Just write \"#\" and autocomplete existed tag. \n\n_Use code blocks:_\n\n```php\necho \"Hello world\"!\n```\n\n## Images\n\n\n\nLists, numbered lists and todo:\n\n- Lists item\n\n    1. First Item\n    2. Second Item\n\n—\n- [x] Pay bills\n- [ ] Buy water\n\nAnd WikiLinks [[WikiLinks with emoji 😎]]\n\n### MermaidJS allows you to include diagrams in your note\n\n```mermaid\nsequenceDiagram\n    participant Alice\n    participant Bob\n    Alice->>John: Hello John, how are you?\n    loop Healthcheck\n        John->>John: Fight against hypochondria\n    end\n    Note right of John: Rational thoughts <br/>prevail!\n    John-->>Alice: Great!\n    John->>Bob: How about you?\n    Bob-->>John: Jolly good!\n```\n\n### And MathJax allows you to include mathematics\n\nDocumentation: https://www.mathjax.org\n\nWhen $a \\ne 0$, there are two solutions to \\\\(ax^2 + bx + c = 0\\\\) and they are\n$$x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}.$$\n\n## Containers\n\nPersonally i recommend TextBundle containers , FSNotes implements it fully, so go to Settings -> Default container and check \"textbundle\".\n\nYou can read spec here: http://textbundle.org/\n\n## Author\n\nThanks for choosing FSNotes. \n\n— Oleksandr | <support@fsnot.es>"
  },
  {
    "path": "Resources/Initial/FSNotes 5.0 Change Log.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Initial/FSNotes 5.0 Change Log.textbundle/text.md",
    "content": "# Meet FSNotes 5 for Mobile!\n\n## Interface\n\nTransitions between controllers have become smoother and more native, this applies to both the main screen and the editor. Access to the settings has become easier.\n\nTo call up the action menu above the note, just hold your finger on the note (the sidebar must be closed).\n\n![](assets/8822c62e-16ef-4f4c-b397-55d2d79e86fb.jpg)\n\n## Versioning\n\nIf you accidentally erased part of the note, it doesn't matter. Now at any time you can return to the state until you entered the editor and roll back the changes, and you can also create a new version of the file at any time.\n\nOf course, we also store the history of images, and certainly in the \"History\" menu you can clean everything in one click.\n\n![](assets/9ebef6e8-741f-4fd7-b6fb-0fef6d471c44.jpg)\n\n## Inserting and working with images\n\nNew ImagePicker!\n\n- Gestures to move between images left to right if you touch the left or right edge.\n- Framing.\n- Sharing and deleting in one click.\n\n![](assets/add6cab8-34d1-49f6-b3f3-316b0b3c5ebc.jpg)\n\n## Editor improvements\n\n- Setting up line spacing\n- New fonts\n- Large indents from the edges of the screen\n- Improved editor performance\n- Keyboard and controller close swipes now work from the center of the editor.\n- Configurable themes and fonts for code blocks\n\n## A diary\n\nNew features for keeping a diary - now you can change the creation date with two taps.\n\nJust click the three dots above the editor and select \"Created Date\"\n\n![](assets/a4bdc32a-ae63-4d39-a4ef-458639b1d3f1.jpg)\n\n## Troubleshooting\n\n- Inconsistency of the selected note being selected in the list\n- Twitching images in note list\n- Crashes while typing\n\n## All sorts of useful little things\n\n- Create duplicate notes in two taps.\n- Added the ability to share an encrypted note.\n- Folders can now be opened in Files.app.\n- Share menu now packs notes into a .zip archive.\n- You can easily disable iCloud Drive in settings (not recommended).\n- Three minuses in the editor to add the hr tag to the preview\n- Added empty cart menu.\n- Added the ability to select the naming format for new notes (as in the macOS version of the program).\n- Configurable sidebar items\n\nAnd also much more :-)"
  },
  {
    "path": "Resources/Initial/Meet FSNotes 6.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Initial/Meet FSNotes 6.textbundle/text.markdown",
    "content": "# Meet FSNotes 6!\n\n## New design\n\n![](assets/2023-04-08%20Unmasked%20Icon,%20Light%20-%20FSNotes.png)\n\nThe biggest design change in the history of the program. The new FSNotes adheres even more to Apple's human interface guidelines. Branded icons, menus, toolbars, headers, animations and smooth transitions. Everything has become closer to the familiar Apple system programs.\n\nI want to give a huge thanks to my friend Dylan Seeger for his valuable advice. Thanks to his ticketing, you see this update like this.\n\n## Versioning with git\n\nThe last version added versioning, but I didn't think it was enough. Therefore, meet git! If you are a programmer, you probably know what it is, but if you don't, you can learn about it here: https://en.wikipedia.org/wiki/Git.\n\nYou can create a git repository for each folder and commit your notes and send the changes to your server.\n\nChanges are pulled up when the app activates and you can also set it to do it every 30 seconds automatically.\n\n![](assets/IMG_1882.jpeg)\n\n## Encrypted folders\n\nFolder encryption appeared in the desktop program a year ago, now I'm adding the same feature in the mobile version as well. The first step you should take is to set a master password in the settings.\n\nThen continue to each folder specifically by selecting it in the sidebar with a long press or in the navigation menu.\n\nThe selected folder with all the notes will be encrypted with AES-256.\n\n![](assets/encrypt-menu.jpeg)\n\n## Application icons\n\nThe old icon by Roman Kliuchkovych was beautiful, but time is of the essence, for the sixth version the new icon was drawn by Dylan Seeger. You can find his website in the settings!\n\nI often use the main wallpaper color black, so there is also an all-black version. Mine is set to look like this:\n\n![](assets/black-icon.jpeg)\n\n## Improvements in the editor\n\nEven more actions are available directly within the editor, thanks to the new toolbar you can now quickly create a new note or go to search on the main screen.\n\n## Web sharing\n\nSometimes there is a need to quickly share a note. However, not everyone has markdown-enabled editors, much less textbundle. For this purpose, I have added publishing to the web. With a long click on a note in the list, bring up the context menu and select the \"Create Web Page\" menu item. \n\nThe note will open in your browser and the link will be copied to your clipboard. So far there is no heavy load and I have not deleted the notes, but over time I think they will be temporary, with a shelf life of 1 month.\n\n![](assets/web-sharing.png)\n\n## Fixes\n\nEarlier there were some problems with encryption of folders, app crashes, and previewing notes. All of this has been fixed.\n\nNew bugs may have been added, of course.\n\n-- Oleksandr, Kharkiv, Ukraine\n"
  },
  {
    "path": "Resources/Initial/Meet FSNotes 7.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Initial/Meet FSNotes 7.textbundle/text.markdown",
    "content": "# Meet FSNotes 7\n\n## Hello\n\n![](assets/logo.png)\n\nHi folks!\n\nI keep improving the app, adding new features and removing everything that has become outdated. I simply can’t make peace with bad code, bad design, or a bad user interface. So I apologize to users if I suddenly removed a feature you were used to — it means only one thing: I can’t implement it at a level of quality I’m satisfied with.\n\nFSNotes 7 supports iOS 18 and iOS 26.\n\n## New \n\nApple redesigned the system UI once again, which meant updating the app’s design yet again — as a result, all iOS 26 users will get the new Liquid Glass design.\n\nFresh menus, search at the bottom of the controller, new toolbars, and more...\n\nEditor performance has improved once again, thanks to rewriting the Syntax Highlighter from scratch in Swift. It now works natively and fast.\n\nYou can now add not only images but also files directly in the editor, just like in the desktop app. A full-fledged search function has also been added within the note. \n\nA huge number of bugs have been fixed, and much more.\n\nAll in all — let’s move forward and enjoy a new experience with FSNotes 7!\n\n-- \nOleksandr, \nUkraine, Kharkiv\n12.01.2026"
  },
  {
    "path": "Resources/MPreview.bundle/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <title>{TITLE}</title>\n    <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"{WEB_PATH}apple-touch-icon.png\">\n    <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"{WEB_PATH}favicon-32x32.png\">\n    <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"{WEB_PATH}favicon-16x16.png\">\n    <meta name=\"keywords\" content=\"FSNotes, Markdown, Sharing, Web, Hosting, Textbundle\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <meta charset=\"utf-8\">\n    <meta name=\"publisher\" content=\"fsnot.es\">\n    <meta name=\"author\" content=\"fsnot.es\">\n    <meta name=\"robots\" content=\"index,follow\">\n    <meta name=\"viewport\" content=\"initial-scale=1.0\" />\n    <link charset=\"utf-8\" href=\"{WEB_PATH}main.css?v=1.0.7\" rel=\"stylesheet\">\n    \n    {INLINE_CSS}\n    {MATH_JAX_JS}\n    \n    <style>\n        code {\n          white-space: pre-wrap !important;\n          overflow-x: hidden;\n        }\n\n        pre {\n          overflow-x: hidden;\n        }\n    </style>\n    \n    <script charset=\"utf-8\" src=\"{WEB_PATH}js/highlight.min.js\" type=\"text/javascript\"></script>\n    <script>hljs.initHighlightingOnLoad();</script>\n    <script async src=\"{WEB_PATH}js/mermaid.min.js\"></script>\n    \n    <script>\n        (function () {\n            if (window.__scrollObserverInstalled) return;\n            window.__scrollObserverInstalled = true;\n\n            let ticking = false;\n\n            function reportScroll() {\n                if (ticking) return;\n                ticking = true;\n\n                requestAnimationFrame(() => {\n                    const x = window.scrollX || document.documentElement.scrollLeft;\n                    const y = window.scrollY || document.documentElement.scrollTop;\n\n                    window.webkit.messageHandlers.scrollPosition.postMessage({ x, y });\n                    ticking = false;\n                });\n            }\n\n            window.addEventListener('scroll', reportScroll, { passive: true });\n        })();\n        \n        function getElementsByText(str, tag = 'h1') {\n            return Array.prototype.slice.call(document.getElementsByTagName(tag)).filter(el => el.textContent.trim() === str.trim());\n        }\n\n        function getSelectionAndSendMessage() {\n            var txt = document.getSelection().toString();\n            if ({FSNOTES_PREVIEW}) {\n                window.webkit.messageHandlers.newSelectionDetected.postMessage(txt);\n            }\n        }\n        \n        var darkModeStylesNodeID = \"darkModeStyles\";\n\n        function addStyleString(str, nodeID) {\n            var node = document.createElement('style');\n            node.id = nodeID;\n            node.innerHTML = str;\n\n            document.getElementsByTagName('head')[0].appendChild(node);\n        }\n\n        function switchToDarkMode(background) {\n            var darkModeStyleElement = document.getElementById(darkModeStylesNodeID);\n            if (darkModeStyleElement == null) {\n                var darkModeStyles = \"* { color: white; } body { background: \" + background + \"; } a { color: #98e7a7 } table { border-color: red } table td, table th { background: #908D8D; border-color: black; } table td, table th, table td *, table th * { color: white }; input[type='checkbox] { accent-color: white }\";\n                addStyleString(darkModeStyles, darkModeStylesNodeID);\n            }\n        }\n\n        function switchToLightMode() {\n            var darkModeStyleElement = document.getElementById(darkModeStylesNodeID);\n            if (darkModeStyleElement != null) {\n                darkModeStyleElement.parentElement.removeChild(darkModeStyleElement);\n            }\n        }\n        \n        function getElementsByTextContent(elText) {\n            var allSpans = document.querySelectorAll('h1, h2, h3, h4, h5, h6')\n            for (var i = 0; i < allSpans.length; i++) {\n                var spanText = allSpans[i].innerHTML;\n                if(spanText == elText ){\n                    return allSpans[i];\n                }\n            }\n        }\n\n        if ('{FSNOTES_APPEARANCE}' == 'darkmode') {\n            let background = '#2a2b2e';\n\n            if ('{FSNOTES_PLATFORM}' == 'ios') {\n                background = '#000000';\n            }\n\n            switchToDarkMode(background);\n        }\n        \n        document.onmouseup = getSelectionAndSendMessage;\n        document.onkeyup = getSelectionAndSendMessage;\n        document.oncontextmenu = getSelectionAndSendMessage;\n    </script>\n    \n    <script>\n        let loadCodeActions = () => {\n            var preList = document.getElementsByTagName(\"code\"),\n                length = preList.length,\n                i = 0;\n\n            for (i; i < length; i++) {\n                if (preList[i].classList.contains('language-mermaid')) {\n                    continue;\n                }\n\n                preList[i].addEventListener(\"mouseenter\", function(event) {\n                    if ({FSNOTES_PREVIEW}) {\n                        window.webkit.messageHandlers.mouse.postMessage('enter')\n                    }\n                });\n\n                preList[i].addEventListener(\"mouseleave\", function(event) {\n                    if ({FSNOTES_PREVIEW}) {\n                        window.webkit.messageHandlers.mouse.postMessage('leave')\n                    }\n                });\n\n                preList[i].addEventListener(\"click\", function(event) {\n                    let target = event.target\n                    while (target && target.nodeName !== \"CODE\") {\n                        target = target.parentElement\n                    }\n\n                    if ({FSNOTES_PREVIEW}) {\n                        window.webkit.messageHandlers.clipboard.postMessage(target.innerText);\n                    } else {\n                        navigator.clipboard.writeText(target.innerText);\n                    }\n\n                    target.style.background = \"#9c9c9c\"\n                    setTimeout(function() {\n                        if (null == document.getElementById(\"darkModeStyles\")) {\n                            target.style.background = \"#f5f5f5\";\n                        } else {\n                            target.style.background = \"#454545\";\n                        }\n                    }, 150)\n                });\n            }\n        }\n        \n        let loadAHover = () => {\n            var aList = document.getElementsByTagName(\"a\"),\n                aLength = aList.length,\n                j = 0;\n\n            for (j; j < aLength; j++) {\n                aList[j].addEventListener(\"mouseenter\", function(event) {\n                    if ({FSNOTES_PREVIEW}) {\n                        window.webkit.messageHandlers.mouse.postMessage('enter')\n                    }\n                });\n\n                aList[j].addEventListener(\"mouseleave\", function(event) {\n                    if ({FSNOTES_PREVIEW}) {\n                        window.webkit.messageHandlers.mouse.postMessage('leave')\n                    }\n                });\n            }\n        }\n        \n        let loadListStyle = () => {\n            var liList = document.getElementsByTagName(\"li\"),\n                length = liList.length,\n                i = 0;\n\n            for (i; i < length; i++) {\n                if (liList[i].parentNode.tagName == \"UL\" && liList[i].parentNode.classList.contains('cb')) {\n                    if (liList[i].querySelectorAll('input').length == 0) {\n                        liList[i].style.listStyleType = \"disc\"\n                    }\n                }\n            }\n        }\n        \n        let loadCheckboxStyle = () => {\n            var preList = document.getElementsByTagName(\"input\"),\n                length = preList.length,\n                i = 0;\n\n            for (i; i < length; i++) {\n                preList[i].disabled = true;\n\n                if (preList[i].parentNode.tagName == \"P\" && preList[i].parentNode.parentNode.tagName == \"LI\") {\n                    preList[i].parentNode.parentNode.parentNode.classList.add('cb')\n                    continue;\n                }\n\n                if (preList[i].parentNode.tagName != \"LI\") {\n                    continue;\n                }\n\n                preList[i].parentNode.parentNode.classList.add('cb')\n            }\n        }\n        \n        let addCheckboxEvent = (element) => {\n            if (element.parentNode.nodeName == 'LI') {\n                element.parentNode.classList.remove('strike');\n            }\n\n            let id = element.dataset.checkbox;\n            \n            if ({FSNOTES_PREVIEW}) {\n                window.webkit.messageHandlers.checkbox.postMessage(id);\n            }\n\n            let input = document.createElement(\"input\");\n            input.type = \"checkbox\";\n            input.dataset.checkbox = id;\n\n            if (!element.hasAttribute('checked')) {\n                input.defaultChecked = true;\n\n                if (element.parentNode.nodeName == 'LI') {\n                    element.parentNode.classList.add('strike');\n                }\n            }\n\n            element.parentNode.replaceChild(input, element);\n\n            input.addEventListener(\"click\", function(event) {\n                addCheckboxEvent(input);\n            });\n        };\n        \n        let addLocalAHrefEvent = () => {\n            var aList = document.getElementsByTagName(\"A\"),\n                length = aList.length,\n                i = 0;\n\n            for (i; i < length; i++) {\n                aList[i].addEventListener(\"click\", function(event) {\n                    var url = event.target.getAttribute(\"href\");\n                    window.webkit.messageHandlers.open.postMessage(url);\n                });\n            }\n        };\n        \n        let loadCheckboxActions = () => {\n            var inputs = document.querySelectorAll('input[type=checkbox]'),\n                length = inputs.length,\n                i = 0;\n                \n            for (i; i < length; i++) {\n                if (inputs[i].parentNode.nodeName == \"LI\" && inputs[i].hasAttribute('checked')) {\n                    inputs[i].parentNode.classList.add(\"strike\");\n                }\n\n                inputs[i].disabled = false\n                inputs[i].dataset.checkbox = i\n                inputs[i].addEventListener(\"click\", function(event) {\n                    let element = event.target;\n                    addCheckboxEvent(element);\n                });\n            }\n        }\n        \n        let loadTOC = () => {\n            var toc = \"\";\n            var level = 0;\n\n            document.getElementById(\"preview\").innerHTML =\n                document.getElementById(\"preview\").innerHTML.replace(\n                    /<h([\\d])>([^<]+)<\\/h([\\d])>/gi,\n                    function (str, openLevel, titleText, closeLevel) {\n                        if (openLevel != closeLevel) {\n                            return str;\n                        }\n\n                        if (openLevel > level) {\n                            toc += (new Array(openLevel - level + 1)).join(\"<ul>\");\n                        } else if (openLevel < level) {\n                            toc += (new Array(level - openLevel + 1)).join(\"</ul>\");\n                        }\n\n                        level = parseInt(openLevel);\n\n                        var anchor = encodeURIComponent(titleText.replace(/ /g, \"_\"));\n                        toc += \"<li><a href=\\\"#\" + anchor + \"\\\">\" + titleText\n                            + \"</a></li>\";\n\n                        return \"<h\" + openLevel + \" id=\\\"\" + anchor + \"\\\">\"\n                            + titleText + \"</h\" + closeLevel + \">\";\n                    }\n                );\n\n            if (level) {\n                toc += (new Array(level + 1)).join(\"</ul>\");\n            }\n\n            var tocEl = document.getElementById(\"toc\")\n            if (tocEl != null) {\n                document.getElementById(\"toc\").innerHTML += toc;\n            }\n        }\n        \n        let loadMemaid = () => {\n            let mermaidTheme = 'default';\n            if ('{FSNOTES_APPEARANCE}' == 'darkmode') {\n                mermaidTheme = 'dark';\n            }\n\n            var config = {\n                startOnLoad: true,\n                theme: mermaidTheme,\n                flowchart: {\n                    useMaxWidth: false,\n                    htmlLabels: true\n                }\n            };\n\n            mermaid.initialize(config);\n            window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid'));\n        };\n\n        let loadAttachments = () => {\n            var items = document.querySelectorAll('.attachment'),\n                length = items.length,\n                i = 0;\n\n            for (i; i < length; i++) {\n                items[i].addEventListener(\"click\", function(event) {\n                    let url = event.target.dataset.url;\n                    window.webkit.messageHandlers.quicklook.postMessage(url);\n                });\n            }\n        };\n\n        window.onload = function () {\n            loadTOC()\n            loadCheckboxStyle()\n            loadCheckboxActions()\n            loadListStyle()\n            loadAHover()\n            loadCodeActions()\n            loadMemaid()\n            loadAttachments()\n            addLocalAHrefEvent()\n        };\n    </script>\n</head>\n\n<body class=\"{FSNOTES_APPEARANCE} {FSNOTES_PLATFORM}\" id=\"preview\">\n    {NOTE_BODY}\n</body>\n\n</html>\n"
  },
  {
    "path": "Resources/MPreview.bundle/js/tex-mml-chtml.js",
    "content": "!function(r){var n={};function i(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,i),e.l=!0,e.exports}i.m=r,i.c=n,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p=\"\",i(i.s=230)}([function(t,s,e){\"use strict\";var n,r=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__assign||function(){return(c=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},d=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},m=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(s,\"__esModule\",{value:!0});var i=e(19),o=e(45);s.TEXCLASS={ORD:0,OP:1,BIN:2,REL:3,OPEN:4,CLOSE:5,PUNCT:6,INNER:7,VCENTER:8,NONE:-1},s.TEXCLASSNAMES=[\"ORD\",\"OP\",\"BIN\",\"REL\",\"OPEN\",\"CLOSE\",\"PUNCT\",\"INNER\",\"VCENTER\"];var a=[\"\",\"thinmathspace\",\"mediummathspace\",\"thickmathspace\"],l=[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]];s.indentAttributes=[\"indentalign\",\"indentalignfirst\",\"indentshift\",\"indentshiftfirst\"];var u,h=(u=o.AbstractNode,r(y,u),Object.defineProperty(y.prototype,\"isToken\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"isEmbellished\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"isSpacelike\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"linebreakContainer\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"hasNewLine\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"arity\",{get:function(){return 1/0},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"isInferred\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"Parent\",{get:function(){for(var t=this.parent;t&&t.notParent;)t=t.Parent;return t},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"notParent\",{get:function(){return!1},enumerable:!0,configurable:!0}),y.prototype.setChildren=function(t){return this.arity<0?this.childNodes[0].setChildren(t):u.prototype.setChildren.call(this,t)},y.prototype.appendChild=function(t){return this.arity<0?(this.childNodes[0].appendChild(t),t):u.prototype.appendChild.call(this,t)},y.prototype.replaceChild=function(t,e){return this.arity<0?(this.childNodes[0].replaceChild(t,e),t):u.prototype.replaceChild.call(this,t,e)},y.prototype.core=function(){return this},y.prototype.coreMO=function(){return this},y.prototype.coreIndex=function(){return 0},y.prototype.childPosition=function(){for(var e,t,r=this,n=r.parent;n&&n.notParent;)n=(r=n).parent;if(n){var i=0;try{for(var o=d(n.childNodes),a=o.next();!a.done;a=o.next()){if(a.value===r)return i;i++}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}}return null},y.prototype.setTeXclass=function(t){return this.getPrevClass(t),null!=this.texClass?this:t},y.prototype.updateTeXclass=function(t){t&&(this.prevClass=t.prevClass,this.prevLevel=t.prevLevel,t.prevClass=t.prevLevel=null,this.texClass=t.texClass)},y.prototype.getPrevClass=function(t){t&&(this.prevClass=t.texClass,this.prevLevel=t.attributes.get(\"scriptlevel\"))},y.prototype.texSpacing=function(){var t=null!=this.prevClass?this.prevClass:s.TEXCLASS.NONE,e=this.texClass||s.TEXCLASS.ORD;if(t===s.TEXCLASS.NONE||e===s.TEXCLASS.NONE)return\"\";t===s.TEXCLASS.VCENTER&&(t=s.TEXCLASS.ORD),e===s.TEXCLASS.VCENTER&&(e=s.TEXCLASS.ORD);var r=l[t][e];return 0<this.prevLevel&&0<this.attributes.get(\"scriptlevel\")&&0<=r?\"\":a[Math.abs(r)]},y.prototype.hasSpacingAttributes=function(){return this.isEmbellished&&this.coreMO().hasSpacingAttributes()},y.prototype.setInheritedAttributes=function(t,e,r,n){var i,o;void 0===t&&(t={}),void 0===e&&(e=!1),void 0===r&&(r=0),void 0===n&&(n=!1);var a=this.attributes.getAllDefaults();try{for(var s=d(Object.keys(t)),c=s.next();!c.done;c=s.next()){var l=c.value;if(a.hasOwnProperty(l)){var u=m(t[l],2),h=u[0],f=u[1];((y.noInherit[h]||{})[this.kind]||{})[l]||this.attributes.setInherited(l,f)}}}catch(t){i={error:t}}finally{try{c&&!c.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}void 0===this.attributes.getExplicit(\"displaystyle\")&&this.attributes.setInherited(\"displaystyle\",e),void 0===this.attributes.getExplicit(\"scriptlevel\")&&this.attributes.setInherited(\"scriptlevel\",r),n&&this.setProperty(\"texprimestyle\",n);var p=this.arity;if(0<=p&&p!==1/0&&(1===p&&0===this.childNodes.length||1!==p&&this.childNodes.length!==p))if(p<this.childNodes.length)this.childNodes=this.childNodes.slice(0,p);else for(;this.childNodes.length<p;)this.appendChild(this.factory.create(\"mrow\"));this.setChildInheritedAttributes(t,e,r,n)},y.prototype.setChildInheritedAttributes=function(t,e,r,n){var i,o;try{for(var a=d(this.childNodes),s=a.next();!s.done;s=a.next())s.value.setInheritedAttributes(t,e,r,n)}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}},y.prototype.addInheritedAttributes=function(t,e){var r,n,i=c({},t);try{for(var o=d(Object.keys(e)),a=o.next();!a.done;a=o.next()){var s=a.value;\"displaystyle\"!==s&&\"scriptlevel\"!==s&&\"style\"!==s&&(i[s]=[this.kind,e[s]])}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return i},y.prototype.inheritAttributesFrom=function(t){var e=t.attributes,r=e.get(\"displaystyle\"),n=e.get(\"scriptlevel\"),i=e.isSet(\"mathsize\")?{mathsize:[\"math\",e.get(\"mathsize\")]}:{},o=t.getProperty(\"texprimestyle\")||!1;this.setInheritedAttributes(i,r,n,o)},y.prototype.verifyTree=function(t){if(void 0===t&&(t=null),null!==t){this.verifyAttributes(t);var e=this.arity;t.checkArity&&0<=e&&e!==1/0&&(1===e&&0===this.childNodes.length||1!==e&&this.childNodes.length!==e)&&this.mError('Wrong number of children for \"'+this.kind+'\" node',t,!0),this.verifyChildren(t)}},y.prototype.verifyAttributes=function(t){var e,r;if(t.checkAttributes){var n=this.attributes,i=[];try{for(var o=d(n.getExplicitNames()),a=o.next();!a.done;a=o.next()){var s=a.value;\"data-\"===s.substr(0,5)||void 0!==n.getDefault(s)||s.match(/^(?:class|style|id|(?:xlink:)?href)$/)||i.push(s)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}i.length&&this.mError(\"Unknown attributes for \"+this.kind+\" node: \"+i.join(\", \"),t)}},y.prototype.verifyChildren=function(t){var e,r;try{for(var n=d(this.childNodes),i=n.next();!i.done;i=n.next())i.value.verifyTree(t)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},y.prototype.mError=function(t,e,r){if(void 0===r&&(r=!1),!this.parent||!this.parent.isKind(\"merror\")){var n=this.factory.create(\"merror\");if(e.fullErrors||r){var i=this.factory.create(\"mtext\"),o=this.factory.create(\"text\");o.setText(e.fullErrors?t:this.kind),i.appendChild(o),n.appendChild(i),this.parent.replaceChild(n,this)}else this.parent.replaceChild(n,this),n.appendChild(this);return n}},y.defaults={mathbackground:i.INHERIT,mathcolor:i.INHERIT,mathsize:i.INHERIT,dir:i.INHERIT},y.noInherit={mstyle:{mpadded:{width:!0,height:!0,depth:!0,lspace:!0,voffset:!0},mtable:{width:!0,height:!0,depth:!0,align:!0}},maligngroup:{mrow:{groupalign:!0},mtable:{groupalign:!0}}},y.verifyDefaults={checkArity:!0,checkAttributes:!1,fullErrors:!1,fixMmultiscripts:!0,fixMtables:!0},y);function y(t,e,r){void 0===e&&(e={}),void 0===r&&(r=[]);var n=u.call(this,t)||this;return n.texClass=null,n.prevClass=null,n.prevLevel=null,n.arity<0&&(n.childNodes=[t.create(\"inferredMrow\")],n.childNodes[0].parent=n),n.setChildren(r),n.attributes=new i.Attributes(t.getNodeClass(n.kind).defaults,t.getNodeClass(\"math\").defaults),n.attributes.setList(e),n}s.AbstractMmlNode=h;var f,p=(r(v,f=h),Object.defineProperty(v.prototype,\"isToken\",{get:function(){return!0},enumerable:!0,configurable:!0}),v.prototype.getText=function(){var e,t,r=\"\";try{for(var n=d(this.childNodes),i=n.next();!i.done;i=n.next()){var o=i.value;o instanceof w&&(r+=o.getText())}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r},v.prototype.setChildInheritedAttributes=function(t,e,r,n){var i,o;try{for(var a=d(this.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value;c instanceof h&&c.setInheritedAttributes(t,e,r,n)}}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}},v.prototype.walkTree=function(t,e){var r,n;t(this,e);try{for(var i=d(this.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;a instanceof h&&a.walkTree(t,e)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return e},v.defaults=c(c({},h.defaults),{mathvariant:\"normal\",mathsize:i.INHERIT}),v);function v(){return null!==f&&f.apply(this,arguments)||this}s.AbstractMmlTokenNode=p;var b,g=(r(M,b=h),Object.defineProperty(M.prototype,\"isSpacelike\",{get:function(){return this.childNodes[0].isSpacelike},enumerable:!0,configurable:!0}),Object.defineProperty(M.prototype,\"isEmbellished\",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!0,configurable:!0}),Object.defineProperty(M.prototype,\"arity\",{get:function(){return-1},enumerable:!0,configurable:!0}),M.prototype.core=function(){return this.childNodes[0]},M.prototype.coreMO=function(){return this.childNodes[0].coreMO()},M.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},M.defaults=h.defaults,M);function M(){return null!==b&&b.apply(this,arguments)||this}s.AbstractMmlLayoutNode=g;var O,x=(r(S,O=h),Object.defineProperty(S.prototype,\"isEmbellished\",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!0,configurable:!0}),S.prototype.core=function(){return this.childNodes[0]},S.prototype.coreMO=function(){return this.childNodes[0].coreMO()},S.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t),this.texClass=s.TEXCLASS.NONE;var n=this.childNodes[0];n?this.isEmbellished||n.isKind(\"mi\")?(t=n.setTeXclass(t),this.updateTeXclass(this.core())):(n.setTeXclass(null),t=this):t=this;try{for(var i=d(this.childNodes.slice(1)),o=i.next();!o.done;o=i.next()){var a=o.value;a&&a.setTeXclass(null)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return t},S.defaults=h.defaults,S);function S(){return null!==O&&O.apply(this,arguments)||this}s.AbstractMmlBaseNode=x;var E,C=(E=o.AbstractEmptyNode,r(_,E),Object.defineProperty(_.prototype,\"isToken\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"isEmbellished\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"isSpacelike\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"linebreakContainer\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"hasNewLine\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"arity\",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"isInferred\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"notParent\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"Parent\",{get:function(){return this.parent},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"texClass\",{get:function(){return s.TEXCLASS.NONE},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"prevClass\",{get:function(){return s.TEXCLASS.NONE},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,\"prevLevel\",{get:function(){return 0},enumerable:!0,configurable:!0}),_.prototype.hasSpacingAttributes=function(){return!1},Object.defineProperty(_.prototype,\"attributes\",{get:function(){return null},enumerable:!0,configurable:!0}),_.prototype.core=function(){return this},_.prototype.coreMO=function(){return this},_.prototype.coreIndex=function(){return 0},_.prototype.childPosition=function(){return 0},_.prototype.setTeXclass=function(t){return t},_.prototype.texSpacing=function(){return\"\"},_.prototype.setInheritedAttributes=function(t,e,r,n){},_.prototype.inheritAttributesFrom=function(t){},_.prototype.verifyTree=function(t){},_.prototype.mError=function(t,e,r){void 0===r&&(r=!1)},_);function _(){return null!==E&&E.apply(this,arguments)||this}s.AbstractMmlEmptyNode=C;var T,w=(r(A,T=C),Object.defineProperty(A.prototype,\"kind\",{get:function(){return\"text\"},enumerable:!0,configurable:!0}),A.prototype.getText=function(){return this.text},A.prototype.setText=function(t){return this.text=t,this},A.prototype.toString=function(){return this.text},A);function A(){var t=null!==T&&T.apply(this,arguments)||this;return t.text=\"\",t}s.TextNode=w;var k,I=(r(L,k=C),Object.defineProperty(L.prototype,\"kind\",{get:function(){return\"XML\"},enumerable:!0,configurable:!0}),L.prototype.getXML=function(){return this.xml},L.prototype.setXML=function(t){return this.xml=t,this},L.prototype.toString=function(){return\"XML data\"},L);function L(){var t=null!==k&&k.apply(this,arguments)||this;return t.xml=null,t}s.XMLNode=I},function(t,r,e){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__assign||function(){return(l=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},y=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},v=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(r,\"__esModule\",{value:!0});var c=e(23),o=e(14),u=e(3);!function(t){for(var e in t)r.hasOwnProperty(e)||(r[e]=t[e])}(e(23));var h,a=(h=c.FontData,i(s,h),s.prototype.adaptiveCSS=function(t){this.options.adaptiveCSS=t},s.prototype.clearCache=function(){var e,t,r,n,i,o;if(this.options.adaptiveCSS){try{for(var a=y(Object.keys(this.delimiters)),s=a.next();!s.done;s=a.next()){var c=s.value;this.delimiters[parseInt(c)].used=!1}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}try{for(var l=y(Object.keys(this.variant)),u=l.next();!u.done;u=l.next()){var h=u.value,f=this.variant[h].chars;try{for(var p=(i=void 0,y(Object.keys(f))),d=p.next();!d.done;d=p.next()){c=d.value;var m=f[parseInt(c)][3];m&&(m.used=!1)}}catch(t){i={error:t}}finally{try{d&&!d.done&&(o=p.return)&&o.call(p)}finally{if(i)throw i.error}}}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}}},Object.defineProperty(s.prototype,\"styles\",{get:function(){var e,t,r=this.constructor,n=l({},r.defaultStyles);this.addFontURLs(n,r.defaultFonts,this.options.fontURL);try{for(var i=y(Object.keys(this.delimiters)),o=i.next();!o.done;o=i.next()){var a=o.value,s=parseInt(a);this.addDelimiterStyles(n,s,this.delimiters[s])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return this.addVariantChars(n),n},enumerable:!0,configurable:!0}),s.prototype.addVariantChars=function(t){var e,r,n,i,o=new Map;try{for(var a=y(Object.keys(this.variant)),s=a.next();!s.done;s=a.next()){var c=s.value,l=this.variant[c],u=\"normal\"===c?\"\":\".\"+l.classes.replace(/ /g,\".\");try{for(var h=(n=void 0,y(Object.keys(l.chars))),f=h.next();!f.done;f=h.next()){var p=f.value,d=parseInt(p);4===l.chars[d].length&&this.addCharStyles(t,u,d,l.chars[d],o)}}catch(t){n={error:t}}finally{try{f&&!f.done&&(i=h.return)&&i.call(h)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}},s.prototype.addFontURLs=function(t,e,r){var n,i;try{for(var o=y(Object.keys(e)),a=o.next();!a.done;a=o.next()){var s=a.value,c=l({},e[s]);c.src=c.src.replace(/%%URL%%/,r),t[s]=c}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}},s.prototype.addDelimiterStyles=function(t,e,r){if(!this.options.adaptiveCSS||r.used){var n=this.charSelector(e);r.c&&r.c!==e&&(t[this.cssRoot+\".mjx-stretched mjx-c\"+n+\"::before\"]={content:this.charContent(r.c)}),r.stretch&&(1===r.dir?this.addDelimiterVStyles(t,n,r):this.addDelimiterHStyles(t,n,r))}},s.prototype.addDelimiterVStyles=function(t,e,r){var n=r.HDW[2],i=v(r.stretch,4),o=i[0],a=i[1],s=i[2],c=i[3],l=this.addDelimiterVPart(t,e,n,\"beg\",o);this.addDelimiterVPart(t,e,n,\"ext\",a);var u=this.addDelimiterVPart(t,e,n,\"end\",s),h={},f=this.cssRoot;if(c){var p=this.addDelimiterVPart(t,e,n,\"mid\",c);h.height=\"50%\",t[f+\"mjx-stretchy-v\"+e+\" > mjx-mid\"]={\"margin-top\":this.em(-p/2),\"margin-bottom\":this.em(-p/2)}}l&&(h[\"border-top-width\"]=this.em0(l-.03)),u&&(h[\"border-bottom-width\"]=this.em0(u-.03),t[f+\"mjx-stretchy-v\"+e+\" > mjx-end\"]={\"margin-top\":this.em(-u)}),Object.keys(h).length&&(t[f+\"mjx-stretchy-v\"+e+\" > mjx-ext\"]=h)},s.prototype.addDelimiterVPart=function(t,e,r,n,i){if(!i)return 0;var o=this.getDelimiterData(i),a=(r-o[2])/2,s={content:this.charContent(i)};return\"ext\"!==n?s.padding=this.padding(o,a):a&&(s[\"padding-left\"]=this.em0(a)),t[this.cssRoot+\"mjx-stretchy-v\"+e+\" mjx-\"+n+\" mjx-c::before\"]=s,o[0]+o[1]},s.prototype.addDelimiterHStyles=function(t,e,r){var n=v(r.stretch,4),i=n[0],o=n[1],a=n[2],s=n[3];this.addDelimiterHPart(t,e,\"beg\",i),this.addDelimiterHPart(t,e,\"ext\",o,!(i||a)),this.addDelimiterHPart(t,e,\"end\",a),s&&(this.addDelimiterHPart(t,e,\"mid\",s),t[this.cssRoot+\"mjx-stretchy-h\"+e+\" > mjx-ext\"]={width:\"50%\"})},s.prototype.addDelimiterHPart=function(t,e,r,n,i){if(void 0===i&&(i=!1),!n)return 0;var o=this.getDelimiterData(n),a=o[3],s={content:a&&a.c?'\"'+a.c+'\"':this.charContent(n)};\"ext\"===r&&!i||(s.padding=this.padding(o,0,-o[2])),t[this.cssRoot+\"mjx-stretchy-h\"+e+\" mjx-\"+r+\" mjx-c::before\"]=s},s.prototype.addCharStyles=function(t,e,r,n,i){var o=v(n,4),a=(o[0],o[1],o[2]),s=o[3];if(!this.options.adaptiveCSS||s.used){var c={},l=\"mjx-c\"+this.charSelector(r),u=this.cssRoot;c.padding=this.padding(n,0,s.ic||0);var h=s.c?'\"'+s.c+'\"':this.charContent(r);i.get(r)!==h&&(i.has(r)||s.c?t[u+e+\" \"+l+\"::before\"]={content:h}:(t[u+l+\"::before\"]={content:h},i.set(r,h))),void 0!==s.f&&(c[\"font-family\"]=\"MJXZERO, MJXTEX\"+(s.f?\"-\"+s.f:\"\"));var f=(e?e+\" \":\"\")+l;if(t[u+f]=c,s.ic){var p=v([u+\"mjx-\",\"[noIC]\"+f+\":last-child\"],2),d=p[0],m=p[1];t[d+\"mi\"+m]=t[d+\"mo\"+m]={\"padding-right\":this.em(a)}}}},s.prototype.getDelimiterData=function(t){return this.getChar(\"-smallop\",t)},s.charOptions=function(t,e){return h.charOptions.call(this,t,e)},s.prototype.em=function(t){return o.em(t)},s.prototype.em0=function(t){return o.em(Math.max(0,t))},s.prototype.padding=function(t,e,r){var n=v(t,3),i=n[0],o=n[1];return void 0===e&&(e=0),void 0===r&&(r=0),[i,n[2]+r,o,e].map(this.em0).join(\" \")},s.prototype.charContent=function(t){return'\"'+(32<=t&&t<=126&&34!==t&&39!==t&&92!==t?String.fromCharCode(t):\"\\\\\"+t.toString(16).toUpperCase())+'\"'},s.prototype.charSelector=function(t){return\".mjx-c\"+t.toString(16).toUpperCase()},s.OPTIONS={fontURL:\"js/output/chtml/fonts/tex-woff-v2\"},s.defaultVariantClasses={},s.defaultStyles={\"mjx-c::before\":{display:\"inline-block\",width:0}},s.defaultFonts={\"@font-face /* 0 */\":{\"font-family\":\"MJXZERO\",src:'url(\"%%URL%%/MathJax_Zero.woff\") format(\"woff\")'}},s);function s(t){var e,r;void 0===t&&(t=null);var n=h.call(this)||this;n.cssRoot=\"\";var i=n.constructor;n.options=u.userOptions(u.defaultOptions({},i.OPTIONS),t);try{for(var o=y(Object.keys(i.defaultVariantClasses)),a=o.next();!a.done;a=o.next()){var s=a.value;n.variant[s].classes=i.defaultVariantClasses[s]}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n}r.CHTMLFontData=a,r.AddCSS=function(t,e){var r,n;try{for(var i=y(Object.keys(e)),o=i.next();!o.done;o=i.next()){var a=o.value,s=parseInt(a);Object.assign(c.FontData.charOptions(t,s),e[s])}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return t}},function(t,u,e){\"use strict\";var n,r,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},f=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(u,\"__esModule\",{value:!0});var o=e(14),a=e(128),s=e(129);u.FONTSIZE={\"70.7%\":\"s\",\"70%\":\"s\",\"50%\":\"ss\",\"60%\":\"Tn\",\"85%\":\"sm\",\"120%\":\"lg\",\"144%\":\"Lg\",\"173%\":\"LG\",\"207%\":\"hg\",\"249%\":\"HG\"},u.SPACE=((r={})[o.em(2/18)]=\"1\",r[o.em(3/18)]=\"2\",r[o.em(4/18)]=\"3\",r[o.em(5/18)]=\"4\",r[o.em(6/18)]=\"5\",r);var c,l=(c=a.CommonWrapper,i(p,c),p.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t);try{for(var i=h(this.childNodes),o=i.next();!o.done;o=i.next())o.value.toCHTML(n)}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},p.prototype.standardCHTMLnode=function(t){this.markUsed();var e=this.createCHTMLnode(t);return this.handleStyles(),this.handleVariant(),this.handleScale(),this.handleColor(),this.handleSpace(),this.handleAttributes(),this.handlePWidth(),e},p.prototype.markUsed=function(){this.constructor.used=!0},p.prototype.createCHTMLnode=function(t){var e=this.node.attributes.get(\"href\");return e&&(t=this.adaptor.append(t,this.html(\"a\",{href:e}))),this.chtml=this.adaptor.append(t,this.html(\"mjx-\"+this.node.kind)),this.chtml},p.prototype.handleStyles=function(){if(this.styles){var t=this.styles.cssText;if(t){this.adaptor.setAttribute(this.chtml,\"style\",t);var e=this.styles.get(\"font-family\");e&&this.adaptor.setStyle(this.chtml,\"font-family\",\"MJXZERO, \"+e)}}},p.prototype.handleVariant=function(){this.node.isToken&&\"-explicitFont\"!==this.variant&&this.adaptor.setAttribute(this.chtml,\"class\",(this.font.getVariant(this.variant)||this.font.getVariant(\"normal\")).classes)},p.prototype.handleScale=function(){this.setScale(this.chtml,this.bbox.rscale)},p.prototype.setScale=function(t,e){var r=Math.abs(e-1)<.001?1:e;if(t&&1!==r){var n=this.percent(r);u.FONTSIZE[n]?this.adaptor.setAttribute(t,\"size\",u.FONTSIZE[n]):this.adaptor.setStyle(t,\"fontSize\",n)}return t},p.prototype.handleSpace=function(){var e,t;try{for(var r=h([[this.bbox.L,\"space\",\"marginLeft\"],[this.bbox.R,\"rspace\",\"marginRight\"]]),n=r.next();!n.done;n=r.next()){var i=n.value,o=f(i,3),a=o[0],s=o[1],c=o[2];if(a){var l=this.em(a);u.SPACE[l]?this.adaptor.setAttribute(this.chtml,s,u.SPACE[l]):this.adaptor.setStyle(this.chtml,c,l)}}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},p.prototype.handleColor=function(){var t=this.node.attributes,e=t.getExplicit(\"mathcolor\"),r=t.getExplicit(\"color\"),n=t.getExplicit(\"mathbackground\"),i=t.getExplicit(\"background\");(e||r)&&this.adaptor.setStyle(this.chtml,\"color\",e||r),(n||i)&&this.adaptor.setStyle(this.chtml,\"backgroundColor\",n||i)},p.prototype.handleAttributes=function(){var e,t,r=this.node.attributes,n=r.getAllDefaults(),i=p.skipAttributes;try{for(var o=h(r.getExplicitNames()),a=o.next();!a.done;a=o.next()){var s=a.value;!1!==i[s]&&(s in n||i[s]||this.adaptor.hasAttribute(this.chtml,s))||this.adaptor.setAttribute(this.chtml,s,r.getExplicit(s))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}r.get(\"class\")&&this.adaptor.addClass(this.chtml,r.get(\"class\"))},p.prototype.handlePWidth=function(){this.bbox.pwidth&&(this.bbox.pwidth===s.BBox.fullWidth?this.adaptor.setAttribute(this.chtml,\"width\",\"full\"):this.adaptor.setStyle(this.chtml,\"width\",this.bbox.pwidth))},p.prototype.setIndent=function(t,e,r){var n=this.adaptor;if(\"center\"===e||\"left\"===e){var i=this.getBBox().L;n.setStyle(t,\"margin-left\",this.em(r+i))}if(\"center\"===e||\"right\"===e){var o=this.getBBox().R;n.setStyle(t,\"margin-right\",this.em(-r+o))}},p.prototype.drawBBox=function(){var t=this.getBBox(),e=t.w,r=t.h,n=t.d,i=t.R,o=this.html(\"mjx-box\",{style:{opacity:.25,\"margin-left\":this.em(-e-i)}},[this.html(\"mjx-box\",{style:{height:this.em(r),width:this.em(e),\"background-color\":\"red\"}}),this.html(\"mjx-box\",{style:{height:this.em(n),width:this.em(e),\"margin-left\":this.em(-e),\"vertical-align\":this.em(-n),\"background-color\":\"green\"}})]),a=this.chtml||this.parent.chtml,s=this.adaptor.getAttribute(a,\"size\");s&&this.adaptor.setAttribute(o,\"size\",s);var c=this.adaptor.getStyle(a,\"fontSize\");c&&this.adaptor.setStyle(o,\"fontSize\",c),this.adaptor.append(this.adaptor.parent(a),o),this.adaptor.setStyle(a,\"backgroundColor\",\"#FFEE00\")},p.prototype.html=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.jax.html(t,e,r)},p.prototype.text=function(t){return this.jax.text(t)},p.prototype.createMo=function(t){return c.prototype.createMo.call(this,t)},p.prototype.coreMO=function(){return c.prototype.coreMO.call(this)},p.prototype.char=function(t){return this.font.charSelector(t).substr(1)},p.kind=\"unknown\",p.autoStyle=!0,p.used=!1,p);function p(){var t=null!==c&&c.apply(this,arguments)||this;return t.chtml=null,t}u.CHTMLWrapper=l},function(t,c,e){\"use strict\";var y=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},r=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},l=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t};Object.defineProperty(c,\"__esModule\",{value:!0});var n={}.constructor;function u(t){return\"object\"==typeof t&&null!==t&&t.constructor===n}c.APPEND=\"[+]\",c.REMOVE=\"[-]\";var h=function(){};function f(t){return t?Object.keys(t).concat(Object.getOwnPropertySymbols(t)):[]}function p(t){var e,r,n={};try{for(var i=y(f(t)),o=i.next();!o.done;o=i.next()){var a=o.value,s=Object.getOwnPropertyDescriptor(t,a),c=s.value;Array.isArray(c)?s.value=d([],c,!1):u(c)&&(s.value=p(c)),s.enumerable&&(n[a]=s)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return Object.defineProperties({},n)}function d(i,o,a){var e,t;void 0===a&&(a=!0);function r(t){if(a&&void 0===i[t]&&!(i instanceof h))throw\"symbol\"==typeof t&&(t=t.toString()),new Error('Invalid option \"'+t+'\" (no default value).');var e=o[t],r=i[t];if(!u(e)||null===r||\"object\"!=typeof r&&\"function\"!=typeof r)Array.isArray(e)?(i[t]=[],d(i[t],e,!1)):u(e)?i[t]=p(e):i[t]=e;else{var n=f(e);Array.isArray(r)&&(1===n.length&&(n[0]===c.APPEND||n[0]===c.REMOVE)&&Array.isArray(e[n[0]])||2===n.length&&n.sort().join(\",\")===c.APPEND+\",\"+c.REMOVE&&Array.isArray(e[c.APPEND])&&Array.isArray(e[c.REMOVE]))?(e[c.REMOVE]&&(r=i[t]=r.filter(function(t){return e[c.REMOVE].indexOf(t)<0})),e[c.APPEND]&&(i[t]=l(r,e[c.APPEND]))):d(r,e,a)}}try{for(var n=y(f(o)),s=n.next();!s.done;s=n.next()){r(s.value)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return i}function i(t){for(var e,r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var o={};try{for(var a=y(n),s=a.next();!s.done;s=a.next()){var c=s.value;t.hasOwnProperty(c)&&(o[c]=t[c])}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return o}c.Expandable=h,c.expandable=function(t){return Object.assign(Object.create(h.prototype),t)},c.makeArray=function(t){return Array.isArray(t)?t:[t]},c.keys=f,c.copy=p,c.insert=d,c.defaultOptions=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return t.forEach(function(t){return d(e,t,!1)}),e},c.userOptions=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return t.forEach(function(t){return d(e,t,!0)}),e},c.selectOptions=i,c.selectOptionsFromKeys=function(t,e){return i.apply(void 0,l([t],Object.keys(e)))},c.separateOptions=function(t){for(var e,r,n,i,o=[],a=1;a<arguments.length;a++)o[a-1]=arguments[a];var s=[];try{for(var c=y(o),l=c.next();!l.done;l=c.next()){var u=l.value,h={},f={};try{for(var p=(n=void 0,y(Object.keys(t||{}))),d=p.next();!d.done;d=p.next()){var m=d.value;(void 0===u[m]?f:h)[m]=t[m]}}catch(t){n={error:t}}finally{try{d&&!d.done&&(i=p.return)&&i.call(p)}finally{if(n)throw n.error}}s.push(h),t=f}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}return s.unshift(t),s}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=(a.processString=function(t,e){for(var r=t.split(a.pattern),n=1,i=r.length;n<i;n+=2){var o=r[n].charAt(0);\"0\"<=o&&o<=\"9\"?(r[n]=e[parseInt(r[n],10)-1],\"number\"==typeof r[n]&&(r[n]=r[n].toString())):\"{\"===o&&(\"0\"<=(o=r[n].substr(1))&&o<=\"9\"?(r[n]=e[parseInt(r[n].substr(1,r[n].length-2),10)-1],\"number\"==typeof r[n]&&(r[n]=r[n].toString())):r[n].match(/^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/)&&(r[n]=\"%\"+r[n])),null==r[n]&&(r[n]=\"???\")}return r.join(\"\")},a.pattern=/%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g,a);function a(t,e){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];this.id=t,this.message=a.processString(e,r)}e.default=n},function(t,e,r){\"use strict\";(function(t){var l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};function s(t,e){var r,n;try{for(var i=l(Object.keys(e)),o=i.next();!o.done;o=i.next()){var a=o.value;\"__esModule\"!==a&&(\"object\"==typeof t[a]&&\"object\"==typeof e[a]?s(t[a],e[a]):null!==e[a]&&void 0!==e[a]&&(t[a]=e[a]))}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return t}Object.defineProperty(e,\"__esModule\",{value:!0}),e.combineConfig=s,e.combineDefaults=function t(e,r,n){var i,o;e[r]||(e[r]={}),e=e[r];try{for(var a=l(Object.keys(n)),s=a.next();!s.done;s=a.next()){var c=s.value;\"object\"==typeof e[c]&&\"object\"==typeof n[c]?t(e,c,n[c]):null==e[c]&&null!=n[c]&&(e[c]=n[c])}}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}return e},e.combineWithMathJax=function(t){return s(e.MathJax,t)},void 0===t.MathJax&&(t.MathJax={}),t.MathJax.version||(t.MathJax={version:\"3.0.0\",_:{},config:t.MathJax}),e.MathJax=t.MathJax}).call(this,r(28))},function(t,e,r){\"use strict\";var l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a,c,s=r(0),u=r(26);function h(t,e){var r,n;try{for(var i=l(Object.keys(e)),o=i.next();!o.done;o=i.next()){var a=o.value,s=e[a];\"texClass\"===a?(t.texClass=s,t.setProperty(a,s)):\"movablelimits\"===a?(t.setProperty(\"movablelimits\",s),(t.isKind(\"mo\")||t.isKind(\"mstyle\"))&&t.attributes.set(\"movablelimits\",s)):\"inferred\"===a||(c.has(a)?t.setProperty(a,s):t.attributes.set(a,s))}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}function f(t,e,r){(t.childNodes[e]=r)&&(r.parent=t)}function p(t,e){return t.isKind(e)}a=o=o||{},c=new Map([[\"autoOP\",!0],[\"fnOP\",!0],[\"movesupsub\",!0],[\"subsupOK\",!0],[\"texprimestyle\",!0],[\"useHeight\",!0],[\"variantForm\",!0],[\"withDelims\",!0],[\"open\",!0],[\"close\",!0]]),a.createEntity=function(t){return String.fromCharCode(parseInt(t,16))},a.getChildren=function(t){return t.childNodes},a.getText=function(t){return t.getText()},a.appendChildren=function(t,e){var r,n;try{for(var i=l(e),o=i.next();!o.done;o=i.next()){var a=o.value;t.appendChild(a)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},a.setAttribute=function(t,e,r){t.attributes.set(e,r)},a.setProperty=function(t,e,r){t.setProperty(e,r)},a.setProperties=h,a.getProperty=function(t,e){return t.getProperty(e)},a.getAttribute=function(t,e){return t.attributes.get(e)},a.removeProperties=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];t.removeProperty.apply(t,i(e))},a.getChildAt=function(t,e){return t.childNodes[e]},a.setChild=f,a.copyChildren=function(t,e){for(var r=t.childNodes,n=0;n<r.length;n++)f(e,n,r[n])},a.copyAttributes=function(t,e){e.attributes=t.attributes,h(e,t.getAllProperties())},a.isType=p,a.isEmbellished=function(t){return t.isEmbellished},a.getTexClass=function(t){return t.texClass},a.getCoreMO=function(t){return t.coreMO()},a.isNode=function(t){return t instanceof s.AbstractMmlNode||t instanceof s.AbstractMmlEmptyNode},a.isInferred=function(t){return t.isInferred},a.getForm=function(t){var e,r;if(!p(t,\"mo\"))return null;var n=t,i=n.getForms();try{for(var o=l(i),a=o.next();!a.done;a=o.next()){var s=a.value,c=u.MmlMo.OPTABLE[s][n.getText()];if(c)return c}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},e.default=o},function(t,e,r){\"use strict\";var l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var n,i,a,o,s,c,h,f=r(0),p=r(6),d=r(21),m=r(4),y=r(12);function v(t,e){void 0===e&&(e=!1);var r=t.match(e?h:c);return r?[r[1].replace(/,/,\".\"),r[4],r[0].length]:[null,null,0]}function b(t,e,r){\"{\"!==e&&\"}\"!==e||(e=\"\\\\\"+e);var n=\"{\\\\bigg\"+r+\" \"+e+\"}\",i=\"{\\\\big\"+r+\" \"+e+\"}\";return new d.default(\"\\\\mathchoice\"+n+i+i+i,{},t).mml()}function g(t,e,r){e=e.replace(/^\\s+/,y.entities.nbsp).replace(/\\s+$/,y.entities.nbsp);var n=t.create(\"text\",e);return t.create(\"node\",\"mtext\",[],r,n)}function M(t,e,r){if(r.match(/^[a-z]/i)&&e.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)&&(e+=\" \"),e.length+r.length>t.configuration.options.maxBuffer)throw new m.default(\"MaxBufferSize\",\"MathJax internal buffer size exceeded; is there a recursive macro call?\");return e+r}function O(t,e){for(;0<e;)t=t.trim().slice(1,-1),e--;return t.trim()}function x(t,e){for(var r=t.length,n=0,i=\"\",o=0,a=0,s=!0,c=!1;o<r;){var l=t[o++];switch(l){case\" \":break;case\"{\":s?a++:(c=!1,n<a&&(a=n)),n++;break;case\"}\":n&&n--,(s||c)&&(a--,c=!0),s=!1;break;default:if(!n&&-1!==e.indexOf(l))return[c?\"true\":O(i,a),l,t.slice(o)];c=s=!1}i+=l}if(n)throw new m.default(\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\");return[c?\"true\":O(i,a),\"\",t.slice(o)]}r(108),i=n=n||{},a={em:function(t){return t},ex:function(t){return.43*t},pt:function(t){return t/10},pc:function(t){return 1.2*t},px:function(t){return 7.2*t/72},in:function(t){return 7.2*t},cm:function(t){return 7.2*t/2.54},mm:function(t){return 7.2*t/25.4},mu:function(t){return t/18}},o=\"([-+]?([.,]\\\\d+|\\\\d+([.,]\\\\d*)?))\",s=\"(pt|em|ex|mu|px|mm|cm|in|pc)\",c=RegExp(\"^\\\\s*\"+o+\"\\\\s*\"+s+\"\\\\s*$\"),h=RegExp(\"^\\\\s*\"+o+\"\\\\s*\"+s+\" ?\"),i.matchDimen=v,i.dimen2em=function(t){var e=l(v(t),3),r=e[0],n=e[1],i=(e[2],parseFloat(r||\"1\")),o=a[n];return o?o(i):0},i.Em=function(t){return Math.abs(t)<6e-4?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"},i.fenced=function(t,e,r,n,i){void 0===i&&(i=\"\");var o,a=t.nodeFactory,s=a.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:f.TEXCLASS.INNER});if(i)o=new d.default(\"\\\\\"+i+\"l\"+e,t.parser.stack.env,t).mml();else{var c=a.create(\"text\",e);o=a.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:f.TEXCLASS.OPEN},c)}if(p.default.appendChildren(s,[o]),p.default.isType(r,\"mrow\")&&p.default.isInferred(r)?p.default.appendChildren(s,p.default.getChildren(r)):p.default.appendChildren(s,[r]),i)o=new d.default(\"\\\\\"+i+\"r\"+n,t.parser.stack.env,t).mml();else{var l=a.create(\"text\",n);o=a.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:f.TEXCLASS.CLOSE},l)}return p.default.appendChildren(s,[o]),s},i.fixedFence=function(t,e,r,n){var i=t.nodeFactory.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:f.TEXCLASS.ORD});return e&&p.default.appendChildren(i,[b(t,e,\"l\")]),p.default.isType(r,\"mrow\")?p.default.appendChildren(i,p.default.getChildren(r)):p.default.appendChildren(i,[r]),n&&p.default.appendChildren(i,[b(t,n,\"r\")]),i},i.mathPalette=b,i.fixInitialMO=function(t,e){for(var r=0,n=e.length;r<n;r++){var i=e[r];if(i&&!p.default.isType(i,\"mspace\")&&(!p.default.isType(i,\"TeXAtom\")||p.default.getChildren(i)[0]&&p.default.getChildren(p.default.getChildren(i)[0]).length)){if(p.default.isEmbellished(i)){var o=t.nodeFactory.create(\"node\",\"mi\");e.unshift(o)}break}}},i.mi2mo=function(t,e){var r=t.create(\"node\",\"mo\");return p.default.copyChildren(e,r),p.default.copyAttributes(e,r),p.default.setProperties(r,{lspace:\"0\",rspace:\"0\"}),p.default.removeProperties(r,\"movesupsub\"),r},i.internalMath=function(t,e,r){var n,i,o=t.stack.env.font?{mathvariant:t.stack.env.font}:{},a=[],s=0,c=0,l=\"\",u=0;if(e.match(/\\\\?[${}\\\\]|\\\\\\(|\\\\(eq)?ref\\s*\\{/)){for(;s<e.length;)if(\"$\"===(n=e.charAt(s++)))\"$\"===l&&0===u?(i=t.create(\"node\",\"TeXAtom\",[new d.default(e.slice(c,s-1),{},t.configuration).mml()]),a.push(i),l=\"\",c=s):\"\"===l&&(c<s-1&&a.push(g(t,e.slice(c,s-1),o)),l=\"$\",c=s);else if(\"{\"===n&&\"\"!==l)u++;else if(\"}\"===n)if(\"}\"===l&&0===u){var h=new d.default(e.slice(c,s),{},t.configuration).mml();i=t.create(\"node\",\"TeXAtom\",[h],o),a.push(i),l=\"\",c=s}else\"\"!==l&&u&&u--;else if(\"\\\\\"===n)if(\"\"===l&&e.substr(s).match(/^(eq)?ref\\s*\\{/)){var f=RegExp[\"$&\"].length;c<s-1&&a.push(g(t,e.slice(c,s-1),o)),l=\"}\",c=s-1,s+=f}else\"(\"===(n=e.charAt(s++))&&\"\"===l?(c<s-2&&a.push(g(t,e.slice(c,s-2),o)),l=\")\",c=s):\")\"===n&&\")\"===l&&0===u?(i=t.create(\"node\",\"TeXAtom\",[new d.default(e.slice(c,s-2),{},t.configuration).mml()]),a.push(i),l=\"\",c=s):n.match(/[${}\\\\]/)&&\"\"===l&&(s--,e=e.substr(0,s-1)+e.substr(s));if(\"\"!==l)throw new m.default(\"MathNotTerminated\",\"Math not terminated in text box\")}return c<e.length&&a.push(g(t,e.slice(c),o)),null!=r?a=[t.create(\"node\",\"mstyle\",a,{displaystyle:!1,scriptlevel:r})]:1<a.length&&(a=[t.create(\"node\",\"mrow\",a)]),a},i.trimSpaces=function(t){if(\"string\"!=typeof t)return t;var e=t.trim();return e.match(/\\\\$/)&&t.match(/ $/)&&(e+=\" \"),e},i.setArrayAlign=function(t,e){return\"t\"===(e=i.trimSpaces(e||\"\"))?t.arraydef.align=\"baseline 1\":\"b\"===e?t.arraydef.align=\"baseline -1\":\"c\"===e?t.arraydef.align=\"center\":e&&(t.arraydef.align=e),t},i.substituteArgs=function(t,e,r){for(var n=\"\",i=\"\",o=0;o<r.length;){var a=r.charAt(o++);if(\"\\\\\"===a)n+=a+r.charAt(o++);else if(\"#\"===a)if(\"#\"===(a=r.charAt(o++)))n+=a;else{if(!a.match(/[1-9]/)||parseInt(a,10)>e.length)throw new m.default(\"IllegalMacroParam\",\"Illegal macro parameter reference\");i=M(t,M(t,i,n),e[parseInt(a,10)-1]),n=\"\"}else n+=a}return M(t,i,n)},i.addArgs=M,i.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new m.default(\"ErroneousNestingEq\",\"Erroneous nesting of equation structures\");t.stack.global.eqnenv=!0},i.MmlFilterAttribute=function(t,e,r){return r},i.getFontDef=function(t){var e=t.stack.env.font;return e?{mathvariant:e}:{}},i.keyvalOptions=function(t,e,r){var n,i;void 0===e&&(e=null),void 0===r&&(r=!1);var o=function(t){for(var e,r,n,i,o,a={},s=t;s;)e=l(x(s,[\"=\",\",\"]),3),i=e[0],n=e[1],s=e[2],\"=\"===n?(r=l(x(s,[\",\"]),3),o=r[0],n=r[1],s=r[2],o=\"false\"===o||\"true\"===o?JSON.parse(o):o,a[i]=o):i&&(a[i]=!0);return a}(t);if(e)try{for(var a=u(Object.keys(o)),s=a.next();!s.done;s=a.next()){var c=s.value;if(!e.hasOwnProperty(c)){if(r)throw new m.default(\"InvalidOption\",\"Invalid optional argument: %1\",c);delete o[c]}}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return o},e.default=n},function(t,e,r){\"use strict\";var n,i,o,l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},u=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),i=n=e.MapHandler||(e.MapHandler={}),o=new Map,i.register=function(t){o.set(t.name,t)},i.getMap=function(t){return o.get(t)},e.ExtensionMaps={NEW_MACRO:\"new-Macro\",NEW_DELIMITER:\"new-Delimiter\",NEW_COMMAND:\"new-Command\",NEW_ENVIRONMENT:\"new-Environment\"};var s=(a.prototype.add=function(t){var e=n.getMap(t);e?this._configuration.push(e):this.warn(\"Configuration \"+t+\" not found! Omitted.\")},a.prototype.parse=function(t){var e,r;try{for(var n=l(this._configuration),i=n.next();!i.done;i=n.next()){var o=i.value.parse(t);if(o)return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}var a=u(t,2),s=a[0],c=a[1];this._fallback(s,c)},a.prototype.lookup=function(t){var e=this.applicable(t);return e?e.lookup(t):null},a.prototype.contains=function(t){return!!this.applicable(t)},a.prototype.toString=function(){return this._configuration.map(function(t){return t.name}).join(\", \")},a.prototype.applicable=function(t){var e,r;try{for(var n=l(this._configuration),i=n.next();!i.done;i=n.next()){var o=i.value;if(o.contains(t))return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},a.prototype.retrieve=function(e){return this._configuration.find(function(t){return t.name===e})},a.prototype.warn=function(t){console.log(\"TexParser Warning: \"+t)},a);function a(t,e){var r,n;this._fallback=e,this._configuration=[];try{for(var i=l(t),o=i.next();!o.done;o=i.next()){var a=o.value;this.add(a)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}e.SubHandler=s;var c=(h.prototype.set=function(t,e){this.map.set(t,e)},h.prototype.get=function(t){return this.map.get(t)},h.prototype.retrieve=function(t){var e,r;try{for(var n=l(this.map.values()),i=n.next();!i.done;i=n.next()){var o=i.value.retrieve(t);if(o)return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},h.prototype.keys=function(){return this.map.keys()},h);function h(t){var e,r;this.map=new Map;try{for(var n=l(Object.keys(t.handler)),i=n.next();!i.done;i=n.next()){var o=i.value,a=new s(t.handler[o]||[],t.fallback[o]);this.set(o,a)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}}e.SubHandlers=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),d=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},m=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},c=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(d(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var y=r(22),o=r(8),a=(Object.defineProperty(s.prototype,\"name\",{get:function(){return this._name},enumerable:!0,configurable:!0}),s.prototype.parserFor=function(t){return this.contains(t)?this.parser:null},s.prototype.parse=function(t){var e=d(t,2),r=e[0],n=e[1],i=this.parserFor(n),o=this.lookup(n);return i&&o?i(r,o)||!0:null},Object.defineProperty(s.prototype,\"parser\",{get:function(){return this._parser},set:function(t){this._parser=t},enumerable:!0,configurable:!0}),s);function s(t,e){this._name=t,this._parser=e,o.MapHandler.register(this)}e.AbstractSymbolMap=a;var l,u=(i(h,l=a),h.prototype.contains=function(t){return this._regExp.test(t)},h.prototype.lookup=function(t){return this.contains(t)?t:null},h);function h(t,e,r){var n=l.call(this,t,e)||this;return n._regExp=r,n}e.RegExpMap=u;var f,p=(i(v,f=a),v.prototype.lookup=function(t){return this.map.get(t)},v.prototype.contains=function(t){return this.map.has(t)},v.prototype.add=function(t,e){this.map.set(t,e)},v);function v(){var t=null!==f&&f.apply(this,arguments)||this;return t.map=new Map,t}e.AbstractParseMap=p;var b,g=(i(M,b=p),M);function M(t,e,r){var n,i,o=b.call(this,t,e)||this;try{for(var a=m(Object.keys(r)),s=a.next();!s.done;s=a.next()){var c=s.value,l=r[c],u=d(\"string\"==typeof l?[l,null]:l,2),h=u[0],f=u[1],p=new y.Symbol(c,h,f);o.add(c,p)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return o}e.CharacterMap=g;var O,x=(i(S,O=g),S.prototype.parse=function(t){var e=d(t,2),r=e[0],n=e[1];return O.prototype.parse.call(this,[r,\"\\\\\"+n])},S);function S(){return null!==O&&O.apply(this,arguments)||this}e.DelimiterMap=x;var E,C=(i(_,E=p),_.prototype.parserFor=function(t){var e=this.lookup(t);return e?e.func:null},_.prototype.parse=function(t){var e=d(t,2),r=e[0],n=e[1],i=this.lookup(n),o=this.parserFor(n);return i&&o?o.apply(void 0,c([r,i.symbol],i.args))||!0:null},_);function _(t,e,r){var n,i,o=E.call(this,t,null)||this;try{for(var a=m(Object.keys(e)),s=a.next();!s.done;s=a.next()){var c=s.value,l=e[c],u=d(\"string\"==typeof l?[l]:l),h=u[0],f=u.slice(1),p=new y.Macro(c,r[h],f);o.add(c,p)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return o}e.MacroMap=C;var T,w=(i(A,T=C),A.prototype.parse=function(t){var e=d(t,2),r=e[0],n=e[1],i=this.lookup(n),o=this.parserFor(n);if(!i||!o)return null;if([\"\\\\\"+i.symbol].concat(i.args),!o)return null;var a=r.currentCS;r.currentCS=\"\\\\\"+n;var s=o.apply(void 0,c([r,\"\\\\\"+i.symbol],i.args));return r.currentCS=a,s||!0},A);function A(){return null!==T&&T.apply(this,arguments)||this}e.CommandMap=w;var k,I=(i(L,k=C),L.prototype.parse=function(t){var e=d(t,2),r=e[0],n=e[1],i=this.lookup(n),o=this.parserFor(n);return i&&o?(this.parser(r,i.symbol,o,i.args),!0):null},L);function L(t,e,r,n){var i=k.call(this,t,r,n)||this;return i.parser=e,i}e.EnvironmentMap=I},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=function(t,e){return t.length!==e.length?e.length-t.length:t===e?0:t<e?-1:1},e.quotePattern=function(t){return t.replace(/([\\^$(){}+*?\\-|\\[\\]\\:\\\\])/g,\"\\\\$1\")},e.unicodeChars=function(t){for(var e=[],r=0,n=t.length;r<n;r++){var i=t.charCodeAt(r);55296<=i&&i<56319&&(i=(i-55296<<10)+(t.charCodeAt(++r)-56320)+65536),e.push(i)}return e},e.isPercent=function(t){return!!t.match(/%\\s*$/)},e.split=function(t){return t.trim().split(/\\s+/)}},function(t,e,r){\"use strict\";var v=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},I=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var b,n,i,o=r(33),a=r(8),L=r(3),s=r(9),g=r(8),M=r(25),c=(l.create=function(t,e){return void 0===e&&(e={}),new l(t,e.handler||{},e.fallback||{},e.items||{},e.tags||{},e.options||{},e.nodes||{},e.preprocessors||[],e.postprocessors||[],[e.init,e.priority],[e.config,e.configPriority])},l.empty=function(){return l.create(\"empty\")},l.extension=function(){return new s.MacroMap(a.ExtensionMaps.NEW_MACRO,{},{}),new s.DelimiterMap(a.ExtensionMaps.NEW_DELIMITER,o.default.delimiter,{}),new s.CommandMap(a.ExtensionMaps.NEW_COMMAND,{},{}),new s.EnvironmentMap(a.ExtensionMaps.NEW_ENVIRONMENT,o.default.environment,{},{}),l.create(\"extension\",{handler:{character:[],delimiter:[a.ExtensionMaps.NEW_DELIMITER],macro:[a.ExtensionMaps.NEW_DELIMITER,a.ExtensionMaps.NEW_COMMAND,a.ExtensionMaps.NEW_MACRO],environment:[a.ExtensionMaps.NEW_ENVIRONMENT]}})},l.prototype.init=function(t){this.initMethod.execute(t)},l.prototype.config=function(t,e){var r,n,i,o;this.configMethod.execute(t,e);try{for(var a=I(this.preprocessors),s=a.next();!s.done;s=a.next()){var c=s.value;\"function\"==typeof c?e.preFilters.add(c):e.preFilters.add(c[0],c[1])}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}try{for(var l=I(this.postprocessors),u=l.next();!u.done;u=l.next()){var h=u.value;\"function\"==typeof h?e.postFilters.add(h):e.postFilters.add(h[0],h[1])}}catch(t){i={error:t}}finally{try{u&&!u.done&&(o=l.return)&&o.call(l)}finally{if(i)throw i.error}}},l.prototype.append=function(t){var e,r,n,i,o,a,s,c,l,u,h,f,p=Object.keys(t.handler);try{for(var d=I(p),m=d.next();!m.done;m=d.next()){var y=m.value;try{for(var v=(n=void 0,I(t.handler[y])),b=v.next();!b.done;b=v.next()){var g=b.value;this.handler[y].unshift(g)}}catch(t){n={error:t}}finally{try{b&&!b.done&&(i=v.return)&&i.call(v)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{m&&!m.done&&(r=d.return)&&r.call(d)}finally{if(e)throw e.error}}Object.assign(this.fallback,t.fallback),Object.assign(this.items,t.items),Object.assign(this.tags,t.tags),L.defaultOptions(this.options,t.options),Object.assign(this.nodes,t.nodes);try{for(var M=I(t.preprocessors),O=M.next();!O.done;O=M.next()){var x=O.value;this.preprocessors.push(x)}}catch(t){o={error:t}}finally{try{O&&!O.done&&(a=M.return)&&a.call(M)}finally{if(o)throw o.error}}try{for(var S=I(t.postprocessors),E=S.next();!E.done;E=S.next()){var C=E.value;this.postprocessors.push(C)}}catch(t){s={error:t}}finally{try{E&&!E.done&&(c=S.return)&&c.call(S)}finally{if(s)throw s.error}}try{for(var _=I(t.initMethod),T=_.next();!T.done;T=_.next()){var w=T.value;this.initMethod.add(w.item,w.priority)}}catch(t){l={error:t}}finally{try{T&&!T.done&&(u=_.return)&&u.call(_)}finally{if(l)throw l.error}}try{for(var A=I(t.configMethod),k=A.next();!k.done;k=A.next())w=k.value,this.configMethod.add(w.item,w.priority)}catch(t){h={error:t}}finally{try{k&&!k.done&&(f=A.return)&&f.call(A)}finally{if(h)throw h.error}}},l.prototype.register=function(t,e,r){var n,i,o,a,s,c;void 0===r&&(r={}),this.append(t),t.init(this);var l=e.parseOptions;l.handlers=new g.SubHandlers(this),l.nodeFactory.setCreators(t.nodes);try{for(var u=I(Object.keys(t.items)),h=u.next();!h.done;h=u.next()){var f=h.value;l.itemFactory.setNodeClass(f,t.items[f])}}catch(t){n={error:t}}finally{try{h&&!h.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}L.defaultOptions(l.options,t.options),L.userOptions(l.options,r),t.config(this,e);try{for(var p=I(t.preprocessors),d=p.next();!d.done;d=p.next()){var m=d.value;Array.isArray(m)?e.preFilters.add(m[0],m[1]):e.preFilters.add(m)}}catch(t){o={error:t}}finally{try{d&&!d.done&&(a=p.return)&&a.call(p)}finally{if(o)throw o.error}}try{for(var y=I(t.postprocessors),v=y.next();!v.done;v=y.next()){var b=v.value;Array.isArray(b)?e.postFilters.add(b[0],b[1]):e.postFilters.add(b)}}catch(t){s={error:t}}finally{try{v&&!v.done&&(c=y.return)&&c.call(y)}finally{if(s)throw s.error}}},l);function l(t,e,r,n,i,o,a,s,c,l,u){void 0===e&&(e={}),void 0===r&&(r={}),void 0===n&&(n={}),void 0===i&&(i={}),void 0===o&&(o={}),void 0===a&&(a={}),void 0===s&&(s=[]),void 0===c&&(c=[]);var h=v(l,2),f=h[0],p=h[1],d=v(u,2),m=d[0],y=d[1];this.name=t,this.handler=e,this.fallback=r,this.items=n,this.tags=i,this.options=o,this.nodes=a,this.preprocessors=s,this.postprocessors=c,this.initMethod=new M.FunctionList,this.configMethod=new M.FunctionList,f&&this.initMethod.add(f,p||0),m&&this.configMethod.add(m,y||p||0),this.handler=Object.assign({character:[],delimiter:[],macro:[],environment:[]},e),b.set(t,this)}e.Configuration=c,n=b=e.ConfigurationHandler||(e.ConfigurationHandler={}),i=new Map,n.set=function(t,e){i.set(t,e)},n.get=function(t){return i.get(t)},n.keys=function(){return i.keys()}},function(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var i=e(69),o=e(103);n.options={loadMissingEntities:!0},n.entities={ApplyFunction:\"\\u2061\",Backslash:\"\\u2216\",Because:\"\\u2235\",Breve:\"\\u02d8\",Cap:\"\\u22d2\",CenterDot:\"\\xb7\",CircleDot:\"\\u2299\",CircleMinus:\"\\u2296\",CirclePlus:\"\\u2295\",CircleTimes:\"\\u2297\",Congruent:\"\\u2261\",ContourIntegral:\"\\u222e\",Coproduct:\"\\u2210\",Cross:\"\\u2a2f\",Cup:\"\\u22d3\",CupCap:\"\\u224d\",Dagger:\"\\u2021\",Del:\"\\u2207\",Delta:\"\\u0394\",Diamond:\"\\u22c4\",DifferentialD:\"\\u2146\",DotEqual:\"\\u2250\",DoubleDot:\"\\xa8\",DoubleRightTee:\"\\u22a8\",DoubleVerticalBar:\"\\u2225\",DownArrow:\"\\u2193\",DownLeftVector:\"\\u21bd\",DownRightVector:\"\\u21c1\",DownTee:\"\\u22a4\",Downarrow:\"\\u21d3\",Element:\"\\u2208\",EqualTilde:\"\\u2242\",Equilibrium:\"\\u21cc\",Exists:\"\\u2203\",ExponentialE:\"\\u2147\",FilledVerySmallSquare:\"\\u25aa\",ForAll:\"\\u2200\",Gamma:\"\\u0393\",Gg:\"\\u22d9\",GreaterEqual:\"\\u2265\",GreaterEqualLess:\"\\u22db\",GreaterFullEqual:\"\\u2267\",GreaterLess:\"\\u2277\",GreaterSlantEqual:\"\\u2a7e\",GreaterTilde:\"\\u2273\",Hacek:\"\\u02c7\",Hat:\"^\",HumpDownHump:\"\\u224e\",HumpEqual:\"\\u224f\",Im:\"\\u2111\",ImaginaryI:\"\\u2148\",Integral:\"\\u222b\",Intersection:\"\\u22c2\",InvisibleComma:\"\\u2063\",InvisibleTimes:\"\\u2062\",Lambda:\"\\u039b\",Larr:\"\\u219e\",LeftAngleBracket:\"\\u27e8\",LeftArrow:\"\\u2190\",LeftArrowRightArrow:\"\\u21c6\",LeftCeiling:\"\\u2308\",LeftDownVector:\"\\u21c3\",LeftFloor:\"\\u230a\",LeftRightArrow:\"\\u2194\",LeftTee:\"\\u22a3\",LeftTriangle:\"\\u22b2\",LeftTriangleEqual:\"\\u22b4\",LeftUpVector:\"\\u21bf\",LeftVector:\"\\u21bc\",Leftarrow:\"\\u21d0\",Leftrightarrow:\"\\u21d4\",LessEqualGreater:\"\\u22da\",LessFullEqual:\"\\u2266\",LessGreater:\"\\u2276\",LessSlantEqual:\"\\u2a7d\",LessTilde:\"\\u2272\",Ll:\"\\u22d8\",Lleftarrow:\"\\u21da\",LongLeftArrow:\"\\u27f5\",LongLeftRightArrow:\"\\u27f7\",LongRightArrow:\"\\u27f6\",Longleftarrow:\"\\u27f8\",Longleftrightarrow:\"\\u27fa\",Longrightarrow:\"\\u27f9\",Lsh:\"\\u21b0\",MinusPlus:\"\\u2213\",NestedGreaterGreater:\"\\u226b\",NestedLessLess:\"\\u226a\",NotDoubleVerticalBar:\"\\u2226\",NotElement:\"\\u2209\",NotEqual:\"\\u2260\",NotExists:\"\\u2204\",NotGreater:\"\\u226f\",NotGreaterEqual:\"\\u2271\",NotLeftTriangle:\"\\u22ea\",NotLeftTriangleEqual:\"\\u22ec\",NotLess:\"\\u226e\",NotLessEqual:\"\\u2270\",NotPrecedes:\"\\u2280\",NotPrecedesSlantEqual:\"\\u22e0\",NotRightTriangle:\"\\u22eb\",NotRightTriangleEqual:\"\\u22ed\",NotSubsetEqual:\"\\u2288\",NotSucceeds:\"\\u2281\",NotSucceedsSlantEqual:\"\\u22e1\",NotSupersetEqual:\"\\u2289\",NotTilde:\"\\u2241\",NotVerticalBar:\"\\u2224\",Omega:\"\\u03a9\",OverBar:\"\\u203e\",OverBrace:\"\\u23de\",PartialD:\"\\u2202\",Phi:\"\\u03a6\",Pi:\"\\u03a0\",PlusMinus:\"\\xb1\",Precedes:\"\\u227a\",PrecedesEqual:\"\\u2aaf\",PrecedesSlantEqual:\"\\u227c\",PrecedesTilde:\"\\u227e\",Product:\"\\u220f\",Proportional:\"\\u221d\",Psi:\"\\u03a8\",Rarr:\"\\u21a0\",Re:\"\\u211c\",ReverseEquilibrium:\"\\u21cb\",RightAngleBracket:\"\\u27e9\",RightArrow:\"\\u2192\",RightArrowLeftArrow:\"\\u21c4\",RightCeiling:\"\\u2309\",RightDownVector:\"\\u21c2\",RightFloor:\"\\u230b\",RightTee:\"\\u22a2\",RightTeeArrow:\"\\u21a6\",RightTriangle:\"\\u22b3\",RightTriangleEqual:\"\\u22b5\",RightUpVector:\"\\u21be\",RightVector:\"\\u21c0\",Rightarrow:\"\\u21d2\",Rrightarrow:\"\\u21db\",Rsh:\"\\u21b1\",Sigma:\"\\u03a3\",SmallCircle:\"\\u2218\",Sqrt:\"\\u221a\",Square:\"\\u25a1\",SquareIntersection:\"\\u2293\",SquareSubset:\"\\u228f\",SquareSubsetEqual:\"\\u2291\",SquareSuperset:\"\\u2290\",SquareSupersetEqual:\"\\u2292\",SquareUnion:\"\\u2294\",Star:\"\\u22c6\",Subset:\"\\u22d0\",SubsetEqual:\"\\u2286\",Succeeds:\"\\u227b\",SucceedsEqual:\"\\u2ab0\",SucceedsSlantEqual:\"\\u227d\",SucceedsTilde:\"\\u227f\",SuchThat:\"\\u220b\",Sum:\"\\u2211\",Superset:\"\\u2283\",SupersetEqual:\"\\u2287\",Supset:\"\\u22d1\",Therefore:\"\\u2234\",Theta:\"\\u0398\",Tilde:\"\\u223c\",TildeEqual:\"\\u2243\",TildeFullEqual:\"\\u2245\",TildeTilde:\"\\u2248\",UnderBar:\"_\",UnderBrace:\"\\u23df\",Union:\"\\u22c3\",UnionPlus:\"\\u228e\",UpArrow:\"\\u2191\",UpDownArrow:\"\\u2195\",UpTee:\"\\u22a5\",Uparrow:\"\\u21d1\",Updownarrow:\"\\u21d5\",Upsilon:\"\\u03a5\",Vdash:\"\\u22a9\",Vee:\"\\u22c1\",VerticalBar:\"\\u2223\",VerticalTilde:\"\\u2240\",Vvdash:\"\\u22aa\",Wedge:\"\\u22c0\",Xi:\"\\u039e\",amp:\"&\",acute:\"\\xb4\",aleph:\"\\u2135\",alpha:\"\\u03b1\",amalg:\"\\u2a3f\",and:\"\\u2227\",ang:\"\\u2220\",angmsd:\"\\u2221\",angsph:\"\\u2222\",ape:\"\\u224a\",backprime:\"\\u2035\",backsim:\"\\u223d\",backsimeq:\"\\u22cd\",beta:\"\\u03b2\",beth:\"\\u2136\",between:\"\\u226c\",bigcirc:\"\\u25ef\",bigodot:\"\\u2a00\",bigoplus:\"\\u2a01\",bigotimes:\"\\u2a02\",bigsqcup:\"\\u2a06\",bigstar:\"\\u2605\",bigtriangledown:\"\\u25bd\",bigtriangleup:\"\\u25b3\",biguplus:\"\\u2a04\",blacklozenge:\"\\u29eb\",blacktriangle:\"\\u25b4\",blacktriangledown:\"\\u25be\",blacktriangleleft:\"\\u25c2\",bowtie:\"\\u22c8\",boxdl:\"\\u2510\",boxdr:\"\\u250c\",boxminus:\"\\u229f\",boxplus:\"\\u229e\",boxtimes:\"\\u22a0\",boxul:\"\\u2518\",boxur:\"\\u2514\",bsol:\"\\\\\",bull:\"\\u2022\",cap:\"\\u2229\",check:\"\\u2713\",chi:\"\\u03c7\",circ:\"\\u02c6\",circeq:\"\\u2257\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",circledR:\"\\xae\",circledS:\"\\u24c8\",circledast:\"\\u229b\",circledcirc:\"\\u229a\",circleddash:\"\\u229d\",clubs:\"\\u2663\",colon:\":\",comp:\"\\u2201\",ctdot:\"\\u22ef\",cuepr:\"\\u22de\",cuesc:\"\\u22df\",cularr:\"\\u21b6\",cup:\"\\u222a\",curarr:\"\\u21b7\",curlyvee:\"\\u22ce\",curlywedge:\"\\u22cf\",dagger:\"\\u2020\",daleth:\"\\u2138\",ddarr:\"\\u21ca\",deg:\"\\xb0\",delta:\"\\u03b4\",digamma:\"\\u03dd\",div:\"\\xf7\",divideontimes:\"\\u22c7\",dot:\"\\u02d9\",doteqdot:\"\\u2251\",dotplus:\"\\u2214\",dotsquare:\"\\u22a1\",dtdot:\"\\u22f1\",ecir:\"\\u2256\",efDot:\"\\u2252\",egs:\"\\u2a96\",ell:\"\\u2113\",els:\"\\u2a95\",empty:\"\\u2205\",epsi:\"\\u03b5\",epsiv:\"\\u03f5\",erDot:\"\\u2253\",eta:\"\\u03b7\",eth:\"\\xf0\",flat:\"\\u266d\",fork:\"\\u22d4\",frown:\"\\u2322\",gEl:\"\\u2a8c\",gamma:\"\\u03b3\",gap:\"\\u2a86\",gimel:\"\\u2137\",gnE:\"\\u2269\",gnap:\"\\u2a8a\",gne:\"\\u2a88\",gnsim:\"\\u22e7\",gt:\">\",gtdot:\"\\u22d7\",harrw:\"\\u21ad\",hbar:\"\\u210f\",hellip:\"\\u2026\",hookleftarrow:\"\\u21a9\",hookrightarrow:\"\\u21aa\",imath:\"\\u0131\",infin:\"\\u221e\",intcal:\"\\u22ba\",iota:\"\\u03b9\",jmath:\"\\u0237\",kappa:\"\\u03ba\",kappav:\"\\u03f0\",lEg:\"\\u2a8b\",lambda:\"\\u03bb\",lap:\"\\u2a85\",larrlp:\"\\u21ab\",larrtl:\"\\u21a2\",lbrace:\"{\",lbrack:\"[\",le:\"\\u2264\",leftleftarrows:\"\\u21c7\",leftthreetimes:\"\\u22cb\",lessdot:\"\\u22d6\",lmoust:\"\\u23b0\",lnE:\"\\u2268\",lnap:\"\\u2a89\",lne:\"\\u2a87\",lnsim:\"\\u22e6\",longmapsto:\"\\u27fc\",looparrowright:\"\\u21ac\",lowast:\"\\u2217\",loz:\"\\u25ca\",lt:\"<\",ltimes:\"\\u22c9\",ltri:\"\\u25c3\",macr:\"\\xaf\",malt:\"\\u2720\",mho:\"\\u2127\",mu:\"\\u03bc\",multimap:\"\\u22b8\",nLeftarrow:\"\\u21cd\",nLeftrightarrow:\"\\u21ce\",nRightarrow:\"\\u21cf\",nVDash:\"\\u22af\",nVdash:\"\\u22ae\",natur:\"\\u266e\",nearr:\"\\u2197\",nharr:\"\\u21ae\",nlarr:\"\\u219a\",not:\"\\xac\",nrarr:\"\\u219b\",nu:\"\\u03bd\",nvDash:\"\\u22ad\",nvdash:\"\\u22ac\",nwarr:\"\\u2196\",omega:\"\\u03c9\",omicron:\"\\u03bf\",or:\"\\u2228\",osol:\"\\u2298\",period:\".\",phi:\"\\u03c6\",phiv:\"\\u03d5\",pi:\"\\u03c0\",piv:\"\\u03d6\",prap:\"\\u2ab7\",precnapprox:\"\\u2ab9\",precneqq:\"\\u2ab5\",precnsim:\"\\u22e8\",prime:\"\\u2032\",psi:\"\\u03c8\",quot:'\"',rarrtl:\"\\u21a3\",rbrace:\"}\",rbrack:\"]\",rho:\"\\u03c1\",rhov:\"\\u03f1\",rightrightarrows:\"\\u21c9\",rightthreetimes:\"\\u22cc\",ring:\"\\u02da\",rmoust:\"\\u23b1\",rtimes:\"\\u22ca\",rtri:\"\\u25b9\",scap:\"\\u2ab8\",scnE:\"\\u2ab6\",scnap:\"\\u2aba\",scnsim:\"\\u22e9\",sdot:\"\\u22c5\",searr:\"\\u2198\",sect:\"\\xa7\",sharp:\"\\u266f\",sigma:\"\\u03c3\",sigmav:\"\\u03c2\",simne:\"\\u2246\",smile:\"\\u2323\",spades:\"\\u2660\",sub:\"\\u2282\",subE:\"\\u2ac5\",subnE:\"\\u2acb\",subne:\"\\u228a\",supE:\"\\u2ac6\",supnE:\"\\u2acc\",supne:\"\\u228b\",swarr:\"\\u2199\",tau:\"\\u03c4\",theta:\"\\u03b8\",thetav:\"\\u03d1\",tilde:\"\\u02dc\",times:\"\\xd7\",triangle:\"\\u25b5\",triangleq:\"\\u225c\",upsi:\"\\u03c5\",upuparrows:\"\\u21c8\",veebar:\"\\u22bb\",vellip:\"\\u22ee\",weierp:\"\\u2118\",xi:\"\\u03be\",yen:\"\\xa5\",zeta:\"\\u03b6\",zigrarr:\"\\u21dd\"};var a={};function r(t,e){if(\"#\"===e.charAt(0))return s(e.slice(1));if(n.entities[e])return n.entities[e];if(n.options.loadMissingEntities){var r=e.match(/^[a-zA-Z](fr|scr|opf)$/)?RegExp.$1:e.charAt(0).toLowerCase();a[r]||(a[r]=!0,i.retryAfter(o.asyncLoad(\"./util/entities/\"+r+\".js\")))}return t}function s(t){var e=\"x\"===t.charAt(0)?parseInt(t.slice(1),16):parseInt(t);if(e<65536)return String.fromCharCode(e);var r=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(r,n)}n.add=function(t,e){Object.assign(n.entities,t),a[e]=!0},n.remove=function(t){delete n.entities[t]},n.translate=function(t){return t.replace(/&([a-z][a-z0-9]*|#(?:[0-9]+|x[0-9a-f]+));/gi,r)},n.numeric=s},function(t,o,e){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.protoItem=function(t,e,r,n,i,o,a){return void 0===a&&(a=null),{open:t,math:e,close:r,n:n,start:{n:i},end:{n:o},display:a}};var r=(n.prototype.render=function(t){t.renderActions.renderMath(this,t)},n.prototype.rerender=function(t,e){void 0===e&&(e=o.STATE.RERENDER),this.state()>=e&&this.state(e-1),t.renderActions.renderMath(this,t,e)},n.prototype.convert=function(t,e){void 0===e&&(e=o.STATE.LAST),t.renderActions.renderConvert(this,t,e)},n.prototype.compile=function(t){this.state()<o.STATE.COMPILED&&(this.root=this.inputJax.compile(this,t),this.state(o.STATE.COMPILED))},n.prototype.typeset=function(t){this.state()<o.STATE.TYPESET&&(this.typesetRoot=t.outputJax[null===this.display?\"escaped\":\"typeset\"](this,t),this.state(o.STATE.TYPESET))},n.prototype.updateDocument=function(t){},n.prototype.removeFromDocument=function(t){void 0===t&&(t=!1)},n.prototype.setMetrics=function(t,e,r,n,i){this.metrics={em:t,ex:e,containerWidth:r,lineWidth:n,scale:i}},n.prototype.state=function(t,e){return void 0===t&&(t=null),void 0===e&&(e=!1),null!=t&&(t<o.STATE.INSERTED&&this._state>=o.STATE.INSERTED&&this.removeFromDocument(e),t<o.STATE.TYPESET&&this._state>=o.STATE.TYPESET&&(this.bbox={},this.outputData={}),t<o.STATE.COMPILED&&this._state>=o.STATE.COMPILED&&(this.inputData={}),this._state=t),this._state},n.prototype.reset=function(t){void 0===t&&(t=!1),this.state(o.STATE.UNPROCESSED)},n);function n(t,e,r,n,i){void 0===r&&(r=!0),void 0===n&&(n={i:0,n:0,delim:\"\"}),void 0===i&&(i={i:0,n:0,delim:\"\"}),this.root=null,this.typesetRoot=null,this._state=o.STATE.UNPROCESSED,this.metrics={},this.bbox={},this.inputData={},this.outputData={},this.math=t,this.inputJax=e,this.display=r,this.start=n,this.end=i,this.root=null,this.typesetRoot=null,this.metrics={},this.bbox={},this.inputData={},this.outputData={}}o.AbstractMathItem=r,o.STATE={UNPROCESSED:0,FINDMATH:10,COMPILED:20,CONVERT:100,METRICS:110,RERENDER:125,TYPESET:150,INSERTED:200,RESET:500,LAST:1e4},o.newState=function(t,e){if(t in o.STATE)throw Error(\"State \"+t+\" already exists\");o.STATE[t]=e}},function(t,s,e){\"use strict\";Object.defineProperty(s,\"__esModule\",{value:!0}),s.BIGDIMEN=1e6,s.UNITS={px:1,pt:96/72,pc:8,in:96,cm:96/2.54,mm:96/25.4},s.RELUNITS={em:1,ex:.431,mu:1/18},s.MATHSPACE={veryverythinmathspace:1/18,verythinmathspace:2/18,thinmathspace:3/18,mediummathspace:4/18,thickmathspace:5/18,verythickmathspace:6/18,veryverythickmathspace:7/18,negativeveryverythinmathspace:-1/18,negativeverythinmathspace:-2/18,negativethinmathspace:-3/18,negativemediummathspace:-4/18,negativethickmathspace:-5/18,negativeverythickmathspace:-6/18,negativeveryverythickmathspace:-7/18,thin:.04,medium:.06,thick:.1,normal:1,big:2,small:1/Math.sqrt(2),infinity:s.BIGDIMEN},s.length2em=function(t,e,r,n){if(void 0===e&&(e=0),void 0===r&&(r=1),void 0===n&&(n=16),\"string\"!=typeof t&&(t=String(t)),\"\"===t||null==t)return e;if(s.MATHSPACE[t])return s.MATHSPACE[t];var i=t.match(/^\\s*([-+]?(?:\\.\\d+|\\d+(?:\\.\\d*)?))?(pt|em|ex|mu|px|pc|in|mm|cm|%)?/);if(!i)return e;var o=parseFloat(i[1]||\"1\"),a=i[2];return s.UNITS.hasOwnProperty(a)?o*s.UNITS[a]/n/r:s.RELUNITS.hasOwnProperty(a)?o*s.RELUNITS[a]:\"%\"===a?o/100*e:o*e},s.percent=function(t){return(100*t).toFixed(1).replace(/\\.?0+$/,\"\")+\"%\"},s.em=function(t){return Math.abs(t)<.001?\"0\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"},s.emRounded=function(t,e){return void 0===e&&(e=16),t=(Math.round(t*e)+.05)/e,Math.abs(t)<.001?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"},s.px=function(t,e,r){return void 0===e&&(e=-s.BIGDIMEN),void 0===r&&(r=16),t*=r,e&&t<e&&(t=e),Math.abs(t)<.1?\"0\":t.toFixed(1).replace(/\\.0$/,\"\")+\"px\"}},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),(n=e.TexConstant||(e.TexConstant={})).Variant={NORMAL:\"normal\",BOLD:\"bold\",ITALIC:\"italic\",BOLDITALIC:\"bold-italic\",DOUBLESTRUCK:\"double-struck\",FRAKTUR:\"fraktur\",BOLDFRAKTUR:\"bold-fraktur\",SCRIPT:\"script\",BOLDSCRIPT:\"bold-script\",SANSSERIF:\"sans-serif\",BOLDSANSSERIF:\"bold-sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",MONOSPACE:\"monospace\",INITIAL:\"inital\",TAILED:\"tailed\",LOOPED:\"looped\",STRETCHED:\"stretched\",CALLIGRAPHIC:\"-tex-calligraphic\",OLDSTYLE:\"-tex-oldstyle\"},n.Form={PREFIX:\"prefix\",INFIX:\"infix\",POSTFIX:\"postfix\"},n.LineBreak={AUTO:\"auto\",NEWLINE:\"newline\",NOBREAK:\"nobreak\",GOODBREAK:\"goodbreak\",BADBREAK:\"badbreak\"},n.LineBreakStyle={BEFORE:\"before\",AFTER:\"after\",DUPLICATE:\"duplicate\",INFIXLINBREAKSTYLE:\"infixlinebreakstyle\"},n.IndentAlign={LEFT:\"left\",CENTER:\"center\",RIGHT:\"right\",AUTO:\"auto\",ID:\"id\",INDENTALIGN:\"indentalign\"},n.IndentShift={INDENTSHIFT:\"indentshift\"},n.LineThickness={THIN:\"thin\",MEDIUM:\"medium\",THICK:\"thick\"},n.Notation={LONGDIV:\"longdiv\",ACTUARIAL:\"actuarial\",PHASORANGLE:\"phasorangle\",RADICAL:\"radical\",BOX:\"box\",ROUNDEDBOX:\"roundedbox\",CIRCLE:\"circle\",LEFT:\"left\",RIGHT:\"right\",TOP:\"top\",BOTTOM:\"bottom\",UPDIAGONALSTRIKE:\"updiagonalstrike\",DOWNDIAGONALSTRIKE:\"downdiagonalstrike\",VERTICALSTRIKE:\"verticalstrike\",HORIZONTALSTRIKE:\"horizontalstrike\",NORTHEASTARROW:\"northeastarrow\",MADRUWB:\"madruwb\",UPDIAGONALARROW:\"updiagonalarrow\"},n.Align={TOP:\"top\",BOTTOM:\"bottom\",CENTER:\"center\",BASELINE:\"baseline\",AXIS:\"axis\",LEFT:\"left\",RIGHT:\"right\"},n.Lines={NONE:\"none\",SOLID:\"solid\",DASHED:\"dashed\"},n.Side={LEFT:\"left\",RIGHT:\"right\",LEFTOVERLAP:\"leftoverlap\",RIGHTOVERLAP:\"rightoverlap\"},n.Width={AUTO:\"auto\",FIT:\"fit\"},n.Actiontype={TOGGLE:\"toggle\",STATUSLINE:\"statusline\",TOOLTIP:\"tooltip\",INPUT:\"input\"},n.Length={VERYVERYTHINMATHSPACE:\"veryverythinmathspace\",VERYTHINMATHSPACE:\"verythinmathspace\",THINMATHSPACE:\"thinmathspace\",MEDIUMMATHSPACE:\"mediummathspace\",THICKMATHSPACE:\"thickmathspace\",VERYTHICKMATHSPACE:\"verythickmathspace\",VERYVERYTHICKMATHSPACE:\"veryverythickmathspace\",NEGATIVEVERYVERYTHINMATHSPACE:\"negativeveryverythinmathspace\",NEGATIVEVERYTHINMATHSPACE:\"negativeverythinmathspace\",NEGATIVETHINMATHSPACE:\"negativethinmathspace\",NEGATIVEMEDIUMMATHSPACE:\"negativemediummathspace\",NEGATIVETHICKMATHSPACE:\"negativethickmathspace\",NEGATIVEVERYTHICKMATHSPACE:\"negativeverythickmathspace\",NEGATIVEVERYVERYTHICKMATHSPACE:\"negativeveryverythickmathspace\"},n.Overflow={LINBREAK:\"linebreak\",SCROLL:\"scroll\",ELIDE:\"elide\",TRUNCATE:\"truncate\",SCALE:\"scale\"},n.Unit={EM:\"em\",EX:\"ex\",PX:\"px\",IN:\"in\",CM:\"cm\",MM:\"mm\",PT:\"pt\",PC:\"pc\"}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(14);e.BBoxStyleAdjust=[[\"borderTopWidth\",\"h\"],[\"borderRightWidth\",\"w\"],[\"borderBottomWidth\",\"d\"],[\"borderLeftWidth\",\"w\",0],[\"paddingTop\",\"h\"],[\"paddingRight\",\"w\"],[\"paddingBottom\",\"d\"],[\"paddingLeft\",\"w\",0]];var i=(o.zero=function(){return new o({h:0,d:0,w:0})},o.empty=function(){return new o},o.prototype.empty=function(){return this.w=0,this.h=this.d=-n.BIGDIMEN,this},o.prototype.clean=function(){this.w===-n.BIGDIMEN&&(this.w=0),this.h===-n.BIGDIMEN&&(this.h=0),this.d===-n.BIGDIMEN&&(this.d=0)},o.prototype.rescale=function(t){this.w*=t,this.h*=t,this.d*=t},o.prototype.combine=function(t,e,r){void 0===e&&(e=0),void 0===r&&(r=0);var n=t.rscale,i=e+n*(t.w+t.L+t.R),o=r+n*t.h,a=n*t.d-r;i>this.w&&(this.w=i),o>this.h&&(this.h=o),a>this.d&&(this.d=a)},o.prototype.append=function(t){var e=t.rscale;this.w+=e*(t.w+t.L+t.R),e*t.h>this.h&&(this.h=e*t.h),e*t.d>this.d&&(this.d=e*t.d)},o.prototype.updateFrom=function(t){this.h=t.h,this.d=t.d,this.w=t.w,t.pwidth&&(this.pwidth=t.pwidth)},o.fullWidth=\"100%\",o);function o(t){void 0===t&&(t={w:0,h:-n.BIGDIMEN,d:-n.BIGDIMEN}),this.w=t.w||0,this.h=\"h\"in t?t.h:-n.BIGDIMEN,this.d=\"d\"in t?t.d:-n.BIGDIMEN,this.L=this.R=this.ic=this.sk=0,this.scale=this.rscale=1,this.pwidth=\"\"}e.BBox=i},function(t,h,o){\"use strict\";(function(r){var l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(h,\"__esModule\",{value:!0});var t,e,n=o(5),u=o(18),i=o(18);h.Package=i.Package,h.PackageError=i.PackageError,(e=t=h.Loader||(h.Loader={})).ready=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];0===r.length&&(r=Array.from(u.Package.packages.keys()));var i=[];try{for(var o=l(r),a=o.next();!a.done;a=o.next()){var s=a.value,c=u.Package.packages.get(s)||new u.Package(s,!0);i.push(c.promise)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return Promise.all(i)},e.load=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];if(0===r.length)return Promise.resolve();var i=[];try{for(var o=l(r),a=o.next();!a.done;a=o.next()){var s=a.value,c=u.Package.packages.get(s);c||(c=new u.Package(s)).provides(h.CONFIG.provides[s]),c.checkNoLoad(),i.push(c.promise)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return u.Package.loadAll(),Promise.all(i)},e.preLoad=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=l(r),o=i.next();!o.done;o=i.next()){var a=o.value,s=u.Package.packages.get(a);s||(s=new u.Package(a,!0)).provides(h.CONFIG.provides[a]),s.loaded()}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},e.defaultReady=function(){void 0!==h.MathJax.startup&&h.MathJax.config.startup.ready()},e.getRoot=function(){var t=r+\"/../../es5\";if(\"undefined\"!=typeof document){var e=document.currentScript||document.getElementById(\"MathJax-script\");e&&(t=e.src.replace(/\\/[^\\/]*$/,\"\"))}return t},h.MathJax=n.MathJax,void 0===h.MathJax.loader&&(n.combineDefaults(h.MathJax.config,\"loader\",{paths:{mathjax:t.getRoot()},source:{},dependencies:{},provides:{},load:[],ready:t.defaultReady.bind(t),failed:function(t){return console.log(\"MathJax(\"+(t.package||\"?\")+\"): \"+t.message)},require:null}),n.combineWithMathJax({loader:t})),h.CONFIG=h.MathJax.config.loader}).call(this,\"/\")},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},h=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},f=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a,p=r(17),s=(a=Error,i(c,a),c);function c(t,e){var r=a.call(this,t)||this;return r.package=e,r}e.PackageError=s;var l=(d.resolvePath=function(t,e){void 0===e&&(e=!0);var r,n=p.CONFIG.source[t]||t;for(n.match(/^(?:[a-z]+:\\/)?\\/|\\[/)||(n=\"[mathjax]/\"+n.replace(/^\\.\\//,\"\")),e&&!n.match(/\\.[^\\/]+$/)&&(n+=\".js\");(r=n.match(/^\\[([^\\]]*)\\]/))&&p.CONFIG.paths.hasOwnProperty(r[1]);)n=p.CONFIG.paths[r[1]]+n.substr(r[0].length);return n},Object.defineProperty(d.prototype,\"canLoad\",{get:function(){return 0===this.dependencyCount&&!this.noLoad&&!this.isLoading&&!this.hasFailed},enumerable:!0,configurable:!0}),d.prototype.makeDependencies=function(){var e,t,r=[],n=d.packages,i=this.noLoad,o=this.name,a=[];p.CONFIG.dependencies.hasOwnProperty(o)?a.push.apply(a,h(p.CONFIG.dependencies[o])):\"core\"!==o&&a.push(\"core\");try{for(var s=f(a),c=s.next();!c.done;c=s.next()){var l=c.value,u=n.get(l)||new d(l,i);this.dependencies.indexOf(u)<0&&(u.addDependent(this,i),this.dependencies.push(u),u.isLoaded||(this.dependencyCount++,r.push(u.promise)))}}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}return r},d.prototype.makePromise=function(t){var r=this,e=new Promise(function(t,e){r.resolve=t,r.reject=e}),n=p.CONFIG[this.name]||{};return n.ready&&(e=e.then(function(t){return n.ready(r.name)})),t.length&&(t.push(e),e=Promise.all(t).then(function(t){return t.join(\", \")})),n.failed&&e.catch(function(t){return n.failed(new s(t,r.name))}),e},d.prototype.load=function(){if(!this.isLoaded&&!this.isLoading&&!this.noLoad){this.isLoading=!0;var t=d.resolvePath(this.name);p.CONFIG.require?this.loadCustom(t):this.loadScript(t)}},d.prototype.loadCustom=function(t){var e=this;try{var r=p.CONFIG.require(t);r instanceof Promise?r.then(function(){return e.checkLoad()}).catch(function(){return e.failed(\"Can't load \\\"\"+t+'\"')}):this.checkLoad()}catch(t){this.failed(t.message)}},d.prototype.loadScript=function(e){var r=this,t=document.createElement(\"script\");t.src=e,t.charset=\"UTF-8\",t.onload=function(t){return r.checkLoad()},t.onerror=function(t){return r.failed(\"Can't load \\\"\"+e+'\"')},document.head.appendChild(t)},d.prototype.loaded=function(){var e,t,r,n;this.isLoaded=!0,this.isLoading=!1;try{for(var i=f(this.dependents),o=i.next();!o.done;o=i.next())o.value.requirementSatisfied()}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}try{for(var a=f(this.provided),s=a.next();!s.done;s=a.next())s.value.loaded()}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}this.resolve(this.name)},d.prototype.failed=function(t){this.hasFailed=!0,this.isLoading=!1,this.reject(new s(t,this.name))},d.prototype.checkLoad=function(){var e=this;((p.CONFIG[this.name]||{}).checkReady||function(){return Promise.resolve()})().then(function(){return e.loaded()}).catch(function(t){return e.failed(t)})},d.prototype.requirementSatisfied=function(){this.dependencyCount&&(this.dependencyCount--,this.canLoad&&this.load())},d.prototype.provides=function(t){var e,r;void 0===t&&(t=[]);try{for(var n=f(t),i=n.next();!i.done;i=n.next()){var o=i.value,a=d.packages.get(o);a||(p.CONFIG.dependencies[o]||(p.CONFIG.dependencies[o]=[]),p.CONFIG.dependencies[o].push(o),(a=new d(o,!0)).isLoading=!0),this.provided.push(a)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},d.prototype.addDependent=function(t,e){this.dependents.push(t),e||this.checkNoLoad()},d.prototype.checkNoLoad=function(){var e,t;if(this.noLoad){this.noLoad=!1;try{for(var r=f(this.dependencies),n=r.next();!n.done;n=r.next())n.value.checkNoLoad()}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}}},d.loadAll=function(){var e,t;try{for(var r=f(this.packages.values()),n=r.next();!n.done;n=r.next()){var i=n.value;i.canLoad&&i.load()}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},d.packages=new Map,d);function d(t,e){void 0===e&&(e=!1),this.isLoaded=!1,this.isLoading=!1,this.hasFailed=!1,this.dependents=[],this.dependencies=[],this.dependencyCount=0,this.provided=[],this.name=t,this.noLoad=e,d.packages.set(t,this),this.promise=this.makePromise(this.makeDependencies())}e.Package=l},function(t,r,e){\"use strict\";var c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(r,\"__esModule\",{value:!0}),r.INHERIT=\"_inherit_\";var n=(i.prototype.set=function(t,e){this.attributes[t]=e},i.prototype.setList=function(t){Object.assign(this.attributes,t)},i.prototype.get=function(t){var e=this.attributes[t];return e===r.INHERIT&&(e=this.global[t]),e},i.prototype.getExplicit=function(t){if(this.attributes.hasOwnProperty(t))return this.attributes[t]},i.prototype.getList=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i={};try{for(var o=c(r),a=o.next();!a.done;a=o.next()){var s=a.value;i[s]=this.get(s)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return i},i.prototype.setInherited=function(t,e){this.inherited[t]=e},i.prototype.getInherited=function(t){return this.inherited[t]},i.prototype.getDefault=function(t){return this.defaults[t]},i.prototype.isSet=function(t){return this.attributes.hasOwnProperty(t)||this.inherited.hasOwnProperty(t)},i.prototype.hasDefault=function(t){return t in this.defaults},i.prototype.getExplicitNames=function(){return Object.keys(this.attributes)},i.prototype.getInheritedNames=function(){return Object.keys(this.inherited)},i.prototype.getDefaultNames=function(){return Object.keys(this.defaults)},i.prototype.getGlobalNames=function(){return Object.keys(this.global)},i.prototype.getAllAttributes=function(){return this.attributes},i.prototype.getAllInherited=function(){return this.inherited},i.prototype.getAllDefaults=function(){return this.defaults},i.prototype.getAllGlobals=function(){return this.global},i);function i(t,e){this.global=e,this.defaults=Object.create(e),this.inherited=Object.create(this.defaults),this.attributes=Object.create(this.inherited),Object.assign(this.defaults,t)}r.Attributes=n},function(t,r,e){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(94),i=e(69);r.mathjax={version:\"3.0.0\",handlers:new n.HandlerList,document:function(t,e){return r.mathjax.handlers.document(t,e)},handleRetriesFor:i.handleRetriesFor,retryAfter:i.retryAfter,asyncLoad:null}},function(t,e,r){\"use strict\";var h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var c=r(7),f=r(109),l=r(4),n=(Object.defineProperty(o.prototype,\"options\",{get:function(){return this.configuration.options},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"itemFactory\",{get:function(){return this.configuration.itemFactory},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"tags\",{get:function(){return this.configuration.tags},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,\"string\",{get:function(){return this._string},set:function(t){this._string=t},enumerable:!0,configurable:!0}),o.prototype.parse=function(t,e){return this.configuration.handlers.get(t).parse(e)},o.prototype.lookup=function(t,e){return this.configuration.handlers.get(t).lookup(e)},o.prototype.contains=function(t,e){return this.configuration.handlers.get(t).contains(e)},o.prototype.toString=function(){var e,t,r=\"\";try{for(var n=h(Array.from(this.configuration.handlers.keys())),i=n.next();!i.done;i=n.next()){var o=i.value;r+=o+\": \"+this.configuration.handlers.get(o)+\"\\n\"}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r},o.prototype.Parse=function(){for(var t,e;this.i<this.string.length;)55296<=(e=(t=this.string.charAt(this.i++)).charCodeAt(0))&&e<56320&&(t+=this.string.charAt(this.i++)),this.parse(\"character\",[this,t])},o.prototype.Push=function(t){this.stack.Push(t)},o.prototype.PushAll=function(t){var e,r;try{for(var n=h(t),i=n.next();!i.done;i=n.next()){var o=i.value;this.stack.Push(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},o.prototype.mml=function(){if(!this.stack.Top().isKind(\"mml\"))return null;var t=this.stack.Top().First;return this.configuration.popParser(),t},o.prototype.convertDelimiter=function(t){var e=this.lookup(\"delimiter\",t);return e?e.char:null},o.prototype.nextIsSpace=function(){return this.string.charAt(this.i).match(/\\s/)},o.prototype.GetNext=function(){for(;this.nextIsSpace();)this.i++;return this.string.charAt(this.i)},o.prototype.GetCS=function(){var t=this.string.slice(this.i).match(/^([a-z]+|.) ?/i);return t?(this.i+=t[1].length,t[1]):(this.i++,\" \")},o.prototype.GetArgument=function(t,e){switch(this.GetNext()){case\"\":if(!e)throw new l.default(\"MissingArgFor\",\"Missing argument for %1\",this.currentCS);return null;case\"}\":if(!e)throw new l.default(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\");return null;case\"\\\\\":return this.i++,\"\\\\\"+this.GetCS();case\"{\":for(var r=++this.i,n=1;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"\\\\\":this.i++;break;case\"{\":n++;break;case\"}\":if(0==--n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBrace\",\"Missing close brace\")}return this.string.charAt(this.i++)},o.prototype.GetBrackets=function(t,e){if(\"[\"!==this.GetNext())return e;for(var r=++this.i,n=0;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"{\":n++;break;case\"\\\\\":this.i++;break;case\"}\":if(n--<=0)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",\"']'\");break;case\"]\":if(0===n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBracket\",\"Could not find closing ']' for argument to %1\",this.currentCS)},o.prototype.GetDelimiter=function(t,e){for(;this.nextIsSpace();)this.i++;var r=this.string.charAt(this.i);if(this.i++,this.i<=this.string.length&&(\"\\\\\"===r?r+=this.GetCS():\"{\"===r&&e&&(this.i--,r=this.GetArgument(t)),this.contains(\"delimiter\",r)))return this.convertDelimiter(r);throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},o.prototype.GetDimen=function(t){if(this.nextIsSpace()&&this.i++,\"{\"===this.string.charAt(this.i)){var e=this.GetArgument(t),r=s(c.default.matchDimen(e),3),n=r[0],i=r[1];if(r[2],n)return n+i}else{e=this.string.slice(this.i);var o=s(c.default.matchDimen(e,!0),3),a=(n=o[0],i=o[1],o[2]);if(n)return this.i+=a,n+i}throw new l.default(\"MissingDimOrUnits\",\"Missing dimension or its units for %1\",this.currentCS)},o.prototype.GetUpTo=function(t,e){for(;this.nextIsSpace();)this.i++;for(var r=this.i,n=0;this.i<this.string.length;){var i=this.i,o=this.string.charAt(this.i++);switch(o){case\"\\\\\":o+=this.GetCS();break;case\"{\":n++;break;case\"}\":if(0===n)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",e);n--}if(0===n&&o===e)return this.string.slice(r,i)}throw new l.default(\"TokenNotFoundForCommand\",\"Could not find %1 for %2\",e,this.currentCS)},o.prototype.ParseArg=function(t){return new o(this.GetArgument(t),this.stack.env,this.configuration).mml()},o.prototype.ParseUpTo=function(t,e){return new o(this.GetUpTo(t,e),this.stack.env,this.configuration).mml()},o.prototype.GetDelimiterArg=function(t){var e=c.default.trimSpaces(this.GetArgument(t));if(\"\"===e)return null;if(this.contains(\"delimiter\",e))return e;throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},o.prototype.GetStar=function(){var t=\"*\"===this.GetNext();return t&&this.i++,t},o.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.configuration.nodeFactory).create.apply(e,i([t],r))},o);function o(t,e,r){var n,i;this._string=t,this.configuration=r,this.macroCount=0,this.i=0,this.currentCS=\"\";var o,a=e.hasOwnProperty(\"isInner\"),s=e.isInner;if(delete e.isInner,e){o={};try{for(var c=h(Object.keys(e)),l=c.next();!l.done;l=c.next()){var u=l.value;o[u]=e[u]}}catch(t){n={error:t}}finally{try{l&&!l.done&&(i=c.return)&&i.call(c)}finally{if(n)throw n.error}}}this.configuration.pushParser(this),this.stack=new f.default(this.itemFactory,o,!a||s),this.Parse(),this.Push(this.itemFactory.create(\"stop\"))}e.default=n},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=(Object.defineProperty(i.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,\"char\",{get:function(){return this._char},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,\"attributes\",{get:function(){return this._attributes},enumerable:!0,configurable:!0}),i);function i(t,e,r){this._symbol=t,this._char=e,this._attributes=r}e.Symbol=n;var o=(Object.defineProperty(a.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,\"func\",{get:function(){return this._func},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,\"args\",{get:function(){return this._args},enumerable:!0,configurable:!0}),a);function a(t,e,r){void 0===r&&(r=[]),this._symbol=t,this._func=e,this._args=r}e.Macro=o},function(t,e,r){\"use strict\";var a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.V=1,e.H=2,e.NOSTRETCH={dir:0};var i=(o.charOptions=function(t,e){var r=t[e];return 3===r.length&&(r[3]={}),r[3]},o.prototype.createVariant=function(t,e,r){void 0===e&&(e=null),void 0===r&&(r=null);var n={linked:[],chars:e?Object.create(this.variant[e].chars):{}};r&&this.variant[r]&&(Object.assign(n.chars,this.variant[r].chars),this.variant[r].linked.push(n.chars),n.chars=Object.create(n.chars)),this.variant[t]=n},o.prototype.createVariants=function(t){var e,r;try{for(var n=c(t),i=n.next();!i.done;i=n.next()){var o=i.value;this.createVariant(o[0],o[1],o[2])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},o.prototype.defineChars=function(t,e){var r,n,i=this.variant[t];Object.assign(i.chars,e);try{for(var o=c(i.linked),a=o.next();!a.done;a=o.next()){var s=a.value;Object.assign(s,e)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},o.prototype.defineDelimiters=function(t){Object.assign(this.delimiters,t)},o.prototype.defineRemap=function(t,e){this.remapChars.hasOwnProperty(t)||(this.remapChars[t]={}),Object.assign(this.remapChars[t],e)},o.prototype.getDelimiter=function(t){return this.delimiters[t]},o.prototype.getSizeVariant=function(t,e){return this.delimiters[t].variants&&(e=this.delimiters[t].variants[e]),this.sizeVariants[e]},o.prototype.getChar=function(t,e){return this.variant[t].chars[e]},o.prototype.getVariant=function(t){return this.variant[t]},o.prototype.getCssFont=function(t){return this.cssFontMap[t]||[\"serif\",!1,!1]},o.prototype.getRemappedChar=function(t,e){return(this.remapChars[t]||{})[e]},o.OPTIONS={},o.defaultVariants=[[\"normal\"],[\"bold\",\"normal\"],[\"italic\",\"normal\"],[\"bold-italic\",\"italic\",\"bold\"],[\"double-struck\",\"bold\"],[\"fraktur\",\"normal\"],[\"bold-fraktur\",\"bold\",\"fraktur\"],[\"script\",\"normal\"],[\"bold-script\",\"bold\",\"script\"],[\"sans-serif\",\"normal\"],[\"bold-sans-serif\",\"bold\",\"sans-serif\"],[\"sans-serif-italic\",\"italic\",\"sans-serif\"],[\"bold-sans-serif-italic\",\"bold-italic\",\"sans-serif\"],[\"monospace\",\"normal\"]],o.defaultCssFonts={normal:[\"serif\",!1,!1],bold:[\"serif\",!1,!0],italic:[\"serif\",!0,!1],\"bold-italic\":[\"serif\",!0,!0],\"double-struck\":[\"serif\",!1,!0],fraktur:[\"serif\",!1,!1],\"bold-fraktur\":[\"serif\",!1,!0],script:[\"cursive\",!1,!1],\"bold-script\":[\"cursive\",!1,!0],\"sans-serif\":[\"sans-serif\",!1,!1],\"bold-sans-serif\":[\"sans-serif\",!1,!0],\"sans-serif-italic\":[\"sans-serif\",!0,!1],\"bold-sans-serif-italic\":[\"sans-serif\",!0,!0],monospace:[\"monospace\",!1,!1]},o.defaultAccentMap={768:\"\\u02cb\",769:\"\\u02ca\",770:\"\\u02c6\",771:\"\\u02dc\",772:\"\\u02c9\",774:\"\\u02d8\",775:\"\\u02d9\",776:\"\\xa8\",778:\"\\u02da\",780:\"\\u02c7\",8594:\"\\u20d7\",8242:\"'\",8243:\"''\",8244:\"'''\",8245:\"`\",8246:\"``\",8247:\"```\",8279:\"''''\",8400:\"\\u21bc\",8401:\"\\u21c0\",8406:\"\\u2190\",8417:\"\\u2194\",8432:\"*\",8411:\"...\",8412:\"....\",8428:\"\\u21c1\",8429:\"\\u21bd\",8430:\"\\u2190\",8431:\"\\u2192\"},o.defaultMoMap={45:\"\\u2212\"},o.defaultMnMap={45:\"\\u2212\"},o.defaultParams={x_height:.442,quad:1,num1:.676,num2:.394,num3:.444,denom1:.686,denom2:.345,sup1:.413,sup2:.363,sup3:.289,sub1:.15,sub2:.247,sup_drop:.386,sub_drop:.05,delim1:2.39,delim2:1,axis_height:.25,rule_thickness:.06,big_op_spacing1:.111,big_op_spacing2:.167,big_op_spacing3:.2,big_op_spacing4:.6,big_op_spacing5:.1,surd_height:.075,scriptspace:.05,nulldelimiterspace:.12,delimiterfactor:901,delimitershortfall:.3,min_rule_thickness:1.25},o.defaultDelimiters={},o.defaultChars={},o.defaultSizeVariants=[],o);function o(){var e,t;this.variant={},this.delimiters={},this.cssFontMap={},this.remapChars={};var r=this.constructor;this.params=a({},r.defaultParams),this.sizeVariants=s(r.defaultSizeVariants),this.cssFontMap=a({},r.defaultCssFonts),this.createVariants(r.defaultVariants),this.defineDelimiters(r.defaultDelimiters);try{for(var n=c(Object.keys(r.defaultChars)),i=n.next();!i.done;i=n.next()){var o=i.value;this.defineChars(o,r.defaultChars[o])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.defineRemap(\"accent\",r.defaultAccentMap),this.defineRemap(\"mo\",r.defaultMoMap),this.defineRemap(\"mn\",r.defaultMnMap)}e.FontData=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=(i.prototype[Symbol.iterator]=function(){var t=0,e=this.items;return{next:function(){return{value:e[t++],done:t>e.length}}}},i.prototype.add=function(t,e){void 0===e&&(e=i.DEFAULTPRIORITY);for(var r=this.items.length;0<=--r&&e<this.items[r].priority;);return this.items.splice(r+1,0,{item:t,priority:e}),t},i.prototype.remove=function(t){for(var e=this.items.length;0<=--e&&this.items[e].item!==t;);0<=e&&this.items.splice(e,1)},i.prototype.toArray=function(){return Array.from(this)},i.DEFAULTPRIORITY=5,i);function i(){this.items=[],this.items=[]}e.PrioritizedList=n},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},c=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var a,l=r(24),u=(a=l.PrioritizedList,i(h,a),h.prototype.execute=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=s(this),o=i.next();!o.done;o=i.next()){var a=o.value;if(!1===a.item.apply(a,c(r)))return!1}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return!0},h.prototype.asyncExecute=function(){for(var o=[],t=0;t<arguments.length;t++)o[t]=arguments[t];var a=-1,s=this.items;return new Promise(function(n,i){!function t(){for(var e;++a<s.length;){var r=(e=s[a]).item.apply(e,c(o));if(r instanceof Promise)return void r.then(t).catch(function(t){return i(t)});if(!1===r)return void n(!1)}n(!0)}()})},h);function h(){return null!==a&&a.apply(this,arguments)||this}e.FunctionList=u},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},b=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},g=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var M,a=r(0),s=r(86),c=(M=a.AbstractMmlTokenNode,i(l,M),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mo\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isEmbellished\",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"hasNewLine\",{get:function(){return\"newline\"===this.attributes.get(\"linebreak\")},enumerable:!0,configurable:!0}),l.prototype.coreParent=function(){for(var t=this,e=this.factory.getNodeClass(\"math\");t&&t.isEmbellished&&t.coreMO()===this&&!(t instanceof e);)t=t.Parent;return t},l.prototype.coreText=function(t){if(!t)return\"\";if(t.isEmbellished)return t.coreMO().getText();for(;((t.isKind(\"mrow\")||t.isKind(\"TeXAtom\")||t.isKind(\"mstyle\")||t.isKind(\"mphantom\"))&&1===t.childNodes.length||t.isKind(\"munderover\"))&&t.childNodes[0];)t=t.childNodes[0];return t.isToken?t.getText():\"\"},l.prototype.hasSpacingAttributes=function(){return this.attributes.isSet(\"lspace\")||this.attributes.isSet(\"rspace\")},Object.defineProperty(l.prototype,\"isAccent\",{get:function(){var t=!1,e=this.coreParent();if(e){var r=e.isKind(\"mover\")?e.childNodes[e.over].coreMO()?\"accent\":\"\":e.isKind(\"munder\")?e.childNodes[e.under].coreMO()?\"accentunder\":\"\":e.isKind(\"munderover\")?this===e.childNodes[e.over].coreMO()?\"accent\":this===e.childNodes[e.under].coreMO()?\"accentunder\":\"\":\"\";r&&(t=void 0!==e.attributes.getExplicit(r)?t:this.attributes.get(\"accent\"))}return t},enumerable:!0,configurable:!0}),l.prototype.setTeXclass=function(t){var e=this.attributes.getList(\"form\",\"fence\"),r=e.form,n=e.fence;return this.attributes.isSet(\"lspace\")||this.attributes.isSet(\"rspace\")?(this.texClass=a.TEXCLASS.NONE,null):(n&&this.texClass===a.TEXCLASS.REL&&(\"prefix\"===r&&(this.texClass=a.TEXCLASS.OPEN),\"postfix\"===r&&(this.texClass=a.TEXCLASS.CLOSE)),\"\\u2061\"===this.getText()?(t&&(t.texClass=a.TEXCLASS.OP,t.setProperty(\"fnOP\",!0)),this.texClass=this.prevClass=a.TEXCLASS.NONE,t):this.adjustTeXclass(t))},l.prototype.adjustTeXclass=function(t){var e=this.texClass,r=this.prevClass;if(e===a.TEXCLASS.NONE)return t;if(t?(!t.getProperty(\"autoOp\")||e!==a.TEXCLASS.BIN&&e!==a.TEXCLASS.REL||(e=this.texClass=a.TEXCLASS.ORD),r=this.prevClass=t.texClass||a.TEXCLASS.ORD,this.prevLevel=this.attributes.getInherited(\"scriptlevel\")):r=this.prevClass=a.TEXCLASS.NONE,e!==a.TEXCLASS.BIN||r!==a.TEXCLASS.NONE&&r!==a.TEXCLASS.BIN&&r!==a.TEXCLASS.OP&&r!==a.TEXCLASS.REL&&r!==a.TEXCLASS.OPEN&&r!==a.TEXCLASS.PUNCT)if(r!==a.TEXCLASS.BIN||e!==a.TEXCLASS.REL&&e!==a.TEXCLASS.CLOSE&&e!==a.TEXCLASS.PUNCT){if(e===a.TEXCLASS.BIN){for(var n=this,i=this.parent;i&&i.parent&&i.isEmbellished&&(1===i.childNodes.length||!i.isKind(\"mrow\")&&i.core()===n);)i=(n=i).parent;i.childNodes[i.childNodes.length-1]===n&&(this.texClass=a.TEXCLASS.ORD)}}else t.texClass=this.prevClass=a.TEXCLASS.ORD;else this.texClass=a.TEXCLASS.ORD;return this},l.prototype.setInheritedAttributes=function(t,e,r,n){var i,o;void 0===t&&(t={}),void 0===e&&(e=!1),void 0===r&&(r=0),void 0===n&&(n=!1),M.prototype.setInheritedAttributes.call(this,t,e,r,n);var a=this.getText(),s=b(this.handleExplicitForm(this.getForms()),3),c=s[0],l=s[1],u=s[2];this.attributes.setInherited(\"form\",c);var h=this.constructor.OPTABLE,f=h[c][a]||h[l][a]||h[u][a];if(f){void 0===this.getProperty(\"texClass\")&&(this.texClass=f[2]);try{for(var p=g(Object.keys(f[3]||{})),d=p.next();!d.done;d=p.next()){var m=d.value;this.attributes.setInherited(m,f[3][m])}}catch(t){i={error:t}}finally{try{d&&!d.done&&(o=p.return)&&o.call(p)}finally{if(i)throw i.error}}this.lspace=(f[0]+1)/18,this.rspace=(f[1]+1)/18}else{var y=this.getRange(a);if(y){void 0===this.getProperty(\"texClass\")&&(this.texClass=y[2]);var v=this.constructor.MMLSPACING[y[2]];this.lspace=(v[0]+1)/18,this.rspace=(v[1]+1)/18}}},l.prototype.getForms=function(){for(var t=this,e=this.parent,r=this.Parent;r&&r.isEmbellished;)t=e,e=r.parent,r=r.Parent;if(e&&e.isKind(\"mrow\")&&1!==e.nonSpaceLength()){if(e.firstNonSpace()===t)return[\"prefix\",\"infix\",\"postfix\"];if(e.lastNonSpace()===t)return[\"postfix\",\"infix\",\"prefix\"]}return[\"infix\",\"prefix\",\"postfix\"]},l.prototype.handleExplicitForm=function(t){if(this.attributes.isSet(\"form\")){var e=this.attributes.get(\"form\");t=[e].concat(t.filter(function(t){return t!==e}))}return t},l.prototype.getRange=function(t){var e,r;if(!t.match(/^[\\uD800-\\uDBFF]?.$/))return null;var n=t.charCodeAt(0);2===t.length&&(n=1024*(n-55296)+t.charCodeAt(1)-56320+65536);var i=this.constructor.RANGES;try{for(var o=g(i),a=o.next();!a.done;a=o.next()){var s=a.value;if(s[0]<=n&&n<=s[1])return s;if(n<s[0])return null}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},l.defaults=o(o({},a.AbstractMmlTokenNode.defaults),{form:\"infix\",fence:!1,separator:!1,lspace:\"thickmathspace\",rspace:\"thickmathspace\",stretchy:!1,symmetric:!1,maxsize:\"infinity\",minsize:\"0em\",largeop:!1,movablelimits:!1,accent:!1,linebreak:\"auto\",lineleading:\"1ex\",linebreakstyle:\"before\",indentalign:\"auto\",indentshift:\"0\",indenttarget:\"\",indentalignfirst:\"indentalign\",indentshiftfirst:\"indentshift\",indentalignlast:\"indentalign\",indentshiftlast:\"indentshift\"}),l.RANGES=s.RANGES,l.MMLSPACING=s.MMLSPACING,l.OPTABLE=s.OPTABLE,l);function l(){var t=null!==M&&M.apply(this,arguments)||this;return t.texClass=a.TEXCLASS.REL,t.lspace=5/18,t.rspace=5/18,t}e.MmlMo=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(21),s=function(t,e){void 0===t&&(t=\"???\"),void 0===e&&(e=\"\"),this.tag=t,this.id=e};e.Label=s;var c=function(t,e,r,n,i,o,a,s){void 0===t&&(t=\"\"),void 0===e&&(e=!1),void 0===r&&(r=!1),void 0===n&&(n=null),void 0===i&&(i=\"\"),void 0===o&&(o=\"\"),void 0===a&&(a=!1),void 0===s&&(s=\"\"),this.env=t,this.taggable=e,this.defaultTags=r,this.tag=n,this.tagId=i,this.tagFormat=o,this.noTag=a,this.labelId=s};e.TagInfo=c;var l=(u.prototype.start=function(t,e,r){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new c(t,e,r)},Object.defineProperty(u.prototype,\"env\",{get:function(){return this.currentTag.env},enumerable:!0,configurable:!0}),u.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},u.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},u.prototype.notag=function(){this.tag(\"\",!0),this.currentTag.noTag=!0},Object.defineProperty(u.prototype,\"noTag\",{get:function(){return this.currentTag.noTag},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"label\",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!0,configurable:!0}),u.prototype.formatUrl=function(t,e){return e+\"#\"+encodeURIComponent(t)},u.prototype.formatTag=function(t){return\"(\"+t+\")\"},u.prototype.formatId=function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},u.prototype.formatNumber=function(t){return t.toString()},u.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},u.prototype.clearTag=function(){this.label=\"\",this.tag(null,!0),this.currentTag.tagId=\"\"},u.prototype.getTag=function(t){if(void 0===t&&(t=!1),t)return this.autoTag(),this.makeTag();var e=this.currentTag;return e.taggable&&!e.noTag&&(e.defaultTags&&this.autoTag(),e.tag)?this.makeTag():null},u.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},u.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},u.prototype.startEquation=function(t){this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;var e=t.inputData.recompile;e&&(this.refUpdate=!0,this.counter=e.counter)},u.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},u.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;var r=this.makeTag();return this.enTag(t,r)},u.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},u.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new s(this.currentTag.tag,this.currentTag.tagId));var t=new o.default(\"\\\\text{\"+this.currentTag.tagFormat+\"}\",{},this.configuration).mml();return this.configuration.nodeFactory.create(\"node\",\"mtd\",[t],{id:this.currentTag.tagId})},u);function u(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new c,this.history=[],this.stack=[],this.enTag=function(t,e){var r=this.configuration.nodeFactory,n=r.create(\"node\",\"mtd\",[t]),i=r.create(\"node\",\"mlabeledtr\",[e,n]);return r.create(\"node\",\"mtable\",[i],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}e.AbstractTags=l;var h,f=(i(p,h=l),p.prototype.autoTag=function(){},p.prototype.getTag=function(){return this.currentTag.tag?h.prototype.getTag.call(this):null},p);function p(){return null!==h&&h.apply(this,arguments)||this}e.NoTags=f;var d,m,y,v,b=(i(g,d=l),g.prototype.finalize=function(t,e){if(!e.display||this.history.find(function(t){return t.taggable}))return t;var r=this.getTag(!0);return this.enTag(t,r)},g);function g(){return null!==d&&d.apply(this,arguments)||this}e.AllTags=b,m=e.TagsFactory||(e.TagsFactory={}),y=new Map([[\"none\",f],[\"all\",b]]),v=\"none\",m.OPTIONS={tags:v,tagSide:\"right\",tagIndent:\"0.8em\",multlineWidth:\"85%\",useLabelIds:!0,ignoreDuplicateLabels:!1},m.add=function(t,e){y.set(t,e)},m.addTags=function(t){var e,r;try{for(var n=a(Object.keys(t)),i=n.next();!i.done;i=n.next()){var o=i.value;m.add(o,t[o])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},m.create=function(t){return new(y.get(t)||this.defaultTags)},m.setDefault=function(t){v=t},m.getDefault=function(){return m.create(v)}},function($K,_K){var aL;aL=function(){return this}();try{aL=aL||Function(\"return this\")()||eval(\"this\")}catch(t){\"object\"==typeof window&&(aL=window)}$K.exports=aL},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(3),i=r(25),o=(Object.defineProperty(a.prototype,\"name\",{get:function(){return this.constructor.NAME},enumerable:!0,configurable:!0}),a.prototype.setAdaptor=function(t){this.adaptor=t},a.prototype.setMmlFactory=function(t){this.mmlFactory=t},a.prototype.initialize=function(){},Object.defineProperty(a.prototype,\"processStrings\",{get:function(){return!0},enumerable:!0,configurable:!0}),a.prototype.findMath=function(t,e){return[]},a.prototype.executeFilters=function(t,e,r,n){var i={math:e,document:r,data:n};return t.execute(i),i.data},a.NAME=\"generic\",a.OPTIONS={},a);function a(t){void 0===t&&(t={}),this.adaptor=null,this.mmlFactory=null;var e=this.constructor;this.options=n.userOptions(n.defaultOptions({},e.OPTIONS),t),this.preFilters=new i.FunctionList,this.postFilters=new i.FunctionList}e.AbstractInputJax=o},function(t,e,r){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=(s.prototype.create=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return(this.node[t]||this.node[this.defaultKind]).apply(void 0,i(e))},s.prototype.setNodeClass=function(t,e){this.nodeMap.set(t,e);var r=this,n=this.nodeMap.get(t);this.node[t]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return new(n.bind.apply(n,i([void 0,r],t)))}},s.prototype.getNodeClass=function(t){return this.nodeMap.get(t)},s.prototype.deleteNodeClass=function(t){this.nodeMap.delete(t),delete this.node[t]},s.prototype.nodeIsKind=function(t,e){return t instanceof this.getNodeClass(e)},s.prototype.getKinds=function(){return Array.from(this.nodeMap.keys())},s.defaultNodes={},s);function s(t){var e,r;void 0===t&&(t=null),this.defaultKind=\"unknown\",this.nodeMap=new Map,this.node={},null===t&&(t=this.constructor.defaultNodes);try{for(var n=a(Object.keys(t)),i=n.next();!i.done;i=n.next()){var o=i.value;this.setNodeClass(o,t[o])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}}e.AbstractFactory=o},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlBaseNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"msubsup\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"base\",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"sub\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"sup\",{get:function(){return 2},enumerable:!0,configurable:!0}),l.prototype.setChildInheritedAttributes=function(t,e,r,n){var i=this.childNodes;i[0].setInheritedAttributes(t,e,r,n),i[1].setInheritedAttributes(t,!1,r+1,n||1===this.sub),i[2]&&i[2].setInheritedAttributes(t,!1,r+1,n||2===this.sub)},l.defaults=o(o({},s.AbstractMmlBaseNode.defaults),{subscriptshift:\"\",superscriptshift:\"\"}),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlMsubsup=c;var u,h=(i(f,u=c),Object.defineProperty(f.prototype,\"kind\",{get:function(){return\"msub\"},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"arity\",{get:function(){return 2},enumerable:!0,configurable:!0}),f.defaults=o({},c.defaults),f);function f(){return null!==u&&u.apply(this,arguments)||this}e.MmlMsub=h;var p,d=(i(m,p=c),Object.defineProperty(m.prototype,\"kind\",{get:function(){return\"msup\"},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"arity\",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"sup\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"sub\",{get:function(){return 2},enumerable:!0,configurable:!0}),m.defaults=o({},c.defaults),m);function m(){return null!==p&&p.apply(this,arguments)||this}e.MmlMsup=d},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var c=r(4),l=(Object.defineProperty(u.prototype,\"nodes\",{get:function(){return this._nodes},enumerable:!0,configurable:!0}),u.prototype.Push=function(){for(var t,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];(t=this._nodes).push.apply(t,a(e))},u.prototype.Pop=function(){return this._nodes.pop()},Object.defineProperty(u.prototype,\"First\",{get:function(){return this._nodes[this.Size()-1]},set:function(t){this._nodes[this.Size()-1]=t},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"Last\",{get:function(){return this._nodes[0]},set:function(t){this._nodes[0]=t},enumerable:!0,configurable:!0}),u.prototype.Peek=function(t){return null==t&&(t=1),this._nodes.slice(this.Size()-t)},u.prototype.Size=function(){return this._nodes.length},u.prototype.Clear=function(){this._nodes=[]},u.prototype.toMml=function(t,e){return void 0===t&&(t=!0),1!==this._nodes.length||e?this.create(\"node\",t?\"inferredMrow\":\"mrow\",this._nodes,{}):this.First},u.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.factory.configuration.nodeFactory).create.apply(e,a([t],r))},u);function u(t){this._nodes=t}e.MmlStack=l;var h,f=(i(p,h=l),Object.defineProperty(p.prototype,\"kind\",{get:function(){return\"base\"},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!0,configurable:!0}),p.prototype.getProperty=function(t){return this._properties[t]},p.prototype.setProperty=function(t,e){return this._properties[t]=e,this},Object.defineProperty(p.prototype,\"isOpen\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"isClose\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"isFinal\",{get:function(){return!1},enumerable:!0,configurable:!0}),p.prototype.isKind=function(t){return t===this.kind},p.prototype.checkItem=function(t){if(t.isKind(\"over\")&&this.isOpen&&(t.setProperty(\"num\",this.toMml(!1)),this.Clear()),t.isKind(\"cell\")&&this.isOpen){if(t.getProperty(\"linebreak\"))return p.fail;throw new c.default(\"Misplaced\",\"Misplaced %1\",t.getName())}if(t.isClose&&this.getErrors(t.kind)){var e=o(this.getErrors(t.kind),2),r=e[0],n=e[1];throw new c.default(r,n,t.getName())}return t.isFinal?(this.Push(t.First),p.fail):p.success},p.prototype.clearEnv=function(){var e,t;try{for(var r=s(Object.keys(this.env)),n=r.next();!n.done;n=r.next()){var i=n.value;delete this.env[i]}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},p.prototype.setProperties=function(t){return Object.assign(this._properties,t),this},p.prototype.getName=function(){return this.getProperty(\"name\")},p.prototype.toString=function(){return this.kind+\"[\"+this.nodes.join(\"; \")+\"]\"},p.prototype.getErrors=function(t){return(this.constructor.errors||{})[t]||p.errors[t]},p.fail=[null,!1],p.success=[null,!0],p.errors={end:[\"MissingBeginExtraEnd\",\"Missing \\\\begin{%1} or extra \\\\end{%1}\"],close:[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"],right:[\"MissingLeftExtraRight\",\"Missing \\\\left or extra \\\\right\"]},p);function p(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=h.call(this,e)||this;return n.factory=t,n.global={},n._properties={},n.isOpen&&(n._env={}),n}e.BaseItem=f},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var i,o,s=r(6),c=r(15),l=r(7);(o=i=i||{}).variable=function(t,e){var r=l.default.getFontDef(t),n=t.create(\"token\",\"mi\",r,e);t.Push(n)},o.digit=function(t,e){var r,n=t.configuration.options.digits,i=t.string.slice(t.i-1).match(n),o=l.default.getFontDef(t);i?(r=t.create(\"token\",\"mn\",o,i[0].replace(/[{}]/g,\"\")),t.i+=i[0].length-1):r=t.create(\"token\",\"mo\",o,e),t.Push(r)},o.controlSequence=function(t,e){var r=t.GetCS();t.parse(\"macro\",[t,r])},o.mathchar0mi=function(t,e){var r=e.attributes||{mathvariant:c.TexConstant.Variant.ITALIC},n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},o.mathchar0mo=function(t,e){var r=e.attributes||{};r.stretchy=!1;var n=t.create(\"token\",\"mo\",r,e.char);s.default.setProperty(n,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",n),t.Push(n)},o.mathchar7=function(t,e){var r=e.attributes||{mathvariant:c.TexConstant.Variant.NORMAL};t.stack.env.font&&(r.mathvariant=t.stack.env.font);var n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},o.delimiter=function(t,e){var r=e.attributes||{};r=Object.assign({fence:!1,stretchy:!1},r);var n=t.create(\"token\",\"mo\",r,e.char);t.Push(n)},o.environment=function(t,e,r,n){var i=n[0],o=t.itemFactory.create(\"begin\").setProperties({name:e,end:i});o=r.apply(void 0,a([t,o],n.slice(1))),t.Push(o)},e.default=i},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var s,c=r(8),l=r(12),u=r(0),h=r(4),f=r(7),p=r(6),d=r(32),m=(s=d.BaseItem,i(y,s),Object.defineProperty(y.prototype,\"kind\",{get:function(){return\"start\"},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),y.prototype.checkItem=function(t){if(t.isKind(\"stop\")){var e=this.toMml();return this.global.isInner||(e=this.factory.configuration.tags.finalize(e,this.env)),[[this.factory.create(\"mml\",e)],!0]}return s.prototype.checkItem.call(this,t)},y);function y(t,e){var r=s.call(this,t)||this;return r.global=e,r}e.StartItem=m;var v,b=(v=d.BaseItem,i(g,v),Object.defineProperty(g.prototype,\"kind\",{get:function(){return\"stop\"},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"isClose\",{get:function(){return!0},enumerable:!0,configurable:!0}),g);function g(){return null!==v&&v.apply(this,arguments)||this}e.StopItem=b;var M,O=(M=d.BaseItem,i(x,M),Object.defineProperty(x.prototype,\"kind\",{get:function(){return\"open\"},enumerable:!0,configurable:!0}),Object.defineProperty(x.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),x.prototype.checkItem=function(t){if(t.isKind(\"close\")){var e=this.toMml(),r=this.create(\"node\",\"TeXAtom\",[e]);return[[this.factory.create(\"mml\",r)],!0]}return M.prototype.checkItem.call(this,t)},x.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\"]}),x);function x(){return null!==M&&M.apply(this,arguments)||this}e.OpenItem=O;var S,E=(S=d.BaseItem,i(C,S),Object.defineProperty(C.prototype,\"kind\",{get:function(){return\"close\"},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,\"isClose\",{get:function(){return!0},enumerable:!0,configurable:!0}),C);function C(){return null!==S&&S.apply(this,arguments)||this}e.CloseItem=E;var _,T=(_=d.BaseItem,i(w,_),Object.defineProperty(w.prototype,\"kind\",{get:function(){return\"prime\"},enumerable:!0,configurable:!0}),w.prototype.checkItem=function(t){var e=o(this.Peek(2),2),r=e[0],n=e[1];return!p.default.isType(r,\"msubsup\")||p.default.isType(r,\"msup\")?[[this.create(\"node\",\"msup\",[r,n]),t],!0]:(p.default.setChild(r,r.sup,n),[[r,t],!0])},w);function w(){return null!==_&&_.apply(this,arguments)||this}e.PrimeItem=T;var A,k=(A=d.BaseItem,i(I,A),Object.defineProperty(I.prototype,\"kind\",{get:function(){return\"subsup\"},enumerable:!0,configurable:!0}),I.prototype.checkItem=function(t){if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;var e=this.First,r=this.getProperty(\"position\");if(t.isKind(\"mml\")){if(this.getProperty(\"primes\"))if(2!==r)p.default.setChild(e,2,this.getProperty(\"primes\"));else{p.default.setProperty(this.getProperty(\"primes\"),\"variantForm\",!0);var n=this.create(\"node\",\"mrow\",[this.getProperty(\"primes\"),t.First]);t.First=n}return p.default.setChild(e,r,t.First),null!=this.getProperty(\"movesupsub\")&&p.default.setProperty(e,\"movesupsub\",this.getProperty(\"movesupsub\")),[[this.factory.create(\"mml\",e)],!0]}if(A.prototype.checkItem.call(this,t)[1]){var i=this.getErrors([\"\",\"sub\",\"sup\"][r]);throw new(h.default.bind.apply(h.default,a([void 0,i[0],i[1]],i.splice(2))))}},I.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"MissingScript\",\"Missing superscript or subscript argument\"],sup:[\"MissingOpenForSup\",\"Missing open brace for superscript\"],sub:[\"MissingOpenForSub\",\"Missing open brace for subscript\"]}),I);function I(){return null!==A&&A.apply(this,arguments)||this}e.SubsupItem=k;var L,N=(L=d.BaseItem,i(P,L),Object.defineProperty(P.prototype,\"kind\",{get:function(){return\"over\"},enumerable:!0,configurable:!0}),Object.defineProperty(P.prototype,\"isClose\",{get:function(){return!0},enumerable:!0,configurable:!0}),P.prototype.checkItem=function(t){if(t.isKind(\"over\"))throw new h.default(\"AmbiguousUseOf\",\"Ambiguous use of %1\",t.getName());if(t.isClose){var e=this.create(\"node\",\"mfrac\",[this.getProperty(\"num\"),this.toMml(!1)]);return null!=this.getProperty(\"thickness\")&&p.default.setAttribute(e,\"linethickness\",this.getProperty(\"thickness\")),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(p.default.setProperty(e,\"withDelims\",!0),e=f.default.fixedFence(this.factory.configuration,this.getProperty(\"open\"),e,this.getProperty(\"close\"))),[[this.factory.create(\"mml\",e),t],!0]}return L.prototype.checkItem.call(this,t)},P.prototype.toString=function(){return\"over[\"+this.getProperty(\"num\")+\" / \"+this.nodes.join(\"; \")+\"]\"},P);function P(t){var e=L.call(this,t)||this;return e.setProperty(\"name\",\"\\\\over\"),e}e.OverItem=N;var B,R=(B=d.BaseItem,i(j,B),Object.defineProperty(j.prototype,\"kind\",{get:function(){return\"left\"},enumerable:!0,configurable:!0}),Object.defineProperty(j.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),j.prototype.checkItem=function(t){return t.isKind(\"right\")?[[this.factory.create(\"mml\",f.default.fenced(this.factory.configuration,this.getProperty(\"delim\"),this.toMml(),t.getProperty(\"delim\")))],!0]:B.prototype.checkItem.call(this,t)},j.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"ExtraLeftMissingRight\",\"Extra \\\\left or missing \\\\right\"]}),j);function j(t){var e=B.call(this,t)||this;return e.setProperty(\"delim\",\"(\"),e}e.LeftItem=R;var H,D=(H=d.BaseItem,i(X,H),Object.defineProperty(X.prototype,\"kind\",{get:function(){return\"right\"},enumerable:!0,configurable:!0}),Object.defineProperty(X.prototype,\"isClose\",{get:function(){return!0},enumerable:!0,configurable:!0}),X);function X(t){var e=H.call(this,t)||this;return e.setProperty(\"delim\",\")\"),e}e.RightItem=D;var F,W=(F=d.BaseItem,i(J,F),Object.defineProperty(J.prototype,\"kind\",{get:function(){return\"begin\"},enumerable:!0,configurable:!0}),Object.defineProperty(J.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),J.prototype.checkItem=function(t){if(t.isKind(\"end\")){if(t.getName()!==this.getName())throw new h.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),t.getName());return this.getProperty(\"end\")?d.BaseItem.fail:[[this.factory.create(\"mml\",this.toMml())],!0]}if(t.isKind(\"stop\"))throw new h.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return F.prototype.checkItem.call(this,t)},J);function J(){return null!==F&&F.apply(this,arguments)||this}e.BeginItem=W;var q,V=(q=d.BaseItem,i(U,q),Object.defineProperty(U.prototype,\"kind\",{get:function(){return\"end\"},enumerable:!0,configurable:!0}),Object.defineProperty(U.prototype,\"isClose\",{get:function(){return!0},enumerable:!0,configurable:!0}),U);function U(){return null!==q&&q.apply(this,arguments)||this}e.EndItem=V;var z,G=(z=d.BaseItem,i(K,z),Object.defineProperty(K.prototype,\"kind\",{get:function(){return\"style\"},enumerable:!0,configurable:!0}),K.prototype.checkItem=function(t){if(!t.isClose)return z.prototype.checkItem.call(this,t);var e=this.create(\"node\",\"mstyle\",this.nodes,this.getProperty(\"styles\"));return[[this.factory.create(\"mml\",e),t],!0]},K);function K(){return null!==z&&z.apply(this,arguments)||this}e.StyleItem=G;var Z,Y=(Z=d.BaseItem,i($,Z),Object.defineProperty($.prototype,\"kind\",{get:function(){return\"position\"},enumerable:!0,configurable:!0}),$.prototype.checkItem=function(t){if(t.isClose)throw new h.default(\"MissingBoxFor\",\"Missing box for %1\",this.getName());if(t.isFinal){var e=t.toMml();switch(this.getProperty(\"move\")){case\"vertical\":return e=this.create(\"node\",\"mpadded\",[e],{height:this.getProperty(\"dh\"),depth:this.getProperty(\"dd\"),voffset:this.getProperty(\"dh\")}),[[this.factory.create(\"mml\",e)],!0];case\"horizontal\":return[[this.factory.create(\"mml\",this.getProperty(\"left\")),t,this.factory.create(\"mml\",this.getProperty(\"right\"))],!0]}}return Z.prototype.checkItem.call(this,t)},$);function $(){return null!==Z&&Z.apply(this,arguments)||this}e.PositionItem=Y;var Q,tt=(Q=d.BaseItem,i(et,Q),Object.defineProperty(et.prototype,\"kind\",{get:function(){return\"cell\"},enumerable:!0,configurable:!0}),Object.defineProperty(et.prototype,\"isClose\",{get:function(){return!0},enumerable:!0,configurable:!0}),et);function et(){return null!==Q&&Q.apply(this,arguments)||this}e.CellItem=tt;var rt,nt=(rt=d.BaseItem,i(it,rt),Object.defineProperty(it.prototype,\"isFinal\",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(it.prototype,\"kind\",{get:function(){return\"mml\"},enumerable:!0,configurable:!0}),it);function it(){return null!==rt&&rt.apply(this,arguments)||this}e.MmlItem=nt;var ot,at=(ot=d.BaseItem,i(st,ot),Object.defineProperty(st.prototype,\"kind\",{get:function(){return\"fn\"},enumerable:!0,configurable:!0}),st.prototype.checkItem=function(t){var e=this.First;if(e){if(t.isOpen)return d.BaseItem.success;if(!t.isKind(\"fn\")){var r=t.First;if(!t.isKind(\"mml\")||!r)return[[e,t],!0];if(p.default.isType(r,\"mstyle\")&&r.childNodes.length&&p.default.isType(r.childNodes[0].childNodes[0],\"mspace\")||p.default.isType(r,\"mspace\"))return[[e,t],!0];p.default.isEmbellished(r)&&(r=p.default.getCoreMO(r));var n=p.default.getForm(r);if(null!=n&&[0,0,1,1,0,1,1,0,0,0][n[2]])return[[e,t],!0]}return[[e,this.create(\"token\",\"mo\",{texClass:u.TEXCLASS.NONE},l.entities.ApplyFunction),t],!0]}return ot.prototype.checkItem.apply(this,arguments)},st);function st(){return null!==ot&&ot.apply(this,arguments)||this}e.FnItem=at;var ct,lt=(ct=d.BaseItem,i(ut,ct),Object.defineProperty(ut.prototype,\"kind\",{get:function(){return\"not\"},enumerable:!0,configurable:!0}),ut.prototype.checkItem=function(t){var e,r,n;if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;if(t.isKind(\"mml\")&&(p.default.isType(t.First,\"mo\")||p.default.isType(t.First,\"mi\")||p.default.isType(t.First,\"mtext\"))&&(e=t.First,1===(r=p.default.getText(e)).length&&!p.default.getProperty(e,\"movesupsub\")&&1===p.default.getChildren(e).length))return this.remap.contains(r)?(n=this.create(\"text\",this.remap.lookup(r).char),p.default.setChild(e,0,n)):(n=this.create(\"text\",\"\\u0338\"),p.default.appendChildren(e,[n])),[[t],!0];n=this.create(\"text\",\"\\u29f8\");var i=this.create(\"node\",\"mtext\",[],{},n),o=this.create(\"node\",\"mpadded\",[i],{width:0});return[[e=this.create(\"node\",\"TeXAtom\",[o],{texClass:u.TEXCLASS.REL}),t],!0]},ut);function ut(){var t=null!==ct&&ct.apply(this,arguments)||this;return t.remap=c.MapHandler.getMap(\"not_remap\"),t}e.NotItem=lt;var ht,ft=(ht=d.BaseItem,i(pt,ht),Object.defineProperty(pt.prototype,\"kind\",{get:function(){return\"dots\"},enumerable:!0,configurable:!0}),pt.prototype.checkItem=function(t){if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;var e=this.getProperty(\"ldots\"),r=t.First;if(t.isKind(\"mml\")&&p.default.isEmbellished(r)){var n=p.default.getTexClass(p.default.getCoreMO(r));n!==u.TEXCLASS.BIN&&n!==u.TEXCLASS.REL||(e=this.getProperty(\"cdots\"))}return[[e,t],!0]},pt);function pt(){return null!==ht&&ht.apply(this,arguments)||this}e.DotsItem=ft;var dt,mt=(dt=d.BaseItem,i(yt,dt),Object.defineProperty(yt.prototype,\"kind\",{get:function(){return\"array\"},enumerable:!0,configurable:!0}),Object.defineProperty(yt.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),yt.prototype.checkItem=function(t){if(!t.isClose||t.isKind(\"over\"))return dt.prototype.checkItem.call(this,t);if(t.getProperty(\"isEntry\"))return this.EndEntry(),this.clearEnv(),d.BaseItem.fail;if(t.getProperty(\"isCR\"))return this.EndEntry(),this.EndRow(),this.clearEnv(),d.BaseItem.fail;this.EndTable(),this.clearEnv();var e=this.arraydef.scriptlevel;delete this.arraydef.scriptlevel;var r=this.create(\"node\",\"mtable\",this.table,this.arraydef);4===this.frame.length?p.default.setAttribute(r,\"frame\",this.dashed?\"dashed\":\"solid\"):this.frame.length&&(this.arraydef.rowlines&&(this.arraydef.rowlines=this.arraydef.rowlines.replace(/none( none)+$/,\"none\")),r=this.create(\"node\",\"menclose\",[r],{notation:this.frame.join(\" \"),isFrame:!0}),\"none\"===(this.arraydef.columnlines||\"none\")&&\"none\"===(this.arraydef.rowlines||\"none\")||p.default.setAttribute(r,\"padding\",0)),e&&(r=this.create(\"node\",\"mstyle\",[r],{scriptlevel:e})),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(r=f.default.fenced(this.factory.configuration,this.getProperty(\"open\"),r,this.getProperty(\"close\")));var n=this.factory.create(\"mml\",r);if(this.getProperty(\"requireClose\")){if(t.isKind(\"close\"))return[[n],!0];throw new h.default(\"MissingCloseBrace\",\"Missing close brace\")}return[[n,t],!0]},yt.prototype.EndEntry=function(){var t=this.create(\"node\",\"mtd\",this.nodes);this.hfill.length&&(0===this.hfill[0]&&p.default.setAttribute(t,\"columnalign\",\"right\"),this.hfill[this.hfill.length-1]===this.Size()&&p.default.setAttribute(t,\"columnalign\",p.default.getAttribute(t,\"columnalign\")?\"center\":\"left\")),this.row.push(t),this.Clear(),this.hfill=[]},yt.prototype.EndRow=function(){var t;t=this.getProperty(\"isNumbered\")&&3===this.row.length?(this.row.unshift(this.row.pop()),this.create(\"node\",\"mlabeledtr\",this.row)):this.create(\"node\",\"mtr\",this.row),this.table.push(t),this.row=[]},yt.prototype.EndTable=function(){(this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.checkLines()},yt.prototype.checkLines=function(){if(this.arraydef.rowlines){var t=this.arraydef.rowlines.split(/ /);t.length===this.table.length?(this.frame.push(\"bottom\"),t.pop(),this.arraydef.rowlines=t.join(\" \")):t.length<this.table.length-1&&(this.arraydef.rowlines+=\" none\")}if(this.getProperty(\"rowspacing\")){for(var e=this.arraydef.rowspacing.split(/ /);e.length<this.table.length;)e.push(this.getProperty(\"rowspacing\")+\"em\");this.arraydef.rowspacing=e.join(\" \")}},yt);function yt(){var t=null!==dt&&dt.apply(this,arguments)||this;return t.table=[],t.row=[],t.frame=[],t.hfill=[],t.arraydef={},t.dashed=!1,t}e.ArrayItem=mt;var vt,bt=(i(gt,vt=mt),Object.defineProperty(gt.prototype,\"kind\",{get:function(){return\"eqnarray\"},enumerable:!0,configurable:!0}),gt.prototype.EndEntry=function(){this.row.length&&f.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.create(\"node\",\"mtd\",this.nodes);this.row.push(t),this.Clear()},gt.prototype.EndRow=function(){var t=\"mtr\",e=this.factory.configuration.tags.getTag();e&&(this.row=[e].concat(this.row),t=\"mlabeledtr\"),this.factory.configuration.tags.clearTag();var r=this.create(\"node\",t,this.row);this.table.push(r),this.row=[]},gt.prototype.EndTable=function(){vt.prototype.EndTable.call(this),this.factory.configuration.tags.end()},gt);function gt(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=vt.call(this,t)||this;return n.factory.configuration.tags.start(e[0],e[2],e[1]),n}e.EqnArrayItem=bt;var Mt,Ot=(Mt=d.BaseItem,i(xt,Mt),Object.defineProperty(xt.prototype,\"kind\",{get:function(){return\"equation\"},enumerable:!0,configurable:!0}),Object.defineProperty(xt.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),xt.prototype.checkItem=function(t){if(t.isKind(\"end\")){var e=this.toMml(),r=this.factory.configuration.tags.getTag();return this.factory.configuration.tags.end(),[[r?this.factory.configuration.tags.enTag(e,r):e,t],!0]}if(t.isKind(\"stop\"))throw new h.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return Mt.prototype.checkItem.call(this,t)},xt);function xt(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Mt.call(this,t)||this;return n.factory.configuration.tags.start(\"equation\",!0,e[0]),n}e.EquationItem=Ot},function(t,e,r){\"use strict\";var f=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var p=r(34),h=r(6),d=r(4),l=r(21),m=r(15),y=r(7),v=r(0),s=r(27),o=r(12);r(108),r(240),r(241);var i={},u={fontfamily:1,fontsize:1,fontweight:1,fontstyle:1,color:1,background:1,id:1,class:1,href:1,style:1};function a(t,e){var r=t.stack.env,n=r.inRoot;r.inRoot=!0;var i=new l.default(e,r,t.configuration),o=i.mml(),a=i.stack.global;if(a.leftRoot||a.upRoot){var s={};a.leftRoot&&(s.width=a.leftRoot),a.upRoot&&(s.voffset=a.upRoot,s.height=a.upRoot),o=t.create(\"node\",\"mpadded\",[o],s)}return r.inRoot=n,o}i.Open=function(t,e){t.Push(t.itemFactory.create(\"open\"))},i.Close=function(t,e){t.Push(t.itemFactory.create(\"close\"))},i.Tilde=function(t,e){t.Push(t.create(\"token\",\"mtext\",{},o.entities.nbsp))},i.Space=function(t,e){},i.Superscript=function(t,e){var r,n,i;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var o=t.stack.Top();o.isKind(\"prime\")?(i=(r=f(o.Peek(2),2))[0],n=r[1],t.stack.Pop()):i=(i=t.stack.Prev())||t.create(\"token\",\"mi\",{},\"\");var a=h.default.getProperty(i,\"movesupsub\"),s=h.default.isType(i,\"msubsup\")?i.sup:i.over;if(h.default.isType(i,\"msubsup\")&&!h.default.isType(i,\"msup\")&&h.default.getChildAt(i,i.sup)||h.default.isType(i,\"munderover\")&&!h.default.isType(i,\"mover\")&&h.default.getChildAt(i,i.over)&&!h.default.getProperty(i,\"subsupOK\"))throw new d.default(\"DoubleExponent\",\"Double exponent: use braces to clarify\");h.default.isType(i,\"msubsup\")&&!h.default.isType(i,\"msup\")||(s=a?(h.default.isType(i,\"munderover\")&&!h.default.isType(i,\"mover\")&&!h.default.getChildAt(i,i.over)||(h.default.getProperty(i,\"movablelimits\")&&h.default.isType(i,\"mi\")&&(i=y.default.mi2mo(t,i)),i=t.create(\"node\",\"munderover\",[i],{movesupsub:!0})),i.over):(i=t.create(\"node\",\"msubsup\",[i])).sup),t.Push(t.itemFactory.create(\"subsup\",i).setProperties({position:s,primes:n,movesupsub:a}))},i.Subscript=function(t,e){var r,n,i;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var o=t.stack.Top();o.isKind(\"prime\")?(i=(r=f(o.Peek(2),2))[0],n=r[1],t.stack.Pop()):i=(i=t.stack.Prev())||t.create(\"token\",\"mi\",{},\"\");var a=h.default.getProperty(i,\"movesupsub\"),s=h.default.isType(i,\"msubsup\")?i.sub:i.under;if(h.default.isType(i,\"msubsup\")&&!h.default.isType(i,\"msup\")&&h.default.getChildAt(i,i.sub)||h.default.isType(i,\"munderover\")&&!h.default.isType(i,\"mover\")&&h.default.getChildAt(i,i.under)&&!h.default.getProperty(i,\"subsupOK\"))throw new d.default(\"DoubleSubscripts\",\"Double subscripts: use braces to clarify\");h.default.isType(i,\"msubsup\")&&!h.default.isType(i,\"msup\")||(s=a?(h.default.isType(i,\"munderover\")&&!h.default.isType(i,\"mover\")&&!h.default.getChildAt(i,i.under)||(h.default.getProperty(i,\"movablelimits\")&&h.default.isType(i,\"mi\")&&(i=y.default.mi2mo(t,i)),i=t.create(\"node\",\"munderover\",[i],{movesupsub:!0})),i.under):(i=t.create(\"node\",\"msubsup\",[i])).sub),t.Push(t.itemFactory.create(\"subsup\",i).setProperties({position:s,primes:n,movesupsub:a}))},i.Prime=function(t,e){var r=t.stack.Prev();if(r=r||t.create(\"node\",\"mi\"),h.default.isType(r,\"msubsup\")&&!h.default.isType(r,\"msup\")&&h.default.getChildAt(r,r.sup))throw new d.default(\"DoubleExponentPrime\",\"Prime causes double exponent: use braces to clarify\");var n=\"\";for(t.i--;n+=o.entities.prime,t.i++,\"'\"===(e=t.GetNext())||e===o.entities.rquote;);n=[\"\",\"\\u2032\",\"\\u2033\",\"\\u2034\",\"\\u2057\"][n.length]||n;var i=t.create(\"token\",\"mo\",{},n);t.Push(t.itemFactory.create(\"prime\",r,i))},i.Comment=function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++},i.Hash=function(t,e){throw new d.default(\"CantUseHash1\",\"You can't use 'macro parameter character #' in math mode\")},i.SetFont=function(t,e,r){t.stack.env.font=r},i.SetStyle=function(t,e,r,n,i){t.stack.env.style=r,t.stack.env.level=i,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{displaystyle:n,scriptlevel:i}))},i.SetSize=function(t,e,r){t.stack.env.size=r,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{mathsize:r+\"em\"}))},i.Spacer=function(t,e,r){var n=t.create(\"node\",\"mspace\",[],{width:r}),i=t.create(\"node\",\"mstyle\",[n],{scriptlevel:0});t.Push(i)},i.LeftRight=function(t,e){var r=e.substr(1);t.Push(t.itemFactory.create(r).setProperty(\"delim\",t.GetDelimiter(e)))},i.Middle=function(t,e){var r=t.GetDelimiter(e),n=t.create(\"node\",\"TeXAtom\",[],{texClass:v.TEXCLASS.CLOSE});if(t.Push(n),!t.stack.Top().isKind(\"left\"))throw new d.default(\"MisplacedMiddle\",\"%1 must be within \\\\left and \\\\right\",t.currentCS);n=t.create(\"token\",\"mo\",{stretchy:!0},r),t.Push(n),n=t.create(\"node\",\"TeXAtom\",[],{texClass:v.TEXCLASS.OPEN}),t.Push(n)},i.NamedFn=function(t,e,r){r=r||e.substr(1);var n=t.create(\"token\",\"mi\",{texClass:v.TEXCLASS.OP},r);t.Push(t.itemFactory.create(\"fn\",n))},i.NamedOp=function(t,e,r){r=(r=r||e.substr(1)).replace(/&thinsp;/,\"\\u2006\");var n=t.create(\"token\",\"mo\",{movablelimits:!0,movesupsub:!0,form:m.TexConstant.Form.PREFIX,texClass:v.TEXCLASS.OP},r);t.Push(n)},i.Limits=function(t,e,r){var n=t.stack.Prev(!0);if(!n||h.default.getTexClass(h.default.getCoreMO(n))!==v.TEXCLASS.OP&&null==h.default.getProperty(n,\"movesupsub\"))throw new d.default(\"MisplacedLimits\",\"%1 is allowed only on operators\",t.currentCS);var i,o=t.stack.Top();h.default.isType(n,\"munderover\")&&!r?(i=t.create(\"node\",\"msubsup\"),h.default.copyChildren(n,i),n=o.Last=i):h.default.isType(n,\"msubsup\")&&r&&(i=t.create(\"node\",\"munderover\"),h.default.copyChildren(n,i),n=o.Last=i),h.default.setProperty(n,\"movesupsub\",!!r),h.default.setProperties(h.default.getCoreMO(n),{movablelimits:!1}),(h.default.getAttribute(n,\"movablelimits\")||h.default.getProperty(n,\"movablelimits\"))&&h.default.setProperties(n,{movablelimits:!1})},i.Over=function(t,e,r,n){var i=t.itemFactory.create(\"over\").setProperty(\"name\",t.currentCS);r||n?(i.setProperty(\"open\",r),i.setProperty(\"close\",n)):e.match(/withdelims$/)&&(i.setProperty(\"open\",t.GetDelimiter(e)),i.setProperty(\"close\",t.GetDelimiter(e))),e.match(/^\\\\above/)?i.setProperty(\"thickness\",t.GetDimen(e)):(e.match(/^\\\\atop/)||r||n)&&i.setProperty(\"thickness\",0),t.Push(i)},i.Frac=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),i=t.create(\"node\",\"mfrac\",[r,n]);t.Push(i)},i.Sqrt=function(t,e){var r=t.GetBrackets(e),n=t.GetArgument(e);\"\\\\frac\"===n&&(n+=\"{\"+t.GetArgument(n)+\"}{\"+t.GetArgument(n)+\"}\");var i=new l.default(n,t.stack.env,t.configuration).mml();i=r?t.create(\"node\",\"mroot\",[i,a(t,r)]):t.create(\"node\",\"msqrt\",[i]),t.Push(i)},i.Root=function(t,e){var r=t.GetUpTo(e,\"\\\\of\"),n=t.ParseArg(e),i=t.create(\"node\",\"mroot\",[n,a(t,r)]);t.Push(i)},i.MoveRoot=function(t,e,r){if(!t.stack.env.inRoot)throw new d.default(\"MisplacedMoveRoot\",\"%1 can appear only within a root\",t.currentCS);if(t.stack.global[r])throw new d.default(\"MultipleMoveRoot\",\"Multiple use of %1\",t.currentCS);var n=t.GetArgument(e);if(!n.match(/-?[0-9]+/))throw new d.default(\"IntegerArg\",\"The argument to %1 must be an integer\",t.currentCS);\"-\"!==(n=parseInt(n,10)/15+\"em\").substr(0,1)&&(n=\"+\"+n),t.stack.global[r]=n},i.Accent=function(t,e,r,n){var i=t.ParseArg(e),o=y.default.getFontDef(t);o.accent=!0;var a=h.default.createEntity(r),s=t.create(\"token\",\"mo\",o,a);h.default.setAttribute(s,\"stretchy\",!!n);var c=h.default.isEmbellished(i)?h.default.getCoreMO(i):i;h.default.isType(c,\"mo\")&&h.default.setProperties(c,{movablelimits:!1});var l=t.create(\"node\",\"munderover\");h.default.setChild(l,0,i),h.default.setChild(l,1,null),h.default.setChild(l,2,s);var u=t.create(\"node\",\"TeXAtom\",[l]);t.Push(u)},i.UnderOver=function(t,e,r,n,i){var o,a=t.ParseArg(e),s=h.default.getForm(a);(s&&s[3]&&s[3].movablelimits||h.default.getProperty(a,\"movablelimits\"))&&h.default.setProperties(a,{movablelimits:!1}),h.default.isType(a,\"munderover\")&&h.default.isEmbellished(a)&&(h.default.setProperties(h.default.getCoreMO(a),{lspace:0,rspace:0}),o=t.create(\"node\",\"mo\",[],{rspace:0}),a=t.create(\"node\",\"mrow\",[o,a]));var c=t.create(\"node\",\"munderover\",[a]),l=h.default.createEntity(r);o=t.create(\"token\",\"mo\",{stretchy:!0,accent:!i},l),h.default.setChild(c,\"o\"===e.charAt(1)?c.over:c.under,o);var u=c;n&&(u=t.create(\"node\",\"TeXAtom\",[c],{texClass:v.TEXCLASS.OP,movesupsub:!0})),h.default.setProperty(u,\"subsupOK\",!0),t.Push(u)},i.Overset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(h.default.getAttribute(n,\"movablelimits\")||h.default.getProperty(n,\"movablelimits\"))&&h.default.setProperties(n,{movablelimits:!1});var i=t.create(\"node\",\"mover\",[n,r]);t.Push(i)},i.Underset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(h.default.getAttribute(n,\"movablelimits\")||h.default.getProperty(n,\"movablelimits\"))&&h.default.setProperties(n,{movablelimits:!1});var i=t.create(\"node\",\"munder\",[n,r]);t.Push(i)},i.TeXAtom=function(t,e,r){var n,i,o,a={texClass:r};if(r===v.TEXCLASS.OP){a.movesupsub=a.movablelimits=!0;var s=t.GetArgument(e),c=s.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);i=c?(a.mathvariant=m.TexConstant.Variant.NORMAL,t.create(\"token\",\"mi\",a,c[1])):(o=new l.default(s,t.stack.env,t.configuration).mml(),t.create(\"node\",\"TeXAtom\",[o],a)),n=t.itemFactory.create(\"fn\",i)}else o=t.ParseArg(e),n=t.create(\"node\",\"TeXAtom\",[o],a);t.Push(n)},i.MmlToken=function(t,e){var r,n=t.GetArgument(e),i=t.GetBrackets(e,\"\").replace(/^\\s+/,\"\"),o=t.GetArgument(e),a={};try{r=t.create(\"node\",n)}catch(t){r=null}if(!r||!r.isToken)throw new d.default(\"NotMathMLToken\",\"%1 is not a token element\",n);for(;\"\"!==i;){var s=i.match(/^([a-z]+)\\s*=\\s*('[^']*'|\"[^\"]*\"|[^ ,]*)\\s*,?\\s*/i);if(!s)throw new d.default(\"InvalidMathMLAttr\",\"Invalid MathML attribute: %1\",i);if(!r.attributes.hasDefault(s[1])&&!u[s[1]])throw new d.default(\"UnknownAttrForElement\",\"%1 is not a recognized attribute for %2\",s[1],n);var c=y.default.MmlFilterAttribute(t,s[1],s[2].replace(/^(['\"])(.*)\\1$/,\"$2\"));c&&(\"true\"===c.toLowerCase()?c=!0:\"false\"===c.toLowerCase()&&(c=!1),a[s[1]]=c),i=i.substr(s[0].length)}var l=t.create(\"text\",o);r.appendChild(l),h.default.setProperties(r,a),t.Push(r)},i.Strut=function(t,e){var r=t.create(\"node\",\"mrow\"),n=t.create(\"node\",\"mpadded\",[r],{height:\"8.6pt\",depth:\"3pt\",width:0});t.Push(n)},i.Phantom=function(t,e,r,n){var i=t.create(\"node\",\"mphantom\",[t.ParseArg(e)]);(r||n)&&(i=t.create(\"node\",\"mpadded\",[i]),n&&(h.default.setAttribute(i,\"height\",0),h.default.setAttribute(i,\"depth\",0)),r&&h.default.setAttribute(i,\"width\",0));var o=t.create(\"node\",\"TeXAtom\",[i]);t.Push(o)},i.Smash=function(t,e){var r=y.default.trimSpaces(t.GetBrackets(e,\"\")),n=t.create(\"node\",\"mpadded\",[t.ParseArg(e)]);switch(r){case\"b\":h.default.setAttribute(n,\"depth\",0);break;case\"t\":h.default.setAttribute(n,\"height\",0);break;default:h.default.setAttribute(n,\"height\",0),h.default.setAttribute(n,\"depth\",0)}var i=t.create(\"node\",\"TeXAtom\",[n]);t.Push(i)},i.Lap=function(t,e){var r=t.create(\"node\",\"mpadded\",[t.ParseArg(e)],{width:0});\"\\\\llap\"===e&&h.default.setAttribute(r,\"lspace\",\"-1width\");var n=t.create(\"node\",\"TeXAtom\",[r]);t.Push(n)},i.RaiseLower=function(t,e){var r=t.GetDimen(e),n=t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"vertical\"});\"-\"===r.charAt(0)&&(r=r.slice(1),e=\"raise\"===e.substr(1)?\"\\\\lower\":\"\\\\raise\"),\"\\\\lower\"===e?(n.setProperty(\"dh\",\"-\"+r),n.setProperty(\"dd\",\"+\"+r)):(n.setProperty(\"dh\",\"+\"+r),n.setProperty(\"dd\",\"-\"+r)),t.Push(n)},i.MoveLeftRight=function(t,e){var r=t.GetDimen(e),n=\"-\"===r.charAt(0)?r.slice(1):\"-\"+r;if(\"\\\\moveleft\"===e){var i=r;r=n,n=i}t.Push(t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"horizontal\",left:t.create(\"node\",\"mspace\",[],{width:r}),right:t.create(\"node\",\"mspace\",[],{width:n})}))},i.Hskip=function(t,e){var r=t.create(\"node\",\"mspace\",[],{width:t.GetDimen(e)});t.Push(r)},i.Rule=function(t,e,r){var n={width:t.GetDimen(e),height:t.GetDimen(e),depth:t.GetDimen(e)};\"blank\"!==r&&(n.mathbackground=t.stack.env.color||\"black\");var i=t.create(\"node\",\"mspace\",[],n);t.Push(i)},i.rule=function(t,e){var r=t.GetBrackets(e),n=t.GetDimen(e),i=t.GetDimen(e),o=t.create(\"node\",\"mspace\",[],{width:n,height:i,mathbackground:t.stack.env.color||\"black\"});r&&(o=t.create(\"node\",\"mpadded\",[o],{voffset:r}),r.match(/^\\-/)?(h.default.setAttribute(o,\"height\",r),h.default.setAttribute(o,\"depth\",\"+\"+r.substr(1))):h.default.setAttribute(o,\"height\",\"+\"+r)),t.Push(o)},i.MakeBig=function(t,e,r,n){var i=String(n*=1.2/.85).replace(/(\\.\\d\\d\\d).+/,\"$1\")+\"em\",o=t.GetDelimiter(e,!0),a=t.create(\"token\",\"mo\",{minsize:i,maxsize:i,fence:!0,stretchy:!0,symmetric:!0},o),s=t.create(\"node\",\"TeXAtom\",[a],{texClass:r});t.Push(s)},i.BuildRel=function(t,e){var r=t.ParseUpTo(e,\"\\\\over\"),n=t.ParseArg(e),i=t.create(\"node\",\"munderover\");h.default.setChild(i,0,n),h.default.setChild(i,1,null),h.default.setChild(i,2,r);var o=t.create(\"node\",\"TeXAtom\",[i],{texClass:v.TEXCLASS.REL});t.Push(o)},i.HBox=function(t,e,r){t.PushAll(y.default.internalMath(t,t.GetArgument(e),r))},i.FBox=function(t,e){var r=y.default.internalMath(t,t.GetArgument(e)),n=t.create(\"node\",\"menclose\",r,{notation:\"box\"});t.Push(n)},i.Not=function(t,e){t.Push(t.itemFactory.create(\"not\"))},i.Dots=function(t,e){var r=h.default.createEntity(\"2026\"),n=h.default.createEntity(\"22EF\"),i=t.create(\"token\",\"mo\",{stretchy:!1},r),o=t.create(\"token\",\"mo\",{stretchy:!1},n);t.Push(t.itemFactory.create(\"dots\").setProperties({ldots:i,cdots:o}))},i.Matrix=function(t,e,r,n,i,o,a,s,c,l){var u=t.GetNext();if(\"\"===u)throw new d.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);\"{\"===u?t.i++:(t.string=u+\"}\"+t.string.slice(t.i+1),t.i=0);var h=t.itemFactory.create(\"array\").setProperty(\"requireClose\",!0);h.arraydef={rowspacing:a||\"4pt\",columnspacing:o||\"1em\"},c&&h.setProperty(\"isCases\",!0),l&&(h.setProperty(\"isNumbered\",!0),h.arraydef.side=l),(r||n)&&(h.setProperty(\"open\",r),h.setProperty(\"close\",n)),\"D\"===s&&(h.arraydef.displaystyle=!0),null!=i&&(h.arraydef.columnalign=i),t.Push(h)},i.Entry=function(t,e){if(t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e})),t.stack.Top().getProperty(\"isCases\")){for(var r=t.string,n=0,i=-1,o=t.i,a=r.length;o<a;){var s=r.charAt(o);if(\"{\"===s)n++,o++;else if(\"}\"===s)0===n?a=0:(0===--n&&i<0&&(i=o-t.i),o++);else{if(\"&\"===s&&0===n)throw new d.default(\"ExtraAlignTab\",\"Extra alignment tab in \\\\cases text\");\"\\\\\"===s?r.substr(o).match(/^((\\\\cr)[^a-zA-Z]|\\\\\\\\)/)?a=0:o+=2:o++}}var c=r.substr(t.i,o-t.i);if(!c.match(/^\\s*\\\\text[^a-zA-Z]/)||i!==c.replace(/\\s+$/,\"\").length-1){var l=y.default.internalMath(t,c,0);t.PushAll(l),t.i=o}}},i.Cr=function(t,e){t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e}))},i.CrLaTeX=function(t,e){var r;if(\"[\"===t.string.charAt(t.i)){var n=t.GetBrackets(e,\"\"),i=f(y.default.matchDimen(n),3),o=i[0],a=i[1];i[2];if(n&&!o)throw new d.default(\"BracketMustBeDimension\",\"Bracket argument to %1 must be a dimension\",t.currentCS);r=o+a}t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e,linebreak:!0}));var s,c=t.stack.Top();if(c instanceof p.ArrayItem){if(r&&c.arraydef.rowspacing){var l=c.arraydef.rowspacing.split(/ /);if(!c.getProperty(\"rowspacing\")){var u=y.default.dimen2em(l[0]);c.setProperty(\"rowspacing\",u)}for(var h=c.getProperty(\"rowspacing\");l.length<c.table.length;)l.push(y.default.Em(h));l[c.table.length-1]=y.default.Em(Math.max(0,h+y.default.dimen2em(r))),c.arraydef.rowspacing=l.join(\" \")}}else r&&(s=t.create(\"node\",\"mspace\",[],{depth:r}),t.Push(s)),s=t.create(\"node\",\"mspace\",[],{linebreak:m.TexConstant.LineBreak.NEWLINE}),t.Push(s)},i.HLine=function(t,e,r){null==r&&(r=\"solid\");var n=t.stack.Top();if(!(n instanceof p.ArrayItem)||n.Size())throw new d.default(\"Misplaced\",\"Misplaced %1\",t.currentCS);if(n.table.length){for(var i=n.arraydef.rowlines?n.arraydef.rowlines.split(/ /):[];i.length<n.table.length;)i.push(\"none\");i[n.table.length-1]=r,n.arraydef.rowlines=i.join(\" \")}else n.frame.push(\"top\")},i.HFill=function(t,e){var r=t.stack.Top();if(!(r instanceof p.ArrayItem))throw new d.default(\"UnsupportedHFill\",\"Unsupported use of %1\",t.currentCS);r.hfill.push(r.Size())},i.BeginEnd=function(t,e){var r=t.GetArgument(e);if(r.match(/\\\\/i))throw new d.default(\"InvalidEnv\",\"Invalid environment name '%1'\",r);var n=t.configuration.handlers.get(\"environment\").lookup(r);if(n&&\"\\\\end\"===e){if(!n.args[0]){var i=t.itemFactory.create(\"end\").setProperty(\"name\",r);return void t.Push(i)}t.stack.env.closing=r}if(++t.macroCount>t.configuration.options.maxMacros)throw new d.default(\"MaxMacroSub2\",\"MathJax maximum substitution count exceeded; is there a recursive latex environment?\");t.parse(\"environment\",[t,r])},i.Array=function(t,e,r,n,i,o,a,s,c){var l=(\"c\"+(i=i||t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"))).replace(/[^clr|:]/g,\"\").replace(/[^|:]([|:])+/g,\"$1\");i=(i=i.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var u=t.itemFactory.create(\"array\");return u.arraydef={columnalign:i,columnspacing:o||\"1em\",rowspacing:a||\"4pt\"},l.match(/[|:]/)&&(l.charAt(0).match(/[|:]/)&&(u.frame.push(\"left\"),u.dashed=\":\"===l.charAt(0)),l.charAt(l.length-1).match(/[|:]/)&&u.frame.push(\"right\"),l=l.substr(1,l.length-2),u.arraydef.columnlines=l.split(\"\").join(\" \").replace(/[^|: ]/g,\"none\").replace(/\\|/g,\"solid\").replace(/:/g,\"dashed\")),r&&u.setProperty(\"open\",t.convertDelimiter(r)),n&&u.setProperty(\"close\",t.convertDelimiter(n)),\"D\"===s?u.arraydef.displaystyle=!0:s&&(u.arraydef.displaystyle=!1),\"S\"===s&&(u.arraydef.scriptlevel=1),c&&(u.arraydef.useHeight=!1),t.Push(e),u},i.AlignedArray=function(t,e){var r=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),n=i.Array(t,e);return y.default.setArrayAlign(n,r)},i.Equation=function(t,e,r){return t.Push(e),y.default.checkEqnEnv(t),t.itemFactory.create(\"equation\",r).setProperty(\"name\",e.getName())},i.EqnArray=function(t,e,r,n,i,o){t.Push(e),n&&y.default.checkEqnEnv(t),i=(i=i.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var a=t.itemFactory.create(\"eqnarray\",e.getName(),r,n,t.stack.global);return a.arraydef={displaystyle:!0,columnalign:i,columnspacing:o||\"1em\",rowspacing:\"3pt\",side:t.options.tagSide,minlabelspacing:t.options.tagIndent},a},i.HandleNoTag=function(t,e){t.tags.notag()},i.HandleLabel=function(t,e){t.stack.global;var r=t.GetArgument(e);if(\"\"!==r&&!t.tags.refUpdate){if(t.tags.label)throw new d.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);if(t.tags.label=r,(t.tags.allLabels[r]||t.tags.labels[r])&&!t.options.ignoreDuplicateLabels)throw new d.default(\"MultipleLabel\",\"Label '%1' multiply defined\",r);t.tags.labels[r]=new s.Label}},i.HandleRef=function(t,e,r){var n=t.GetArgument(e),i=t.tags.allLabels[n]||t.tags.labels[n];i||(t.tags.refUpdate||(t.tags.redo=!0),i=new s.Label);var o=i.tag;r&&(o=t.tags.formatTag(o));var a=t.create(\"node\",\"mrow\",y.default.internalMath(t,o),{href:t.tags.formatUrl(i.id,t.options.baseURL),class:\"MathJax_ref\"});t.Push(a)},i.Macro=function(t,e,r,n,i){if(n){var o=[];if(null!=i){var a=t.GetBrackets(e);o.push(null==a?i:a)}for(var s=o.length;s<n;s++)o.push(t.GetArgument(e));r=y.default.substituteArgs(t,o,r)}if(t.string=y.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new d.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")},i.MathChoice=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),i=t.ParseArg(e),o=t.ParseArg(e);t.Push(t.create(\"node\",\"mathchoice\",[r,n,i,o]))},e.default=i},function(t,p,e){\"use strict\";var d=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(p,\"__esModule\",{value:!0}),p.ARROWX=4,p.ARROWDX=1,p.ARROWY=2,p.THICKNESS=.067,p.PADDING=.2,p.SOLID=p.THICKNESS+\"em solid\",p.sideIndex={top:0,right:1,bottom:2,left:3},p.sideNames=Object.keys(p.sideIndex),p.fullBBox=function(t){return new Array(4).fill(t.thickness+t.padding)},p.fullPadding=function(t){return new Array(4).fill(t.padding)},p.fullBorder=function(t){return new Array(4).fill(t.thickness)},p.arrowHead=function(t){return Math.max(t.padding,t.thickness*(t.arrowhead.x+t.arrowhead.dx+1))},p.arrowBBoxHD=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox(),n=r.h,i=r.d;e[0]=e[2]=Math.max(0,t.thickness*t.arrowhead.y-(n+i)/2)}return e},p.arrowBBoxW=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox().w;e[1]=e[3]=Math.max(0,t.thickness*t.arrowhead.y-r/2)}return e},p.arrowDef={up:[-Math.PI/2,!1,!0,\"verticalstrike\"],down:[Math.PI/2,!1,!0,\"verticakstrike\"],right:[0,!1,!1,\"horizontalstrike\"],left:[Math.PI,!1,!1,\"horizontalstrike\"],updown:[Math.PI/2,!0,!0,\"verticalstrike uparrow downarrow\"],leftright:[0,!0,!1,\"horizontalstrike leftarrow rightarrow\"]},p.diagonalArrowDef={updiagonal:[-1,0,!1,\"updiagonalstrike northeastarrow\"],northeast:[-1,0,!1,\"updiagonalstrike updiagonalarrow\"],southeast:[1,0,!1,\"downdiagonalstrike\"],northwest:[1,Math.PI,!1,\"downdiagonalstrike\"],southwest:[-1,Math.PI,!1,\"updiagonalstrike\"],northeastsouthwest:[-1,0,!0,\"updiagonalstrike northeastarrow updiagonalarrow southwestarrow\"],northwestsoutheast:[1,0,!0,\"downdiagonalstrike northwestarrow southeastarrow\"]},p.arrowBBox={up:function(t){return p.arrowBBoxW(t,[p.arrowHead(t),0,t.padding,0])},down:function(t){return p.arrowBBoxW(t,[t.padding,0,p.arrowHead(t),0])},right:function(t){return p.arrowBBoxHD(t,[0,p.arrowHead(t),0,t.padding])},left:function(t){return p.arrowBBoxHD(t,[0,t.padding,0,p.arrowHead(t)])},updown:function(t){return p.arrowBBoxW(t,[p.arrowHead(t),0,p.arrowHead(t),0])},leftright:function(t){return p.arrowBBoxHD(t,[0,p.arrowHead(t),0,p.arrowHead(t)])}},p.CommonBorder=function(e){return function(t){var r=p.sideIndex[t];return[t,{renderer:e,bbox:function(t){var e=[0,0,0,0];return e[r]=t.thickness+t.padding,e},border:function(t){var e=[0,0,0,0];return e[r]=t.thickness,e}}]}},p.CommonBorder2=function(o){return function(t,e,r){var n=p.sideIndex[e],i=p.sideIndex[r];return[t,{renderer:o,bbox:function(t){var e=t.thickness+t.padding,r=[0,0,0,0];return r[n]=r[i]=e,r},border:function(t){var e=[0,0,0,0];return e[n]=e[i]=t.thickness,e},remove:e+\" \"+r}]}},p.CommonDiagonalStrike=function(r){return function(t){var e=\"mjx-\"+t.charAt(0)+\"strike\";return[t+\"diagonalstrike\",{renderer:r(e),bbox:p.fullBBox}]}},p.CommonDiagonalArrow=function(l){return function(t){var e=d(p.diagonalArrowDef[t],4),a=e[0],s=e[1],c=e[2];return[t+\"arrow\",{renderer:function(t,e){var r=t.arrowData(),n=r.a,i=r.W,o=t.arrow(i,a*(n-s),c);l(t,o)},bbox:function(t){var e=t.arrowData(),r=e.a,n=e.x,i=e.y,o=d([t.arrowhead.x,t.arrowhead.y,t.arrowhead.dx],3),a=o[0],s=o[1],c=o[2],l=d(t.getArgMod(a+c,s),2),u=l[0],h=l[1],f=i+(r<u?t.thickness*h*Math.sin(u-r):0),p=n+(u>Math.PI/2-r?t.thickness*h*Math.sin(u+r-Math.PI/2):0);return[f,p,f,p]},remove:e[3]}]}},p.CommonArrow=function(f){return function(t){var e=d(p.arrowDef[t],4),l=e[0],u=e[1],h=e[2],r=e[3];return[t+\"arrow\",{renderer:function(t,e){var r=t.getBBox(),n=r.w,i=r.h,o=r.d,a=d(h?[i+o,n]:[n,i+o],2),s=a[0],c=(a[1],t.arrow(s,l,u));f(t,c)},bbox:p.arrowBBox[t],remove:r}]}}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),h=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(157),s=r(38),c=r(38),l=r(38),u=r(31),f=(o=s.CommonMsubMixin(a.CHTMLscriptbase),i(p,o),p.kind=u.MmlMsub.prototype.kind,p.useIC=!1,p);function p(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmsub=f;var d,m=(d=c.CommonMsupMixin(a.CHTMLscriptbase),i(y,d),y.kind=u.MmlMsup.prototype.kind,y.useIC=!0,y);function y(){return null!==d&&d.apply(this,arguments)||this}e.CHTMLmsup=m;var v,b=(v=l.CommonMsubsupMixin(a.CHTMLscriptbase),i(g,v),g.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=h([this.baseChild,this.supChild,this.subChild],3),n=r[0],i=r[1],o=r[2],a=h(this.getUVQ(n.getBBox(),o.getBBox(),i.getBBox()),3),s=(a[0],a[1]),c=a[2],l={\"vertical-align\":this.em(s)};n.toCHTML(e);var u=this.adaptor.append(e,this.html(\"mjx-script\",{style:l}));i.toCHTML(u),this.adaptor.append(u,this.html(\"mjx-spacer\",{style:{\"margin-top\":this.em(c)}})),o.toCHTML(u),this.baseCore.bbox.ic&&this.adaptor.setStyle(i.chtml,\"marginLeft\",this.em(this.coreIC()/i.bbox.rscale))},g.kind=u.MmlMsubsup.prototype.kind,g.styles={\"mjx-script\":{display:\"inline-block\",\"padding-right\":\".05em\"},\"mjx-script > *\":{display:\"block\"}},g.useIC=!1,g);function g(){return null!==v&&v.apply(this,arguments)||this}e.CHTMLmsubsup=b},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),f=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsubMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!0,configurable:!0}),e.prototype.getOffset=function(t,e){return[0,-this.getV(t,e)]},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r},e.CommonMsupMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!0,configurable:!0}),e.prototype.getOffset=function(t,e){return[this.baseCore.bbox.ic?.2*this.baseCore.bbox.ic+.05:0,this.getU(t,e)]},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r},e.CommonMsubsupMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!0,configurable:!0}),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.baseChild.getBBox(),n=this.subChild.getBBox(),i=this.supChild.getBBox();t.empty(),t.append(r);var o=t.w,a=f(this.getUVQ(r,n,i),3),s=a[0],c=a[1];a[2],t.combine(n,o,c),t.combine(i,o+this.coreIC(),s),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getUVQ=function(t,e,r){if(this.UVQ)return this.UVQ;var n=this.font.params,i=3*n.rule_thickness,o=this.length2em(this.node.attributes.get(\"subscriptshift\"),n.sub2),a=this.isCharBase()?0:t.d+n.sub_drop*e.rscale,s=f([this.getU(t,r),Math.max(a,o)],2),c=s[0],l=s[1],u=c-r.d*r.rscale-(e.h*e.rscale-l);if(u<i){l+=i-u;var h=.8*n.x_height-(c-r.d*r.rscale);0<h&&(c+=h,l-=h)}return c=Math.max(this.length2em(this.node.attributes.get(\"superscriptshift\"),c),c),l=Math.max(this.length2em(this.node.attributes.get(\"subscriptshift\"),l),l),u=c-r.d*r.rscale-(e.h*e.rscale-l),this.UVQ=[c,-l,u],this.UVQ},e;function e(){var t=null!==r&&r.apply(this,arguments)||this;return t.UVQ=null,t}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),m=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(m(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMunderMixin=function(t){return i(e,u=t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.under]},enumerable:!0,configurable:!0}),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.hasMovableLimits())u.prototype.computeBBox.call(this,t,e);else{t.empty();var r=this.baseChild.getBBox(),n=this.script.getBBox(),i=m(this.getUnderKV(r,n),2),o=(i[0],i[1]),a=this.getDelta(!0),s=m(this.getDeltaW([r,n],[0,-a]),2),c=s[0],l=s[1];t.combine(r,c,0),t.combine(n,l,o),t.d+=this.font.params.big_op_spacing5,t.ic=-this.baseCore.bbox.ic,t.clean(),this.setChildPWidths(e)}},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=u.apply(this,o(t))||this;return r.stretchChildren(),r}var u},e.CommonMoverMixin=function(t){return i(e,l=t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.over]},enumerable:!0,configurable:!0}),e.prototype.computeBBox=function(t){if(this.hasMovableLimits())l.prototype.computeBBox.call(this,t);else{t.empty();var e=this.baseChild.getBBox(),r=this.script.getBBox(),n=m(this.getOverKU(e,r),2),i=(n[0],n[1]),o=this.getDelta(),a=m(this.getDeltaW([e,r],[0,o]),2),s=a[0],c=a[1];t.combine(e,s,0),t.combine(r,c,i),t.h+=this.font.params.big_op_spacing5,t.ic=-this.baseCore.bbox.ic,t.clean()}},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=l.apply(this,o(t))||this;return r.stretchChildren(),r}var l},e.CommonMunderoverMixin=function(t){return i(e,d=t),Object.defineProperty(e.prototype,\"underChild\",{get:function(){return this.childNodes[this.node.under]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"overChild\",{get:function(){return this.childNodes[this.node.over]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.underChild},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.overChild},enumerable:!0,configurable:!0}),e.prototype.computeBBox=function(t){if(this.hasMovableLimits())d.prototype.computeBBox.call(this,t);else{t.empty();var e=this.overChild.getBBox(),r=this.baseChild.getBBox(),n=this.underChild.getBBox(),i=m(this.getOverKU(r,e),2),o=(i[0],i[1]),a=m(this.getUnderKV(r,n),2),s=(a[0],a[1]),c=this.getDelta(),l=m(this.getDeltaW([r,n,e],[0,-c,c]),3),u=l[0],h=l[1],f=l[2];t.combine(r,u,0),t.combine(e,f,o),t.combine(n,h,s);var p=this.font.params.big_op_spacing5;t.h+=p,t.d+=p,t.ic=-this.baseCore.bbox.ic,t.clean()}},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=d.apply(this,o(t))||this;return r.stretchChildren(),r}var d}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(3),i=(o.OPTIONS={},o);function o(t){var e=this.constructor;this.options=n.userOptions(n.defaultOptions({},e.OPTIONS),t)}e.AbstractFindMath=i},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},p=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,d=r(3),a=r(29),s=r(42),c=r(43),m=r(13),l=r(44),u=r(93),f=r(24),y=(o=f.PrioritizedList,i(v,o),v.create=function(t){var e,r,n=new this;try{for(var i=h(Object.keys(t)),o=i.next();!o.done;o=i.next()){var a=o.value,s=p(this.action(a,t[a]),2),c=s[0],l=s[1];l&&n.add(c,l)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return n},v.action=function(t,e){var r,n,i,o,a,s,c=!0,l=e[0];if(1===e.length||\"boolean\"==typeof e[1])2===e.length&&(c=e[1]),a=(r=p(this.methodActions(t),2))[0],s=r[1];else if(\"string\"==typeof e[1])if(\"string\"==typeof e[2]){4===e.length&&(c=e[3]);var u=p(e.slice(1),2),h=u[0],f=u[1];a=(n=p(this.methodActions(h,f),2))[0],s=n[1]}else 3===e.length&&(c=e[2]),a=(i=p(this.methodActions(e[1]),2))[0],s=i[1];else 4===e.length&&(c=e[3]),a=(o=p(e.slice(1),2))[0],s=o[1];return[{id:t,renderDoc:a,renderMath:s,convert:c},l]},v.methodActions=function(e,r){return void 0===r&&(r=e),[function(t){return e&&t[e](),!1},function(t,e){return r&&t[r](e),!1}]},v.prototype.renderDoc=function(t,e){var r,n;void 0===e&&(e=m.STATE.UNPROCESSED);try{for(var i=h(this.items),o=i.next();!o.done;o=i.next()){var a=o.value;if(a.priority>=e&&a.item.renderDoc(t))return}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},v.prototype.renderMath=function(t,e,r){var n,i;void 0===r&&(r=m.STATE.UNPROCESSED);try{for(var o=h(this.items),a=o.next();!a.done;a=o.next()){var s=a.value;if(s.priority>=r&&s.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}},v.prototype.renderConvert=function(t,e,r){var n,i;void 0===r&&(r=m.STATE.LAST);try{for(var o=h(this.items),a=o.next();!a.done;a=o.next()){var s=a.value;if(s.priority>=r)return;if(s.item.convert&&s.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}},v.prototype.findID=function(t){var e,r;try{for(var n=h(this.items),i=n.next();!i.done;i=n.next()){var o=i.value;if(o.item.id===t)return o.item}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},v);function v(){return null!==o&&o.apply(this,arguments)||this}e.RenderList=y;var b,g=(b=a.AbstractInputJax,i(M,b),M.prototype.compile=function(t){return null},M);function M(){return null!==b&&b.apply(this,arguments)||this}var O,x=(O=s.AbstractOutputJax,i(S,O),S.prototype.typeset=function(t,e){return void 0===e&&(e=null),null},S.prototype.escaped=function(t,e){return null},S);function S(){return null!==O&&O.apply(this,arguments)||this}var E,C=(E=c.AbstractMathList,i(_,E),_);function _(){return null!==E&&E.apply(this,arguments)||this}var T,w=(T=m.AbstractMathItem,i(A,T),A);function A(){return null!==T&&T.apply(this,arguments)||this}var k=(Object.defineProperty(I.prototype,\"kind\",{get:function(){return this.constructor.KIND},enumerable:!0,configurable:!0}),I.prototype.addRenderAction=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=p(y.action(t,e),2),i=n[0],o=n[1];this.renderActions.add(i,o)},I.prototype.removeRenderAction=function(t){var e=this.renderActions.findID(t);e&&this.renderActions.remove(e)},I.prototype.render=function(){return this.renderActions.renderDoc(this),this},I.prototype.rerender=function(t){return void 0===t&&(t=m.STATE.RERENDER),this.state(t-1),this.render(),this},I.prototype.convert=function(t,e){void 0===e&&(e={});var r=d.userOptions({format:this.inputJax[0].name,display:!0,end:m.STATE.LAST,em:16,ex:8,containerWidth:null,lineWidth:1e6,scale:1},e),n=r.format,i=r.display,o=r.end,a=r.ex,s=r.em,c=r.containerWidth,l=r.lineWidth,u=r.scale;null===c&&(c=80*a);var h=this.inputJax.reduce(function(t,e){return e.name===n?e:t},null),f=new this.options.MathItem(t,h,i);return f.setMetrics(s,a,c,l,u),f.convert(this,o),f.typesetRoot||f.root},I.prototype.findMath=function(t){return void 0===t&&(t=null),this.processed.set(\"findMath\"),this},I.prototype.compile=function(){var e,t,r,n;if(!this.processed.isSet(\"compile\")){var i=[];try{for(var o=h(this.math),a=o.next();!a.done;a=o.next()){var s=a.value;this.compileMath(s),void 0!==s.inputData.recompile&&i.push(s)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}try{for(var c=h(i),l=c.next();!l.done;l=c.next()){var u=(s=l.value).inputData.recompile;s.state(u.state),s.inputData.recompile=u,this.compileMath(s)}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}this.processed.set(\"compile\")}return this},I.prototype.compileMath=function(e){try{e.compile(this)}catch(t){if(t.retry||t.restart)throw t;this.options.compileError(this,e,t),e.inputData.error=t}},I.prototype.compileError=function(t,e){t.root=this.mmlFactory.create(\"math\",null,[this.mmlFactory.create(\"merror\",{\"data-mjx-error\":e.message},[this.mmlFactory.create(\"mtext\",null,[this.mmlFactory.create(\"text\").setText(\"Math input error\")])])]),t.display&&t.root.attributes.set(\"display\",\"block\")},I.prototype.typeset=function(){var e,t;if(!this.processed.isSet(\"typeset\")){try{for(var r=h(this.math),n=r.next();!n.done;n=r.next()){var i=n.value;try{i.typeset(this)}catch(t){if(t.retry||t.restart)throw t;this.options.typesetError(this,i,t),i.outputData.error=t}}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.processed.set(\"typeset\")}return this},I.prototype.typesetError=function(t,e){t.typesetRoot=this.adaptor.node(\"span\",{\"data-mjx-error\":e.message},[this.adaptor.text(\"Math output error\")])},I.prototype.getMetrics=function(){return this.processed.isSet(\"getMetrics\")||(this.outputJax.getMetrics(this),this.processed.set(\"getMetrics\")),this},I.prototype.updateDocument=function(){var e,t;if(!this.processed.isSet(\"updateDocument\")){try{for(var r=h(this.math.reversed()),n=r.next();!n.done;n=r.next())n.value.updateDocument(this)}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.processed.set(\"updateDocument\")}return this},I.prototype.removeFromDocument=function(t){return void 0===t&&(t=!1),this},I.prototype.state=function(t,e){var r,n;void 0===e&&(e=!1);try{for(var i=h(this.math),o=i.next();!o.done;o=i.next())o.value.state(t,e)}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return t<m.STATE.INSERTED&&this.processed.clear(\"updateDocument\"),t<m.STATE.TYPESET&&(this.processed.clear(\"typeset\"),this.processed.clear(\"getMetrics\")),t<m.STATE.COMPILED&&this.processed.clear(\"compile\"),this},I.prototype.reset=function(){return this.processed.reset(),this},I.prototype.clear=function(){return this.reset(),this.math.clear(),this},I.prototype.concat=function(t){return this.math.merge(t),this},I.KIND=\"MathDocument\",I.OPTIONS={OutputJax:null,InputJax:null,MmlFactory:null,MathList:C,MathItem:w,compileError:function(t,e,r){t.compileError(e,r)},typesetError:function(t,e,r){t.typesetError(e,r)},renderActions:d.expandable({find:[m.STATE.FINDMATH,function(t){var e=t.options.elements;t.findMath(e?{elements:e}:{})},function(){},!1],compile:[m.STATE.COMPILED],metrics:[m.STATE.METRICS,\"getMetrics\",\"\",!1],typeset:[m.STATE.TYPESET],update:[m.STATE.INSERTED,\"updateDocument\",!1],reset:[m.STATE.RESET,\"reset\",\"\",!1]})},I.ProcessBits=u.BitFieldClass(\"findMath\",\"compile\",\"getMetrics\",\"typeset\",\"updateDocument\"),I);function I(t,e,r){var n=this,i=this.constructor;this.document=t,this.options=d.userOptions(d.defaultOptions({},i.OPTIONS),r),this.math=new(this.options.MathList||C),this.renderActions=y.create(this.options.renderActions),this.processed=new I.ProcessBits,this.outputJax=this.options.OutputJax||new x;var o=this.options.InputJax||[new g];Array.isArray(o)||(o=[o]),this.inputJax=o,this.adaptor=e,this.outputJax.setAdaptor(e),this.inputJax.map(function(t){return t.setAdaptor(e)}),this.mmlFactory=this.options.MmlFactory||new l.MmlFactory,this.inputJax.map(function(t){return t.setMmlFactory(n.mmlFactory)}),this.outputJax.initialize(),this.inputJax.map(function(t){return t.initialize()})}e.AbstractMathDocument=k},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(3),i=r(25),o=(Object.defineProperty(a.prototype,\"name\",{get:function(){return this.constructor.NAME},enumerable:!0,configurable:!0}),a.prototype.setAdaptor=function(t){this.adaptor=t},a.prototype.initialize=function(){},a.prototype.getMetrics=function(t){},a.prototype.styleSheet=function(t){return null},a.prototype.pageElements=function(t){return null},a.prototype.executeFilters=function(t,e,r,n){var i={math:e,document:r,data:n};return t.execute(i),i.data},a.NAME=\"generic\",a.OPTIONS={},a);function a(t){void 0===t&&(t={}),this.adaptor=null;var e=this.constructor;this.options=n.userOptions(n.defaultOptions({},e.OPTIONS),t),this.postFilters=new i.FunctionList}e.AbstractOutputJax=o},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(83),s=(o=a.LinkedList,i(c,o),c.prototype.isBefore=function(t,e){return t.start.i<e.start.i||t.start.i===e.start.i&&t.start.n<e.start.n},c);function c(){return null!==o&&o.apply(this,arguments)||this}e.AbstractMathList=s},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(84),s=r(85),c=(o=a.AbstractNodeFactory,i(l,o),Object.defineProperty(l.prototype,\"MML\",{get:function(){return this.node},enumerable:!0,configurable:!0}),l.defaultNodes=s.MML,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.MmlFactory=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o=(Object.defineProperty(a.prototype,\"factory\",{get:function(){return this._factory},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,\"kind\",{get:function(){return\"unknown\"},enumerable:!0,configurable:!0}),a.prototype.setProperty=function(t,e){this.properties[t]=e},a.prototype.getProperty=function(t){return this.properties[t]},a.prototype.getPropertyNames=function(){return Object.keys(this.properties)},a.prototype.getAllProperties=function(){return this.properties},a.prototype.removeProperty=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=c(r),o=i.next();!o.done;o=i.next()){var a=o.value;delete this.properties[a]}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},a.prototype.isKind=function(t){return this.factory.nodeIsKind(this,t)},a.prototype.setChildren=function(t){var e,r;this.childNodes=[];try{for(var n=c(t),i=n.next();!i.done;i=n.next()){var o=i.value;this.appendChild(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},a.prototype.appendChild=function(t){return this.childNodes.push(t),t.parent=this,t},a.prototype.replaceChild=function(t,e){var r=this.childIndex(e);return null!==r&&((this.childNodes[r]=t).parent=this),t},a.prototype.childIndex=function(t){var e=this.childNodes.indexOf(t);return-1===e?null:e},a.prototype.findNodes=function(e){var r=[];return this.walkTree(function(t){t.isKind(e)&&r.push(t)}),r},a.prototype.walkTree=function(t,e){var r,n;t(this,e);try{for(var i=c(this.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;a&&a.walkTree(t,e)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return e},a.prototype.toString=function(){return this.kind+\"(\"+this.childNodes.join(\",\")+\")\"},a);function a(t,e,r){var n,i;void 0===e&&(e={}),void 0===r&&(r=[]),this.parent=null,this.properties={},this._factory=null,this.childNodes=[],this._factory=t;try{for(var o=c(Object.keys(e)),a=o.next();!a.done;a=o.next()){var s=a.value;this.setProperty(s,e[s])}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}r.length&&this.setChildren(r)}e.AbstractNode=o;var s,l=(i(u,s=o),u.prototype.setChildren=function(t){},u.prototype.appendChild=function(t){return t},u.prototype.replaceChild=function(t,e){return e},u.prototype.childIndex=function(t){return null},u.prototype.walkTree=function(t,e){return t(this,e),e},u.prototype.toString=function(){return this.kind},u);function u(){return null!==s&&s.apply(this,arguments)||this}e.AbstractEmptyNode=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlLayoutNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"math\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.prototype.setChildInheritedAttributes=function(t,e,r,n){\"display\"===this.attributes.get(\"mode\")&&this.attributes.setInherited(\"display\",\"block\"),t=this.addInheritedAttributes(t,this.attributes.getAllAttributes()),e=!!this.attributes.get(\"displaystyle\")||!this.attributes.get(\"displaystyle\")&&\"block\"===this.attributes.get(\"display\"),this.attributes.setInherited(\"displaystyle\",e),r=this.attributes.get(\"scriptlevel\")||this.constructor.defaults.scriptlevel,a.prototype.setChildInheritedAttributes.call(this,t,e,r,n)},l.defaults=o(o({},s.AbstractMmlLayoutNode.defaults),{mathvariant:\"normal\",mathsize:\"normal\",mathcolor:\"\",mathbackground:\"transparent\",dir:\"ltr\",scriptlevel:0,displaystyle:!1,display:\"inline\",maxwidth:\"\",overflow:\"linebreak\",altimg:\"\",\"altimg-width\":\"\",\"altimg-height\":\"\",\"altimg-valign\":\"\",alttext:\"\",cdgroup:\"\",scriptsizemultiplier:1/Math.sqrt(2),scriptminsize:\"8px\",infixlinebreakstyle:\"before\",lineleading:\"1ex\",linebreakmultchar:\"\\u2062\",indentshift:\"auto\",indentalign:\"auto\",indenttarget:\"\",indentalignfirst:\"indentalign\",indentshiftfirst:\"indentshift\",indentalignlast:\"indentalign\",indentshiftlast:\"indentshift\"}),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlMath=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlTokenNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mi\"},enumerable:!0,configurable:!0}),l.prototype.setInheritedAttributes=function(t,e,r,n){void 0===t&&(t={}),void 0===e&&(e=!1),void 0===r&&(r=0),void 0===n&&(n=!1),a.prototype.setInheritedAttributes.call(this,t,e,r,n),this.getText().match(l.singleCharacter)&&!t.mathvariant&&this.attributes.setInherited(\"mathvariant\",\"italic\")},l.prototype.setTeXclass=function(t){this.getPrevClass(t);var e=this.getText();return 1<e.length&&e.match(l.operatorName)&&this.texClass===s.TEXCLASS.ORD&&(this.texClass=s.TEXCLASS.OP,this.setProperty(\"autoOP\",!0)),this},l.defaults=o({},s.AbstractMmlTokenNode.defaults),l.operatorName=/^[a-z][a-z0-9]*$/i,l.singleCharacter=/^[\\uD800-\\uDBFF]?.$/,l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMi=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlTokenNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mn\"},enumerable:!0,configurable:!0}),l.defaults=o({},s.AbstractMmlTokenNode.defaults),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMn=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlTokenNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mtext\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.defaults=o({},s.AbstractMmlTokenNode.defaults),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMtext=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlTokenNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mspace\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"hasNewline\",{get:function(){var t=this.attributes;return null==t.getExplicit(\"width\")&&null==t.getExplicit(\"height\")&&null==t.getExplicit(\"depth\")&&\"newline\"===t.get(\"linebreak\")},enumerable:!0,configurable:!0}),l.defaults=o(o({},s.AbstractMmlTokenNode.defaults),{width:\"0em\",height:\"0ex\",depth:\"0ex\",linebreak:\"auto\"}),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMspace=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlTokenNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"ms\"},enumerable:!0,configurable:!0}),l.defaults=o(o({},s.AbstractMmlTokenNode.defaults),{lquote:'\"',rquote:'\"'}),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMs=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a,u=r(0),s=(a=u.AbstractMmlNode,i(c,a),Object.defineProperty(c.prototype,\"kind\",{get:function(){return\"mrow\"},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,\"isSpacelike\",{get:function(){var e,t;try{for(var r=l(this.childNodes),n=r.next();!n.done;n=r.next())if(!n.value.isSpacelike)return!1}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return!0},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,\"isEmbellished\",{get:function(){var e,t,r=!1,n=0;try{for(var i=l(this.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;if(a)if(a.isEmbellished){if(r)return!1;r=!0,this._core=n}else if(!a.isSpacelike)return!1;n++}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return r},enumerable:!0,configurable:!0}),c.prototype.core=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core]:this},c.prototype.coreMO=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core].coreMO():this},c.prototype.nonSpaceLength=function(){var e,t,r=0;try{for(var n=l(this.childNodes),i=n.next();!i.done;i=n.next()){var o=i.value;o&&!o.isSpacelike&&r++}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r},c.prototype.firstNonSpace=function(){var e,t;try{for(var r=l(this.childNodes),n=r.next();!n.done;n=r.next()){var i=n.value;if(i&&!i.isSpacelike)return i}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return null},c.prototype.lastNonSpace=function(){for(var t=this.childNodes.length;0<=--t;){var e=this.childNodes[t];if(e&&!e.isSpacelike)return e}return null},c.prototype.setTeXclass=function(t){var e,r,n,i;if(null==this.getProperty(\"open\")&&null==this.getProperty(\"close\")||t&&null==t.getProperty(\"fnOp\")){try{for(var o=l(this.childNodes),a=o.next();!a.done;a=o.next())t=a.value.setTeXclass(t)}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}this.childNodes[0]&&this.updateTeXclass(this.childNodes[0])}else{this.getPrevClass(t),t=null;try{for(var s=l(this.childNodes),c=s.next();!c.done;c=s.next())t=c.value.setTeXclass(t)}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}null==this.texClass&&(this.texClass=u.TEXCLASS.INNER)}return t},c.defaults=o({},u.AbstractMmlNode.defaults),c);function c(){var t=null!==a&&a.apply(this,arguments)||this;return t._core=null,t}e.MmlMrow=s;var h,f=(i(p,h=s),Object.defineProperty(p.prototype,\"kind\",{get:function(){return\"inferredMrow\"},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"isInferred\",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"notParent\",{get:function(){return!0},enumerable:!0,configurable:!0}),p.prototype.toString=function(){return\"[\"+this.childNodes.join(\",\")+\"]\"},p.defaults=s.defaults,p);function p(){return null!==h&&h.apply(this,arguments)||this}e.MmlInferredMrow=f},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var s,c=r(0),l=(s=c.AbstractMmlBaseNode,i(u,s),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"mfrac\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"arity\",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),u.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=a(this.childNodes),i=n.next();!i.done;i=n.next())i.value.setTeXclass(null)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this.isEmbellished&&this.updateTeXclass(this.core()),this},u.prototype.setChildInheritedAttributes=function(t,e,r,n){(!e||0<r)&&r++,this.childNodes[0].setInheritedAttributes(t,!1,r,n),this.childNodes[1].setInheritedAttributes(t,!1,r,!0)},u.defaults=o(o({},c.AbstractMmlBaseNode.defaults),{linethickness:\"medium\",numalign:\"center\",denomalign:\"center\",bevelled:!1}),u);function u(){return null!==s&&s.apply(this,arguments)||this}e.MmlMfrac=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"msqrt\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return-1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.prototype.setTeXclass=function(t){return this.getPrevClass(t),this.childNodes[0].setTeXclass(null),this},l.prototype.setChildInheritedAttributes=function(t,e,r,n){this.childNodes[0].setInheritedAttributes(t,e,r,!0)},l.defaults=o({},s.AbstractMmlNode.defaults),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMsqrt=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mroot\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 2},enumerable:!0,configurable:!0}),l.prototype.setChildInheritedAttributes=function(t,e,r,n){this.childNodes[0].setInheritedAttributes(t,e,r,!0),this.childNodes[1].setInheritedAttributes(t,!1,r+2,n)},l.defaults=o({},s.AbstractMmlNode.defaults),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMroot=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlLayoutNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mpadded\"},enumerable:!0,configurable:!0}),l.defaults=o(o({},s.AbstractMmlLayoutNode.defaults),{width:\"\",height:\"\",depth:\"\",lspace:0,voffset:0}),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlMpadded=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var u,h=r(0),a=(u=h.AbstractMmlNode,i(s,u),Object.defineProperty(s.prototype,\"kind\",{get:function(){return\"mfenced\"},enumerable:!0,configurable:!0}),s.prototype.setTeXclass=function(t){this.getPrevClass(t),this.open&&(t=this.open.setTeXclass(t)),this.childNodes[0]&&(t=this.childNodes[0].setTeXclass(t));for(var e=1,r=this.childNodes.length;e<r;e++)this.separators[e-1]&&(t=this.separators[e-1].setTeXclass(t)),this.childNodes[e]&&(t=this.childNodes[e].setTeXclass(t));return this.close&&(t=this.close.setTeXclass(t)),this.updateTeXclass(this.open),t},s.prototype.setChildInheritedAttributes=function(t,e,r,n){var i,o;this.addFakeNodes();try{for(var a=l([this.open,this.close].concat(this.separators)),s=a.next();!s.done;s=a.next()){var c=s.value;c&&c.setInheritedAttributes(t,e,r,n)}}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}u.prototype.setChildInheritedAttributes.call(this,t,e,r,n)},s.prototype.addFakeNodes=function(){var e,t,r=this.attributes.getList(\"open\",\"close\",\"separators\"),n=r.open,i=r.close,o=r.separators;if(n=n.replace(/[ \\t\\n\\r]/g,\"\"),i=i.replace(/[ \\t\\n\\r]/g,\"\"),o=o.replace(/[ \\t\\n\\r]/g,\"\"),n&&(this.open=this.fakeNode(n,{fence:!0,form:\"prefix\"},h.TEXCLASS.OPEN)),o){for(;o.length<this.childNodes.length-1;)o+=o.charAt(o.length-1);var a=0;try{for(var s=l(this.childNodes.slice(1)),c=s.next();!c.done;c=s.next())c.value&&this.separators.push(this.fakeNode(o.charAt(a++)))}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}}i&&(this.close=this.fakeNode(i,{fence:!0,form:\"postfix\"},h.TEXCLASS.CLOSE))},s.prototype.fakeNode=function(t,e,r){void 0===e&&(e={}),void 0===r&&(r=null);var n=this.factory.create(\"text\").setText(t),i=this.factory.create(\"mo\",e,[n]);return i.texClass=r,i.parent=this,i},s.defaults=o(o({},h.AbstractMmlNode.defaults),{open:\"(\",close:\")\",separators:\",\"}),s);function s(){var t=null!==u&&u.apply(this,arguments)||this;return t.texClass=h.TEXCLASS.INNER,t.separators=[],t.open=null,t.close=null,t}e.MmlMfenced=a},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"menclose\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return-1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"linebreakContininer\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},l.defaults=o(o({},s.AbstractMmlNode.defaults),{notation:\"longdiv\"}),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMenclose=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"maction\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"selected\",{get:function(){var t=this.attributes.get(\"selection\"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.factory.create(\"mrow\")},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isEmbellished\",{get:function(){return this.selected.isEmbellished},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isSpacelike\",{get:function(){return this.selected.isSpacelike},enumerable:!0,configurable:!0}),l.prototype.core=function(){return this.selected.core()},l.prototype.coreMO=function(){return this.selected.coreMO()},l.prototype.verifyAttributes=function(t){a.prototype.verifyAttributes.call(this,t),\"toggle\"!==this.attributes.get(\"actiontype\")&&void 0!==this.attributes.getExplicit(\"selection\")&&delete this.attributes.getAllAttributes().selection},l.prototype.setTeXclass=function(t){\"tooltip\"===this.attributes.get(\"actiontype\")&&this.childNodes[1]&&this.childNodes[1].setTeXclass(null);var e=this.selected;return t=e.setTeXclass(t),this.updateTeXclass(e),t},l.prototype.nextToggleSelection=function(){var t=Math.max(1,this.attributes.get(\"selection\")+1);t>this.childNodes.length&&(t=1),this.attributes.set(\"selection\",t)},l.defaults=o(o({},s.AbstractMmlNode.defaults),{actiontype:\"toggle\",selection:1}),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlMaction=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlBaseNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"munderover\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"base\",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"under\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"over\",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.prototype.setChildInheritedAttributes=function(t,e,r,n){var i=this.childNodes;i[0].setInheritedAttributes(t,e,r,n||!!i[this.over]);var o=!(e||!i[0].coreMO().attributes.get(\"movablelimits\")),a=this.constructor.ACCENTS;i[1].setInheritedAttributes(t,!1,this.getScriptlevel(a[1],o,r),n||1===this.under),this.setInheritedAccent(1,a[1],e,r,n,o),i[2]&&(i[2].setInheritedAttributes(t,!1,this.getScriptlevel(a[2],o,r),n||2===this.under),this.setInheritedAccent(2,a[2],e,r,n,o))},l.prototype.getScriptlevel=function(t,e,r){return!e&&this.attributes.get(t)||r++,r},l.prototype.setInheritedAccent=function(t,e,r,n,i,o){var a=this.childNodes[t];if(null==this.attributes.getExplicit(e)&&a.isEmbellished){var s=a.coreMO().attributes.get(\"accent\");this.attributes.setInherited(e,s),s!==this.attributes.getDefault(e)&&a.setInheritedAttributes({},r,this.getScriptlevel(e,o,n),i)}},l.defaults=o(o({},s.AbstractMmlBaseNode.defaults),{accent:!1,accentunder:!1,align:\"center\"}),l.ACCENTS=[\"\",\"accentunder\",\"accent\"],l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlMunderover=c;var u,h=(i(f,u=c),Object.defineProperty(f.prototype,\"kind\",{get:function(){return\"munder\"},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"arity\",{get:function(){return 2},enumerable:!0,configurable:!0}),f.defaults=o({},c.defaults),f);function f(){return null!==u&&u.apply(this,arguments)||this}e.MmlMunder=h;var p,d=(i(m,p=c),Object.defineProperty(m.prototype,\"kind\",{get:function(){return\"mover\"},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"arity\",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"over\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,\"under\",{get:function(){return 2},enumerable:!0,configurable:!0}),m.defaults=o({},c.defaults),m.ACCENTS=[\"\",\"accent\",\"accentunder\"],m);function m(){return null!==p&&p.apply(this,arguments)||this}e.MmlMover=d},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=r(31),l=(a=c.MmlMsubsup,i(u,a),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"mmultiscripts\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"arity\",{get:function(){return 1},enumerable:!0,configurable:!0}),u.prototype.setChildInheritedAttributes=function(t,e,r,n){this.childNodes[0].setInheritedAttributes(t,e,r,n);for(var i=!1,o=1,a=0;o<this.childNodes.length;o++){var s=this.childNodes[o];if(s.isKind(\"mprescripts\")){if(!i&&(i=!0,o%2==0)){var c=this.factory.create(\"mrow\");this.childNodes.splice(o,0,c),c.parent=this,o++}}else{var l=n||a%2==0;s.setInheritedAttributes(t,!1,r+1,l),a++}}this.childNodes.length%2==(i?1:0)&&(this.appendChild(this.factory.create(\"mrow\")),this.childNodes[this.childNodes.length-1].setInheritedAttributes(t,!1,r+1,n))},u.prototype.verifyChildren=function(t){for(var e=!1,r=t.fixMmultiscripts,n=0;n<this.childNodes.length;n++){var i=this.childNodes[n];i.isKind(\"mprescripts\")&&(e?i.mError(i.kind+\" can only appear once in \"+this.kind,t,!0):(e=!0,n%2!=0||r||this.mError(\"There must be an equal number of prescripts of each type\",t)))}this.childNodes.length%2!=(e?1:0)||r||this.mError(\"There must be an equal number of scripts of each type\",t),a.prototype.verifyChildren.call(this,t)},u.defaults=o({},c.MmlMsubsup.defaults),u);function u(){return null!==a&&a.apply(this,arguments)||this}e.MmlMmultiscripts=l;var h,f=(h=s.AbstractMmlNode,i(p,h),Object.defineProperty(p.prototype,\"kind\",{get:function(){return\"mprescripts\"},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"arity\",{get:function(){return 0},enumerable:!0,configurable:!0}),p.prototype.verifyTree=function(t){h.prototype.verifyTree.call(this,t),this.parent&&!this.parent.isKind(\"mmultiscripts\")&&this.mError(this.kind+\" must be a child of mmultiscripts\",t,!0)},p.defaults=o({},s.AbstractMmlNode.defaults),p);function p(){return null!==h&&h.apply(this,arguments)||this}e.MmlMprescripts=f;var d,m=(d=s.AbstractMmlNode,i(y,d),Object.defineProperty(y.prototype,\"kind\",{get:function(){return\"none\"},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,\"arity\",{get:function(){return 0},enumerable:!0,configurable:!0}),y.prototype.verifyTree=function(t){d.prototype.verifyTree.call(this,t),this.parent&&!this.parent.isKind(\"mmultiscripts\")&&this.mError(this.kind+\" must be a child of mmultiscripts\",t,!0)},y.defaults=o({},s.AbstractMmlNode.defaults),y);function y(){return null!==d&&d.apply(this,arguments)||this}e.MmlNone=m},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},d=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var l,u=r(0),m=r(10),a=(l=u.AbstractMmlNode,i(s,l),Object.defineProperty(s.prototype,\"kind\",{get:function(){return\"mtable\"},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),s.prototype.setInheritedAttributes=function(t,e,r,n){var i,o;try{for(var a=d(u.indentAttributes),s=a.next();!s.done;s=a.next()){var c=s.value;t[c]&&this.attributes.setInherited(c,t[c][1]),void 0!==this.attributes.getExplicit(c)&&delete this.attributes.getAllAttributes()[c]}}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}l.prototype.setInheritedAttributes.call(this,t,e,r,n)},s.prototype.setChildInheritedAttributes=function(t,e,r,n){var i,o,a,s;try{for(var c=d(this.childNodes),l=c.next();!l.done;l=c.next())(p=l.value).isKind(\"mtr\")||this.replaceChild(this.factory.create(\"mtr\"),p).appendChild(p)}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=c.return)&&o.call(c)}finally{if(i)throw i.error}}e=!(!this.attributes.getExplicit(\"displaystyle\")&&!this.attributes.getDefault(\"displaystyle\")),t=this.addInheritedAttributes(t,{columnalign:this.attributes.get(\"columnalign\"),rowalign:\"center\"});var u=m.split(this.attributes.get(\"rowalign\"));try{for(var h=d(this.childNodes),f=h.next();!f.done;f=h.next()){var p=f.value;t.rowalign[1]=u.shift()||t.rowalign[1],p.setInheritedAttributes(t,e,r,n)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=h.return)&&s.call(h)}finally{if(a)throw a.error}}},s.prototype.verifyChildren=function(t){var e,r;if(!t.fixMtables)try{for(var n=d(this.childNodes),i=n.next();!i.done;i=n.next())i.value.isKind(\"mtr\")||this.mError(\"Children of \"+this.kind+\" must be mtr or mlabeledtr\",t)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}l.prototype.verifyChildren.call(this,t)},s.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=d(this.childNodes),i=n.next();!i.done;i=n.next())i.value.setTeXclass(null)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},s.defaults=o(o({},u.AbstractMmlNode.defaults),{align:\"axis\",rowalign:\"baseline\",columnalign:\"center\",groupalign:\"{left}\",alignmentscope:!0,columnwidth:\"auto\",width:\"auto\",rowspacing:\"1ex\",columnspacing:\".8em\",rowlines:\"none\",columnlines:\"none\",frame:\"none\",framespacing:\"0.4em 0.5ex\",equalrows:!1,equalcolumns:!1,displaystyle:!1,side:\"right\",minlabelspacing:\"0.8em\"}),s);function s(){var t=null!==l&&l.apply(this,arguments)||this;return t.properties={useHeight:1},t.texClass=u.TEXCLASS.ORD,t}e.MmlMtable=a},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},d=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=r(19),m=r(10),l=(a=s.AbstractMmlNode,i(u,a),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"mtr\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),u.prototype.setChildInheritedAttributes=function(t,e,r,n){var i,o,a,s;try{for(var c=d(this.childNodes),l=c.next();!l.done;l=c.next())(p=l.value).isKind(\"mtd\")||this.replaceChild(this.factory.create(\"mtd\"),p).appendChild(p)}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=c.return)&&o.call(c)}finally{if(i)throw i.error}}var u=m.split(this.attributes.get(\"columnalign\"));1===this.arity&&u.unshift(this.parent.attributes.get(\"side\")),t=this.addInheritedAttributes(t,{rowalign:this.attributes.get(\"rowalign\"),columnalign:\"center\"});try{for(var h=d(this.childNodes),f=h.next();!f.done;f=h.next()){var p=f.value;t.columnalign[1]=u.shift()||t.columnalign[1],p.setInheritedAttributes(t,e,r,n)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=h.return)&&s.call(h)}finally{if(a)throw a.error}}},u.prototype.verifyChildren=function(t){var e,r;if(!this.parent||this.parent.isKind(\"mtable\")){if(!t.fixMtables)try{for(var n=d(this.childNodes),i=n.next();!i.done;i=n.next()){var o=i.value;o.isKind(\"mtd\")||this.replaceChild(this.factory.create(\"mtr\"),o).mError(\"Children of \"+this.kind+\" must be mtd\",t,!0)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}a.prototype.verifyChildren.call(this,t)}else this.mError(this.kind+\" can only be a child of an mtable\",t,!0)},u.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=d(this.childNodes),i=n.next();!i.done;i=n.next())i.value.setTeXclass(null)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},u.defaults=o(o({},s.AbstractMmlNode.defaults),{rowalign:c.INHERIT,columnalign:c.INHERIT,groupalign:c.INHERIT}),u);function u(){return null!==a&&a.apply(this,arguments)||this}e.MmlMtr=l;var h,f=(i(p,h=l),Object.defineProperty(p.prototype,\"kind\",{get:function(){return\"mlabeledtr\"},enumerable:!0,configurable:!0}),Object.defineProperty(p.prototype,\"arity\",{get:function(){return 1},enumerable:!0,configurable:!0}),p);function p(){return null!==h&&h.apply(this,arguments)||this}e.MmlMlabeledtr=f},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=r(19),l=(a=s.AbstractMmlBaseNode,i(u,a),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"mtd\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"arity\",{get:function(){return-1},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),u.prototype.verifyChildren=function(t){!this.parent||this.parent.isKind(\"mtr\")?a.prototype.verifyChildren.call(this,t):this.mError(this.kind+\" can only be a child of an mtr or mlabeledtr\",t,!0)},u.prototype.setTeXclass=function(t){return this.getPrevClass(t),this.childNodes[0].setTeXclass(null),this},u.defaults=o(o({},s.AbstractMmlBaseNode.defaults),{rowspan:1,columnspan:1,rowalign:c.INHERIT,columnalign:c.INHERIT,groupalign:c.INHERIT}),u);function u(){return null!==a&&a.apply(this,arguments)||this}e.MmlMtd=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlTokenNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mglyph\"},enumerable:!0,configurable:!0}),l.defaults=o(o({},s.AbstractMmlTokenNode.defaults),{alt:\"\",src:\"\",width:\"auto\",height:\"auto\",valign:\"0em\"}),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMglyph=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlBaseNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"semantics\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"notParent\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.defaults=o(o({},s.AbstractMmlBaseNode.defaults),{definitionUrl:null,encoding:null}),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlSemantics=c;var u,h=(u=s.AbstractMmlNode,i(f,u),Object.defineProperty(f.prototype,\"kind\",{get:function(){return\"annotation-xml\"},enumerable:!0,configurable:!0}),f.prototype.setChildInheritedAttributes=function(){},f.defaults=o(o({},s.AbstractMmlNode.defaults),{definitionUrl:null,encoding:null,cd:\"mathmlkeys\",name:\"\",src:null}),f);function f(){return null!==u&&u.apply(this,arguments)||this}e.MmlAnnotationXML=h;var p,d=(i(m,p=h),Object.defineProperty(m.prototype,\"kind\",{get:function(){return\"annotation\"},enumerable:!0,configurable:!0}),m.defaults=o({},h.defaults),m);function m(){var t=null!==p&&p.apply(this,arguments)||this;return t.properties={isChars:!0},t}e.MmlAnnotation=d},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=r(26),l=(a=s.AbstractMmlBaseNode,i(u,a),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"TeXAtom\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"arity\",{get:function(){return-1},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"notParent\",{get:function(){return!0},enumerable:!0,configurable:!0}),u.prototype.setTeXclass=function(t){return this.childNodes[0].setTeXclass(null),this.adjustTeXclass(t)},u.prototype.adjustTeXclass=function(t){return t},u.defaults=o({},s.AbstractMmlBaseNode.defaults),u);function u(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}(e.TeXAtom=l).prototype.adjustTeXclass=c.MmlMo.prototype.adjustTeXclass},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(44),s=r(95),c=(o=s.AbstractVisitor,i(l,o),l.prototype.visitTextNode=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r]},l.prototype.visitXMLNode=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r]},l);function l(t){void 0===t&&(t=null);return t=t||new a.MmlFactory,o.call(this,t)||this}e.MmlVisitor=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.handleRetriesFor=function(t){return new Promise(function e(r,n){try{r(t())}catch(t){t.retry&&t.retry instanceof Promise?t.retry.then(function(){return e(r,n)}).catch(function(t){return n(t)}):t.restart&&t.restart.isCallback?MathJax.Callback.After(function(){return e(r,n)},t.restart):n(t)}})},e.retryAfter=function(t){var e=new Error(\"MathJax retry\");throw e.retry=t,e}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(82),s=r(99),c=(o=a.AbstractHandler,i(l,o),l.prototype.handlesDocument=function(t){var e=this.adaptor;if(\"string\"==typeof t)try{t=e.parse(t,\"text/html\")}catch(t){}return t instanceof e.window.Document||t instanceof e.window.HTMLElement||t instanceof e.window.DocumentFragment},l.prototype.create=function(t,e){var r=this.adaptor;if(\"string\"==typeof t)t=r.parse(t,\"text/html\");else if(t instanceof r.window.HTMLElement||t instanceof r.window.DocumentFragment){var n=t;t=r.parse(\"\",\"text/html\"),r.append(r.body(t),n)}return o.prototype.create.call(this,t,e)},l);function l(){var t=null!==o&&o.apply(this,arguments)||this;return t.documentClass=s.HTMLDocument,t}e.HTMLHandler=c},function(t,e,r){\"use strict\";var y=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},v=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},c=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(v(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var n=[\"top\",\"right\",\"bottom\",\"left\"],i=[\"width\",\"style\",\"color\"];function b(t){for(var e=t.split(/((?:'[^']*'|\"[^\"]*\"|,[\\s\\n]|[^\\s\\n])*)/g),r=[];1<e.length;)e.shift(),r.push(e.shift());return r}function o(t){var e,r,n=b(this.styles[t]);0===n.length&&n.push(\"\"),1===n.length&&n.push(n[0]),2===n.length&&n.push(n[0]),3===n.length&&n.push(n[1]);try{for(var i=y(M.connect[t].children),o=i.next();!o.done;o=i.next()){var a=o.value;this.setStyle(this.childName(t,a),n.shift())}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}}function a(t){var e,r,n=M.connect[t].children,i=[];try{for(var o=y(n),a=o.next();!a.done;a=o.next()){var s=a.value,c=this.styles[t+\"-\"+s];if(!c)return void delete this.styles[t];i.push(c)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}i[3]===i[1]&&(i.pop(),i[2]===i[0]&&(i.pop(),i[1]===i[0]&&i.pop())),this.styles[t]=i.join(\" \")}function s(t){var e,r;try{for(var n=y(M.connect[t].children),i=n.next();!i.done;i=n.next()){var o=i.value;this.setStyle(this.childName(t,o),this.styles[t])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}}function l(t){var e,r,n=c(M.connect[t].children),i=this.styles[this.childName(t,n.shift())];try{for(var o=y(n),a=o.next();!a.done;a=o.next()){var s=a.value;if(this.styles[this.childName(t,s)]!==i)return void delete this.styles[t]}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}this.styles[t]=i}var f={width:/^(?:[\\d.]+(?:[a-z]+)|thin|medium|thick|inherit|initial|unset)$/,style:/^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|inherit|initial|unset)$/};function u(t){var e,r,n,i,o={width:\"\",style:\"\",color:\"\"};try{for(var a=y(b(this.styles[t])),s=a.next();!s.done;s=a.next()){var c=s.value;c.match(f.width)&&\"\"===o.width?o.width=c:c.match(f.style)&&\"\"===o.style?o.style=c:o.color=c}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}try{for(var l=y(M.connect[t].children),u=l.next();!u.done;u=l.next()){var h=u.value;this.setStyle(this.childName(t,h),o[h])}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=l.return)&&i.call(l)}finally{if(n)throw n.error}}}function h(t){var e,r,n=[];try{for(var i=y(M.connect[t].children),o=i.next();!o.done;o=i.next()){var a=o.value,s=this.styles[this.childName(t,a)];s&&n.push(s)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}n.length?this.styles[t]=n.join(\" \"):delete this.styles[t]}var g={style:/^(?:normal|italic|oblique|inherit|initial|unset)$/,variant:new RegExp(\"^(?:\"+[\"normal|none\",\"inherit|initial|unset\",\"common-ligatures|no-common-ligatures\",\"discretionary-ligatures|no-discretionary-ligatures\",\"historical-ligatures|no-historical-ligatures\",\"contextual|no-contextual\",\"(?:stylistic|character-variant|swash|ornaments|annotation)\\\\([^)]*\\\\)\",\"small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\"lining-nums|oldstyle-nums|proportional-nums|tabular-nums\",\"diagonal-fractions|stacked-fractions\",\"ordinal|slashed-zero\",\"jis78|jis83|jis90|jis04|simplified|traditional\",\"full-width|proportional-width\",\"ruby\"].join(\"|\")+\")$\"),weight:/^(?:normal|bold|bolder|lighter|[1-9]00|inherit|initial|unset)$/,stretch:new RegExp(\"^(?:\"+[\"normal\",\"(?:(?:ultra|extra|semi)-)?condensed\",\"(?:(?:semi|extra|ulta)-)?expanded\",\"inherit|initial|unset\"].join(\"|\")+\")$\"),size:new RegExp(\"^(?:\"+[\"xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller\",\"[d.]+%|[d.]+[a-z]+\",\"inherit|initial|unset\"].join(\"|\")+\")(?:/(?:normal|[d.+](?:%|[a-z]+)?))?$\")};function p(t){var e,r,n,i,o=b(this.styles[t]),a={style:\"\",variant:[],weight:\"\",stretch:\"\",size:\"\",family:\"\",\"line-height\":\"\"};try{for(var s=y(o),c=s.next();!c.done;c=s.next()){var l=c.value;a.family=l;try{for(var u=(n=void 0,y(Object.keys(g))),h=u.next();!h.done;h=u.next()){var f=h.value;if((Array.isArray(a[f])||\"\"===a[f])&&l.match(g[f]))if(\"size\"===f){var p=v(l.split(/\\//),2),d=p[0],m=p[1];a[f]=d,m&&(a[\"line-height\"]=m)}else\"\"===a.size&&(Array.isArray(a[f])?a[f].push(l):a[f]=l)}}catch(t){n={error:t}}finally{try{h&&!h.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}!function(t,e){var r,n;try{for(var i=y(M.connect[t].children),o=i.next();!o.done;o=i.next()){var a=o.value,s=this.childName(t,a);if(Array.isArray(e[a])){var c=e[a];c.length&&(this.styles[s]=c.join(\" \"))}else\"\"!==e[a]&&(this.styles[s]=e[a])}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}(t,a),delete this.styles[t]}function d(t){}var M=(Object.defineProperty(m.prototype,\"cssText\",{get:function(){var e,t,r=[];try{for(var n=y(Object.keys(this.styles)),i=n.next();!i.done;i=n.next()){var o=i.value,a=this.parentName(o);this.styles[a]||r.push(o+\": \"+this.styles[o])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r.join(\"; \")},enumerable:!0,configurable:!0}),m.prototype.set=function(t,e){for(t=this.normalizeName(t),this.setStyle(t,e),m.connect[t]&&!m.connect[t].combine&&(this.combineChildren(t),delete this.styles[t]);t.match(/-/)&&(t=this.parentName(t),m.connect[t]);)m.connect[t].combine.call(this,t)},m.prototype.get=function(t){return t=this.normalizeName(t),this.styles.hasOwnProperty(t)?this.styles[t]:\"\"},m.prototype.setStyle=function(t,e){this.styles[t]=e,m.connect[t]&&m.connect[t].children&&m.connect[t].split.call(this,t),\"\"===e&&delete this.styles[t]},m.prototype.combineChildren=function(t){var e,r,n=this.parentName(t);try{for(var i=y(m.connect[t].children),o=i.next();!o.done;o=i.next()){var a=o.value,s=this.childName(n,a);m.connect[s].combine.call(this,s)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},m.prototype.parentName=function(t){var e=t.replace(/-[^-]*$/,\"\");return t===e?\"\":e},m.prototype.childName=function(t,e){return e.match(/-/)?e:(m.connect[t]&&!m.connect[t].combine&&(e+=t.replace(/.*-/,\"-\"),t=this.parentName(t)),t+\"-\"+e)},m.prototype.normalizeName=function(t){return t.replace(/[A-Z]/g,function(t){return\"-\"+t.toLowerCase()})},m.prototype.parse=function(t){void 0===t&&(t=\"\");var e=this.constructor.pattern;this.styles={};for(var r=t.replace(e.comment,\"\").split(e.style);1<r.length;){var n=v(r.splice(0,3),3),i=n[0],o=n[1],a=n[2];if(i.match(/[^\\s\\n]/))return;this.set(o,a)}},m.pattern={style:/([-a-z]+)[\\s\\n]*:[\\s\\n]*((?:'[^']*'|\"[^\"]*\"|\\n|.)*?)[\\s\\n]*(?:;|$)/g,comment:/\\/\\*[^]*?\\*\\//g},m.connect={padding:{children:n,split:o,combine:a},border:{children:n,split:s,combine:l},\"border-top\":{children:i,split:u,combine:h},\"border-right\":{children:i,split:u,combine:h},\"border-bottom\":{children:i,split:u,combine:h},\"border-left\":{children:i,split:u,combine:h},\"border-width\":{children:n,split:o,combine:null},\"border-style\":{children:n,split:o,combine:null},\"border-color\":{children:n,split:o,combine:null},font:{children:[\"style\",\"variant\",\"weight\",\"stretch\",\"line-height\",\"size\",\"family\"],split:p,combine:d}},m);function m(t){void 0===t&&(t=\"\"),this.parse(t)}e.Styles=M},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var l=r(4),u=r(9),n=r(35),h=r(7),f=r(117),p={NewCommand:function(t,e){var r=h.default.trimSpaces(t.GetArgument(e)),n=t.GetBrackets(e),i=t.GetBrackets(e),o=t.GetArgument(e);if(\"\\\\\"===r.charAt(0)&&(r=r.substr(1)),!r.match(/^(.|[a-z]+)$/i))throw new l.default(\"IllegalControlSequenceName\",\"Illegal control sequence name for %1\",e);if(n&&!(n=h.default.trimSpaces(n)).match(/^[0-9]+$/))throw new l.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);f.default.addMacro(t,r,p.Macro,[o,n,i])},NewEnvironment:function(t,e){var r=h.default.trimSpaces(t.GetArgument(e)),n=t.GetBrackets(e),i=t.GetBrackets(e),o=t.GetArgument(e),a=t.GetArgument(e);if(n&&!(n=h.default.trimSpaces(n)).match(/^[0-9]+$/))throw new l.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);f.default.addEnvironment(t,r,p.BeginEnv,[!0,o,a,n,i])},MacroDef:function(t,e){var r=f.default.GetCSname(t,e),n=f.default.GetTemplate(t,e,\"\\\\\"+r),i=t.GetArgument(e);n instanceof Array?f.default.addMacro(t,r,p.MacroWithTemplate,[i].concat(n)):f.default.addMacro(t,r,p.Macro,[i,n])},Let:function(t,e){var r=f.default.GetCSname(t,e),n=t.GetNext();\"=\"===n&&(t.i++,n=t.GetNext());var i=t.configuration.handlers;if(\"\\\\\"!==n){t.i++;var o=i.get(\"delimiter\").lookup(n);o?f.default.addDelimiter(t,\"\\\\\"+r,o.char,o.attributes):f.default.addMacro(t,r,p.Macro,[n])}else{e=f.default.GetCSname(t,e);var a=i.get(\"delimiter\").lookup(\"\\\\\"+e);if(a)return void f.default.addDelimiter(t,\"\\\\\"+r,a.char,a.attributes);var s=i.get(\"macro\").applicable(e);if(!s)return;if(s instanceof u.MacroMap){var c=s.lookup(e);return void f.default.addMacro(t,r,c.func,c.args,c.symbol)}a=s.lookup(e);var l=f.default.disassembleSymbol(r,a);f.default.addMacro(t,r,function(t,e){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var i=f.default.assembleSymbol(r);return s.parser(t,i)},l)}},MacroWithTemplate:function(t,e,r,n){for(var i=[],o=4;o<arguments.length;o++)i[o-4]=arguments[o];var a=parseInt(n,10);if(a){var s=[];if(t.GetNext(),i[0]&&!f.default.MatchParam(t,i[0]))throw new l.default(\"MismatchUseDef\",\"Use of %1 doesn't match its definition\",e);for(var c=0;c<a;c++)s.push(f.default.GetParameter(t,e,i[c+1]));r=h.default.substituteArgs(t,s,r)}if(t.string=h.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new l.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\")},BeginEnv:function(t,e,r,n,i,o){if(e.getProperty(\"end\")&&t.stack.env.closing===e.getName()){delete t.stack.env.closing;var a=t.string.slice(t.i);return t.string=n,t.i=0,t.Parse(),t.string=a,t.i=0,t.itemFactory.create(\"end\").setProperty(\"name\",e.getName())}if(i){var s=[];if(null!=o){var c=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\");s.push(null==c?o:c)}for(var l=s.length;l<i;l++)s.push(t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));r=h.default.substituteArgs(t,s,r),n=h.default.substituteArgs(t,[],n)}return t.string=h.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,t.itemFactory.create(\"beginEnv\").setProperty(\"name\",e.getName())}};p.Macro=n.default.Macro,e.default=p},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},c=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},S=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var l=r(16);e.CommonMrowMixin=function(t){return i(e,s=t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!0,configurable:!0}),e.prototype.stretchChildren=function(){var e,t,r,n,i,o,a=[];try{for(var s=S(this.childNodes),c=s.next();!c.done;c=s.next())(x=c.value).canStretch(1)&&a.push(x)}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}var l=a.length,u=this.childNodes.length;if(l&&1<u){var h=0,f=0,p=1<l&&l===u;try{for(var d=S(this.childNodes),m=d.next();!m.done;m=d.next()){var y=0===(x=m.value).stretch.dir;if(p||y){var v=x.getBBox(y),b=v.h,g=v.d;h<b&&(h=b),f<g&&(f=g)}}}catch(t){r={error:t}}finally{try{m&&!m.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}try{for(var M=S(a),O=M.next();!O.done;O=M.next()){var x;(x=O.value).coreMO().getStretchedVariant([h,f])}}catch(t){i={error:t}}finally{try{O&&!O.done&&(o=M.return)&&o.call(M)}finally{if(i)throw i.error}}}},e;function e(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=s.apply(this,c(r))||this;i.stretchChildren();try{for(var o=S(i.childNodes),a=o.next();!a.done;a=o.next()){if(a.value.bbox.pwidth){i.bbox.pwidth=l.BBox.fullWidth;break}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return i}var s},e.CommonInferredMrowMixin=function(t){return i(e,r=t),e.prototype.getScale=function(){this.bbox.scale=this.parent.bbox.scale,this.bbox.rscale=1},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),f=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(154),c=r(54),l=(o=s.CommonMsqrtMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e,r,n,i,o=this.childNodes[this.surd],a=this.childNodes[this.base],s=o.getBBox(),c=(a.getBBox(),f(this.getPQ(s),2)),l=(c[0],c[1]),u=this.standardCHTMLnode(t);null!=this.root&&(n=this.adaptor.append(u,this.html(\"mjx-root\")),i=this.childNodes[this.root]);var h=this.adaptor.append(u,this.html(\"mjx-sqrt\",{},[e=this.html(\"mjx-surd\"),r=this.html(\"mjx-box\",{style:{paddingTop:this.em(l)}})]));this.addRoot(n,i,s),o.toCHTML(e),a.toCHTML(r),o.size<0&&this.adaptor.addClass(h,\"mjx-tall\")},u.prototype.addRoot=function(t,e,r){},u.kind=c.MmlMsqrt.prototype.kind,u.styles={\"mjx-root\":{display:\"inline-block\",\"white-space\":\"nowrap\"},\"mjx-surd\":{display:\"inline-block\",\"vertical-align\":\"top\"},\"mjx-sqrt\":{display:\"inline-block\",\"padding-top\":\".07em\"},\"mjx-sqrt > mjx-box\":{\"border-top\":\".07em solid\"},\"mjx-sqrt.mjx-tall > mjx-box\":{\"padding-left\":\".3em\",\"margin-left\":\"-.3em\"}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmsqrt=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),C=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtrMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return this.childNodes.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes},enumerable:!0,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t]},e.prototype.getChildBBoxes=function(){return this.childNodes.map(function(t){return t.getBBox()})},e.prototype.stretchChildren=function(t){var e,r,n,i,o,a;void 0===t&&(t=null);var s=[],c=this.labeled?this.childNodes.slice(1):this.childNodes;try{for(var l=C(c),u=l.next();!u.done;u=l.next())(E=u.value.childNodes[0]).canStretch(1)&&s.push(E)}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}var h=s.length,f=this.childNodes.length;if(h&&1<f){if(null===t){var p=0,d=0,m=1<h&&h===f;try{for(var y=C(c),v=y.next();!v.done;v=y.next()){var b=0===(E=v.value.childNodes[0]).stretch.dir;if(m||b){var g=E.getBBox(b),M=g.h,O=g.d;p<M&&(p=M),d<O&&(d=O)}}}catch(t){n={error:t}}finally{try{v&&!v.done&&(i=y.return)&&i.call(y)}finally{if(n)throw n.error}}t=[p,d]}try{for(var x=C(s),S=x.next();!S.done;S=x.next()){var E;(E=S.value).coreMO().getStretchedVariant(t)}}catch(t){o={error:t}}finally{try{S&&!S.done&&(a=x.return)&&a.call(x)}finally{if(o)throw o.error}}}},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r},e.CommonMlabeledtrMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return Math.max(0,this.childNodes.length-1)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes.slice(1)},enumerable:!0,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t+1]},e.prototype.getChildBBoxes=function(){return this.childNodes.slice(1).map(function(t){return t.getBBox()})},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,i,e){\"use strict\";var n,r=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},u=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(l(arguments[e]));return t};Object.defineProperty(i,\"__esModule\",{value:!0});var o=e(10);i.TooltipData={dx:\".2em\",dy:\".1em\",postDelay:600,clearDelay:100,hoverTimer:new Map,clearTimer:new Map,stopTimers:function(t,e){e.clearTimer.has(t)&&(clearTimeout(e.clearTimer.get(t)),e.clearTimer.delete(t)),e.hoverTimer.has(t)&&(clearTimeout(e.hoverTimer.get(t)),e.hoverTimer.delete(t))}},i.CommonMactionMixin=function(t){return r(e,c=t),Object.defineProperty(e.prototype,\"selected\",{get:function(){var t=this.node.attributes.get(\"selection\"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.wrap(this.node.selected)},enumerable:!0,configurable:!0}),e.prototype.getParameters=function(){var t=this.node.attributes.get(\"data-offsets\"),e=l(o.split(t||\"\"),2),r=e[0],n=e[1];this.dx=this.length2em(r||i.TooltipData.dx),this.dy=this.length2em(n||i.TooltipData.dy)},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.selected.getBBox()),this.selected.setChildPWidths(e)},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=c.apply(this,u(t))||this,n=r.constructor.actions,i=r.node.attributes.get(\"actiontype\"),o=l(n.get(i)||[function(t,e){},{}],2),a=o[0],s=o[1];return r.action=a,r.data=s,r.getParameters(),r}var c}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(1),c=r(254),l=r(176),u=r(178),h=r(180),f=r(182),p=r(184),d=r(186),m=r(188),y=r(190),v=r(192),b=r(194),g=r(196),M=r(198),O=r(200),x=r(202),S=r(204),E=r(206),C=r(208),_=r(210),T=r(212),w=r(214),A=r(216),k=r(218),I=r(220),L=r(222),N=r(224),P=(a=c.CommonTeXFontMixin(s.CHTMLFontData),i(B,a),B.defaultVariantClasses={normal:\"mjx-n\",bold:\"mjx-b\",italic:\"mjx-i\",\"bold-italic\":\"mjx-b mjx-i\",\"double-struck\":\"mjx-ds\",fraktur:\"mjx-fr\",\"bold-fraktur\":\"mjx-fr mjx-b\",script:\"mjx-sc\",\"bold-script\":\"mjx-sc mjx-b\",\"sans-serif\":\"mjx-ss\",\"bold-sans-serif\":\"mjx-ss mjx-b\",\"sans-serif-italic\":\"mjx-ss mjx-i\",\"bold-sans-serif-italic\":\"mjx-ss mjx-b mjx-i\",monospace:\"mjx-ty\",\"-smallop\":\"mjx-sop\",\"-largeop\":\"mjx-lop\",\"-size3\":\"mjx-s3\",\"-size4\":\"mjx-s4\",\"-tex-calligraphic\":\"mjx-cal\",\"-tex-bold-calligraphic\":\"mjx-cal mjx-b\",\"-tex-mathit\":\"mjx-mit\",\"-tex-oldstyle\":\"mjx-os\",\"-tex-bold-oldstyle\":\"mjx-os mjx-b\",\"-tex-variant\":\"mjx-v\"},B.defaultDelimiters=N.delimiters,B.defaultChars={normal:v.normal,bold:u.bold,italic:d.italic,\"bold-italic\":l.boldItalic,\"double-struck\":h.doubleStruck,fraktur:p.fraktur,\"bold-fraktur\":f.frakturBold,script:S.script,\"bold-script\":x.scriptBold,\"sans-serif\":O.sansSerif,\"bold-sans-serif\":g.sansSerifBold,\"sans-serif-italic\":M.sansSerifItalic,\"bold-sans-serif-italic\":b.sansSerifBoldItalic,monospace:y.monospace,\"-smallop\":E.smallop,\"-largeop\":m.largeop,\"-size3\":k.texSize3,\"-size4\":I.texSize4,\"-tex-calligraphic\":_.texCalligraphic,\"-tex-bold-calligraphic\":C.texCalligraphicBold,\"-tex-mathit\":T.texMathit,\"-tex-oldstyle\":A.texOldstyle,\"-tex-bold-oldstyle\":w.texOldstyleBold,\"-tex-variant\":L.texVariant},B.defaultStyles=o(o({},s.CHTMLFontData.defaultStyles),{\".mjx-n mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-i mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-I, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-b mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-b.mjx-i mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-BI, MJXTEX-B, MJXTEX-I, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-cal mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-C, MJXTEX-I, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-cal.mjx-b mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-C-B, MJXTEX-C, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-ds mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-A, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-I, MJXTEX-S1\"},\".mjx-fr mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-FR, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-fr.mjx-b mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-FR-B, MJXTEX-FR, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-sc mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-SC, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-sc.mjx-b mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-SC-B, MJXTEX-SC, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-ss mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-SS, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-ss.mjx-b mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-SS-B, MJXTEX-SS, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-ss.mjx-i mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-SS-I, MJXTEX-I, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-ss.mjx-b.mjx-i mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-SS-B, MJXTEX-SS-I, MJXTEX-BI, MJXTEX-B, MJXTEX-I, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-ty mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-T, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-var mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-A, MJXTEX, MJXTEX-I, MJXTEX-S1\"},\".mjx-os mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-C, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-os.mjx-b mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-C-B, MJXTEX-C, MJXTEX-B, MJXTEX-BI, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-mit mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-MI, MJXTEX-I, MJXTEX, MJXTEX-S1, MJXTEX-A\"},\".mjx-lop mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-S2, MJXTEX-S1, MJXTEX, MJXTEX-I, MJXTEX-A\"},\".mjx-sop mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-S1, MJXTEX, MJXTEX-I, MJXTEX-A\"},\".mjx-s3 mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-S3, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".mjx-s4 mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-S4, MJXTEX, MJXTEX-I, MJXTEX-S1, MJXTEX-A\"},\".MJX-TEX\":{\"font-family\":\"MJXZERO\"},\"mjx-stretchy-v mjx-c, mjx-stretchy-h mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-S1, MJXTEX-S4, MJXTEX, MJXTEX-A ! important\"}}),B.defaultFonts=o(o({},s.CHTMLFontData.defaultFonts),{\"@font-face /* 1 */\":{\"font-family\":\"MJXTEX\",src:'url(\"%%URL%%/MathJax_Main-Regular.woff\") format(\"woff\")'},\"@font-face /* 2 */\":{\"font-family\":\"MJXTEX-B\",src:'url(\"%%URL%%/MathJax_Main-Bold.woff\") format(\"woff\")'},\"@font-face /* 3 */\":{\"font-family\":\"MJXTEX-MI\",src:'url(\"%%URL%%/MathJax_Main-Italic.woff\") format(\"woff\")'},\"@font-face /* 4 */\":{\"font-family\":\"MJXTEX-I\",src:'url(\"%%URL%%/MathJax_Math-Italic.woff\") format(\"woff\")'},\"@font-face /* 5 */\":{\"font-family\":\"MJXTEX-BI\",src:'url(\"%%URL%%/MathJax_Math-BoldItalic.woff\") format(\"woff\")'},\"@font-face /* 6 */\":{\"font-family\":\"MJXTEX-S1\",src:'url(\"%%URL%%/MathJax_Size1-Regular.woff\") format(\"woff\")'},\"@font-face /* 7 */\":{\"font-family\":\"MJXTEX-S2\",src:'url(\"%%URL%%/MathJax_Size2-Regular.woff\") format(\"woff\")'},\"@font-face /* 8 */\":{\"font-family\":\"MJXTEX-S3\",src:'url(\"%%URL%%/MathJax_Size3-Regular.woff\") format(\"woff\")'},\"@font-face /* 9 */\":{\"font-family\":\"MJXTEX-S4\",src:'url(\"%%URL%%/MathJax_Size4-Regular.woff\") format(\"woff\")'},\"@font-face /* 10 */\":{\"font-family\":\"MJXTEX-A\",src:'url(\"%%URL%%/MathJax_AMS-Regular.woff\") format(\"woff\")'},\"@font-face /* 11 */\":{\"font-family\":\"MJXTEX-C\",src:'url(\"%%URL%%/MathJax_Calligraphic-Regular.woff\") format(\"woff\")'},\"@font-face /* 12 */\":{\"font-family\":\"MJXTEX-C-B\",src:'url(\"%%URL%%/MathJax_Calligraphic-Bold.woff\") format(\"woff\")'},\"@font-face /* 13 */\":{\"font-family\":\"MJXTEX-FR\",src:'url(\"%%URL%%/MathJax_Fraktur-Regular.woff\") format(\"woff\")'},\"@font-face /* 14 */\":{\"font-family\":\"MJXTEX-FR-B\",src:'url(\"%%URL%%/MathJax_Fraktur-Bold.woff\") format(\"woff\")'},\"@font-face /* 15 */\":{\"font-family\":\"MJXTEX-SS\",src:'url(\"%%URL%%/MathJax_SansSerif-Regular.woff\") format(\"woff\")'},\"@font-face /* 16 */\":{\"font-family\":\"MJXTEX-SS-B\",src:'url(\"%%URL%%/MathJax_SansSerif-Bold.woff\") format(\"woff\")'},\"@font-face /* 17 */\":{\"font-family\":\"MJXTEX-SS-I\",src:'url(\"%%URL%%/MathJax_SansSerif-Italic.woff\") format(\"woff\")'},\"@font-face /* 18 */\":{\"font-family\":\"MJXTEX-SC\",src:'url(\"%%URL%%/MathJax_Script-Regular.woff\") format(\"woff\")'},\"@font-face /* 19 */\":{\"font-family\":\"MJXTEX-T\",src:'url(\"%%URL%%/MathJax_Typewriter-Regular.woff\") format(\"woff\")'},\"@font-face /* 20 */\":{\"font-family\":\"MJXTEX-V\",src:'url(\"%%URL%%/MathJax_Vector-Regular.woff\") format(\"woff\")'},\"@font-face /* 21 */\":{\"font-family\":\"MJXTEX-VB\",src:'url(\"%%URL%%/MathJax_Vector-Bold.woff\") format(\"woff\")'}}),B);function B(){return null!==a&&a.apply(this,arguments)||this}e.TeXFont=P},function(t,e,r){\"use strict\";var n=r(5),i=s(r(17)),o=s(r(18)),a=s(r(231));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{components:{loader:i,package:o,startup:a}}})},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(80),s=(o=a.AbstractDOMAdaptor,i(l,o),l.prototype.parse=function(t,e){return void 0===e&&(e=\"text/html\"),this.parser.parseFromString(t,e)},l.prototype.create=function(t,e){return e?this.document.createElementNS(e,t):this.document.createElement(t)},l.prototype.text=function(t){return this.document.createTextNode(t)},l.prototype.head=function(t){return t.head},l.prototype.body=function(t){return t.body},l.prototype.root=function(t){return t.documentElement},l.prototype.tags=function(t,e,r){void 0===r&&(r=null);var n=r?t.getElementsByTagNameNS(r,e):t.getElementsByTagName(e);return Array.from(n)},l.prototype.getElements=function(t,e){var r,n,i=[];try{for(var o=c(t),a=o.next();!a.done;a=o.next()){var s=a.value;\"string\"==typeof s?i=i.concat(Array.from(this.document.querySelectorAll(s))):Array.isArray(s)?i=i.concat(Array.from(s)):s instanceof this.window.NodeList||s instanceof this.window.HTMLCollection?i=i.concat(Array.from(s)):i.push(s)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return i},l.prototype.parent=function(t){return t.parentNode},l.prototype.append=function(t,e){return t.appendChild(e)},l.prototype.insert=function(t,e){return this.parent(e).insertBefore(t,e)},l.prototype.remove=function(t){return this.parent(t).removeChild(t)},l.prototype.replace=function(t,e){return this.parent(e).replaceChild(t,e)},l.prototype.clone=function(t){return t.cloneNode(!0)},l.prototype.split=function(t,e){return t.splitText(e)},l.prototype.next=function(t){return t.nextSibling},l.prototype.previous=function(t){return t.previousSibling},l.prototype.firstChild=function(t){return t.firstChild},l.prototype.lastChild=function(t){return t.lastChild},l.prototype.childNodes=function(t){return Array.from(t.childNodes)},l.prototype.childNode=function(t,e){return t.childNodes[e]},l.prototype.kind=function(t){return t.nodeName.toLowerCase()},l.prototype.value=function(t){return t.nodeValue||\"\"},l.prototype.textContent=function(t){return t.textContent},l.prototype.innerHTML=function(t){return t.innerHTML},l.prototype.outerHTML=function(t){return t.outerHTML},l.prototype.setAttribute=function(t,e,r,n){return void 0===n&&(n=null),n?t.setAttributeNS(n,e,r):t.setAttribute(e,r)},l.prototype.getAttribute=function(t,e){return t.getAttribute(e)},l.prototype.removeAttribute=function(t,e){return t.removeAttribute(e)},l.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},l.prototype.allAttributes=function(t){return Array.from(t.attributes).map(function(t){return{name:t.name,value:t.value}})},l.prototype.addClass=function(t,e){t.classList.add(e)},l.prototype.removeClass=function(t,e){return t.classList.remove(e)},l.prototype.hasClass=function(t,e){return t.classList.contains(e)},l.prototype.setStyle=function(t,e,r){t.style[e]=r},l.prototype.getStyle=function(t,e){return t.style[e]},l.prototype.allStyles=function(t){return t.style.cssText},l.prototype.fontSize=function(t){var e=this.window.getComputedStyle(t);return parseFloat(e.fontSize)},l.prototype.nodeSize=function(t,e,r){if(void 0===e&&(e=1),void 0===r&&(r=!1),r&&t.getBBox){var n=t.getBBox();return[n.width/e,n.height/e]}return[t.offsetWidth/e,t.offsetHeight/e]},l.prototype.nodeBBox=function(t){var e=t.getBoundingClientRect();return{left:e.left,right:e.right,top:e.top,bottom:e.bottom}},l);function l(t){var e=o.call(this,t.document)||this;return e.window=t,e.parser=new t.DOMParser,e}e.HTMLAdaptor=s},function(t,e,r){\"use strict\";var m=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var n=(i.prototype.node=function(t,e,r,n){var i,o;void 0===e&&(e={}),void 0===r&&(r=[]);var a=this.create(t,n);this.setAttributes(a,e);try{for(var s=m(r),c=s.next();!c.done;c=s.next()){var l=c.value;this.append(a,l)}}catch(t){i={error:t}}finally{try{c&&!c.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return a},i.prototype.setAttributes=function(t,e){var r,n,i,o,a,s;if(e.style&&\"string\"!=typeof e.style)try{for(var c=m(Object.keys(e.style)),l=c.next();!l.done;l=c.next()){var u=l.value;this.setStyle(t,u.replace(/-([a-z])/g,function(t,e){return e.toUpperCase()}),e.style[u])}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}if(e.properties)try{for(var h=m(Object.keys(e.properties)),f=h.next();!f.done;f=h.next())t[u=f.value]=e.properties[u]}catch(t){i={error:t}}finally{try{f&&!f.done&&(o=h.return)&&o.call(h)}finally{if(i)throw i.error}}try{for(var p=m(Object.keys(e)),d=p.next();!d.done;d=p.next())\"style\"===(u=d.value)&&\"string\"!=typeof e.style||\"properties\"===u||this.setAttribute(t,u,e[u])}catch(t){a={error:t}}finally{try{d&&!d.done&&(s=p.return)&&s.call(p)}finally{if(a)throw a.error}}},i.prototype.replace=function(t,e){return this.insert(t,e),this.remove(e),e},i.prototype.childNode=function(t,e){return this.childNodes(t)[e]},i.prototype.allClasses=function(t){var e=this.getAttribute(t,\"class\");return e?e.replace(/  +/g,\" \").replace(/^ /,\"\").replace(/ $/,\"\").split(/ /):[]},i);function i(t){void 0===t&&(t=null),this.document=t}e.AbstractDOMAdaptor=n},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(79);e.browserAdaptor=function(){return new n.HTMLAdaptor(window)}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(41),s=(o=a.AbstractMathDocument,i(c,o),c);function c(){return null!==o&&o.apply(this,arguments)||this}var l=(Object.defineProperty(u.prototype,\"name\",{get:function(){return this.constructor.NAME},enumerable:!0,configurable:!0}),u.prototype.handlesDocument=function(t){return!1},u.prototype.create=function(t,e){return new this.documentClass(t,this.adaptor,e)},u.NAME=\"generic\",u);function u(t,e){void 0===e&&(e=5),this.documentClass=s,this.adaptor=t,this.priority=e}e.AbstractHandler=l},function(t,e,r){\"use strict\";var l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(l(arguments[e]));return t},u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var h=Symbol(),c=function(t){void 0===t&&(t=null),this.next=null,this.prev=null,this.data=t};e.ListItem=c;var i=(f.prototype.toArray=function(){return Array.from(this)},f.prototype.isBefore=function(t,e){return t<e},f.prototype.push=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=u(r),o=i.next();!o.done;o=i.next()){var a=o.value,s=new c(a);s.next=this.list,s.prev=this.list.prev,(this.list.prev=s).prev.next=s}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return this},f.prototype.pop=function(){var t=this.list.prev;return t.data===h?null:(this.list.prev=t.prev,t.prev.next=this.list,t.next=t.prev=null,t.data)},f.prototype.unshift=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=u(r.slice(0).reverse()),o=i.next();!o.done;o=i.next()){var a=o.value,s=new c(a);s.next=this.list.next,s.prev=this.list,(this.list.next=s).next.prev=s}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return this},f.prototype.shift=function(){var t=this.list.next;return t.data===h?null:(this.list.next=t.next,t.next.prev=this.list,t.next=t.prev=null,t.data)},f.prototype.clear=function(){return this.list.next.prev=this.list.prev.next=null,this.list.next=this.list.prev=this.list,this},f.prototype[Symbol.iterator]=function(){var t=this.list;return{next:function(){return(t=t.next).data===h?{value:null,done:!0}:{value:t.data,done:!1}}}},f.prototype.reversed=function(){var t,e=this.list;return(t={})[Symbol.iterator]=function(){return this},t.next=function(){return(e=e.prev).data===h?{value:null,done:!0}:{value:e.data,done:!1}},t.toArray=function(){return Array.from(this)},t},f.prototype.insert=function(t,e){void 0===e&&(e=null),null===e&&(e=this.isBefore.bind(this));for(var r=new c(t),n=this.list.next;n.data!==h&&e(n.data,r.data);)n=n.next;return r.prev=n.prev,(r.next=n).prev.next=n.prev=r,this},f.prototype.sort=function(t){var e,r;void 0===t&&(t=null),null===t&&(t=this.isBefore.bind(this));var n=[];try{for(var i=u(this),o=i.next();!o.done;o=i.next()){var a=o.value;n.push(new f(a))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}for(this.list.next=this.list.prev=this.list;1<n.length;){var s=n.shift(),c=n.shift();s.merge(c,t),n.push(s)}return n.length&&(this.list=n[0].list),this},f.prototype.merge=function(t,e){var r,n,i,o,a;void 0===e&&(e=null),null===e&&(e=this.isBefore.bind(this));for(var s=this.list.next,c=t.list.next;s.data!==h&&c.data!==h;)e(c.data,s.data)?(r=l([s,c],2),c.prev.next=r[0],s.prev.next=r[1],n=l([s.prev,c.prev],2),c.prev=n[0],s.prev=n[1],i=l([t.list,this.list],2),this.list.prev.next=i[0],t.list.prev.next=i[1],o=l([t.list.prev,this.list.prev],2),this.list.prev=o[0],t.list.prev=o[1],s=(a=l([c.next,s],2))[0],c=a[1]):s=s.next;return c.data!==h&&(this.list.prev.next=t.list.next,t.list.next.prev=this.list.prev,t.list.prev.next=this.list,this.list.prev=t.list.prev,t.list.next=t.list.prev=t.list),this},f);function f(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];this.list=new c(h),this.list.next=this.list.prev=this.list,this.push.apply(this,n(t))}e.LinkedList=i},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(30),s=(o=a.AbstractFactory,i(c,o),c.prototype.create=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.node[t](e,r)},c);function c(){return null!==o&&o.apply(this,arguments)||this}e.AbstractNodeFactory=s},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(0),o=r(46),a=r(47),s=r(48),c=r(26),l=r(49),u=r(50),h=r(51),f=r(52),p=r(53),d=r(54),m=r(55),y=r(87),v=r(88),b=r(56),g=r(89),M=r(57),O=r(58),x=r(59),S=r(31),E=r(60),C=r(61),_=r(62),T=r(63),w=r(64),A=r(90),k=r(91),I=r(65),L=r(66),N=r(67),P=r(92);e.MML=((n={})[o.MmlMath.prototype.kind]=o.MmlMath,n[a.MmlMi.prototype.kind]=a.MmlMi,n[s.MmlMn.prototype.kind]=s.MmlMn,n[c.MmlMo.prototype.kind]=c.MmlMo,n[l.MmlMtext.prototype.kind]=l.MmlMtext,n[u.MmlMspace.prototype.kind]=u.MmlMspace,n[h.MmlMs.prototype.kind]=h.MmlMs,n[f.MmlMrow.prototype.kind]=f.MmlMrow,n[f.MmlInferredMrow.prototype.kind]=f.MmlInferredMrow,n[p.MmlMfrac.prototype.kind]=p.MmlMfrac,n[d.MmlMsqrt.prototype.kind]=d.MmlMsqrt,n[m.MmlMroot.prototype.kind]=m.MmlMroot,n[y.MmlMstyle.prototype.kind]=y.MmlMstyle,n[v.MmlMerror.prototype.kind]=v.MmlMerror,n[b.MmlMpadded.prototype.kind]=b.MmlMpadded,n[g.MmlMphantom.prototype.kind]=g.MmlMphantom,n[M.MmlMfenced.prototype.kind]=M.MmlMfenced,n[O.MmlMenclose.prototype.kind]=O.MmlMenclose,n[x.MmlMaction.prototype.kind]=x.MmlMaction,n[S.MmlMsub.prototype.kind]=S.MmlMsub,n[S.MmlMsup.prototype.kind]=S.MmlMsup,n[S.MmlMsubsup.prototype.kind]=S.MmlMsubsup,n[E.MmlMunder.prototype.kind]=E.MmlMunder,n[E.MmlMover.prototype.kind]=E.MmlMover,n[E.MmlMunderover.prototype.kind]=E.MmlMunderover,n[C.MmlMmultiscripts.prototype.kind]=C.MmlMmultiscripts,n[C.MmlMprescripts.prototype.kind]=C.MmlMprescripts,n[C.MmlNone.prototype.kind]=C.MmlNone,n[_.MmlMtable.prototype.kind]=_.MmlMtable,n[T.MmlMlabeledtr.prototype.kind]=T.MmlMlabeledtr,n[T.MmlMtr.prototype.kind]=T.MmlMtr,n[w.MmlMtd.prototype.kind]=w.MmlMtd,n[A.MmlMaligngroup.prototype.kind]=A.MmlMaligngroup,n[k.MmlMalignmark.prototype.kind]=k.MmlMalignmark,n[I.MmlMglyph.prototype.kind]=I.MmlMglyph,n[L.MmlSemantics.prototype.kind]=L.MmlSemantics,n[L.MmlAnnotation.prototype.kind]=L.MmlAnnotation,n[L.MmlAnnotationXML.prototype.kind]=L.MmlAnnotationXML,n[N.TeXAtom.prototype.kind]=N.TeXAtom,n[P.mathchoice.prototype.kind]=P.mathchoice,n[i.TextNode.prototype.kind]=i.TextNode,n[i.XMLNode.prototype.kind]=i.XMLNode,n)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(0);function n(t,e,r,n){return void 0===r&&(r=i.TEXCLASS.BIN),void 0===n&&(n=null),[t,e,r,n]}e.OPDEF=n,e.MO={ORD:n(0,0,i.TEXCLASS.ORD),ORD11:n(1,1,i.TEXCLASS.ORD),ORD21:n(2,1,i.TEXCLASS.ORD),ORD02:n(0,2,i.TEXCLASS.ORD),ORD55:n(5,5,i.TEXCLASS.ORD),OP:n(1,2,i.TEXCLASS.OP,{largeop:!0,movablelimits:!0,symmetric:!0}),OPFIXED:n(1,2,i.TEXCLASS.OP,{largeop:!0,movablelimits:!0}),INTEGRAL:n(0,1,i.TEXCLASS.OP,{largeop:!0,symmetric:!0}),INTEGRAL2:n(1,2,i.TEXCLASS.OP,{largeop:!0,symmetric:!0}),BIN3:n(3,3,i.TEXCLASS.BIN),BIN4:n(4,4,i.TEXCLASS.BIN),BIN01:n(0,1,i.TEXCLASS.BIN),BIN5:n(5,5,i.TEXCLASS.BIN),TALLBIN:n(4,4,i.TEXCLASS.BIN,{stretchy:!0}),BINOP:n(4,4,i.TEXCLASS.BIN,{largeop:!0,movablelimits:!0}),REL:n(5,5,i.TEXCLASS.REL),REL1:n(1,1,i.TEXCLASS.REL,{stretchy:!0}),REL4:n(4,4,i.TEXCLASS.REL),RELSTRETCH:n(5,5,i.TEXCLASS.REL,{stretchy:!0}),RELACCENT:n(5,5,i.TEXCLASS.REL,{accent:!0}),WIDEREL:n(5,5,i.TEXCLASS.REL,{accent:!0,stretchy:!0}),OPEN:n(0,0,i.TEXCLASS.OPEN,{fence:!0,stretchy:!0,symmetric:!0}),CLOSE:n(0,0,i.TEXCLASS.CLOSE,{fence:!0,stretchy:!0,symmetric:!0}),INNER:n(0,0,i.TEXCLASS.INNER),PUNCT:n(0,3,i.TEXCLASS.PUNCT),ACCENT:n(0,0,i.TEXCLASS.ORD,{accent:!0}),WIDEACCENT:n(0,0,i.TEXCLASS.ORD,{accent:!0,stretchy:!0})},e.RANGES=[[32,127,i.TEXCLASS.REL,\"BasicLatin\"],[160,255,i.TEXCLASS.ORD,\"Latin1Supplement\"],[256,383,i.TEXCLASS.ORD,\"LatinExtendedA\"],[384,591,i.TEXCLASS.ORD,\"LatinExtendedB\"],[688,767,i.TEXCLASS.ORD,\"SpacingModLetters\"],[768,879,i.TEXCLASS.ORD,\"CombDiacritMarks\"],[880,1023,i.TEXCLASS.ORD,\"GreekAndCoptic\"],[7680,7935,i.TEXCLASS.ORD,\"LatinExtendedAdditional\"],[8192,8303,i.TEXCLASS.PUNCT,\"GeneralPunctuation\"],[8304,8351,i.TEXCLASS.ORD,\"SuperAndSubscripts\"],[8352,8399,i.TEXCLASS.ORD,\"Currency\"],[8400,8447,i.TEXCLASS.ORD,\"CombDiactForSymbols\"],[8448,8527,i.TEXCLASS.ORD,\"LetterlikeSymbols\"],[8528,8591,i.TEXCLASS.ORD,\"NumberForms\"],[8592,8703,i.TEXCLASS.REL,\"Arrows\"],[8704,8959,i.TEXCLASS.BIN,\"MathOperators\"],[8960,9215,i.TEXCLASS.ORD,\"MiscTechnical\"],[9312,9471,i.TEXCLASS.ORD,\"EnclosedAlphaNums\"],[9472,9631,i.TEXCLASS.ORD,\"BoxDrawing\"],[9632,9727,i.TEXCLASS.ORD,\"GeometricShapes\"],[9984,10175,i.TEXCLASS.ORD,\"Dingbats\"],[10176,10223,i.TEXCLASS.ORD,\"MiscMathSymbolsA\"],[10224,10239,i.TEXCLASS.REL,\"SupplementalArrowsA\"],[10496,10623,i.TEXCLASS.REL,\"SupplementalArrowsB\"],[10624,10751,i.TEXCLASS.ORD,\"MiscMathSymbolsB\"],[10752,11007,i.TEXCLASS.BIN,\"SuppMathOperators\"],[11008,11263,i.TEXCLASS.ORD,\"MiscSymbolsAndArrows\"],[119808,120831,i.TEXCLASS.ORD,\"MathAlphabets\"]],e.MMLSPACING=[[0,0],[1,2],[3,3],[4,4],[0,0],[0,0],[0,3]],e.OPTABLE={prefix:{\"(\":e.MO.OPEN,\"+\":e.MO.BIN01,\"-\":e.MO.BIN01,\"[\":e.MO.OPEN,\"{\":e.MO.OPEN,\"|\":e.MO.OPEN,\"||\":[0,0,i.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],\"|||\":[0,0,i.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"\\xac\":e.MO.ORD21,\"\\xb1\":e.MO.BIN01,\"\\u2016\":[0,0,i.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2018\":[0,0,i.TEXCLASS.OPEN,{fence:!0}],\"\\u201c\":[0,0,i.TEXCLASS.OPEN,{fence:!0}],\"\\u2145\":e.MO.ORD21,\"\\u2146\":n(2,0,i.TEXCLASS.ORD),\"\\u2200\":e.MO.ORD21,\"\\u2202\":e.MO.ORD21,\"\\u2203\":e.MO.ORD21,\"\\u2204\":e.MO.ORD21,\"\\u2207\":e.MO.ORD21,\"\\u220f\":e.MO.OP,\"\\u2210\":e.MO.OP,\"\\u2211\":e.MO.OP,\"\\u2212\":e.MO.BIN01,\"\\u2213\":e.MO.BIN01,\"\\u221a\":[1,1,i.TEXCLASS.ORD,{stretchy:!0}],\"\\u221b\":e.MO.ORD11,\"\\u221c\":e.MO.ORD11,\"\\u2220\":e.MO.ORD,\"\\u2221\":e.MO.ORD,\"\\u2222\":e.MO.ORD,\"\\u222b\":e.MO.INTEGRAL,\"\\u222c\":e.MO.INTEGRAL,\"\\u222d\":e.MO.INTEGRAL,\"\\u222e\":e.MO.INTEGRAL,\"\\u222f\":e.MO.INTEGRAL,\"\\u2230\":e.MO.INTEGRAL,\"\\u2231\":e.MO.INTEGRAL,\"\\u2232\":e.MO.INTEGRAL,\"\\u2233\":e.MO.INTEGRAL,\"\\u22c0\":e.MO.OP,\"\\u22c1\":e.MO.OP,\"\\u22c2\":e.MO.OP,\"\\u22c3\":e.MO.OP,\"\\u2308\":e.MO.OPEN,\"\\u230a\":e.MO.OPEN,\"\\u2772\":e.MO.OPEN,\"\\u27e6\":e.MO.OPEN,\"\\u27e8\":e.MO.OPEN,\"\\u27ea\":e.MO.OPEN,\"\\u27ec\":e.MO.OPEN,\"\\u27ee\":e.MO.OPEN,\"\\u2980\":[0,0,i.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2983\":e.MO.OPEN,\"\\u2985\":e.MO.OPEN,\"\\u2987\":e.MO.OPEN,\"\\u2989\":e.MO.OPEN,\"\\u298b\":e.MO.OPEN,\"\\u298d\":e.MO.OPEN,\"\\u298f\":e.MO.OPEN,\"\\u2991\":e.MO.OPEN,\"\\u2993\":e.MO.OPEN,\"\\u2995\":e.MO.OPEN,\"\\u2997\":e.MO.OPEN,\"\\u29fc\":e.MO.OPEN,\"\\u2a00\":e.MO.OP,\"\\u2a01\":e.MO.OP,\"\\u2a02\":e.MO.OP,\"\\u2a03\":e.MO.OP,\"\\u2a04\":e.MO.OP,\"\\u2a05\":e.MO.OP,\"\\u2a06\":e.MO.OP,\"\\u2a07\":e.MO.OP,\"\\u2a08\":e.MO.OP,\"\\u2a09\":e.MO.OP,\"\\u2a0a\":e.MO.OP,\"\\u2a0b\":e.MO.INTEGRAL2,\"\\u2a0c\":e.MO.INTEGRAL,\"\\u2a0d\":e.MO.INTEGRAL2,\"\\u2a0e\":e.MO.INTEGRAL2,\"\\u2a0f\":e.MO.INTEGRAL2,\"\\u2a10\":e.MO.OP,\"\\u2a11\":e.MO.OP,\"\\u2a12\":e.MO.OP,\"\\u2a13\":e.MO.OP,\"\\u2a14\":e.MO.OP,\"\\u2a15\":e.MO.INTEGRAL2,\"\\u2a16\":e.MO.INTEGRAL2,\"\\u2a17\":e.MO.INTEGRAL2,\"\\u2a18\":e.MO.INTEGRAL2,\"\\u2a19\":e.MO.INTEGRAL2,\"\\u2a1a\":e.MO.INTEGRAL2,\"\\u2a1b\":e.MO.INTEGRAL2,\"\\u2a1c\":e.MO.INTEGRAL2,\"\\u2afc\":e.MO.OP,\"\\u2aff\":e.MO.OP},postfix:{\"!!\":n(1,0),\"!\":[1,0,i.TEXCLASS.CLOSE,null],\"&\":e.MO.ORD,\")\":e.MO.CLOSE,\"++\":n(0,0),\"--\":n(0,0),\"..\":n(0,0),\"...\":e.MO.ORD,\"'\":e.MO.ACCENT,\"]\":e.MO.CLOSE,\"^\":e.MO.WIDEACCENT,_:e.MO.WIDEACCENT,\"`\":e.MO.ACCENT,\"|\":e.MO.CLOSE,\"}\":e.MO.CLOSE,\"~\":e.MO.WIDEACCENT,\"||\":[0,0,i.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],\"|||\":[0,0,i.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"\\xa8\":e.MO.ACCENT,\"\\xaf\":e.MO.WIDEACCENT,\"\\xb0\":e.MO.ORD,\"\\xb4\":e.MO.ACCENT,\"\\xb8\":e.MO.ACCENT,\"\\u02c6\":e.MO.WIDEACCENT,\"\\u02c7\":e.MO.WIDEACCENT,\"\\u02c9\":e.MO.WIDEACCENT,\"\\u02ca\":e.MO.ACCENT,\"\\u02cb\":e.MO.ACCENT,\"\\u02cd\":e.MO.WIDEACCENT,\"\\u02d8\":e.MO.ACCENT,\"\\u02d9\":e.MO.ACCENT,\"\\u02da\":e.MO.ACCENT,\"\\u02dc\":e.MO.WIDEACCENT,\"\\u02dd\":e.MO.ACCENT,\"\\u02f7\":e.MO.WIDEACCENT,\"\\u0302\":e.MO.WIDEACCENT,\"\\u0311\":e.MO.ACCENT,\"\\u03f6\":e.MO.REL,\"\\u2016\":[0,0,i.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2019\":[0,0,i.TEXCLASS.CLOSE,{fence:!0}],\"\\u201d\":[0,0,i.TEXCLASS.CLOSE,{fence:!0}],\"\\u2032\":e.MO.ORD02,\"\\u203e\":e.MO.WIDEACCENT,\"\\u20db\":e.MO.ACCENT,\"\\u20dc\":e.MO.ACCENT,\"\\u2309\":e.MO.CLOSE,\"\\u230b\":e.MO.CLOSE,\"\\u23b4\":e.MO.WIDEACCENT,\"\\u23b5\":e.MO.WIDEACCENT,\"\\u23dc\":e.MO.WIDEACCENT,\"\\u23dd\":e.MO.WIDEACCENT,\"\\u23de\":e.MO.WIDEACCENT,\"\\u23df\":e.MO.WIDEACCENT,\"\\u23e0\":e.MO.WIDEACCENT,\"\\u23e1\":e.MO.WIDEACCENT,\"\\u25a0\":e.MO.BIN3,\"\\u25a1\":e.MO.BIN3,\"\\u25aa\":e.MO.BIN3,\"\\u25ab\":e.MO.BIN3,\"\\u25ad\":e.MO.BIN3,\"\\u25ae\":e.MO.BIN3,\"\\u25af\":e.MO.BIN3,\"\\u25b0\":e.MO.BIN3,\"\\u25b1\":e.MO.BIN3,\"\\u25b2\":e.MO.BIN4,\"\\u25b4\":e.MO.BIN4,\"\\u25b6\":e.MO.BIN4,\"\\u25b7\":e.MO.BIN4,\"\\u25b8\":e.MO.BIN4,\"\\u25bc\":e.MO.BIN4,\"\\u25be\":e.MO.BIN4,\"\\u25c0\":e.MO.BIN4,\"\\u25c1\":e.MO.BIN4,\"\\u25c2\":e.MO.BIN4,\"\\u25c4\":e.MO.BIN4,\"\\u25c5\":e.MO.BIN4,\"\\u25c6\":e.MO.BIN4,\"\\u25c7\":e.MO.BIN4,\"\\u25c8\":e.MO.BIN4,\"\\u25c9\":e.MO.BIN4,\"\\u25cc\":e.MO.BIN4,\"\\u25cd\":e.MO.BIN4,\"\\u25ce\":e.MO.BIN4,\"\\u25cf\":e.MO.BIN4,\"\\u25d6\":e.MO.BIN4,\"\\u25d7\":e.MO.BIN4,\"\\u25e6\":e.MO.BIN4,\"\\u266d\":e.MO.ORD02,\"\\u266e\":e.MO.ORD02,\"\\u266f\":e.MO.ORD02,\"\\u2773\":e.MO.CLOSE,\"\\u27e7\":e.MO.CLOSE,\"\\u27e9\":e.MO.CLOSE,\"\\u27eb\":e.MO.CLOSE,\"\\u27ed\":e.MO.CLOSE,\"\\u27ef\":e.MO.CLOSE,\"\\u2980\":[0,0,i.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2984\":e.MO.CLOSE,\"\\u2986\":e.MO.CLOSE,\"\\u2988\":e.MO.CLOSE,\"\\u298a\":e.MO.CLOSE,\"\\u298c\":e.MO.CLOSE,\"\\u298e\":e.MO.CLOSE,\"\\u2990\":e.MO.CLOSE,\"\\u2992\":e.MO.CLOSE,\"\\u2994\":e.MO.CLOSE,\"\\u2996\":e.MO.CLOSE,\"\\u2998\":e.MO.CLOSE,\"\\u29fd\":e.MO.CLOSE},infix:{\"!=\":e.MO.BIN4,\"#\":e.MO.ORD,$:e.MO.ORD,\"%\":[3,3,i.TEXCLASS.ORD,null],\"&&\":e.MO.BIN4,\"\":e.MO.ORD,\"*\":e.MO.BIN3,\"**\":n(1,1),\"*=\":e.MO.BIN4,\"+\":e.MO.BIN4,\"+=\":e.MO.BIN4,\",\":[0,3,i.TEXCLASS.PUNCT,{linebreakstyle:\"after\",separator:!0}],\"-\":e.MO.BIN4,\"-=\":e.MO.BIN4,\"->\":e.MO.BIN5,\".\":[0,3,i.TEXCLASS.PUNCT,{separator:!0}],\"/\":e.MO.ORD11,\"//\":n(1,1),\"/=\":e.MO.BIN4,\":\":[1,2,i.TEXCLASS.REL,null],\":=\":e.MO.BIN4,\";\":[0,3,i.TEXCLASS.PUNCT,{linebreakstyle:\"after\",separator:!0}],\"<\":e.MO.REL,\"<=\":e.MO.BIN5,\"<>\":n(1,1),\"=\":e.MO.REL,\"==\":e.MO.BIN4,\">\":e.MO.REL,\">=\":e.MO.BIN5,\"?\":[1,1,i.TEXCLASS.CLOSE,null],\"@\":e.MO.ORD11,\"\\\\\":e.MO.ORD,\"^\":e.MO.ORD11,_:e.MO.ORD11,\"|\":[2,2,i.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"||\":[2,2,i.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],\"|||\":[2,2,i.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"\\xb1\":e.MO.BIN4,\"\\xb7\":e.MO.BIN4,\"\\xd7\":e.MO.BIN4,\"\\xf7\":e.MO.BIN4,\"\\u02b9\":e.MO.ORD,\"\\u0300\":e.MO.ACCENT,\"\\u0301\":e.MO.ACCENT,\"\\u0303\":e.MO.WIDEACCENT,\"\\u0304\":e.MO.ACCENT,\"\\u0306\":e.MO.ACCENT,\"\\u0307\":e.MO.ACCENT,\"\\u0308\":e.MO.ACCENT,\"\\u030c\":e.MO.ACCENT,\"\\u0332\":e.MO.WIDEACCENT,\"\\u0338\":e.MO.REL4,\"\\u2015\":[0,0,i.TEXCLASS.ORD,{stretchy:!0}],\"\\u2017\":[0,0,i.TEXCLASS.ORD,{stretchy:!0}],\"\\u2020\":e.MO.BIN3,\"\\u2021\":e.MO.BIN3,\"\\u2022\":e.MO.BIN4,\"\\u2026\":e.MO.INNER,\"\\u2044\":e.MO.TALLBIN,\"\\u2061\":e.MO.ORD,\"\\u2062\":e.MO.ORD,\"\\u2063\":[0,0,i.TEXCLASS.ORD,{linebreakstyle:\"after\",separator:!0}],\"\\u2064\":e.MO.ORD,\"\\u20d7\":e.MO.ACCENT,\"\\u2111\":e.MO.ORD,\"\\u2113\":e.MO.ORD,\"\\u2118\":e.MO.ORD,\"\\u211c\":e.MO.ORD,\"\\u2190\":e.MO.WIDEREL,\"\\u2191\":e.MO.RELSTRETCH,\"\\u2192\":e.MO.WIDEREL,\"\\u2193\":e.MO.RELSTRETCH,\"\\u2194\":e.MO.WIDEREL,\"\\u2195\":e.MO.RELSTRETCH,\"\\u2196\":e.MO.RELSTRETCH,\"\\u2197\":e.MO.RELSTRETCH,\"\\u2198\":e.MO.RELSTRETCH,\"\\u2199\":e.MO.RELSTRETCH,\"\\u219a\":e.MO.RELACCENT,\"\\u219b\":e.MO.RELACCENT,\"\\u219c\":e.MO.WIDEREL,\"\\u219d\":e.MO.WIDEREL,\"\\u219e\":e.MO.WIDEREL,\"\\u219f\":e.MO.WIDEREL,\"\\u21a0\":e.MO.WIDEREL,\"\\u21a1\":e.MO.RELSTRETCH,\"\\u21a2\":e.MO.WIDEREL,\"\\u21a3\":e.MO.WIDEREL,\"\\u21a4\":e.MO.WIDEREL,\"\\u21a5\":e.MO.RELSTRETCH,\"\\u21a6\":e.MO.WIDEREL,\"\\u21a7\":e.MO.RELSTRETCH,\"\\u21a8\":e.MO.RELSTRETCH,\"\\u21a9\":e.MO.WIDEREL,\"\\u21aa\":e.MO.WIDEREL,\"\\u21ab\":e.MO.WIDEREL,\"\\u21ac\":e.MO.WIDEREL,\"\\u21ad\":e.MO.WIDEREL,\"\\u21ae\":e.MO.RELACCENT,\"\\u21af\":e.MO.RELSTRETCH,\"\\u21b0\":e.MO.RELSTRETCH,\"\\u21b1\":e.MO.RELSTRETCH,\"\\u21b2\":e.MO.RELSTRETCH,\"\\u21b3\":e.MO.RELSTRETCH,\"\\u21b4\":e.MO.RELSTRETCH,\"\\u21b5\":e.MO.RELSTRETCH,\"\\u21b6\":e.MO.RELACCENT,\"\\u21b7\":e.MO.RELACCENT,\"\\u21b8\":e.MO.REL,\"\\u21b9\":e.MO.WIDEREL,\"\\u21ba\":e.MO.REL,\"\\u21bb\":e.MO.REL,\"\\u21bc\":e.MO.WIDEREL,\"\\u21bd\":e.MO.WIDEREL,\"\\u21be\":e.MO.RELSTRETCH,\"\\u21bf\":e.MO.RELSTRETCH,\"\\u21c0\":e.MO.WIDEREL,\"\\u21c1\":e.MO.WIDEREL,\"\\u21c2\":e.MO.RELSTRETCH,\"\\u21c3\":e.MO.RELSTRETCH,\"\\u21c4\":e.MO.WIDEREL,\"\\u21c5\":e.MO.RELSTRETCH,\"\\u21c6\":e.MO.WIDEREL,\"\\u21c7\":e.MO.WIDEREL,\"\\u21c8\":e.MO.RELSTRETCH,\"\\u21c9\":e.MO.WIDEREL,\"\\u21ca\":e.MO.RELSTRETCH,\"\\u21cb\":e.MO.WIDEREL,\"\\u21cc\":e.MO.WIDEREL,\"\\u21cd\":e.MO.RELACCENT,\"\\u21ce\":e.MO.RELACCENT,\"\\u21cf\":e.MO.RELACCENT,\"\\u21d0\":e.MO.WIDEREL,\"\\u21d1\":e.MO.RELSTRETCH,\"\\u21d2\":e.MO.WIDEREL,\"\\u21d3\":e.MO.RELSTRETCH,\"\\u21d4\":e.MO.WIDEREL,\"\\u21d5\":e.MO.RELSTRETCH,\"\\u21d6\":e.MO.RELSTRETCH,\"\\u21d7\":e.MO.RELSTRETCH,\"\\u21d8\":e.MO.RELSTRETCH,\"\\u21d9\":e.MO.RELSTRETCH,\"\\u21da\":e.MO.WIDEREL,\"\\u21db\":e.MO.WIDEREL,\"\\u21dc\":e.MO.WIDEREL,\"\\u21dd\":e.MO.WIDEREL,\"\\u21de\":e.MO.REL,\"\\u21df\":e.MO.REL,\"\\u21e0\":e.MO.WIDEREL,\"\\u21e1\":e.MO.RELSTRETCH,\"\\u21e2\":e.MO.WIDEREL,\"\\u21e3\":e.MO.RELSTRETCH,\"\\u21e4\":e.MO.WIDEREL,\"\\u21e5\":e.MO.WIDEREL,\"\\u21e6\":e.MO.WIDEREL,\"\\u21e7\":e.MO.RELSTRETCH,\"\\u21e8\":e.MO.WIDEREL,\"\\u21e9\":e.MO.RELSTRETCH,\"\\u21ea\":e.MO.RELSTRETCH,\"\\u21eb\":e.MO.RELSTRETCH,\"\\u21ec\":e.MO.RELSTRETCH,\"\\u21ed\":e.MO.RELSTRETCH,\"\\u21ee\":e.MO.RELSTRETCH,\"\\u21ef\":e.MO.RELSTRETCH,\"\\u21f0\":e.MO.WIDEREL,\"\\u21f1\":e.MO.REL,\"\\u21f2\":e.MO.REL,\"\\u21f3\":e.MO.RELSTRETCH,\"\\u21f4\":e.MO.RELACCENT,\"\\u21f5\":e.MO.RELSTRETCH,\"\\u21f6\":e.MO.WIDEREL,\"\\u21f7\":e.MO.RELACCENT,\"\\u21f8\":e.MO.RELACCENT,\"\\u21f9\":e.MO.RELACCENT,\"\\u21fa\":e.MO.RELACCENT,\"\\u21fb\":e.MO.RELACCENT,\"\\u21fc\":e.MO.RELACCENT,\"\\u21fd\":e.MO.WIDEREL,\"\\u21fe\":e.MO.WIDEREL,\"\\u21ff\":e.MO.WIDEREL,\"\\u2201\":n(1,2,i.TEXCLASS.ORD),\"\\u2205\":e.MO.ORD,\"\\u2206\":e.MO.BIN3,\"\\u2208\":e.MO.REL,\"\\u2209\":e.MO.REL,\"\\u220a\":e.MO.REL,\"\\u220b\":e.MO.REL,\"\\u220c\":e.MO.REL,\"\\u220d\":e.MO.REL,\"\\u220e\":e.MO.BIN3,\"\\u2212\":e.MO.BIN4,\"\\u2213\":e.MO.BIN4,\"\\u2214\":e.MO.BIN4,\"\\u2215\":e.MO.TALLBIN,\"\\u2216\":e.MO.BIN4,\"\\u2217\":e.MO.BIN4,\"\\u2218\":e.MO.BIN4,\"\\u2219\":e.MO.BIN4,\"\\u221d\":e.MO.REL,\"\\u221e\":e.MO.ORD,\"\\u221f\":e.MO.REL,\"\\u2223\":e.MO.REL,\"\\u2224\":e.MO.REL,\"\\u2225\":e.MO.REL,\"\\u2226\":e.MO.REL,\"\\u2227\":e.MO.BIN4,\"\\u2228\":e.MO.BIN4,\"\\u2229\":e.MO.BIN4,\"\\u222a\":e.MO.BIN4,\"\\u2234\":e.MO.REL,\"\\u2235\":e.MO.REL,\"\\u2236\":e.MO.REL,\"\\u2237\":e.MO.REL,\"\\u2238\":e.MO.BIN4,\"\\u2239\":e.MO.REL,\"\\u223a\":e.MO.BIN4,\"\\u223b\":e.MO.REL,\"\\u223c\":e.MO.REL,\"\\u223d\":e.MO.REL,\"\\u223d\\u0331\":e.MO.BIN3,\"\\u223e\":e.MO.REL,\"\\u223f\":e.MO.BIN3,\"\\u2240\":e.MO.BIN4,\"\\u2241\":e.MO.REL,\"\\u2242\":e.MO.REL,\"\\u2242\\u0338\":e.MO.REL,\"\\u2243\":e.MO.REL,\"\\u2244\":e.MO.REL,\"\\u2245\":e.MO.REL,\"\\u2246\":e.MO.REL,\"\\u2247\":e.MO.REL,\"\\u2248\":e.MO.REL,\"\\u2249\":e.MO.REL,\"\\u224a\":e.MO.REL,\"\\u224b\":e.MO.REL,\"\\u224c\":e.MO.REL,\"\\u224d\":e.MO.REL,\"\\u224e\":e.MO.REL,\"\\u224e\\u0338\":e.MO.REL,\"\\u224f\":e.MO.REL,\"\\u224f\\u0338\":e.MO.REL,\"\\u2250\":e.MO.REL,\"\\u2251\":e.MO.REL,\"\\u2252\":e.MO.REL,\"\\u2253\":e.MO.REL,\"\\u2254\":e.MO.REL,\"\\u2255\":e.MO.REL,\"\\u2256\":e.MO.REL,\"\\u2257\":e.MO.REL,\"\\u2258\":e.MO.REL,\"\\u2259\":e.MO.REL,\"\\u225a\":e.MO.REL,\"\\u225c\":e.MO.REL,\"\\u225d\":e.MO.REL,\"\\u225e\":e.MO.REL,\"\\u225f\":e.MO.REL,\"\\u2260\":e.MO.REL,\"\\u2261\":e.MO.REL,\"\\u2262\":e.MO.REL,\"\\u2263\":e.MO.REL,\"\\u2264\":e.MO.REL,\"\\u2265\":e.MO.REL,\"\\u2266\":e.MO.REL,\"\\u2266\\u0338\":e.MO.REL,\"\\u2267\":e.MO.REL,\"\\u2268\":e.MO.REL,\"\\u2269\":e.MO.REL,\"\\u226a\":e.MO.REL,\"\\u226a\\u0338\":e.MO.REL,\"\\u226b\":e.MO.REL,\"\\u226b\\u0338\":e.MO.REL,\"\\u226c\":e.MO.REL,\"\\u226d\":e.MO.REL,\"\\u226e\":e.MO.REL,\"\\u226f\":e.MO.REL,\"\\u2270\":e.MO.REL,\"\\u2271\":e.MO.REL,\"\\u2272\":e.MO.REL,\"\\u2273\":e.MO.REL,\"\\u2274\":e.MO.REL,\"\\u2275\":e.MO.REL,\"\\u2276\":e.MO.REL,\"\\u2277\":e.MO.REL,\"\\u2278\":e.MO.REL,\"\\u2279\":e.MO.REL,\"\\u227a\":e.MO.REL,\"\\u227b\":e.MO.REL,\"\\u227c\":e.MO.REL,\"\\u227d\":e.MO.REL,\"\\u227e\":e.MO.REL,\"\\u227f\":e.MO.REL,\"\\u227f\\u0338\":e.MO.REL,\"\\u2280\":e.MO.REL,\"\\u2281\":e.MO.REL,\"\\u2282\":e.MO.REL,\"\\u2282\\u20d2\":e.MO.REL,\"\\u2283\":e.MO.REL,\"\\u2283\\u20d2\":e.MO.REL,\"\\u2284\":e.MO.REL,\"\\u2285\":e.MO.REL,\"\\u2286\":e.MO.REL,\"\\u2287\":e.MO.REL,\"\\u2288\":e.MO.REL,\"\\u2289\":e.MO.REL,\"\\u228a\":e.MO.REL,\"\\u228b\":e.MO.REL,\"\\u228c\":e.MO.BIN4,\"\\u228d\":e.MO.BIN4,\"\\u228e\":e.MO.BIN4,\"\\u228f\":e.MO.REL,\"\\u228f\\u0338\":e.MO.REL,\"\\u2290\":e.MO.REL,\"\\u2290\\u0338\":e.MO.REL,\"\\u2291\":e.MO.REL,\"\\u2292\":e.MO.REL,\"\\u2293\":e.MO.BIN4,\"\\u2294\":e.MO.BIN4,\"\\u2295\":e.MO.BIN4,\"\\u2296\":e.MO.BIN4,\"\\u2297\":e.MO.BIN4,\"\\u2298\":e.MO.BIN4,\"\\u2299\":e.MO.BIN4,\"\\u229a\":e.MO.BIN4,\"\\u229b\":e.MO.BIN4,\"\\u229c\":e.MO.BIN4,\"\\u229d\":e.MO.BIN4,\"\\u229e\":e.MO.BIN4,\"\\u229f\":e.MO.BIN4,\"\\u22a0\":e.MO.BIN4,\"\\u22a1\":e.MO.BIN4,\"\\u22a2\":e.MO.REL,\"\\u22a3\":e.MO.REL,\"\\u22a4\":e.MO.ORD55,\"\\u22a5\":e.MO.REL,\"\\u22a6\":e.MO.REL,\"\\u22a7\":e.MO.REL,\"\\u22a8\":e.MO.REL,\"\\u22a9\":e.MO.REL,\"\\u22aa\":e.MO.REL,\"\\u22ab\":e.MO.REL,\"\\u22ac\":e.MO.REL,\"\\u22ad\":e.MO.REL,\"\\u22ae\":e.MO.REL,\"\\u22af\":e.MO.REL,\"\\u22b0\":e.MO.REL,\"\\u22b1\":e.MO.REL,\"\\u22b2\":e.MO.REL,\"\\u22b3\":e.MO.REL,\"\\u22b4\":e.MO.REL,\"\\u22b5\":e.MO.REL,\"\\u22b6\":e.MO.REL,\"\\u22b7\":e.MO.REL,\"\\u22b8\":e.MO.REL,\"\\u22b9\":e.MO.REL,\"\\u22ba\":e.MO.BIN4,\"\\u22bb\":e.MO.BIN4,\"\\u22bc\":e.MO.BIN4,\"\\u22bd\":e.MO.BIN4,\"\\u22be\":e.MO.BIN3,\"\\u22bf\":e.MO.BIN3,\"\\u22c4\":e.MO.BIN4,\"\\u22c5\":e.MO.BIN4,\"\\u22c6\":e.MO.BIN4,\"\\u22c7\":e.MO.BIN4,\"\\u22c8\":e.MO.REL,\"\\u22c9\":e.MO.BIN4,\"\\u22ca\":e.MO.BIN4,\"\\u22cb\":e.MO.BIN4,\"\\u22cc\":e.MO.BIN4,\"\\u22cd\":e.MO.REL,\"\\u22ce\":e.MO.BIN4,\"\\u22cf\":e.MO.BIN4,\"\\u22d0\":e.MO.REL,\"\\u22d1\":e.MO.REL,\"\\u22d2\":e.MO.BIN4,\"\\u22d3\":e.MO.BIN4,\"\\u22d4\":e.MO.REL,\"\\u22d5\":e.MO.REL,\"\\u22d6\":e.MO.REL,\"\\u22d7\":e.MO.REL,\"\\u22d8\":e.MO.REL,\"\\u22d9\":e.MO.REL,\"\\u22da\":e.MO.REL,\"\\u22db\":e.MO.REL,\"\\u22dc\":e.MO.REL,\"\\u22dd\":e.MO.REL,\"\\u22de\":e.MO.REL,\"\\u22df\":e.MO.REL,\"\\u22e0\":e.MO.REL,\"\\u22e1\":e.MO.REL,\"\\u22e2\":e.MO.REL,\"\\u22e3\":e.MO.REL,\"\\u22e4\":e.MO.REL,\"\\u22e5\":e.MO.REL,\"\\u22e6\":e.MO.REL,\"\\u22e7\":e.MO.REL,\"\\u22e8\":e.MO.REL,\"\\u22e9\":e.MO.REL,\"\\u22ea\":e.MO.REL,\"\\u22eb\":e.MO.REL,\"\\u22ec\":e.MO.REL,\"\\u22ed\":e.MO.REL,\"\\u22ee\":e.MO.ORD55,\"\\u22ef\":e.MO.INNER,\"\\u22f0\":e.MO.REL,\"\\u22f1\":[5,5,i.TEXCLASS.INNER,null],\"\\u22f2\":e.MO.REL,\"\\u22f3\":e.MO.REL,\"\\u22f4\":e.MO.REL,\"\\u22f5\":e.MO.REL,\"\\u22f6\":e.MO.REL,\"\\u22f7\":e.MO.REL,\"\\u22f8\":e.MO.REL,\"\\u22f9\":e.MO.REL,\"\\u22fa\":e.MO.REL,\"\\u22fb\":e.MO.REL,\"\\u22fc\":e.MO.REL,\"\\u22fd\":e.MO.REL,\"\\u22fe\":e.MO.REL,\"\\u22ff\":e.MO.REL,\"\\u2305\":e.MO.BIN3,\"\\u2306\":e.MO.BIN3,\"\\u2322\":e.MO.REL4,\"\\u2323\":e.MO.REL4,\"\\u2329\":e.MO.OPEN,\"\\u232a\":e.MO.CLOSE,\"\\u23aa\":e.MO.ORD,\"\\u23af\":[0,0,i.TEXCLASS.ORD,{stretchy:!0}],\"\\u23b0\":e.MO.OPEN,\"\\u23b1\":e.MO.CLOSE,\"\\u2500\":e.MO.ORD,\"\\u25b3\":e.MO.BIN4,\"\\u25b5\":e.MO.BIN4,\"\\u25b9\":e.MO.BIN4,\"\\u25bd\":e.MO.BIN4,\"\\u25bf\":e.MO.BIN4,\"\\u25c3\":e.MO.BIN4,\"\\u25ef\":e.MO.BIN3,\"\\u2660\":e.MO.ORD,\"\\u2661\":e.MO.ORD,\"\\u2662\":e.MO.ORD,\"\\u2663\":e.MO.ORD,\"\\u2758\":e.MO.REL,\"\\u27f0\":e.MO.RELSTRETCH,\"\\u27f1\":e.MO.RELSTRETCH,\"\\u27f5\":e.MO.WIDEREL,\"\\u27f6\":e.MO.WIDEREL,\"\\u27f7\":e.MO.WIDEREL,\"\\u27f8\":e.MO.WIDEREL,\"\\u27f9\":e.MO.WIDEREL,\"\\u27fa\":e.MO.WIDEREL,\"\\u27fb\":e.MO.WIDEREL,\"\\u27fc\":e.MO.WIDEREL,\"\\u27fd\":e.MO.WIDEREL,\"\\u27fe\":e.MO.WIDEREL,\"\\u27ff\":e.MO.WIDEREL,\"\\u2900\":e.MO.RELACCENT,\"\\u2901\":e.MO.RELACCENT,\"\\u2902\":e.MO.RELACCENT,\"\\u2903\":e.MO.RELACCENT,\"\\u2904\":e.MO.RELACCENT,\"\\u2905\":e.MO.RELACCENT,\"\\u2906\":e.MO.RELACCENT,\"\\u2907\":e.MO.RELACCENT,\"\\u2908\":e.MO.REL,\"\\u2909\":e.MO.REL,\"\\u290a\":e.MO.RELSTRETCH,\"\\u290b\":e.MO.RELSTRETCH,\"\\u290c\":e.MO.WIDEREL,\"\\u290d\":e.MO.WIDEREL,\"\\u290e\":e.MO.WIDEREL,\"\\u290f\":e.MO.WIDEREL,\"\\u2910\":e.MO.WIDEREL,\"\\u2911\":e.MO.RELACCENT,\"\\u2912\":e.MO.RELSTRETCH,\"\\u2913\":e.MO.RELSTRETCH,\"\\u2914\":e.MO.RELACCENT,\"\\u2915\":e.MO.RELACCENT,\"\\u2916\":e.MO.RELACCENT,\"\\u2917\":e.MO.RELACCENT,\"\\u2918\":e.MO.RELACCENT,\"\\u2919\":e.MO.RELACCENT,\"\\u291a\":e.MO.RELACCENT,\"\\u291b\":e.MO.RELACCENT,\"\\u291c\":e.MO.RELACCENT,\"\\u291d\":e.MO.RELACCENT,\"\\u291e\":e.MO.RELACCENT,\"\\u291f\":e.MO.RELACCENT,\"\\u2920\":e.MO.RELACCENT,\"\\u2921\":e.MO.RELSTRETCH,\"\\u2922\":e.MO.RELSTRETCH,\"\\u2923\":e.MO.REL,\"\\u2924\":e.MO.REL,\"\\u2925\":e.MO.REL,\"\\u2926\":e.MO.REL,\"\\u2927\":e.MO.REL,\"\\u2928\":e.MO.REL,\"\\u2929\":e.MO.REL,\"\\u292a\":e.MO.REL,\"\\u292b\":e.MO.REL,\"\\u292c\":e.MO.REL,\"\\u292d\":e.MO.REL,\"\\u292e\":e.MO.REL,\"\\u292f\":e.MO.REL,\"\\u2930\":e.MO.REL,\"\\u2931\":e.MO.REL,\"\\u2932\":e.MO.REL,\"\\u2933\":e.MO.RELACCENT,\"\\u2934\":e.MO.REL,\"\\u2935\":e.MO.REL,\"\\u2936\":e.MO.REL,\"\\u2937\":e.MO.REL,\"\\u2938\":e.MO.REL,\"\\u2939\":e.MO.REL,\"\\u293a\":e.MO.RELACCENT,\"\\u293b\":e.MO.RELACCENT,\"\\u293c\":e.MO.RELACCENT,\"\\u293d\":e.MO.RELACCENT,\"\\u293e\":e.MO.REL,\"\\u293f\":e.MO.REL,\"\\u2940\":e.MO.REL,\"\\u2941\":e.MO.REL,\"\\u2942\":e.MO.RELACCENT,\"\\u2943\":e.MO.RELACCENT,\"\\u2944\":e.MO.RELACCENT,\"\\u2945\":e.MO.RELACCENT,\"\\u2946\":e.MO.RELACCENT,\"\\u2947\":e.MO.RELACCENT,\"\\u2948\":e.MO.RELACCENT,\"\\u2949\":e.MO.REL,\"\\u294a\":e.MO.RELACCENT,\"\\u294b\":e.MO.RELACCENT,\"\\u294c\":e.MO.REL,\"\\u294d\":e.MO.REL,\"\\u294e\":e.MO.WIDEREL,\"\\u294f\":e.MO.RELSTRETCH,\"\\u2950\":e.MO.WIDEREL,\"\\u2951\":e.MO.RELSTRETCH,\"\\u2952\":e.MO.WIDEREL,\"\\u2953\":e.MO.WIDEREL,\"\\u2954\":e.MO.RELSTRETCH,\"\\u2955\":e.MO.RELSTRETCH,\"\\u2956\":e.MO.RELSTRETCH,\"\\u2957\":e.MO.RELSTRETCH,\"\\u2958\":e.MO.RELSTRETCH,\"\\u2959\":e.MO.RELSTRETCH,\"\\u295a\":e.MO.WIDEREL,\"\\u295b\":e.MO.WIDEREL,\"\\u295c\":e.MO.RELSTRETCH,\"\\u295d\":e.MO.RELSTRETCH,\"\\u295e\":e.MO.WIDEREL,\"\\u295f\":e.MO.WIDEREL,\"\\u2960\":e.MO.RELSTRETCH,\"\\u2961\":e.MO.RELSTRETCH,\"\\u2962\":e.MO.RELACCENT,\"\\u2963\":e.MO.REL,\"\\u2964\":e.MO.RELACCENT,\"\\u2965\":e.MO.REL,\"\\u2966\":e.MO.RELACCENT,\"\\u2967\":e.MO.RELACCENT,\"\\u2968\":e.MO.RELACCENT,\"\\u2969\":e.MO.RELACCENT,\"\\u296a\":e.MO.RELACCENT,\"\\u296b\":e.MO.RELACCENT,\"\\u296c\":e.MO.RELACCENT,\"\\u296d\":e.MO.RELACCENT,\"\\u296e\":e.MO.RELSTRETCH,\"\\u296f\":e.MO.RELSTRETCH,\"\\u2970\":e.MO.RELACCENT,\"\\u2971\":e.MO.RELACCENT,\"\\u2972\":e.MO.RELACCENT,\"\\u2973\":e.MO.RELACCENT,\"\\u2974\":e.MO.RELACCENT,\"\\u2975\":e.MO.RELACCENT,\"\\u2976\":e.MO.RELACCENT,\"\\u2977\":e.MO.RELACCENT,\"\\u2978\":e.MO.RELACCENT,\"\\u2979\":e.MO.RELACCENT,\"\\u297a\":e.MO.RELACCENT,\"\\u297b\":e.MO.RELACCENT,\"\\u297c\":e.MO.RELACCENT,\"\\u297d\":e.MO.RELACCENT,\"\\u297e\":e.MO.REL,\"\\u297f\":e.MO.REL,\"\\u2981\":e.MO.BIN3,\"\\u2982\":e.MO.BIN3,\"\\u2999\":e.MO.BIN3,\"\\u299a\":e.MO.BIN3,\"\\u299b\":e.MO.BIN3,\"\\u299c\":e.MO.BIN3,\"\\u299d\":e.MO.BIN3,\"\\u299e\":e.MO.BIN3,\"\\u299f\":e.MO.BIN3,\"\\u29a0\":e.MO.BIN3,\"\\u29a1\":e.MO.BIN3,\"\\u29a2\":e.MO.BIN3,\"\\u29a3\":e.MO.BIN3,\"\\u29a4\":e.MO.BIN3,\"\\u29a5\":e.MO.BIN3,\"\\u29a6\":e.MO.BIN3,\"\\u29a7\":e.MO.BIN3,\"\\u29a8\":e.MO.BIN3,\"\\u29a9\":e.MO.BIN3,\"\\u29aa\":e.MO.BIN3,\"\\u29ab\":e.MO.BIN3,\"\\u29ac\":e.MO.BIN3,\"\\u29ad\":e.MO.BIN3,\"\\u29ae\":e.MO.BIN3,\"\\u29af\":e.MO.BIN3,\"\\u29b0\":e.MO.BIN3,\"\\u29b1\":e.MO.BIN3,\"\\u29b2\":e.MO.BIN3,\"\\u29b3\":e.MO.BIN3,\"\\u29b4\":e.MO.BIN3,\"\\u29b5\":e.MO.BIN3,\"\\u29b6\":e.MO.BIN4,\"\\u29b7\":e.MO.BIN4,\"\\u29b8\":e.MO.BIN4,\"\\u29b9\":e.MO.BIN4,\"\\u29ba\":e.MO.BIN4,\"\\u29bb\":e.MO.BIN4,\"\\u29bc\":e.MO.BIN4,\"\\u29bd\":e.MO.BIN4,\"\\u29be\":e.MO.BIN4,\"\\u29bf\":e.MO.BIN4,\"\\u29c0\":e.MO.REL,\"\\u29c1\":e.MO.REL,\"\\u29c2\":e.MO.BIN3,\"\\u29c3\":e.MO.BIN3,\"\\u29c4\":e.MO.BIN4,\"\\u29c5\":e.MO.BIN4,\"\\u29c6\":e.MO.BIN4,\"\\u29c7\":e.MO.BIN4,\"\\u29c8\":e.MO.BIN4,\"\\u29c9\":e.MO.BIN3,\"\\u29ca\":e.MO.BIN3,\"\\u29cb\":e.MO.BIN3,\"\\u29cc\":e.MO.BIN3,\"\\u29cd\":e.MO.BIN3,\"\\u29ce\":e.MO.REL,\"\\u29cf\":e.MO.REL,\"\\u29cf\\u0338\":e.MO.REL,\"\\u29d0\":e.MO.REL,\"\\u29d0\\u0338\":e.MO.REL,\"\\u29d1\":e.MO.REL,\"\\u29d2\":e.MO.REL,\"\\u29d3\":e.MO.REL,\"\\u29d4\":e.MO.REL,\"\\u29d5\":e.MO.REL,\"\\u29d6\":e.MO.BIN4,\"\\u29d7\":e.MO.BIN4,\"\\u29d8\":e.MO.BIN3,\"\\u29d9\":e.MO.BIN3,\"\\u29db\":e.MO.BIN3,\"\\u29dc\":e.MO.BIN3,\"\\u29dd\":e.MO.BIN3,\"\\u29de\":e.MO.REL,\"\\u29df\":e.MO.BIN3,\"\\u29e0\":e.MO.BIN3,\"\\u29e1\":e.MO.REL,\"\\u29e2\":e.MO.BIN4,\"\\u29e3\":e.MO.REL,\"\\u29e4\":e.MO.REL,\"\\u29e5\":e.MO.REL,\"\\u29e6\":e.MO.REL,\"\\u29e7\":e.MO.BIN3,\"\\u29e8\":e.MO.BIN3,\"\\u29e9\":e.MO.BIN3,\"\\u29ea\":e.MO.BIN3,\"\\u29eb\":e.MO.BIN3,\"\\u29ec\":e.MO.BIN3,\"\\u29ed\":e.MO.BIN3,\"\\u29ee\":e.MO.BIN3,\"\\u29ef\":e.MO.BIN3,\"\\u29f0\":e.MO.BIN3,\"\\u29f1\":e.MO.BIN3,\"\\u29f2\":e.MO.BIN3,\"\\u29f3\":e.MO.BIN3,\"\\u29f4\":e.MO.REL,\"\\u29f5\":e.MO.BIN4,\"\\u29f6\":e.MO.BIN4,\"\\u29f7\":e.MO.BIN4,\"\\u29f8\":e.MO.BIN3,\"\\u29f9\":e.MO.BIN3,\"\\u29fa\":e.MO.BIN3,\"\\u29fb\":e.MO.BIN3,\"\\u29fe\":e.MO.BIN4,\"\\u29ff\":e.MO.BIN4,\"\\u2a1d\":e.MO.BIN3,\"\\u2a1e\":e.MO.BIN3,\"\\u2a1f\":e.MO.BIN3,\"\\u2a20\":e.MO.BIN3,\"\\u2a21\":e.MO.BIN3,\"\\u2a22\":e.MO.BIN4,\"\\u2a23\":e.MO.BIN4,\"\\u2a24\":e.MO.BIN4,\"\\u2a25\":e.MO.BIN4,\"\\u2a26\":e.MO.BIN4,\"\\u2a27\":e.MO.BIN4,\"\\u2a28\":e.MO.BIN4,\"\\u2a29\":e.MO.BIN4,\"\\u2a2a\":e.MO.BIN4,\"\\u2a2b\":e.MO.BIN4,\"\\u2a2c\":e.MO.BIN4,\"\\u2a2d\":e.MO.BIN4,\"\\u2a2e\":e.MO.BIN4,\"\\u2a2f\":e.MO.BIN4,\"\\u2a30\":e.MO.BIN4,\"\\u2a31\":e.MO.BIN4,\"\\u2a32\":e.MO.BIN4,\"\\u2a33\":e.MO.BIN4,\"\\u2a34\":e.MO.BIN4,\"\\u2a35\":e.MO.BIN4,\"\\u2a36\":e.MO.BIN4,\"\\u2a37\":e.MO.BIN4,\"\\u2a38\":e.MO.BIN4,\"\\u2a39\":e.MO.BIN4,\"\\u2a3a\":e.MO.BIN4,\"\\u2a3b\":e.MO.BIN4,\"\\u2a3c\":e.MO.BIN4,\"\\u2a3d\":e.MO.BIN4,\"\\u2a3e\":e.MO.BIN4,\"\\u2a3f\":e.MO.BIN4,\"\\u2a40\":e.MO.BIN4,\"\\u2a41\":e.MO.BIN4,\"\\u2a42\":e.MO.BIN4,\"\\u2a43\":e.MO.BIN4,\"\\u2a44\":e.MO.BIN4,\"\\u2a45\":e.MO.BIN4,\"\\u2a46\":e.MO.BIN4,\"\\u2a47\":e.MO.BIN4,\"\\u2a48\":e.MO.BIN4,\"\\u2a49\":e.MO.BIN4,\"\\u2a4a\":e.MO.BIN4,\"\\u2a4b\":e.MO.BIN4,\"\\u2a4c\":e.MO.BIN4,\"\\u2a4d\":e.MO.BIN4,\"\\u2a4e\":e.MO.BIN4,\"\\u2a4f\":e.MO.BIN4,\"\\u2a50\":e.MO.BIN4,\"\\u2a51\":e.MO.BIN4,\"\\u2a52\":e.MO.BIN4,\"\\u2a53\":e.MO.BIN4,\"\\u2a54\":e.MO.BIN4,\"\\u2a55\":e.MO.BIN4,\"\\u2a56\":e.MO.BIN4,\"\\u2a57\":e.MO.BIN4,\"\\u2a58\":e.MO.BIN4,\"\\u2a59\":e.MO.REL,\"\\u2a5a\":e.MO.BIN4,\"\\u2a5b\":e.MO.BIN4,\"\\u2a5c\":e.MO.BIN4,\"\\u2a5d\":e.MO.BIN4,\"\\u2a5e\":e.MO.BIN4,\"\\u2a5f\":e.MO.BIN4,\"\\u2a60\":e.MO.BIN4,\"\\u2a61\":e.MO.BIN4,\"\\u2a62\":e.MO.BIN4,\"\\u2a63\":e.MO.BIN4,\"\\u2a64\":e.MO.BIN4,\"\\u2a65\":e.MO.BIN4,\"\\u2a66\":e.MO.REL,\"\\u2a67\":e.MO.REL,\"\\u2a68\":e.MO.REL,\"\\u2a69\":e.MO.REL,\"\\u2a6a\":e.MO.REL,\"\\u2a6b\":e.MO.REL,\"\\u2a6c\":e.MO.REL,\"\\u2a6d\":e.MO.REL,\"\\u2a6e\":e.MO.REL,\"\\u2a6f\":e.MO.REL,\"\\u2a70\":e.MO.REL,\"\\u2a71\":e.MO.BIN4,\"\\u2a72\":e.MO.BIN4,\"\\u2a73\":e.MO.REL,\"\\u2a74\":e.MO.REL,\"\\u2a75\":e.MO.REL,\"\\u2a76\":e.MO.REL,\"\\u2a77\":e.MO.REL,\"\\u2a78\":e.MO.REL,\"\\u2a79\":e.MO.REL,\"\\u2a7a\":e.MO.REL,\"\\u2a7b\":e.MO.REL,\"\\u2a7c\":e.MO.REL,\"\\u2a7d\":e.MO.REL,\"\\u2a7d\\u0338\":e.MO.REL,\"\\u2a7e\":e.MO.REL,\"\\u2a7e\\u0338\":e.MO.REL,\"\\u2a7f\":e.MO.REL,\"\\u2a80\":e.MO.REL,\"\\u2a81\":e.MO.REL,\"\\u2a82\":e.MO.REL,\"\\u2a83\":e.MO.REL,\"\\u2a84\":e.MO.REL,\"\\u2a85\":e.MO.REL,\"\\u2a86\":e.MO.REL,\"\\u2a87\":e.MO.REL,\"\\u2a88\":e.MO.REL,\"\\u2a89\":e.MO.REL,\"\\u2a8a\":e.MO.REL,\"\\u2a8b\":e.MO.REL,\"\\u2a8c\":e.MO.REL,\"\\u2a8d\":e.MO.REL,\"\\u2a8e\":e.MO.REL,\"\\u2a8f\":e.MO.REL,\"\\u2a90\":e.MO.REL,\"\\u2a91\":e.MO.REL,\"\\u2a92\":e.MO.REL,\"\\u2a93\":e.MO.REL,\"\\u2a94\":e.MO.REL,\"\\u2a95\":e.MO.REL,\"\\u2a96\":e.MO.REL,\"\\u2a97\":e.MO.REL,\"\\u2a98\":e.MO.REL,\"\\u2a99\":e.MO.REL,\"\\u2a9a\":e.MO.REL,\"\\u2a9b\":e.MO.REL,\"\\u2a9c\":e.MO.REL,\"\\u2a9d\":e.MO.REL,\"\\u2a9e\":e.MO.REL,\"\\u2a9f\":e.MO.REL,\"\\u2aa0\":e.MO.REL,\"\\u2aa1\":e.MO.REL,\"\\u2aa1\\u0338\":e.MO.REL,\"\\u2aa2\":e.MO.REL,\"\\u2aa2\\u0338\":e.MO.REL,\"\\u2aa3\":e.MO.REL,\"\\u2aa4\":e.MO.REL,\"\\u2aa5\":e.MO.REL,\"\\u2aa6\":e.MO.REL,\"\\u2aa7\":e.MO.REL,\"\\u2aa8\":e.MO.REL,\"\\u2aa9\":e.MO.REL,\"\\u2aaa\":e.MO.REL,\"\\u2aab\":e.MO.REL,\"\\u2aac\":e.MO.REL,\"\\u2aad\":e.MO.REL,\"\\u2aae\":e.MO.REL,\"\\u2aaf\":e.MO.REL,\"\\u2aaf\\u0338\":e.MO.REL,\"\\u2ab0\":e.MO.REL,\"\\u2ab0\\u0338\":e.MO.REL,\"\\u2ab1\":e.MO.REL,\"\\u2ab2\":e.MO.REL,\"\\u2ab3\":e.MO.REL,\"\\u2ab4\":e.MO.REL,\"\\u2ab5\":e.MO.REL,\"\\u2ab6\":e.MO.REL,\"\\u2ab7\":e.MO.REL,\"\\u2ab8\":e.MO.REL,\"\\u2ab9\":e.MO.REL,\"\\u2aba\":e.MO.REL,\"\\u2abb\":e.MO.REL,\"\\u2abc\":e.MO.REL,\"\\u2abd\":e.MO.REL,\"\\u2abe\":e.MO.REL,\"\\u2abf\":e.MO.REL,\"\\u2ac0\":e.MO.REL,\"\\u2ac1\":e.MO.REL,\"\\u2ac2\":e.MO.REL,\"\\u2ac3\":e.MO.REL,\"\\u2ac4\":e.MO.REL,\"\\u2ac5\":e.MO.REL,\"\\u2ac6\":e.MO.REL,\"\\u2ac7\":e.MO.REL,\"\\u2ac8\":e.MO.REL,\"\\u2ac9\":e.MO.REL,\"\\u2aca\":e.MO.REL,\"\\u2acb\":e.MO.REL,\"\\u2acc\":e.MO.REL,\"\\u2acd\":e.MO.REL,\"\\u2ace\":e.MO.REL,\"\\u2acf\":e.MO.REL,\"\\u2ad0\":e.MO.REL,\"\\u2ad1\":e.MO.REL,\"\\u2ad2\":e.MO.REL,\"\\u2ad3\":e.MO.REL,\"\\u2ad4\":e.MO.REL,\"\\u2ad5\":e.MO.REL,\"\\u2ad6\":e.MO.REL,\"\\u2ad7\":e.MO.REL,\"\\u2ad8\":e.MO.REL,\"\\u2ad9\":e.MO.REL,\"\\u2ada\":e.MO.REL,\"\\u2adb\":e.MO.REL,\"\\u2adc\":e.MO.REL,\"\\u2add\":e.MO.REL,\"\\u2ade\":e.MO.REL,\"\\u2adf\":e.MO.REL,\"\\u2ae0\":e.MO.REL,\"\\u2ae1\":e.MO.REL,\"\\u2ae2\":e.MO.REL,\"\\u2ae3\":e.MO.REL,\"\\u2ae4\":e.MO.REL,\"\\u2ae5\":e.MO.REL,\"\\u2ae6\":e.MO.REL,\"\\u2ae7\":e.MO.REL,\"\\u2ae8\":e.MO.REL,\"\\u2ae9\":e.MO.REL,\"\\u2aea\":e.MO.REL,\"\\u2aeb\":e.MO.REL,\"\\u2aec\":e.MO.REL,\"\\u2aed\":e.MO.REL,\"\\u2aee\":e.MO.REL,\"\\u2aef\":e.MO.REL,\"\\u2af0\":e.MO.REL,\"\\u2af1\":e.MO.REL,\"\\u2af2\":e.MO.REL,\"\\u2af3\":e.MO.REL,\"\\u2af4\":e.MO.BIN4,\"\\u2af5\":e.MO.BIN4,\"\\u2af6\":e.MO.BIN4,\"\\u2af7\":e.MO.REL,\"\\u2af8\":e.MO.REL,\"\\u2af9\":e.MO.REL,\"\\u2afa\":e.MO.REL,\"\\u2afb\":e.MO.BIN4,\"\\u2afd\":e.MO.BIN4,\"\\u2afe\":e.MO.BIN3,\"\\u2b45\":e.MO.RELSTRETCH,\"\\u2b46\":e.MO.RELSTRETCH,\"\\u3008\":e.MO.OPEN,\"\\u3009\":e.MO.CLOSE,\"\\ufe37\":e.MO.WIDEACCENT,\"\\ufe38\":e.MO.WIDEACCENT}},e.OPTABLE.infix[\"^\"]=e.MO.WIDEREL,e.OPTABLE.infix._=e.MO.WIDEREL,e.OPTABLE.prefix[\"\\u2223\"]=e.MO.OPEN,e.OPTABLE.prefix[\"\\u2225\"]=e.MO.OPEN,e.OPTABLE.postfix[\"\\u2223\"]=e.MO.CLOSE,e.OPTABLE.postfix[\"\\u2225\"]=e.MO.CLOSE},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=r(19),l=(a=s.AbstractMmlLayoutNode,i(u,a),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"mstyle\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"notParent\",{get:function(){return!0},enumerable:!0,configurable:!0}),u.prototype.setChildInheritedAttributes=function(t,e,r,n){var i=this.attributes.getExplicit(\"scriptlevel\");null!=i&&((i=i.toString()).match(/^\\s*[-+]/)?r+=parseInt(i):r=parseInt(i));var o=this.attributes.getExplicit(\"displaystyle\");null!=o&&(e=!0===o),t=this.addInheritedAttributes(t,this.attributes.getAllAttributes()),this.childNodes[0].setInheritedAttributes(t,e,r,n)},u.defaults=o(o({},s.AbstractMmlLayoutNode.defaults),{scriptlevel:c.INHERIT,displaystyle:c.INHERIT,scriptsizemultiplier:1/Math.sqrt(2),scriptminsize:\"8px\",mathbackground:c.INHERIT,mathcolor:c.INHERIT,dir:c.INHERIT,infixlinebreakstyle:\"before\"}),u);function u(){return null!==a&&a.apply(this,arguments)||this}e.MmlMstyle=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"merror\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return-1},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.defaults=o({},s.AbstractMmlNode.defaults),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMerror=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlLayoutNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mphantom\"},enumerable:!0,configurable:!0}),l.defaults=o({},s.AbstractMmlLayoutNode.defaults),l);function l(){var t=null!==a&&a.apply(this,arguments)||this;return t.texClass=s.TEXCLASS.ORD,t}e.MmlMphantom=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=r(19),l=(a=s.AbstractMmlNode,i(u,a),Object.defineProperty(u.prototype,\"kind\",{get:function(){return\"maligngroup\"},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!0,configurable:!0}),u.prototype.setChildInheritedAttributes=function(t,e,r,n){t=this.addInheritedAttributes(t,this.attributes.getAllAttributes()),a.prototype.setChildInheritedAttributes.call(this,t,e,r,n)},u.defaults=o(o({},s.AbstractMmlNode.defaults),{groupalign:c.INHERIT}),u);function u(){return null!==a&&a.apply(this,arguments)||this}e.MmlMaligngroup=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"malignmark\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.defaults=o(o({},s.AbstractMmlNode.defaults),{edge:\"left\"}),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.MmlMalignmark=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(0),c=(a=s.AbstractMmlBaseNode,i(l,a),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"mathchoice\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"arity\",{get:function(){return 4},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"notParent\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.prototype.setInheritedAttributes=function(t,e,r,n){var i=e?0:Math.max(0,Math.min(r,2))+1,o=this.childNodes[i]||this.factory.create(\"mrow\");this.parent.replaceChild(o,this),o.setInheritedAttributes(t,e,r,n)},l.defaults=o({},s.AbstractMmlBaseNode.defaults),l);function l(){return null!==a&&a.apply(this,arguments)||this}e.mathchoice=c},function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var c=(l.allocate=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=s(r),o=i.next();!o.done;o=i.next()){var a=o.value;if(this.has(a))throw new Error(\"Bit already allocated for \"+a);if(this.next===l.MAXBIT)throw new Error(\"Maximum number of bits already allocated\");this.names.set(a,this.next),this.next<<=1}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},l.has=function(t){return this.names.has(t)},l.prototype.set=function(t){this.bits|=this.getBit(t)},l.prototype.clear=function(t){this.bits&=~this.getBit(t)},l.prototype.isSet=function(t){return!!(this.bits&this.getBit(t))},l.prototype.reset=function(){this.bits=0},l.prototype.getBit=function(t){var e=this.constructor.names.get(t);if(!e)throw new Error(\"Unknown bit-field name: \"+t);return e},l.MAXBIT=1<<31,l.next=1,l.names=new Map,l);function l(){this.bits=0}e.BitField=c,e.BitFieldClass=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r,n=(o(i,r=c),i);function i(){return null!==r&&r.apply(this,arguments)||this}return n.allocate.apply(n,a(t)),n}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,s=r(24),c=(o=s.PrioritizedList,i(l,o),l.prototype.register=function(t){return this.add(t,t.priority)},l.prototype.unregister=function(t){this.remove(t)},l.prototype.handlesDocument=function(t){var e,r;try{for(var n=a(this),i=n.next();!i.done;i=n.next()){var o=i.value.item;if(o.handlesDocument(t))return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}throw new Error(\"Can't find handler for document\")},l.prototype.document=function(t,e){return void 0===e&&(e=null),this.handlesDocument(t).create(t,e)},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.HandlerList=c},function(t,e,r){\"use strict\";var c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},l=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var u=r(45),i=(s.methodName=function(t){return\"visit\"+(t.charAt(0).toUpperCase()+t.substr(1)).replace(/[^a-z0-9_]/gi,\"_\")+\"Node\"},s.prototype.visitTree=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return this.visitNode.apply(this,l([t],e))},s.prototype.visitNode=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=this.nodeHandlers.get(t.kind)||this.visitDefault;return n.call.apply(n,l([this,t],e))},s.prototype.visitDefault=function(t){for(var e,r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];if(t instanceof u.AbstractNode)try{for(var o=c(t.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value;this.visitNode.apply(this,l([s],n))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},s.prototype.setNodeHandler=function(t,e){this.nodeHandlers.set(t,e)},s.prototype.removeNodeHandler=function(t){this.nodeHandlers.delete(t)},s);function s(t){var e,r;this.nodeHandlers=new Map;try{for(var n=c(t.getKinds()),i=n.next();!i.done;i=n.next()){var o=i.value,a=this[s.methodName(o)];a&&this.nodeHandlers.set(o,a)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}}e.AbstractVisitor=i},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(68),u=r(0),c=(o=a.MmlVisitor,i(h,o),h.prototype.visitTree=function(t){return this.visitNode(t,\"\")},h.prototype.visitTextNode=function(t,e){return this.quoteHTML(t.getText())},h.prototype.visitXMLNode=function(t,e){return\"[XML Node not implemented]\"},h.prototype.visitInferredMrowNode=function(t,e){var r,n,i=[];try{for(var o=l(t.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value;i.push(this.visitNode(s,e))}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return i.join(\"\\n\")},h.prototype.visitTeXAtomNode=function(t,e){var r,n,i=e+'<mrow class=\"MJX-TeXAtom-'+(t.texClass<0?\"NONE\":u.TEXCLASSNAMES[t.texClass])+'\"'+this.getAttributes(t)+\">\\n\",o=e;e+=\"  \";try{for(var a=l(t.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value;i+=this.visitNode(c,e)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return i+=\"\\n\"+o+\"</mrow>\"},h.prototype.visitAnnotationNode=function(t,e){return e+\"<annotation\"+this.getAttributes(t)+\">\"+this.childNodeMml(t,\"\",\"\")+\"</annotation>\"},h.prototype.visitDefault=function(t,e){var r=t.kind,n=s(t.isToken||0===t.childNodes.length?[\"\",\"\"]:[\"\\n\",e],2),i=n[0],o=n[1],a=this.childNodeMml(t,e+\"  \",i);return e+\"<\"+r+this.getAttributes(t)+\">\"+(a.match(/\\S/)?i+a+o:\"\")+\"</\"+r+\">\"},h.prototype.childNodeMml=function(t,e,r){var n,i,o=\"\";try{for(var a=l(t.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value;o+=this.visitNode(c,e)+r}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return o},h.prototype.getAttributes=function(t){var e,r,n=\"\",i=t.attributes.getAllAttributes();try{for(var o=l(Object.keys(i)),a=o.next();!a.done;a=o.next()){var s=a.value;void 0!==i[s]&&(n+=\" \"+s+'=\"'+this.quoteHTML(i[s].toString())+'\"')}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n},h.prototype.quoteHTML=function(t){return t.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\\\"/g,\"&quot;\").replace(/([\\uD800-\\uDBFF].)/g,function(t,e){return\"&#x\"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536).toString(16).toUpperCase()+\";\"}).replace(/([\\u0080-\\uD7FF\\uE000-\\uFFFF])/g,function(t,e){return\"&#x\"+e.charCodeAt(0).toString(16).toUpperCase()+\";\"})},h);function h(){return null!==o&&o.apply(this,arguments)||this}e.SerializedMmlVisitor=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=(Object.defineProperty(i.prototype,\"kind\",{get:function(){return this.node.kind},enumerable:!0,configurable:!0}),i.prototype.wrap=function(t){return this.factory.wrap(t)},i);function i(t,e){this.factory=t,this.node=e}e.AbstractWrapper=n},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var s,c=r(30),l=(s=c.AbstractFactory,i(u,s),u.prototype.wrap=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return this.create.apply(this,a([t.kind,t],e))},u);function u(){return null!==s&&s.apply(this,arguments)||this}e.AbstractWrapperFactory=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},_=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},T=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var s,a=r(41),w=r(3),c=r(100),l=r(101),u=r(102),h=r(13),f=(s=a.AbstractMathDocument,i(p,s),p.prototype.findPosition=function(t,e,r,n){var i,o;try{for(var a=T(n[t]),s=a.next();!s.done;s=a.next()){var c=s.value,l=_(c,2),u=l[0],h=l[1];if(e<=h)return{node:u,n:e,delim:r};e-=h}}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}return{node:null,n:0,delim:r}},p.prototype.mathItem=function(t,e,r){var n=t.math,i=this.findPosition(t.n,t.start.n,t.open,r),o=this.findPosition(t.n,t.end.n,t.close,r);return new this.options.MathItem(n,e,t.display,i,o)},p.prototype.findMath=function(t){var e,r,n,i,o,a,s,c,l;if(!this.processed.isSet(\"findMath\")){this.adaptor.document=this.document,t=w.userOptions({elements:[this.adaptor.body(this.document)]},t);try{for(var u=T(this.adaptor.getElements(t.elements,this.document)),h=u.next();!h.done;h=u.next()){var f=h.value,p=_([null,null],2),d=p[0],m=p[1];try{for(var y=(n=void 0,T(this.inputJax)),v=y.next();!v.done;v=y.next()){var b=v.value,g=new this.options.MathList;if(b.processStrings){null===d&&(d=(o=_(this.domStrings.find(f),2))[0],m=o[1]);try{for(var M=(a=void 0,T(b.findMath(d))),O=M.next();!O.done;O=M.next()){var x=O.value;g.push(this.mathItem(x,b,m))}}catch(t){a={error:t}}finally{try{O&&!O.done&&(s=M.return)&&s.call(M)}finally{if(a)throw a.error}}}else try{for(var S=(c=void 0,T(b.findMath(f))),E=S.next();!E.done;E=S.next()){x=E.value;var C=new this.options.MathItem(x.math,b,x.display,x.start,x.end);g.push(C)}}catch(t){c={error:t}}finally{try{E&&!E.done&&(l=S.return)&&l.call(S)}finally{if(c)throw c.error}}this.math.merge(g)}}catch(t){n={error:t}}finally{try{v&&!v.done&&(i=y.return)&&i.call(y)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{h&&!h.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}this.processed.set(\"findMath\")}return this},p.prototype.updateDocument=function(){return this.processed.isSet(\"updateDocument\")||(this.addPageElements(),this.addStyleSheet(),s.prototype.updateDocument.call(this),this.processed.set(\"updateDocument\")),this},p.prototype.addPageElements=function(){var t=this.adaptor.body(this.document),e=this.documentPageElements();e&&this.adaptor.append(t,e)},p.prototype.addStyleSheet=function(){var t=this.documentStyleSheet();if(t){var e=this.adaptor.head(this.document),r=this.findSheet(e,this.adaptor.getAttribute(t,\"id\"));r?this.adaptor.replace(t,r):this.adaptor.append(e,t)}},p.prototype.findSheet=function(t,e){var r,n;if(e)try{for(var i=T(this.adaptor.tags(t,\"style\")),o=i.next();!o.done;o=i.next()){var a=o.value;if(this.adaptor.getAttribute(a,\"id\")===e)return a}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return null},p.prototype.removeFromDocument=function(t){var e,r;if(void 0===t&&(t=!1),this.processed.isSet(\"updateDocument\"))try{for(var n=T(this.math),i=n.next();!i.done;i=n.next()){var o=i.value;o.state()>=h.STATE.INSERTED&&o.state(h.STATE.TYPESET,t)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this.processed.clear(\"updateDocument\"),this},p.prototype.documentStyleSheet=function(){return this.outputJax.styleSheet(this)},p.prototype.documentPageElements=function(){return this.outputJax.pageElements(this)},p.KIND=\"HTML\",p.OPTIONS=o(o({},a.AbstractMathDocument.OPTIONS),{renderActions:w.expandable(o(o({},a.AbstractMathDocument.OPTIONS.renderActions),{styles:[h.STATE.INSERTED+1,\"\",\"updateStyleSheet\",!1]})),MathList:l.HTMLMathList,MathItem:c.HTMLMathItem,DomStrings:null}),p);function p(t,e,r){var n=this,i=_(w.separateOptions(r,u.HTMLDomStrings.OPTIONS),2),o=i[0],a=i[1];return(n=s.call(this,t,e,o)||this).domStrings=n.options.DomStrings||new u.HTMLDomStrings(a),n.domStrings.adaptor=e,n}e.HTMLDocument=f},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(13),s=(o=a.AbstractMathItem,i(c,o),Object.defineProperty(c.prototype,\"adaptor\",{get:function(){return this.inputJax.adaptor},enumerable:!0,configurable:!0}),c.prototype.updateDocument=function(t){if(this.state()<a.STATE.INSERTED){if(this.inputJax.processStrings){var e=this.start.node;if(e===this.end.node)this.end.n&&this.end.n<this.adaptor.value(this.end.node).length&&this.adaptor.split(this.end.node,this.end.n),this.start.n&&(e=this.adaptor.split(this.start.node,this.start.n)),this.adaptor.replace(this.typesetRoot,e);else{for(this.start.n&&(e=this.adaptor.split(e,this.start.n));e!==this.end.node;){var r=this.adaptor.next(e);this.adaptor.remove(e),e=r}this.adaptor.insert(this.typesetRoot,e),this.end.n<this.adaptor.value(e).length&&this.adaptor.split(e,this.end.n),this.adaptor.remove(e)}}else this.adaptor.replace(this.typesetRoot,this.start.node);this.start.node=this.end.node=this.typesetRoot,this.start.n=this.end.n=0,this.state(a.STATE.INSERTED)}},c.prototype.updateStyleSheet=function(t){t.addStyleSheet()},c.prototype.removeFromDocument=function(t){if(void 0===t&&(t=!1),this.state()>=a.STATE.TYPESET){var e=this.start.node,r=this.adaptor.text(\"\");if(t){var n=this.start.delim+this.math+this.end.delim;if(this.inputJax.processStrings)r=this.adaptor.text(n);else{var i=this.adaptor.parse(n,\"text/html\");r=this.adaptor.firstChild(this.adaptor.body(i))}}this.adaptor.replace(r,e),this.start.node=this.end.node=r,this.start.n=this.end.n=0}},c);function c(t,e,r,n,i){return void 0===r&&(r=!0),void 0===n&&(n={node:null,n:0,delim:\"\"}),void 0===i&&(i={node:null,n:0,delim:\"\"}),o.call(this,t,e,r,n,i)||this}e.HTMLMathItem=s},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(43),s=(o=a.AbstractMathList,i(c,o),c);function c(){return null!==o&&o.apply(this,arguments)||this}e.HTMLMathList=s},function(t,e,r){\"use strict\";var s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(3),i=(o.prototype.init=function(){this.strings=[],this.string=\"\",this.snodes=[],this.nodes=[],this.stack=[]},o.prototype.getPatterns=function(){var t=n.makeArray(this.options.skipHtmlTags),e=n.makeArray(this.options.ignoreHtmlClass),r=n.makeArray(this.options.processHtmlClass);this.skipHtmlTags=new RegExp(\"^(?:\"+t.join(\"|\")+\")$\",\"i\"),this.ignoreHtmlClass=new RegExp(\"(?:^| )(?:\"+e.join(\"|\")+\")(?: |$)\"),this.processHtmlClass=new RegExp(\"(?:^| )(?:\"+r+\")(?: |$)\")},o.prototype.pushString=function(){this.string.match(/\\S/)&&(this.strings.push(this.string),this.nodes.push(this.snodes)),this.string=\"\",this.snodes=[]},o.prototype.extendString=function(t,e){this.snodes.push([t,e.length]),this.string+=e},o.prototype.handleText=function(t,e){return e||this.extendString(t,this.adaptor.value(t)),this.adaptor.next(t)},o.prototype.handleTag=function(t,e){if(!e){var r=this.options.includeHtmlTags[this.adaptor.kind(t)];this.extendString(t,r)}return this.adaptor.next(t)},o.prototype.handleContainer=function(t,e){this.pushString();var r=this.adaptor.getAttribute(t,\"class\")||\"\",n=this.adaptor.kind(t)||\"\",i=this.processHtmlClass.exec(r),o=t;return!this.adaptor.firstChild(t)||this.adaptor.getAttribute(t,\"data-MJX\")||!i&&this.skipHtmlTags.exec(n)?o=this.adaptor.next(t):(this.adaptor.next(t)&&this.stack.push([this.adaptor.next(t),e]),o=this.adaptor.firstChild(t),e=(e||this.ignoreHtmlClass.exec(r))&&!i),[o,e]},o.prototype.find=function(t){var e,r;this.init();for(var n=this.adaptor.next(t),i=!1,o=this.options.includeHtmlTags;t&&t!==n;)\"#text\"===this.adaptor.kind(t)?t=this.handleText(t,i):void 0!==o[this.adaptor.kind(t)]?t=this.handleTag(t,i):(t=(e=s(this.handleContainer(t,i),2))[0],i=e[1]),!t&&this.stack.length&&(this.pushString(),t=(r=s(this.stack.pop(),2))[0],i=r[1]);this.pushString();var a=[this.strings,this.nodes];return this.init(),a},o.OPTIONS={skipHtmlTags:[\"script\",\"noscript\",\"style\",\"textarea\",\"pre\",\"code\",\"annotation\",\"annotation-xml\"],includeHtmlTags:{br:\"\\n\",wbr:\"\",\"#comment\":\"\"},ignoreHtmlClass:\"mathjax_ignore\",processHtmlClass:\"mathjax_process\"},o);function o(t){void 0===t&&(t=null);var e=this.constructor;this.options=n.userOptions(n.defaultOptions({},e.OPTIONS),t),this.init(),this.getPatterns()}e.HTMLDomStrings=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(20);e.asyncLoad=function(n){return i.mathjax.asyncLoad?new Promise(function(e,r){var t=i.mathjax.asyncLoad(n);t instanceof Promise?t.then(function(t){return e(t)}).catch(function(t){return r(t)}):e(t)}):Promise.reject(\"Can't load '\"+n+\"': No asyncLoad method specified\")}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sum=function(t){return t.reduce(function(t,e){return t+e},0)},e.max=function(t){return t.reduce(function(t,e){return Math.max(t,e)},0)}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(29),u=r(3),h=r(106),f=r(107),s=r(6),p=r(21),d=r(4),m=r(110),y=r(27),v=r(11);r(113);var b,g=(b=a.AbstractInputJax,i(M,b),M.configure=function(t){var e,r,n=v.Configuration.empty();try{for(var i=c(t),o=i.next();!o.done;o=i.next()){var a=o.value,s=v.ConfigurationHandler.get(a);s&&n.append(s)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return n.init(n),n},M.tags=function(t,e){y.TagsFactory.addTags(e.tags),y.TagsFactory.setDefault(t.options.tags),t.tags=y.TagsFactory.getDefault(),t.tags.configuration=t},M.prototype.setMmlFactory=function(t){b.prototype.setMmlFactory.call(this,t),this._parseOptions.nodeFactory.setMmlFactory(t)},Object.defineProperty(M.prototype,\"parseOptions\",{get:function(){return this._parseOptions},enumerable:!0,configurable:!0}),M.prototype.compile=function(t,e){this.parseOptions.clear(),this.executeFilters(this.preFilters,t,e,this.parseOptions);var r,n=t.display;this.latex=t.math,this.parseOptions.tags.startEquation(t);try{r=new p.default(this.latex,{display:n,isInner:!1},this.parseOptions).mml()}catch(t){if(!(t instanceof d.default))throw t;this.parseOptions.error=!0,r=this.formatError(t)}return r=this.parseOptions.nodeFactory.create(\"node\",\"math\",[r]),n&&s.default.setAttribute(r,\"display\",\"block\"),this.parseOptions.tags.finishEquation(t),this.parseOptions.root=r,this.executeFilters(this.postFilters,t,e,this.parseOptions),this.mathNode=this.parseOptions.root,this.mathNode},M.prototype.findMath=function(t){return this.findTeX.findMath(t)},M.prototype.formatError=function(t){var e=t.message.replace(/\\n.*/,\"\");return this.parseOptions.nodeFactory.create(\"error\",e,t.id,this.latex)},M.NAME=\"TeX\",M.OPTIONS=o(o({},a.AbstractInputJax.OPTIONS),{FindTeX:null,packages:[\"base\"],digits:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)?|\\.[0-9]+)/,maxBuffer:5120}),M);function M(t){void 0===t&&(t={});var e=this,r=l(u.separateOptions(t,M.OPTIONS,h.FindTeX.OPTIONS),3),n=r[0],i=r[1],o=r[2];(e=b.call(this,i)||this).findTeX=e.options.FindTeX||new h.FindTeX(o);var a=e.options.packages,s=e.configuration=M.configure(a),c=e._parseOptions=new m.default(s,[e.options,y.TagsFactory.OPTIONS]);return u.userOptions(c.options,n),s.config(s,e),M.tags(c,s),e.postFilters.add(f.default.cleanSubSup,-5),e.postFilters.add(f.default.setInherited,-4),e.postFilters.add(f.default.cleanStretchy,-3),e.postFilters.add(f.default.cleanAttributes,-2),e.postFilters.add(f.default.combineRelations,-1),e}e.TeX=g},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),h=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(40),s=r(10),f=r(13),c=(o=a.AbstractFindMath,i(l,o),l.prototype.getPatterns=function(){var e=this,t=this.options,r=[],n=[],i=[];this.end={},this.env=this.sub=0;var o=1;t.inlineMath.forEach(function(t){return e.addPattern(r,t,!1)}),t.displayMath.forEach(function(t){return e.addPattern(r,t,!0)}),r.length&&n.push(r.sort(s.sortLength).join(\"|\")),t.processEnvironments&&(n.push(\"\\\\\\\\begin\\\\{([^}]*)\\\\}\"),this.env=o,o++),t.processEscapes&&i.push(\"\\\\\\\\([\\\\\\\\$])\"),t.processRefs&&i.push(\"(\\\\\\\\(?:eq)?ref\\\\{[^}]*\\\\})\"),i.length&&(n.push(\"(\"+i.join(\"|\")+\")\"),this.sub=o),this.start=new RegExp(n.join(\"|\"),\"g\"),this.hasPatterns=0<n.length},l.prototype.addPattern=function(t,e,r){var n=h(e,2),i=n[0],o=n[1];t.push(s.quotePattern(i)),this.end[i]=[o,r,this.endPattern(o)]},l.prototype.endPattern=function(t){return new RegExp(s.quotePattern(t)+\"|\\\\\\\\(?:[a-zA-Z]|.)|[{}]\",\"g\")},l.prototype.findEnd=function(t,e,r,n){for(var i,o=h(n,3),a=o[0],s=o[1],c=o[2],l=c.lastIndex=r.index+r[0].length,u=0;i=c.exec(t);){if(i[0]===a&&0===u)return f.protoItem(r[0],t.substr(l,i.index-l),i[0],e,r.index,i.index+i[0].length,s);\"{\"===i[0]?u++:\"}\"===i[0]&&u&&u--}return null},l.prototype.findMathInString=function(t,e,r){var n,i;for(this.start.lastIndex=0;n=this.start.exec(r);){if(void 0!==n[this.env]&&this.env){var o=\"\\\\end{\"+n[this.env]+\"}\";(i=this.findEnd(r,e,n,[o,!0,this.endPattern(o)]))&&(i.math=i.open+i.math+i.close,i.open=i.close=\"\")}else if(void 0!==n[this.sub]&&this.sub){var a=n[this.sub];o=n.index+n[this.sub].length,i=2===a.length?f.protoItem(\"\",a.substr(1),\"\",e,n.index,o):f.protoItem(\"\",a,\"\",e,n.index,o,!1)}else i=this.findEnd(r,e,n,this.end[n[0]]);i&&(t.push(i),this.start.lastIndex=i.end.n)}},l.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var r=0,n=t.length;r<n;r++)this.findMathInString(e,r,t[r]);return e},l.OPTIONS={inlineMath:[[\"\\\\(\",\"\\\\)\"]],displayMath:[[\"$$\",\"$$\"],[\"\\\\[\",\"\\\\]\"]],processEscapes:!0,processEnvironments:!0,processRefs:!0},l);function l(t){var e=o.call(this,t)||this;return e.getPatterns(),e}e.FindTeX=c},function(t,e,r){\"use strict\";var p=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var n,d=r(0),m=r(6);!function(t){t.cleanStretchy=function(t){var e,r,n=t.data;try{for(var i=p(n.getList(\"fixStretchy\")),o=i.next();!o.done;o=i.next()){var a=o.value;if(m.default.getProperty(a,\"fixStretchy\")){var s=m.default.getForm(a);s&&s[3]&&s[3].stretchy&&m.default.setAttribute(a,\"stretchy\",!1);var c=a.parent;if(!(m.default.getTexClass(a)||s&&s[2])){var l=n.nodeFactory.create(\"node\",\"TeXAtom\",[a]);c.replaceChild(l,a),l.inheritAttributesFrom(a)}m.default.removeProperties(a,\"fixStretchy\")}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.cleanAttributes=function(t){t.data.root.walkTree(function(t,e){var r,n,i=t.attributes;try{for(var o=p(i.getExplicitNames()),a=o.next();!a.done;a=o.next()){var s=a.value;i.attributes[s]===t.attributes.getInherited(s)&&delete i.attributes[s]}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},{})},t.combineRelations=function(t){var e,r;try{for(var n=p(t.data.getList(\"mo\")),i=n.next();!i.done;i=n.next()){var o=i.value;if(!o.getProperty(\"relationsCombined\")&&o.parent&&(!o.parent||m.default.isType(o.parent,\"mrow\"))&&m.default.getTexClass(o)===d.TEXCLASS.REL){for(var a=o.parent,s=void 0,c=a.childNodes,l=c.indexOf(o)+1,u=m.default.getProperty(o,\"variantForm\");l<c.length&&(s=c[l])&&m.default.isType(s,\"mo\")&&m.default.getTexClass(s)===d.TEXCLASS.REL;){if(u!==m.default.getProperty(s,\"variantForm\")||!f(o,s)){null==o.attributes.getExplicit(\"rspace\")&&m.default.setAttribute(o,\"rspace\",\"0pt\"),null==s.attributes.getExplicit(\"lspace\")&&m.default.setAttribute(s,\"lspace\",\"0pt\");break}m.default.appendChildren(o,m.default.getChildren(s)),h([\"stretchy\",\"rspace\"],o,s),m.default.setProperties(o,s.getAllProperties()),c.splice(l,1),s.parent=null,s.setProperty(\"relationsCombined\",!0)}o.attributes.setInherited(\"form\",o.getForms()[0])}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}};function r(t,e,r){var n,i;try{for(var o=p(t.getList(\"m\"+e+r)),a=o.next();!a.done;a=o.next()){var s=a.value,c=s.childNodes;if(!c[s[e]]||!c[s[r]]){var l=s.parent,u=c[s[e]]?t.nodeFactory.create(\"node\",\"m\"+e,[c[s.base],c[s[e]]]):t.nodeFactory.create(\"node\",\"m\"+r,[c[s.base],c[s[r]]]);m.default.copyAttributes(s,u),l?l.replaceChild(u,s):t.root=u}}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}}var h=function(t,e,r){var n=e.attributes,i=r.attributes;t.forEach(function(t){var e=i.getExplicit(t);null!=e&&n.set(t,e)})},f=function(t,e){function r(e,r){return e.getExplicitNames().filter(function(t){return t!==r&&(\"stretchy\"!==t||e.getExplicit(\"stretchy\"))})}var n,i,o=t.attributes,a=e.attributes,s=r(o,\"lspace\"),c=r(a,\"rspace\");if(s.length!==c.length)return!1;try{for(var l=p(s),u=l.next();!u.done;u=l.next()){var h=u.value;if(o.getExplicit(h)!==a.getExplicit(h))return!1}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=l.return)&&i.call(l)}finally{if(n)throw n.error}}return!0};t.cleanSubSup=function(t){var e=t.data;e.error||(r(e,\"sub\",\"sup\"),r(e,\"under\",\"over\"))},t.setInherited=function(t){t.data.root.setInheritedAttributes({},t.math.display,0,!1)}}(n=n||{}),e.default=n},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(12).add({NJcy:\"\\u040a\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041d\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",NewLine:\"\\n\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",Not:\"\\u2aec\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotEqualTilde:\"\\u2242\\u0338\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",Ntilde:\"\\xd1\",Nu:\"\\u039d\",nGg:\"\\u22d9\\u0338\",nGt:\"\\u226b\\u20d2\",nGtv:\"\\u226b\\u0338\",nLl:\"\\u22d8\\u0338\",nLt:\"\\u226a\\u20d2\",nLtv:\"\\u226a\\u0338\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",natural:\"\\u266e\",naturals:\"\\u2115\",nbsp:\"\\xa0\",nbump:\"\\u224e\\u0338\",nbumpe:\"\\u224f\\u0338\",ncap:\"\\u2a43\",ncaron:\"\\u0148\",ncedil:\"\\u0146\",ncong:\"\\u2247\",ncongdot:\"\\u2a6d\\u0338\",ncup:\"\\u2a42\",ncy:\"\\u043d\",ndash:\"\\u2013\",ne:\"\\u2260\",neArr:\"\\u21d7\",nearhk:\"\\u2924\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",njcy:\"\\u045a\",nlArr:\"\\u21cd\",nlE:\"\\u2266\\u0338\",nldr:\"\\u2025\",nle:\"\\u2270\",nleftarrow:\"\\u219a\",nleftrightarrow:\"\\u21ae\",nleq:\"\\u2270\",nleqq:\"\\u2266\\u0338\",nleqslant:\"\\u2a7d\\u0338\",nles:\"\\u2a7d\\u0338\",nless:\"\\u226e\",nlsim:\"\\u2274\",nlt:\"\\u226e\",nltri:\"\\u22ea\",nltrie:\"\\u22ec\",nmid:\"\\u2224\",notin:\"\\u2209\",notinE:\"\\u22f9\\u0338\",notindot:\"\\u22f5\\u0338\",notinva:\"\\u2209\",notinvb:\"\\u22f7\",notinvc:\"\\u22f6\",notni:\"\\u220c\",notniva:\"\\u220c\",notnivb:\"\\u22fe\",notnivc:\"\\u22fd\",npar:\"\\u2226\",nparallel:\"\\u2226\",nparsl:\"\\u2afd\\u20e5\",npart:\"\\u2202\\u0338\",npolint:\"\\u2a14\",npr:\"\\u2280\",nprcue:\"\\u22e0\",npre:\"\\u2aaf\\u0338\",nprec:\"\\u2280\",npreceq:\"\\u2aaf\\u0338\",nrArr:\"\\u21cf\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",nshortmid:\"\\u2224\",nshortparallel:\"\\u2226\",nsim:\"\\u2241\",nsime:\"\\u2244\",nsimeq:\"\\u2244\",nsmid:\"\\u2224\",nspar:\"\\u2226\",nsqsube:\"\\u22e2\",nsqsupe:\"\\u22e3\",nsub:\"\\u2284\",nsubE:\"\\u2ac5\\u0338\",nsube:\"\\u2288\",nsubset:\"\\u2282\\u20d2\",nsubseteq:\"\\u2288\",nsubseteqq:\"\\u2ac5\\u0338\",nsucc:\"\\u2281\",nsucceq:\"\\u2ab0\\u0338\",nsup:\"\\u2285\",nsupE:\"\\u2ac6\\u0338\",nsupe:\"\\u2289\",nsupset:\"\\u2283\\u20d2\",nsupseteq:\"\\u2289\",nsupseteqq:\"\\u2ac6\\u0338\",ntgl:\"\\u2279\",ntilde:\"\\xf1\",ntlg:\"\\u2278\",ntriangleleft:\"\\u22ea\",ntrianglelefteq:\"\\u22ec\",ntriangleright:\"\\u22eb\",ntrianglerighteq:\"\\u22ed\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvHarr:\"\\u2904\",nvap:\"\\u224d\\u20d2\",nvge:\"\\u2265\\u20d2\",nvgt:\">\\u20d2\",nvinfin:\"\\u29de\",nvlArr:\"\\u2902\",nvle:\"\\u2264\\u20d2\",nvlt:\"<\\u20d2\",nvltrie:\"\\u22b4\\u20d2\",nvrArr:\"\\u2903\",nvrtrie:\"\\u22b5\\u20d2\",nvsim:\"\\u223c\\u20d2\",nwArr:\"\\u21d6\",nwarhk:\"\\u2923\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\"},\"n\")},function(t,e,r){\"use strict\";var u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},h=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},f=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(h(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var p=r(6),n=(Object.defineProperty(i.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!0,configurable:!0}),i.prototype.Push=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=u(r),o=i.next();!o.done;o=i.next()){var a=o.value;if(a){var s=p.default.isNode(a)?this._factory.create(\"mml\",a):a;s.global=this.global;var c=h(this.stack.length?this.Top().checkItem(s):[null,!0],2),l=c[0];c[1]&&(l?(this.Pop(),this.Push.apply(this,f(l))):(this.stack.push(s),s.env?(Object.assign(s.env,this.env),this.env=s.env):s.env=this.env))}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},i.prototype.Pop=function(){var t=this.stack.pop();return t.isOpen||delete t.env,this.env=this.stack.length?this.Top().env:{},t},i.prototype.Top=function(t){return void 0===t&&(t=1),this.stack.length<t?null:this.stack[this.stack.length-t]},i.prototype.Prev=function(t){var e=this.Top();return t?e.First:e.Pop()},i.prototype.toString=function(){return\"stack[\\n  \"+this.stack.join(\"\\n  \")+\"\\n]\"},i);function i(t,e,r){this._factory=t,this._env=e,this.global={},this.stack=[],this.global={isInner:r},this.stack=[this._factory.create(\"start\",this.global)],e&&(this.stack[0].env=e),this.env=this.stack[0].env}e.default=n},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(111),a=r(8),s=r(112),l=r(3),u=(h.prototype.pushParser=function(t){this.parsers.unshift(t)},h.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(h.prototype,\"parser\",{get:function(){return this.parsers[0]},enumerable:!0,configurable:!0}),h.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},h.prototype.addNode=function(t,e){var r=this.nodeLists[t];(r=r||(this.nodeLists[t]=[])).push(e)},h.prototype.getList=function(t){var e,r,n=this.nodeLists[t]||[],i=[];try{for(var o=c(n),a=o.next();!a.done;a=o.next()){var s=a.value;this.inTree(s)&&i.push(s)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return this.nodeLists[t]=i},h.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},h);function h(t,e){void 0===e&&(e=[]),this.options={},this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=new a.SubHandlers(t),this.nodeFactory=new s.NodeFactory,(this.nodeFactory.configuration=this).nodeFactory.setCreators(t.nodes),this.itemFactory=new o.default(t.items),this.itemFactory.configuration=this,l.defaultOptions.apply(void 0,i([this.options],e)),l.defaultOptions(this.options,t.options)}e.default=u},function(t,e,r){\"use strict\";var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(32),c=r(30),l=(a=s.BaseItem,o(u,a),u);function u(){return null!==a&&a.apply(this,arguments)||this}var h,f=(h=c.AbstractFactory,o(p,h),p.DefaultStackItems=((i={})[l.prototype.kind]=l,i),p);function p(){var t=null!==h&&h.apply(this,arguments)||this;return t.defaultKind=\"dummy\",t.configuration=null,t}e.default=f},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var h=r(6),o=(a.prototype.setMmlFactory=function(t){this.mmlFactory=t},a.createNode=function(t,e,r,n,i){void 0===r&&(r=[]),void 0===n&&(n={});var o=t.mmlFactory.create(e),a=o.arity;if(a===1/0||-1===a)1===r.length&&r[0].isInferred?o.setChildren(h.default.getChildren(r[0])):o.setChildren(r);else{for(var s=[],c=0,l=void 0;l=r[c];c++)if(l.isInferred){var u=t.mmlFactory.create(\"mrow\",{},h.default.getChildren(l));h.default.copyAttributes(l,u),s.push(u)}else s.push(l);o.setChildren(s)}return i&&o.appendChild(i),h.default.setProperties(o,n),o},a.createToken=function(t,e,r,n){void 0===r&&(r={}),void 0===n&&(n=\"\");var i=t.create(\"text\",n);return t.create(\"node\",e,[],r,i)},a.createText=function(t,e){return null==e?null:t.mmlFactory.create(\"text\").setText(e)},a.createError=function(t,e){var r=t.create(\"text\",e),n=t.create(\"node\",\"mtext\",[],{},r);return t.create(\"node\",\"merror\",[n])},a.prototype.set=function(t,e){this.factory[t]=e},a.prototype.setCreators=function(t){for(var e in t)this.set(e,t[e])},a.prototype.create=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=(this.factory[t]||this.factory.node).apply(void 0,i([this,e[0]],e.slice(1)));return this.configuration.addNode(e[0],n),n},a.prototype.get=function(t){return this.factory[t]},a);function a(){this.mmlFactory=null,this.factory={node:a.createNode,token:a.createToken,text:a.createText,error:a.createError}}e.NodeFactory=o},function(t,e,r){\"use strict\";var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(11),s=r(8),c=r(4),l=r(6),u=r(9),h=r(34),f=r(27);function p(t,e){var r=t.stack.env.font?{mathvariant:t.stack.env.font}:{},n=s.MapHandler.getMap(\"remap\").lookup(e),i=t.create(\"token\",\"mo\",r,n?n.char:e);l.default.setProperty(i,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",i),t.Push(i)}r(239),new u.CharacterMap(\"remap\",null,{\"-\":\"\\u2212\",\"*\":\"\\u2217\",\"`\":\"\\u2018\"}),e.Other=p;var d,m=(d=f.AbstractTags,o(y,d),y);function y(){return null!==d&&d.apply(this,arguments)||this}e.BaseTags=m,e.BaseConfiguration=a.Configuration.create(\"base\",{handler:{character:[\"command\",\"special\",\"letter\",\"digit\"],delimiter:[\"delimiter\"],macro:[\"delimiter\",\"macros\",\"mathchar0mi\",\"mathchar0mo\",\"mathchar7\"],environment:[\"environment\"]},fallback:{character:p,macro:function(t,e){throw new c.default(\"UndefinedControlSequence\",\"Undefined control sequence %1\",\"\\\\\"+e)},environment:function(t,e){throw new c.default(\"UnknownEnv\",\"Unknown environment '%1'\",e)}},items:(i={},i[h.StartItem.prototype.kind]=h.StartItem,i[h.StopItem.prototype.kind]=h.StopItem,i[h.OpenItem.prototype.kind]=h.OpenItem,i[h.CloseItem.prototype.kind]=h.CloseItem,i[h.PrimeItem.prototype.kind]=h.PrimeItem,i[h.SubsupItem.prototype.kind]=h.SubsupItem,i[h.OverItem.prototype.kind]=h.OverItem,i[h.LeftItem.prototype.kind]=h.LeftItem,i[h.RightItem.prototype.kind]=h.RightItem,i[h.BeginItem.prototype.kind]=h.BeginItem,i[h.EndItem.prototype.kind]=h.EndItem,i[h.StyleItem.prototype.kind]=h.StyleItem,i[h.PositionItem.prototype.kind]=h.PositionItem,i[h.CellItem.prototype.kind]=h.CellItem,i[h.MmlItem.prototype.kind]=h.MmlItem,i[h.FnItem.prototype.kind]=h.FnItem,i[h.NotItem.prototype.kind]=h.NotItem,i[h.DotsItem.prototype.kind]=h.DotsItem,i[h.ArrayItem.prototype.kind]=h.ArrayItem,i[h.EqnArrayItem.prototype.kind]=h.EqnArrayItem,i[h.EquationItem.prototype.kind]=h.EquationItem,i),options:{maxMacros:1e3,baseURL:\"undefined\"==typeof document||0===document.getElementsByTagName(\"base\").length?\"\":String(document.location).replace(/#.*$/,\"\")},tags:{base:m}})},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(34),s=r(7),c=r(6),l=r(4),u=r(15),h=(o=a.ArrayItem,i(f,o),Object.defineProperty(f.prototype,\"kind\",{get:function(){return\"multline\"},enumerable:!0,configurable:!0}),f.prototype.EndEntry=function(){this.table.length&&s.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.getProperty(\"shove\"),e=this.create(\"node\",\"mtd\",this.nodes,t?{columnalign:t}:{});this.setProperty(\"shove\",null),this.row.push(e),this.Clear()},f.prototype.EndRow=function(){if(1!==this.row.length)throw new l.default(\"MultlineRowsOneCol\",\"The rows within the %1 environment must have exactly one column\",\"multline\");var t=this.create(\"node\",\"mtr\",this.row);this.table.push(t),this.row=[]},f.prototype.EndTable=function(){if(o.prototype.EndTable.call(this),this.table.length){var t=this.table.length-1,e=-1;c.default.getAttribute(c.default.getChildren(this.table[0])[0],\"columnalign\")||c.default.setAttribute(c.default.getChildren(this.table[0])[0],\"columnalign\",u.TexConstant.Align.LEFT),c.default.getAttribute(c.default.getChildren(this.table[t])[0],\"columnalign\")||c.default.setAttribute(c.default.getChildren(this.table[t])[0],\"columnalign\",u.TexConstant.Align.RIGHT);var r=this.factory.configuration.tags.getTag();if(r){e=this.arraydef.side===u.TexConstant.Align.LEFT?0:this.table.length-1;var n=this.table[e],i=this.create(\"node\",\"mlabeledtr\",[r].concat(c.default.getChildren(n)));c.default.copyAttributes(n,i),this.table[e]=i}}this.factory.configuration.tags.end()},f);function f(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=o.call(this,t)||this;return n.factory.configuration.tags.start(\"multline\",!0,e[0]),n}e.MultlineItem=h},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var f=r(7),p=r(6),l=r(15),d=r(21),m=r(4),o=r(22),a=r(8),u=r(35),y=r(0),v={AmsEqnArray:function(t,e,r,n,i,o,a){var s=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),c=u.default.EqnArray(t,e,r,n,i,o,a);return f.default.setArrayAlign(c,s)},AlignAt:function(t,e,r,n){var i,o,a=e.getName(),s=\"\",c=[];if(n||(o=t.GetBrackets(\"\\\\begin{\"+a+\"}\")),(i=t.GetArgument(\"\\\\begin{\"+a+\"}\")).match(/[^0-9]/))throw new m.default(\"PositiveIntegerArg\",\"Argument to %1 must me a positive integer\",\"\\\\begin{\"+a+\"}\");for(var l=parseInt(i,10);0<l;)s+=\"rl\",c.push(\"0em 0em\"),l--;var u=c.join(\" \");if(n)return v.EqnArray(t,e,r,n,s,u);var h=v.EqnArray(t,e,r,n,s,u);return f.default.setArrayAlign(h,o)},Multline:function(t,e,r){t.Push(e),f.default.checkEqnEnv(t);var n=t.itemFactory.create(\"multline\",r,t.stack);return n.arraydef={displaystyle:!0,rowspacing:\".5em\",columnwidth:\"100%\",width:t.options.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent},n},HandleDeclareOp:function(t,e){var r=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",n=f.default.trimSpaces(t.GetArgument(e));\"\\\\\"===n.charAt(0)&&(n=n.substr(1));var i=t.GetArgument(e);i=i.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\"),t.configuration.handlers.retrieve(a.ExtensionMaps.NEW_COMMAND).add(n,new o.Macro(n,v.Macro,[\"\\\\mathop{\\\\rm \"+i+\"}\"+r]))},HandleOperatorName:function(t,e){var r=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",n=f.default.trimSpaces(t.GetArgument(e));n=n.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\"),t.string=\"\\\\mathop{\\\\rm \"+n+\"}\"+r+\" \"+t.string.slice(t.i),t.i=0},SkipLimits:function(t,e){var r=t.GetNext(),n=t.i;\"\\\\\"===r&&++t.i&&\"limits\"!==t.GetCS()&&(t.i=n)},MultiIntegral:function(t,e,r){var n=t.GetNext();if(\"\\\\\"===n){var i=t.i;n=t.GetArgument(e),t.i=i,\"\\\\limits\"===n&&(r=\"\\\\idotsint\"===e?\"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\"+r+\"}\":\"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\"+r+\"}\")}t.string=r+\" \"+t.string.slice(t.i),t.i=0},xArrow:function(t,e,r,n,i){var o={width:\"+\"+(n+i)+\"mu\",lspace:n+\"mu\"},a=t.GetBrackets(e),s=t.ParseArg(e),c=t.create(\"token\",\"mo\",{stretchy:!0,texClass:y.TEXCLASS.REL},String.fromCharCode(r)),l=t.create(\"node\",\"munderover\",[c]),u=t.create(\"node\",\"mpadded\",[s],o);if(p.default.setAttribute(u,\"voffset\",\".15em\"),p.default.setChild(l,l.over,u),a){var h=new d.default(a,t.stack.env,t.configuration).mml();u=t.create(\"node\",\"mpadded\",[h],o),p.default.setAttribute(u,\"voffset\",\"-.24em\"),p.default.setChild(l,l.under,u)}p.default.setProperty(l,\"subsupOK\",!0),t.Push(l)},HandleShove:function(t,e,r){var n=t.stack.Top();if(\"multline\"!==n.kind)throw new m.default(\"CommandOnlyAllowedInEnv\",\"%1 only allowed in %2 environment\",t.currentCS,\"multline\");if(n.Size())throw new m.default(\"CommandAtTheBeginingOfLine\",\"%1 must come at the beginning of the line\",t.currentCS);n.setProperty(\"shove\",r)},CFrac:function(t,e){var r=f.default.trimSpaces(t.GetBrackets(e,\"\")),n=t.GetArgument(e),i=t.GetArgument(e),o={l:l.TexConstant.Align.LEFT,r:l.TexConstant.Align.RIGHT,\"\":\"\"},a=new d.default(\"\\\\strut\\\\textstyle{\"+n+\"}\",t.stack.env,t.configuration).mml(),s=new d.default(\"\\\\strut\\\\textstyle{\"+i+\"}\",t.stack.env,t.configuration).mml(),c=t.create(\"node\",\"mfrac\",[a,s]);if(null==(r=o[r]))throw new m.default(\"IllegalAlign\",\"Illegal alignment specified in %1\",t.currentCS);r&&p.default.setProperties(c,{numalign:r,denomalign:r}),t.Push(c)},Genfrac:function(t,e,r,n,i,o){null==r&&(r=t.GetDelimiterArg(e)),null==n&&(n=t.GetDelimiterArg(e)),null==i&&(i=t.GetArgument(e)),null==o&&(o=f.default.trimSpaces(t.GetArgument(e)));var a=t.ParseArg(e),s=t.ParseArg(e),c=t.create(\"node\",\"mfrac\",[a,s]);if(\"\"!==i&&p.default.setAttribute(c,\"linethickness\",i),(r||n)&&(p.default.setProperty(c,\"withDelims\",!0),c=f.default.fixedFence(t.configuration,r,c,n)),\"\"!==o){var l=parseInt(o,10),u=[\"D\",\"T\",\"S\",\"SS\"][l];if(null==u)throw new m.default(\"BadMathStyleFor\",\"Bad math style for %1\",t.currentCS);c=t.create(\"node\",\"mstyle\",[c]),\"D\"===u?p.default.setProperties(c,{displaystyle:!0,scriptlevel:0}):p.default.setProperties(c,{displaystyle:!1,scriptlevel:l-1})}t.Push(c)},HandleTag:function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new m.default(\"CommandNotAllowedInEnv\",\"%1 not allowed in %2 environment\",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new m.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);var r=t.GetStar(),n=f.default.trimSpaces(t.GetArgument(e));t.tags.tag(n,r)}};v.HandleNoTag=u.default.HandleNoTag,v.HandleRef=u.default.HandleRef,v.Macro=u.default.Macro,v.Accent=u.default.Accent,v.Tilde=u.default.Tilde,v.Array=u.default.Array,v.Spacer=u.default.Spacer,v.NamedOp=u.default.NamedOp,v.EqnArray=u.default.EqnArray,e.default=v},function(t,d,m){\"use strict\";(function(t){var c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},r=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t};Object.defineProperty(d,\"__esModule\",{value:!0});var s=m(11),e=m(9),o=m(4),a=m(18),l=m(17),u=m(20),n=m(3),h=t.MathJax&&t.MathJax.config||{};function f(t,e){var r,n=t.parseOptions.options.require,i=e.substr(n.prefix.length);if(n.required.indexOf(i)<0){n.required.push(i),function(t,e){var r,n;void 0===e&&(e=[]);var i=t.parseOptions.options.require.prefix;try{for(var o=c(e),a=o.next();!a.done;a=o.next()){var s=a.value;s.substr(0,i.length)===i&&f(t,s)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}}(t,l.CONFIG.dependencies[e]);var o=s.ConfigurationHandler.get(i);if(o){var a=h[e]||{};o.options&&1===Object.keys(o.options).length&&o.options[i]&&((r={})[i]=a,a=r),t.configuration.register(o,t,a)}}}function p(t,e){var r=t.options.require,n=r.allow,i=(\"[\"===e.substr(0,1)?\"\":r.prefix)+e;if(!(n.hasOwnProperty(i)?n[i]:n.hasOwnProperty(e)?n[e]:r.defaultAllow))throw new o.default(\"BadRequire\",'Extension \"%1\" is now allowed to be loaded',i);a.Package.packages.has(i)?f(r.jax,i):u.mathjax.retryAfter(l.Loader.load(i))}d.RequireLoad=p,d.RequireMethods={Require:function(t,e){var r=t.GetArgument(e);if(r.match(/[^_a-zA-Z0-9]/)||\"\"===r)throw new o.default(\"BadPackageName\",\"Argument for %1 is not a valid package name\",e);p(t,r)}},d.options={require:{allow:n.expandable({base:!1,\"all-packages\":!1}),defaultAllow:!0,prefix:\"tex\"}},new e.CommandMap(\"require\",{require:\"Require\"},d.RequireMethods),d.RequireConfiguration=s.Configuration.create(\"require\",{handler:{macro:[\"require\"]},config:function(t,e){var r=e.parseOptions.options.require;r.jax=e,r.required=i(e.options.packages);var n=r.prefix;if(n.match(/[^_a-zA-Z0-9]/))throw Error(\"Illegal characters used in \\\\require prefix\");l.CONFIG.paths[n]||(l.CONFIG.paths[n]=\"[mathjax]/input/tex/extensions\"),r.prefix=\"[\"+n+\"]/\"},options:d.options})}).call(this,m(28))},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n,i,o=r(7),c=r(4),a=r(22),s=r(8);function l(t,e){return t.string.substr(t.i,e.length)!==e?0:e.match(/\\\\[a-z]+$/i)&&t.string.charAt(t.i+e.length).match(/[a-z]/i)?0:(t.i+=e.length,1)}(i=n=n||{}).disassembleSymbol=function(t,e){var r=[t,e.char];if(e.attributes)for(var n in e.attributes)r.push(n),r.push(e.attributes[n]);return r},i.assembleSymbol=function(t){for(var e=t[0],r=t[1],n={},i=2;i<t.length;i+=2)n[t[i]]=t[i+1];return new a.Symbol(e,r,n)},i.GetCSname=function(t,e){if(\"\\\\\"!==t.GetNext())throw new c.default(\"MissingCS\",\"%1 must be followed by a control sequence\",e);return o.default.trimSpaces(t.GetArgument(e)).substr(1)},i.GetTemplate=function(t,e,r){for(var n=t.GetNext(),i=[],o=0,a=t.i;t.i<t.string.length;){if(\"#\"===(n=t.GetNext())){if(a!==t.i&&(i[o]=t.string.substr(a,t.i-a)),!(n=t.string.charAt(++t.i)).match(/^[1-9]$/))throw new c.default(\"CantUseHash2\",\"Illegal use of # in template for %1\",r);if(parseInt(n)!==++o)throw new c.default(\"SequentialParam\",\"Parameters for %1 must be numbered sequentially\",r);a=t.i+1}else if(\"{\"===n)return a!==t.i&&(i[o]=t.string.substr(a,t.i-a)),0<i.length?[o.toString()].concat(i):o;t.i++}throw new c.default(\"MissingReplacementString\",\"Missing replacement string for definition of %1\",e)},i.GetParameter=function(t,e,r){if(null==r)return t.GetArgument(e);for(var n=t.i,i=0,o=0;t.i<t.string.length;){var a=t.string.charAt(t.i);if(\"{\"===a)t.i===n&&(o=1),t.GetArgument(e),i=t.i-n;else{if(l(t,r))return o&&(n++,i-=2),t.string.substr(n,i);if(\"\\\\\"===a){t.i++,i++,o=0;var s=t.string.substr(t.i).match(/[a-z]+|./i);s&&(t.i+=s[0].length,i=t.i-n)}else t.i++,i++,o=0}}throw new c.default(\"RunawayArgument\",\"Runaway argument for %1?\",e)},i.MatchParam=l,i.addDelimiter=function(t,e,r,n){t.configuration.handlers.retrieve(s.ExtensionMaps.NEW_DELIMITER).add(e,new a.Symbol(e,r,n))},i.addMacro=function(t,e,r,n,i){void 0===i&&(i=\"\"),t.configuration.handlers.retrieve(s.ExtensionMaps.NEW_COMMAND).add(e,new a.Macro(i||e,r,n))},i.addEnvironment=function(t,e,r,n){t.configuration.handlers.retrieve(s.ExtensionMaps.NEW_ENVIRONMENT).add(e,new a.Macro(e,r,n))},e.default=n},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(4),s=r(32),c=(o=s.BaseItem,i(l,o),Object.defineProperty(l.prototype,\"kind\",{get:function(){return\"beginEnv\"},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,\"isOpen\",{get:function(){return!0},enumerable:!0,configurable:!0}),l.prototype.checkItem=function(t){if(t.isKind(\"end\")){if(t.getName()!==this.getName())throw new a.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),t.getName());return[[this.factory.create(\"mml\",this.toMml())],!0]}if(t.isKind(\"stop\"))throw new a.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return o.prototype.checkItem.call(this,t)},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.BeginEnvItem=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var s,o=r(29),c=r(3),l=r(25),u=r(120),h=r(121),f=(s=o.AbstractInputJax,i(p,s),p.prototype.setAdaptor=function(t){s.prototype.setAdaptor.call(this,t),this.findMathML.adaptor=t,this.mathml.adaptor=t},p.prototype.setMmlFactory=function(t){s.prototype.setMmlFactory.call(this,t),this.mathml.setMmlFactory(t)},Object.defineProperty(p.prototype,\"processStrings\",{get:function(){return!1},enumerable:!0,configurable:!0}),p.prototype.compile=function(t,e){var r=t.start.node;if(!r||this.options.forceReparse){var n=this.executeFilters(this.preFilters,t,e,t.math||\"<math></math>\"),i=this.checkForErrors(this.adaptor.parse(n,\"text/\"+this.options.parseAs)),o=this.adaptor.body(i);1!==this.adaptor.childNodes(o).length&&this.error(\"MathML must consist of a single element\"),r=this.adaptor.remove(this.adaptor.firstChild(o)),\"math\"!==this.adaptor.kind(r).replace(/^[a-z]+:/,\"\")&&this.error(\"MathML must be formed by a <math> element, not <\"+this.adaptor.kind(r)+\">\")}return r=this.executeFilters(this.mmlFilters,t,e,r),this.executeFilters(this.postFilters,t,e,this.mathml.compile(r))},p.prototype.checkForErrors=function(t){var e=this.adaptor.tags(this.adaptor.body(t),\"parsererror\")[0];return e&&(\"\"===this.adaptor.textContent(e)&&this.error(\"Error processing MathML\"),this.options.parseError.call(this,e)),t},p.prototype.error=function(t){throw new Error(t)},p.prototype.findMath=function(t){return this.findMathML.findMath(t)},p.NAME=\"MathML\",p.OPTIONS=c.defaultOptions({parseAs:\"html\",forceReparse:!1,FindMathML:null,MathMLCompile:null,parseError:function(t){this.error(this.adaptor.textContent(t).replace(/\\n.*/g,\"\"))}},o.AbstractInputJax.OPTIONS),p);function p(t){void 0===t&&(t={});var e=this,r=a(c.separateOptions(t,u.FindMathML.OPTIONS,h.MathMLCompile.OPTIONS),3),n=r[0],i=r[1],o=r[2];return(e=s.call(this,n)||this).findMathML=e.options.FindMathML||new u.FindMathML(i),e.mathml=e.options.MathMLCompile||new h.MathMLCompile(o),e.mmlFilters=new l.FunctionList,e}e.MathML=f},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),d=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(40),m=\"http://www.w3.org/1998/Math/MathML\",s=(o=a.AbstractFindMath,i(c,o),c.prototype.findMath=function(t){var e=new Set;this.findMathNodes(t,e),this.findMathPrefixed(t,e);var r=this.adaptor.root(this.adaptor.document);return\"html\"===this.adaptor.kind(r)&&0===e.size&&this.findMathNS(t,e),this.processMath(e)},c.prototype.findMathNodes=function(t,e){var r,n;try{for(var i=d(this.adaptor.tags(t,\"math\")),o=i.next();!o.done;o=i.next()){var a=o.value;e.add(a)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},c.prototype.findMathPrefixed=function(t,e){var r,n,i,o,a=this.adaptor.root(this.adaptor.document);try{for(var s=d(this.adaptor.allAttributes(a)),c=s.next();!c.done;c=s.next()){var l=c.value;if(\"xmlns:\"===l.name.substr(0,6)&&l.value===m){var u=l.name.substr(6);try{for(var h=(i=void 0,d(this.adaptor.tags(t,u+\":math\"))),f=h.next();!f.done;f=h.next()){var p=f.value;e.add(p)}}catch(t){i={error:t}}finally{try{f&&!f.done&&(o=h.return)&&o.call(h)}finally{if(i)throw i.error}}}}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}},c.prototype.findMathNS=function(t,e){var r,n;try{for(var i=d(this.adaptor.tags(t,\"math\",m)),o=i.next();!o.done;o=i.next()){var a=o.value;e.add(a)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},c.prototype.processMath=function(t){var e,r,n=[];try{for(var i=d(Array.from(t)),o=i.next();!o.done;o=i.next()){var a=o.value,s=\"block\"===this.adaptor.getAttribute(a,\"display\")||\"display\"===this.adaptor.getAttribute(a,\"mode\"),c={node:a,n:0,delim:\"\"},l={node:a,n:0,delim:\"\"};n.push({math:this.adaptor.outerHTML(a),start:c,end:l,display:s})}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return n},c.OPTIONS={},c);function c(){return null!==o&&o.apply(this,arguments)||this}e.FindMathML=s},function(t,e,r){\"use strict\";var n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(0),o=r(3),a=r(12),s=(c.prototype.setMmlFactory=function(t){this.factory=t},c.prototype.compile=function(t){var e=this.makeNode(t);return e.verifyTree(this.options.verify),e.setInheritedAttributes({},!1,0,!1),e.walkTree(this.markMrows),e},c.prototype.makeNode=function(t){var e,r,n=!1,i=\"\",o=this.adaptor.kind(t).replace(/^.*:/,\"\");try{for(var a=u(this.adaptor.allClasses(t)),s=a.next();!s.done;s=a.next()){var c=s.value;c.match(/^MJX-TeXAtom-/)?(i=c.substr(12),o=\"TeXAtom\"):\"MJX-fixedlimits\"===c&&(n=!0)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}this.factory.getNodeClass(o)||this.error('Unknown node type \"'+o+'\"');var l=this.factory.create(o);return i&&this.texAtom(l,i,n),this.addAttributes(l,t),this.checkClass(l,t),this.addChildren(l,t),l},c.prototype.addAttributes=function(t,e){var r,n;try{for(var i=u(this.adaptor.allAttributes(e)),o=i.next();!o.done;o=i.next()){var a=o.value,s=a.name;if(\"class\"!==s){var c=this.filterAttribute(s,a.value);if(null!==c){var l=c.toLowerCase();\"true\"===l||\"false\"===l?t.attributes.set(s,\"true\"===l):t.attributes.set(s,c)}}}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},c.prototype.filterAttribute=function(t,e){return e},c.prototype.addChildren=function(t,e){var r,n;if(0!==t.arity)try{for(var i=u(this.adaptor.childNodes(e)),o=i.next();!o.done;o=i.next()){var a=o.value,s=this.adaptor.kind(a);if(\"#comment\"!==s)if(\"#text\"===s)this.addText(t,a);else if(t.isKind(\"annotation-xml\"))t.appendChild(this.factory.create(\"XML\").setXML(a));else{var c=t.appendChild(this.makeNode(a));0===c.arity&&this.adaptor.childNodes(a).length&&(this.options.fixMisplacedChildren?this.addChildren(t,a):c.mError(\"There should not be children for \"+c.kind+\" nodes\",this.options.verify,!0))}}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},c.prototype.addText=function(t,e){var r=this.adaptor.value(e);(t.isToken||t.getProperty(\"isChars\"))&&t.arity?(t.isToken&&(r=a.translate(r),r=this.trimSpace(r)),t.appendChild(this.factory.create(\"text\").setText(r))):r.match(/\\S/)&&this.error('Unexpected text node \"'+r+'\"')},c.prototype.checkClass=function(t,e){var r,n,i=[];try{for(var o=u(this.adaptor.allClasses(e)),a=o.next();!a.done;a=o.next()){var s=a.value;\"MJX-\"===s.substr(0,4)?\"MJX-variant\"===s?t.setProperty(\"variantForm\",!0):\"MJX-TeXAtom\"!==s.substr(0,11)&&t.attributes.set(\"mathvariant\",s.substr(3)):i.push(s)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}i.length&&t.attributes.set(\"class\",i.join(\" \"))},c.prototype.texAtom=function(t,e,r){t.texClass=i.TEXCLASS[e],\"OP\"!==e||r||(t.setProperty(\"movesupsub\",!0),t.attributes.setInherited(\"movablelimits\",!0))},c.prototype.markMrows=function(t){if(t.isKind(\"mrow\")&&!t.isInferred&&2<=t.childNodes.length){var e=t.childNodes[0],r=t.childNodes[t.childNodes.length-1];e.isKind(\"mo\")&&e.attributes.get(\"fence\")&&r.isKind(\"mo\")&&r.attributes.get(\"fence\")&&(e.childNodes.length&&t.setProperty(\"open\",e.getText()),r.childNodes.length&&t.setProperty(\"close\",r.getText()))}},c.prototype.trimSpace=function(t){return t.replace(/[\\t\\n\\r]/g,\" \").trim().replace(/  +/g,\" \")},c.prototype.error=function(t){throw new Error(t)},c.OPTIONS={MmlFactory:null,fixMisplacedChildren:!0,verify:{},translateEntities:!0},c.VERIFY=n({},i.AbstractMmlNode.verifyDefaults),c);function c(t){void 0===t&&(t={});var e=this.constructor;this.options=o.userOptions(o.defaultOptions({},e.OPTIONS),t),this.options.verify&&(this.options.verify=o.userOptions(o.defaultOptions({},e.VERIFY),this.options.verify))}e.MathMLCompile=s},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var s,c=r(123),l=r(125),u=r(77),h=(s=c.CommonOutputJax,i(f,s),f.prototype.escaped=function(t,e){return this.setDocument(e),this.html(\"span\",{},[this.text(t.math)])},f.prototype.styleSheet=function(t){var e=s.prototype.styleSheet.call(this,t);return this.adaptor.setAttribute(e,\"id\",f.STYLESHEETID),e},f.prototype.addClassStyles=function(t){var e;this.options.adaptiveCSS&&!t.used||(t.autoStyle&&\"unknown\"!==t.kind&&this.cssStyles.addStyles(((e={})[\"mjx-\"+t.kind]={display:\"inline-block\",\"text-align\":\"left\"},e)),s.prototype.addClassStyles.call(this,t))},f.prototype.processMath=function(t,e){this.factory.wrap(t).toCHTML(e)},f.prototype.clearCache=function(){var e,t;this.cssStyles.clear(),this.font.clearCache();try{for(var r=a(this.factory.getKinds()),n=r.next();!n.done;n=r.next()){var i=n.value;this.factory.getNodeClass(i).used=!1}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},f.prototype.unknownText=function(t,e){var r={},n=100/this.math.metrics.scale;return 100!=n&&(r[\"font-size\"]=this.fixed(n,1)+\"%\"),\"-explicitFont\"!==e&&this.cssFontStyles(this.font.getCssFont(e),r),this.html(\"mjx-utext\",{variant:e,style:r},[this.text(t)])},f.prototype.measureTextNode=function(t){var e=this.adaptor;t=e.clone(t);var r=this.html(\"mjx-measure-text\",{},[t]);e.append(e.parent(this.math.start.node),this.container),e.append(this.container,r);var n=e.nodeSize(t,this.math.metrics.em)[0]/this.math.metrics.scale;return e.remove(this.container),e.remove(r),{w:n,h:.75,d:.25}},f.prototype.getFontData=function(t){var e=s.prototype.getFontData.call(this,t);return e[0]=\"MJXZERO, \"+e[0],e},f.NAME=\"CHTML\",f.OPTIONS=o(o({},c.CommonOutputJax.OPTIONS),{adaptiveCSS:!0}),f.commonStyles={'mjx-container [space=\"1\"]':{\"margin-left\":\".111em\"},'mjx-container [space=\"2\"]':{\"margin-left\":\".167em\"},'mjx-container [space=\"3\"]':{\"margin-left\":\".222em\"},'mjx-container [space=\"4\"]':{\"margin-left\":\".278em\"},'mjx-container [space=\"5\"]':{\"margin-left\":\".333em\"},'mjx-container [rspace=\"1\"]':{\"margin-right\":\".111em\"},'mjx-container [rspace=\"2\"]':{\"margin-right\":\".167em\"},'mjx-container [rspace=\"3\"]':{\"margin-right\":\".222em\"},'mjx-container [rspace=\"4\"]':{\"margin-right\":\".278em\"},'mjx-container [rspace=\"5\"]':{\"margin-right\":\".333em\"},'mjx-container [size=\"s\"]':{\"font-size\":\"70.7%\"},'mjx-container [size=\"ss\"]':{\"font-size\":\"50%\"},'mjx-container [size=\"Tn\"]':{\"font-size\":\"60%\"},'mjx-container [size=\"sm\"]':{\"font-size\":\"85%\"},'mjx-container [size=\"lg\"]':{\"font-size\":\"120%\"},'mjx-container [size=\"Lg\"]':{\"font-size\":\"144%\"},'mjx-container [size=\"LG\"]':{\"font-size\":\"173%\"},'mjx-container [size=\"hg\"]':{\"font-size\":\"207%\"},'mjx-container [size=\"HG\"]':{\"font-size\":\"249%\"},'mjx-container [width=\"full\"]':{width:\"100%\"},\"mjx-box\":{display:\"inline-block\"},\"mjx-block\":{display:\"block\"},\"mjx-itable\":{display:\"inline-table\"},\"mjx-row\":{display:\"table-row\"},\"mjx-row > *\":{display:\"table-cell\"},\"mjx-mtext\":{display:\"inline-block\"},\"mjx-mstyle\":{display:\"inline-block\"},\"mjx-merror\":{display:\"inline-block\",color:\"red\",\"background-color\":\"yellow\"},\"mjx-mphantom\":{visibility:\"hidden\"}},f.STYLESHEETID=\"MJX-CHTML-styles\",f);function f(t){void 0===t&&(t=null);var e=s.call(this,t,l.CHTMLWrapperFactory,u.TeXFont)||this;return e.font.adaptiveCSS(e.options.adaptiveCSS),e}e.CHTML=h},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},w=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var c,a=r(42),l=r(3),u=r(124),h=r(14),f=r(71),p=(c=a.AbstractOutputJax,i(d,c),d.prototype.typeset=function(t,e){this.setDocument(e);var r=this.createNode();return this.toDOM(t,r,e),r},d.prototype.createNode=function(){var t=this.constructor.NAME;return this.html(\"mjx-container\",{class:\"MathJax\",jax:t})},d.prototype.setScale=function(t){var e=this.math.metrics.scale*this.options.scale;1!=e&&this.adaptor.setStyle(t,\"fontSize\",h.percent(e))},d.prototype.toDOM=function(t,e,r){void 0===r&&(r=null),this.setDocument(r),this.math=t,this.pxPerEm=t.metrics.ex/this.font.params.x_height,t.root.setTeXclass(null),this.setScale(e),this.nodeMap=new Map,this.container=e,this.processMath(t.root,e),this.nodeMap=null,this.executeFilters(this.postFilters,t,r,e)},d.prototype.getBBox=function(t,e){this.setDocument(e),(this.math=t).root.setTeXclass(null),this.nodeMap=new Map;var r=this.factory.wrap(t.root).getBBox();return this.nodeMap=null,r},d.prototype.getMetrics=function(t){var e,r;this.setDocument(t);var n=this.adaptor,i=this.getMetricMaps(t);try{for(var o=w(t.math),a=o.next();!a.done;a=o.next()){var s=a.value,c=i[s.display?1:0].get(n.parent(s.start.node)),l=c.em,u=c.ex,h=c.containerWidth,f=c.lineWidth,p=c.scale;s.setMetrics(l,u,h,f,p)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},d.prototype.getMetricsFor=function(t,e){var r=this.getTestElement(t,e),n=this.measureMetrics(r);return this.adaptor.remove(r),n},d.prototype.getMetricMaps=function(t){var e,r,n,i,o,a,s,c,l,u,h=this.adaptor,f=[new Map,new Map];try{for(var p=w(t.math),d=p.next();!d.done;d=p.next()){var m=d.value,y=h.parent(m.start.node),v=f[m.display?1:0];v.has(y)||v.set(y,this.getTestElement(y,m.display))}}catch(t){e={error:t}}finally{try{d&&!d.done&&(r=p.return)&&r.call(p)}finally{if(e)throw e.error}}var b=[new Map,new Map];try{for(var g=w(b.keys()),M=g.next();!M.done;M=g.next()){var O=M.value;try{for(var x=(o=void 0,w(f[O].keys())),S=x.next();!S.done;S=x.next())y=S.value,b[O].set(y,this.measureMetrics(f[O].get(y)))}catch(t){o={error:t}}finally{try{S&&!S.done&&(a=x.return)&&a.call(x)}finally{if(o)throw o.error}}}}catch(t){n={error:t}}finally{try{M&&!M.done&&(i=g.return)&&i.call(g)}finally{if(n)throw n.error}}try{for(var E=w(b.keys()),C=E.next();!C.done;C=E.next()){O=C.value;try{for(var _=(l=void 0,w(f[O].values())),T=_.next();!T.done;T=_.next())y=T.value,h.remove(y)}catch(t){l={error:t}}finally{try{T&&!T.done&&(u=_.return)&&u.call(_)}finally{if(l)throw l.error}}}}catch(t){s={error:t}}finally{try{C&&!C.done&&(c=E.return)&&c.call(E)}finally{if(s)throw s.error}}return b},d.prototype.getTestElement=function(t,e){var r=this.adaptor;if(!this.testInline){this.testInline=this.html(\"mjx-test\",{style:{display:\"inline-block\",width:\"100%\",\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":\"100%\",\"font-size-adjust\":\"none\",\"text-indent\":0,\"text-transform\":\"none\",\"letter-spacing\":\"normal\",\"word-spacing\":\"normal\",overflow:\"hidden\",height:\"1px\",\"margin-right\":\"-1px\"}},[this.html(\"mjx-left-box\",{style:{display:\"inline-block\",width:0,float:\"left\"}}),this.html(\"mjx-ex-box\",{style:{position:\"absolute\",overflow:\"hidden\",width:\"1px\",height:\"60ex\"}}),this.html(\"mjx-right-box\",{style:{display:\"inline-block\",width:0,float:\"right\"}})]),this.testDisplay=r.clone(this.testInline),r.setStyle(this.testDisplay,\"display\",\"table\"),r.setStyle(this.testDisplay,\"margin-right\",\"\"),r.setStyle(r.firstChild(this.testDisplay),\"display\",\"none\");var n=r.lastChild(this.testDisplay);r.setStyle(n,\"display\",\"table-cell\"),r.setStyle(n,\"width\",\"10000em\"),r.setStyle(n,\"float\",\"\")}return r.append(t,r.clone(e?this.testDisplay:this.testInline))},d.prototype.measureMetrics=function(t){var e=this.adaptor,r=e.fontSize(t),n=e.nodeSize(e.childNode(t,1))[1]/60||r*this.options.exFactor;return{em:r,ex:n,containerWidth:\"table\"===e.getStyle(t,\"display\")?e.nodeSize(e.lastChild(t))[0]-1:e.nodeBBox(e.lastChild(t)).left-e.nodeBBox(e.firstChild(t)).left-2,lineWidth:1e6,scale:Math.max(this.options.minScale,this.options.matchFontHeight?n/this.font.params.x_height/r:1)}},d.prototype.styleSheet=function(t){var e,r;this.setDocument(t),this.cssStyles.clear(),this.cssStyles.addStyles(this.constructor.commonStyles);try{for(var n=w(this.factory.getKinds()),i=n.next();!i.done;i=n.next()){var o=i.value;this.addClassStyles(this.factory.getNodeClass(o))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this.cssStyles.addStyles(this.font.styles),this.html(\"style\",{id:\"MJX-styles\"},[this.text(\"\\n\"+this.cssStyles.cssText+\"\\n\")])},d.prototype.addClassStyles=function(t){this.cssStyles.addStyles(t.styles)},d.prototype.setDocument=function(t){t&&(this.document=t,this.adaptor.document=t.document)},d.prototype.html=function(t,e,r,n){return void 0===e&&(e={}),void 0===r&&(r=[]),this.adaptor.node(t,e,r,n)},d.prototype.text=function(t){return this.adaptor.text(t)},d.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?\"0\":t.toFixed(e).replace(/\\.?0+$/,\"\")},d.prototype.measureText=function(t,e,r){void 0===r&&(r=[\"\",!1,!1]);var n=this.unknownText(t,e);if(\"-explicitFont\"===e){var i=this.cssFontStyles(r);this.adaptor.setAttributes(n,{style:i})}return this.measureTextNodeWithCache(n,t,e,r)},d.prototype.measureTextNodeWithCache=function(t,e,r,n){void 0===n&&(n=[\"\",!1,!1]),\"-explicitFont\"===r&&(r=[n[0],n[1]?\"T\":\"F\",n[2]?\"T\":\"F\",\"\"].join(\"-\")),this.unknownCache.has(r)||this.unknownCache.set(r,new Map);var i=this.unknownCache.get(r),o=i.get(e);if(o)return o;var a=this.measureTextNode(t);return i.set(e,a),a},d.prototype.cssFontStyles=function(t,e){void 0===e&&(e={});var r=s(t,3),n=r[0],i=r[1],o=r[2];return e[\"font-family\"]=n,i&&(e[\"font-style\"]=\"italic\"),o&&(e[\"font-weight\"]=\"bold\"),e},d.prototype.getFontData=function(t){return[(t=t||new f.Styles).get(\"font-family\"),\"italic\"===t.get(\"font-style\"),\"bold\"===t.get(\"font-weight\")]},d.NAME=\"Common\",d.OPTIONS=o(o({},a.AbstractOutputJax.OPTIONS),{scale:1,minScale:.5,matchFontHeight:!0,mtextInheritFont:!1,merrorInheritFont:!0,mathmlSpacing:!1,skipAttributes:{},exFactor:.5,displayAlign:\"center\",displayIndent:\"0\",wrapperFactory:null,font:null,cssStyles:null}),d.commonStyles={},d);function d(t,e,r){void 0===t&&(t=null),void 0===e&&(e=null),void 0===r&&(r=null);var n=this,i=s(l.separateOptions(t,r.OPTIONS),2),o=i[0],a=i[1];return(n=c.call(this,o)||this).factory=n.options.wrapperFactory||new e,(n.factory.jax=n).cssStyles=n.options.cssStyles||new u.CssStyles,n.font=n.options.font||new r(a),n.unknownCache=new Map,n}e.CommonOutputJax=p},function(t,e,r){\"use strict\";var l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var n=(Object.defineProperty(i.prototype,\"cssText\",{get:function(){return this.getStyleString()},enumerable:!0,configurable:!0}),i.prototype.addStyles=function(t){var e,r;if(t)try{for(var n=l(Object.keys(t)),i=n.next();!i.done;i=n.next()){var o=i.value;this.styles[o]||(this.styles[o]={}),Object.assign(this.styles[o],t[o])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},i.prototype.removeStyles=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];try{for(var i=l(r),o=i.next();!o.done;o=i.next()){var a=o.value;delete this.styles[a]}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},i.prototype.clear=function(){this.styles={}},i.prototype.getStyleString=function(){var e,t,r=Object.keys(this.styles),n=new Array(r.length),i=0;try{for(var o=l(r),a=o.next();!a.done;a=o.next()){var s=a.value;n[i++]=s+\" {\\n\"+this.getStyleDefString(this.styles[s])+\"\\n}\"}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return n.join(\"\\n\\n\")},i.prototype.getStyleDefString=function(t){var e,r,n=Object.keys(t),i=new Array(n.length),o=0;try{for(var a=l(n),s=a.next();!s.done;s=a.next()){var c=s.value;i[o++]=\"  \"+c+\": \"+t[c]+\";\"}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return i.join(\"\\n\")},i);function i(t){void 0===t&&(t=null),this.styles={},this.addStyles(t)}e.CssStyles=n},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(126),s=r(127),c=(o=a.CommonWrapperFactory,i(l,o),l.defaultNodes=s.CHTMLWrappers,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLWrapperFactory=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(98),s=(o=a.AbstractWrapperFactory,i(c,o),Object.defineProperty(c.prototype,\"Wrappers\",{get:function(){return this.node},enumerable:!0,configurable:!0}),c.defaultNodes={},c);function c(){var t=null!==o&&o.apply(this,arguments)||this;return t.jax=null,t}e.CommonWrapperFactory=s},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(2),o=r(130),a=r(132),s=r(134),c=r(136),l=r(138),u=r(140),h=r(142),f=r(144),p=r(146),d=r(149),m=r(150),y=r(152),v=r(74),b=r(155),g=r(37),M=r(159),O=r(160),x=r(162),S=r(164),E=r(165),C=r(167),_=r(168),T=r(170),w=r(172),A=r(174);e.CHTMLWrappers=((n={})[o.CHTMLmath.kind]=o.CHTMLmath,n[d.CHTMLmrow.kind]=d.CHTMLmrow,n[d.CHTMLinferredMrow.kind]=d.CHTMLinferredMrow,n[a.CHTMLmi.kind]=a.CHTMLmi,n[s.CHTMLmo.kind]=s.CHTMLmo,n[c.CHTMLmn.kind]=c.CHTMLmn,n[l.CHTMLms.kind]=l.CHTMLms,n[u.CHTMLmtext.kind]=u.CHTMLmtext,n[h.CHTMLmspace.kind]=h.CHTMLmspace,n[f.CHTMLmpadded.kind]=f.CHTMLmpadded,n[p.CHTMLmenclose.kind]=p.CHTMLmenclose,n[y.CHTMLmfrac.kind]=y.CHTMLmfrac,n[v.CHTMLmsqrt.kind]=v.CHTMLmsqrt,n[b.CHTMLmroot.kind]=b.CHTMLmroot,n[g.CHTMLmsub.kind]=g.CHTMLmsub,n[g.CHTMLmsup.kind]=g.CHTMLmsup,n[g.CHTMLmsubsup.kind]=g.CHTMLmsubsup,n[M.CHTMLmunder.kind]=M.CHTMLmunder,n[M.CHTMLmover.kind]=M.CHTMLmover,n[M.CHTMLmunderover.kind]=M.CHTMLmunderover,n[O.CHTMLmmultiscripts.kind]=O.CHTMLmmultiscripts,n[m.CHTMLmfenced.kind]=m.CHTMLmfenced,n[x.CHTMLmtable.kind]=x.CHTMLmtable,n[S.CHTMLmtr.kind]=S.CHTMLmtr,n[S.CHTMLmlabeledtr.kind]=S.CHTMLmlabeledtr,n[E.CHTMLmtd.kind]=E.CHTMLmtd,n[C.CHTMLmaction.kind]=C.CHTMLmaction,n[_.CHTMLmglyph.kind]=_.CHTMLmglyph,n[T.CHTMLsemantics.kind]=T.CHTMLsemantics,n[T.CHTMLannotation.kind]=T.CHTMLannotation,n[T.CHTMLannotationXML.kind]=T.CHTMLannotationXML,n[T.CHTMLxml.kind]=T.CHTMLxml,n[w.CHTMLTeXAtom.kind]=w.CHTMLTeXAtom,n[A.CHTMLTextNode.kind]=A.CHTMLTextNode,n[i.CHTMLWrapper.kind]=i.CHTMLWrapper,n)},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var s=r(97),c=r(0),l=r(10),h=r(14),f=r(71),p=r(16),d=r(23),m=2/18;function y(t,e){return t?e<m?0:m:e}var v,b=(v=s.AbstractWrapper,i(g,v),Object.defineProperty(g.prototype,\"jax\",{get:function(){return this.factory.jax},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"adaptor\",{get:function(){return this.factory.jax.adaptor},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"metrics\",{get:function(){return this.factory.jax.math.metrics},enumerable:!0,configurable:!0}),Object.defineProperty(g.prototype,\"fixesPWidth\",{get:function(){return!this.node.notParent&&!this.node.isToken},enumerable:!0,configurable:!0}),g.prototype.wrap=function(t,e){void 0===e&&(e=null);var r=this.factory.wrap(t,e||this);return e&&e.childNodes.push(r),this.jax.nodeMap.set(t,r),r},g.prototype.getBBox=function(t){if(void 0===t&&(t=!0),this.bboxComputed)return this.bbox;var e=t?this.bbox:p.BBox.zero();return this.computeBBox(e),this.bboxComputed=t,e},g.prototype.computeBBox=function(t,e){var r,n;void 0===e&&(e=!1),t.empty();try{for(var i=u(this.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;t.append(a.getBBox())}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}t.clean(),this.fixesPWidth&&this.setChildPWidths(e)&&this.computeBBox(t,!0)},g.prototype.setChildPWidths=function(t,e,r){var n,i;if(void 0===e&&(e=null),void 0===r&&(r=!0),t)return!1;r&&(this.bbox.pwidth=\"\");var o=!1;try{for(var a=u(this.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value,l=c.getBBox();l.pwidth&&c.setChildPWidths(t,null===e?l.w:e,r)&&(o=!0)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return o},g.prototype.invalidateBBox=function(){this.bboxComputed&&(this.bboxComputed=!1,this.parent&&this.parent.invalidateBBox())},g.prototype.copySkewIC=function(t){var e=this.childNodes[0];e&&e.bbox.sk&&(t.sk=e.bbox.sk);var r=this.childNodes[this.childNodes.length-1];r&&r.bbox.ic&&(t.ic=r.bbox.ic,t.w+=t.ic)},g.prototype.getStyles=function(){var t=this.node.attributes.getExplicit(\"style\");if(t)for(var e=this.styles=new f.Styles(t),r=0,n=g.removeStyles.length;r<n;r++){var i=g.removeStyles[r];e.get(i)&&(this.removedStyles||(this.removedStyles={}),this.removedStyles[i]=e.get(i),e.set(i,\"\"))}},g.prototype.getVariant=function(){if(this.node.isToken){var t=this.node.attributes,e=t.get(\"mathvariant\");if(!t.getExplicit(\"mathvariant\")){var r=t.getList(\"fontfamily\",\"fontweight\",\"fontstyle\");if(this.removedStyles){var n=this.removedStyles;n.fontFamily&&(r.family=n.fontFamily),n.fontWeight&&(r.weight=n.fontWeight),n.fontStyle&&(r.style=n.fontStyle)}r.fontfamily&&(r.family=r.fontfamily),r.fontweight&&(r.weight=r.fontweight),r.fontstyle&&(r.style=r.fontstyle),r.weight&&r.weight.match(/^\\d+$/)&&(r.weight=600<parseInt(r.weight)?\"bold\":\"normal\"),e=r.family?this.explicitVariant(r.family,r.weight,r.style):(this.node.getProperty(\"variantForm\")&&(e=\"-tex-variant\"),e=(g.BOLDVARIANTS[r.weight]||{})[e]||e,(g.ITALICVARIANTS[r.style]||{})[e]||e)}this.variant=e}},g.prototype.explicitVariant=function(t,e,r){var n=this.styles;return(n=n||(this.styles=new f.Styles)).set(\"fontFamily\",t),e&&n.set(\"fontWeight\",e),r&&n.set(\"fontStyle\",r),\"-explicitFont\"},g.prototype.getScale=function(){var t=1,e=this.parent,r=e?e.bbox.scale:1,n=this.node.attributes,i=Math.min(n.get(\"scriptlevel\"),2),o=n.get(\"fontsize\"),a=this.node.isToken||this.node.isKind(\"mstyle\")?n.get(\"mathsize\"):n.getInherited(\"mathsize\");if(0!==i){t=Math.pow(n.get(\"scriptsizemultiplier\"),i);var s=this.length2em(n.get(\"scriptminsize\"),.8,1);t<s&&(t=s)}this.removedStyles&&this.removedStyles.fontSize&&!o&&(o=this.removedStyles.fontSize),o&&!a&&(a=o),\"1\"!==a&&(t*=this.length2em(a,1,1)),this.bbox.scale=t,this.bbox.rscale=t/r},g.prototype.getSpace=function(){var t=this.isTopEmbellished(),e=this.node.hasSpacingAttributes();this.jax.options.mathmlSpacing||e?t&&this.getMathMLSpacing():this.getTeXSpacing(t,e)},g.prototype.getMathMLSpacing=function(){var t=this.node.coreMO(),e=t.attributes,r=(this.jax.nodeMap.get(t.coreParent()),0<e.get(\"scriptlevel\"));this.bbox.L=e.isSet(\"lspace\")?Math.max(0,this.length2em(e.get(\"lspace\"))):y(r,t.lspace),this.bbox.R=e.isSet(\"rspace\")?Math.max(0,this.length2em(e.get(\"rspace\"))):y(r,t.rspace)},g.prototype.getTeXSpacing=function(t,e){if(!e){var r=this.node.texSpacing();r&&(this.bbox.L=this.length2em(r))}if(t||e){var n=this.node.coreMO().attributes;n.isSet(\"lspace\")&&(this.bbox.L=Math.max(0,this.length2em(n.get(\"lspace\")))),n.isSet(\"rspace\")&&(this.bbox.R=Math.max(0,this.length2em(n.get(\"rspace\"))))}},g.prototype.isTopEmbellished=function(){return this.node.isEmbellished&&!(this.node.Parent&&this.node.Parent.isEmbellished)},g.prototype.core=function(){return this.jax.nodeMap.get(this.node.core())},g.prototype.coreMO=function(){return this.jax.nodeMap.get(this.node.coreMO())},g.prototype.getText=function(){var e,t,r=\"\";if(this.node.isToken)try{for(var n=u(this.node.childNodes),i=n.next();!i.done;i=n.next()){var o=i.value;o instanceof c.TextNode&&(r+=o.getText())}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r},g.prototype.canStretch=function(t){if(this.stretch=d.NOSTRETCH,this.node.isEmbellished){var e=this.core();e&&e.node!==this.node&&e.canStretch(t)&&(this.stretch=e.stretch)}return 0!==this.stretch.dir},g.prototype.getAlignShift=function(){var t,e=(t=this.node.attributes).getList.apply(t,a(c.indentAttributes)),r=e.indentalign,n=e.indentshift,i=e.indentalignfirst,o=e.indentshiftfirst;return\"indentalign\"!==i&&(r=i),\"auto\"===r&&(r=this.jax.options.displayAlign),\"indentshift\"!==o&&(n=o),\"auto\"===n&&(n=this.jax.options.displayIndent,\"right\"!==r||n.match(/^\\s*0[a-z]*\\s*$/)||(n=(\"-\"+n.trim()).replace(/^--/,\"\"))),[r,this.length2em(n,this.metrics.containerWidth)]},g.prototype.getAlignX=function(t,e,r){return\"right\"===r?t-(e.w+e.R)*e.rscale:\"left\"===r?e.L*e.rscale:(t-e.w*e.rscale)/2},g.prototype.getAlignY=function(t,e,r,n,i){return\"top\"===i?t-r:\"bottom\"===i?n-e:\"middle\"===i?(t-r-(e-n))/2:0},g.prototype.getWrapWidth=function(t){return this.childNodes[t].getBBox().w},g.prototype.getChildAlign=function(t){return\"left\"},g.prototype.percent=function(t){return h.percent(t)},g.prototype.em=function(t){return h.em(t)},g.prototype.px=function(t,e){return void 0===e&&(e=-h.BIGDIMEN),h.px(t,e,this.metrics.em)},g.prototype.length2em=function(t,e,r){return void 0===e&&(e=1),void 0===r&&(r=null),null===r&&(r=this.bbox.scale),h.length2em(t,e,r,this.jax.pxPerEm)},g.prototype.unicodeChars=function(t){return l.unicodeChars(t)},g.prototype.remapChars=function(t){return t},g.prototype.mmlText=function(t){return this.node.factory.create(\"text\").setText(t)},g.prototype.mmlNode=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.node.factory.create(t,e,r)},g.prototype.createMo=function(t){var e=this.node.factory,r=e.create(\"text\").setText(t),n=e.create(\"mo\",{stretchy:!0},[r]);n.inheritAttributesFrom(this.node);var i=this.wrap(n);return i.parent=this,i},g.prototype.getVariantChar=function(t,e){var r=this.font.getChar(t,e)||[0,0,0,{unknown:!0}];return 3===r.length&&(r[3]={}),r},g.kind=\"unknown\",g.styles={},g.removeStyles=[\"fontSize\",\"fontFamily\",\"fontWeight\",\"fontStyle\",\"fontVariant\",\"font\"],g.skipAttributes={fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,class:!0,href:!0,style:!0,xmlns:!0},g.BOLDVARIANTS={bold:{normal:\"bold\",italic:\"bold-italic\",fraktur:\"bold-fraktur\",script:\"bold-script\",\"sans-serif\":\"bold-sans-serif\",\"sans-serif-italic\":\"sans-serif-bold-italic\"},normal:{bold:\"normal\",\"bold-italic\":\"italic\",\"bold-fraktur\":\"fraktur\",\"bold-script\":\"script\",\"bold-sans-serif\":\"sans-serif\",\"sans-serif-bold-italic\":\"sans-serif-italic\"}},g.ITALICVARIANTS={italic:{normal:\"italic\",bold:\"bold-italic\",\"sans-serif\":\"sans-serif-italic\",\"bold-sans-serif\":\"sans-serif-bold-italic\"},normal:{italic:\"normal\",\"bold-italic\":\"bold\",\"sans-serif-italic\":\"sans-serif\",\"sans-serif-bold-italic\":\"bold-sans-serif\"}},g);function g(t,r,e){void 0===e&&(e=null);var n=v.call(this,t,r)||this;return n.parent=null,n.removedStyles=null,n.styles=null,n.variant=\"\",n.bboxComputed=!1,n.stretch=d.NOSTRETCH,n.font=null,n.parent=e,n.font=t.jax.font,n.bbox=p.BBox.zero(),n.getStyles(),n.getVariant(),n.getScale(),n.getSpace(),n.childNodes=r.childNodes.map(function(t){var e=n.wrap(t);return e.bbox.pwidth&&(r.notParent||r.isKind(\"math\"))&&(n.bbox.pwidth=p.BBox.fullWidth),e}),n}e.CommonWrapper=b},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(16);e.BBox=n.BBox,e.BBoxStyleAdjust=n.BBoxStyleAdjust},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var l,o=r(2),a=r(131),s=r(46),u=(l=a.CommonMathMixin(o.CHTMLWrapper),i(h,l),h.prototype.toCHTML=function(t){l.prototype.toCHTML.call(this,t);var e=this.chtml,r=this.adaptor,n=\"block\"===this.node.attributes.get(\"display\");if(n)r.setAttribute(e,\"display\",\"true\"),r.setAttribute(t,\"display\",\"true\");else{var i=r.getStyle(e,\"margin-right\");i&&(r.setStyle(e,\"margin-right\",\"\"),r.setStyle(t,\"margin-right\",i),r.setStyle(t,\"width\",\"0\"))}r.addClass(e,\"MJX-TEX\");var o=c(this.getAlignShift(),2),a=o[0],s=o[1];\"center\"!==a&&r.setAttribute(t,\"justify\",a),n&&s&&!r.hasAttribute(e,\"width\")&&this.setIndent(e,a,s)},h.prototype.setChildPWidths=function(t,e,r){return void 0===e&&(e=null),void 0===r&&(r=!0),!!this.parent&&l.prototype.setChildPWidths.call(this,t,e)},h.kind=s.MmlMath.prototype.kind,h.styles={\"mjx-math\":{\"line-height\":0,\"text-align\":\"left\",\"text-indent\":0,\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":\"100%\",\"font-size-adjust\":\"none\",\"letter-spacing\":\"normal\",\"word-wrap\":\"normal\",\"word-spacing\":\"normal\",\"white-space\":\"nowrap\",direction:\"ltr\",padding:\"1px 0\"},'mjx-container[jax=\"CHTML\"][display=\"true\"]':{display:\"block\",\"text-align\":\"center\",margin:\"1em 0\"},'mjx-container[jax=\"CHTML\"][display=\"true\"] mjx-math':{padding:0},'mjx-container[jax=\"CHTML\"][justify=\"left\"]':{\"text-align\":\"left\"},'mjx-container[jax=\"CHTML\"][justify=\"right\"]':{\"text-align\":\"right\"}},h);function h(){return null!==l&&l.apply(this,arguments)||this}e.CHTMLmath=u},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMathMixin=function(t){return i(e,r=t),e.prototype.getWrapWidth=function(t){return this.parent?this.getBBox().w:this.metrics.containerWidth/this.jax.pxPerEm},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(133),c=r(47),l=(o=s.CommonMiMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){o.prototype.toCHTML.call(this,t),this.noIC&&this.adaptor.setAttribute(this.chtml,\"noIC\",\"true\")},u.kind=c.MmlMi.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmi=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMiMixin=function(t){return i(e,r=t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),r.prototype.computeBBox.call(this,t),this.copySkewIC(t),this.noIC&&(t.w-=t.ic)},e;function e(){var t=null!==r&&r.apply(this,arguments)||this;return t.noIC=!1,t}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var f,o=r(2),d=r(135),a=r(26),p=r(129),s=(f=d.CommonMoMixin(o.CHTMLWrapper),i(c,f),c.prototype.toCHTML=function(t){var e,r,n=this.node.attributes,i=n.get(\"symmetric\")&&2!==this.stretch.dir,o=0!==this.stretch.dir;o&&null===this.size&&this.getStretchedVariant([]);var a=this.standardCHTMLnode(t);if(this.noIC&&this.adaptor.setAttribute(a,\"noIC\",\"true\"),o&&this.size<0)this.stretchHTML(a,i);else{if(i||n.get(\"largeop\")){var s=p.BBox.empty();f.prototype.computeBBox.call(this,s);var c=this.em((s.d-s.h)/2+this.font.params.axis_height);\"0\"!==c&&this.adaptor.setStyle(a,\"verticalAlign\",c)}try{for(var l=h(this.childNodes),u=l.next();!u.done;u=l.next())u.value.toCHTML(a)}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}}},c.prototype.stretchHTML=function(t,e){var r=this.getText().charCodeAt(0),n=this.stretch;n.used=!0;var i=n.stretch,o=[];i[0]&&o.push(this.html(\"mjx-beg\",{},[this.html(\"mjx-c\")])),o.push(this.html(\"mjx-ext\",{},[this.html(\"mjx-c\")])),4===i.length&&o.push(this.html(\"mjx-mid\",{},[this.html(\"mjx-c\")]),this.html(\"mjx-ext\",{},[this.html(\"mjx-c\")])),i[2]&&o.push(this.html(\"mjx-end\",{},[this.html(\"mjx-c\")]));var a={},s=this.bbox,c=s.h,l=s.d,u=s.w;1===n.dir?(o.push(this.html(\"mjx-mark\")),a.height=this.em(c+l),a.verticalAlign=this.em(-l)):a.width=this.em(u);var h=d.DirectionVH[n.dir],f={class:this.char(n.c||r),style:a},p=this.html(\"mjx-stretchy-\"+h,f,o);this.adaptor.append(t,p)},c.kind=a.MmlMo.prototype.kind,c.styles={\"mjx-stretchy-h\":{display:\"inline-table\",width:\"100%\"},\"mjx-stretchy-h > *\":{display:\"table-cell\",width:0},\"mjx-stretchy-h > * > mjx-c\":{display:\"inline-block\"},\"mjx-stretchy-h > * > mjx-c::before\":{padding:\".001em 0\",width:\"initial\"},\"mjx-stretchy-h > mjx-ext\":{overflow:\"hidden\",width:\"100%\"},\"mjx-stretchy-h > mjx-ext > mjx-c::before\":{transform:\"scalex(500)\"},\"mjx-stretchy-h > mjx-ext > mjx-c\":{width:0},\"mjx-stretchy-h > mjx-beg > mjx-c\":{\"margin-right\":\"-.1em\"},\"mjx-stretchy-h > mjx-end > mjx-c\":{\"margin-left\":\"-.1em\"},\"mjx-stretchy-v\":{display:\"inline-block\"},\"mjx-stretchy-v > *\":{display:\"block\"},\"mjx-stretchy-v > mjx-beg\":{height:0},\"mjx-stretchy-v > mjx-end > mjx-c\":{display:\"block\"},\"mjx-stretchy-v > * > mjx-c\":{transform:\"scale(1)\",\"transform-origin\":\"left center\",overflow:\"hidden\"},\"mjx-stretchy-v > mjx-ext\":{display:\"block\",height:\"100%\",\"box-sizing\":\"border-box\",border:\"0px solid transparent\",overflow:\"hidden\"},\"mjx-stretchy-v > mjx-ext > mjx-c::before\":{width:\"initial\"},\"mjx-stretchy-v > mjx-ext > mjx-c\":{transform:\"scaleY(500) translateY(.1em)\",overflow:\"visible\"},\"mjx-mark\":{display:\"inline-block\",height:\"0px\"}},c);function c(){return null!==f&&f.apply(this,arguments)||this}e.CHTMLmo=s},function(t,e,r){\"use strict\";var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),m=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(m(arguments[e]));return t},p=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var s=r(23);e.DirectionVH=((i={})[1]=\"v\",i[2]=\"h\",i),e.CommonMoMixin=function(t){return o(e,i=t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=0!==this.stretch.dir;if(r&&null===this.size&&this.getStretchedVariant([0]),!(r&&this.size<0)&&(i.prototype.computeBBox.call(this,t),this.copySkewIC(t),this.noIC&&(t.w-=t.ic),this.node.attributes.get(\"symmetric\")&&2!==this.stretch.dir)){var n=(t.h+t.d)/2+this.font.params.axis_height-t.h;t.h+=n,t.d-=n}},e.prototype.getVariant=function(){this.node.attributes.get(\"largeop\")?this.variant=this.node.attributes.get(\"displaystyle\")?\"-largeop\":\"-smallop\":i.prototype.getVariant.call(this)},e.prototype.canStretch=function(t){if(0!==this.stretch.dir)return this.stretch.dir===t;if(!this.node.attributes.get(\"stretchy\"))return!1;var e=this.getText();if(1!==e.length)return!1;var r=this.font.getDelimiter(e.charCodeAt(0));return this.stretch=r&&r.dir===t?r:s.NOSTRETCH,0!==this.stretch.dir},e.prototype.getStretchedVariant=function(t,e){var r,n;if(void 0===e&&(e=!1),0!==this.stretch.dir){var i=this.getWH(t),o=this.getSize(\"minsize\",0),a=this.getSize(\"maxsize\",1/0);i=Math.max(o,Math.min(a,i));var s=o||e?i:Math.max(i*this.font.params.delimiterfactor/1e3,i-this.font.params.delimitershortfall),c=this.stretch,l=c.c||this.getText().charCodeAt(0),u=0;if(c.sizes)try{for(var h=p(c.sizes),f=h.next();!f.done;f=h.next()){if(s<=f.value)return this.variant=this.font.getSizeVariant(l,u),void(this.size=u);u++}}catch(t){r={error:t}}finally{try{f&&!f.done&&(n=h.return)&&n.call(h)}finally{if(r)throw r.error}}c.stretch?(this.size=-1,this.invalidateBBox(),this.getStretchBBox(t,i,c)):(this.variant=this.font.getSizeVariant(l,u-1),this.size=u-1)}},e.prototype.getSize=function(t,e){var r=this.node.attributes;return r.isSet(t)&&(e=this.length2em(r.get(t),1,1)),e},e.prototype.getWH=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var e=m(t,2),r=e[0],n=e[1],i=this.font.params.axis_height;return this.node.attributes.get(\"symmetric\")?2*Math.max(r-i,n+i):r+n},e.prototype.getStretchBBox=function(t,e,r){var n;r.hasOwnProperty(\"min\")&&r.min>e&&(e=r.min);var i=m(r.HDW,3),o=i[0],a=i[1],s=i[2];1===this.stretch.dir?(o=(n=m(this.getBaseline(t,e,r),2))[0],a=n[1]):s=e,this.bbox.h=o,this.bbox.d=a,this.bbox.w=s},e.prototype.getBaseline=function(t,e,r){var n=2===t.length&&t[0]+t[1]===e,i=this.node.attributes.get(\"symmetric\"),o=m(n?t:[e,0],2),a=o[0],s=o[1],c=m([a+s,0],2),l=c[0],u=c[1];if(i){var h=this.font.params.axis_height;n&&(l=2*Math.max(a-h,s+h)),u=l/2-h}else if(n)u=s;else{var f=m(r.HDW||[.75,.25],2),p=f[0],d=f[1];u=d*(l/(p+d))}return[l-u,u]},e.prototype.remapChars=function(t){if(1==t.length){var e=this.node.parent,r=this.isAccent&&(e===this.node.coreParent()||e.isEmbellished)?\"accent\":\"mo\",n=this.font.getRemappedChar(r,t[0]);n&&(t=this.unicodeChars(n))}return t},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=i.apply(this,a(t))||this;return r.noIC=!1,r.size=null,r.isAccent=r.node.isAccent,r}var i}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(137),c=r(48),l=(o=s.CommonMnMixin(a.CHTMLWrapper),i(u,o),u.kind=c.MmlMn.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmn=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMnMixin=function(t){return i(e,r=t),e.prototype.remapChars=function(t){if(t.length){var e=this.font.getRemappedChar(\"mn\",t[0]);if(e){var r=this.unicodeChars(e);1===r.length?t[0]=r[0]:t=r.concat(t.slice(1))}}return t},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(139),c=r(51),l=(o=s.CommonMsMixin(a.CHTMLWrapper),i(u,o),u.kind=c.MmlMs.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLms=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsMixin=function(t){return i(e,o=t),e.prototype.createText=function(t){var e=this.wrap(this.mmlText(t));return e.parent=this,e},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=o.apply(this,a(t))||this,n=r.node.attributes,i=n.getList(\"lquote\",\"rquote\");return\"monospace\"!==r.variant&&(n.isSet(\"lquote\")||'\"'!==i.lquote||(i.lquote=\"\\u201c\"),n.isSet(\"rquote\")||'\"'!==i.rquote||(i.rquote=\"\\u201d\")),r.childNodes.unshift(r.createText(i.lquote)),r.childNodes.push(r.createText(i.rquote)),r}var o}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(141),c=r(49),l=(o=s.CommonMtextMixin(a.CHTMLWrapper),i(u,o),u.kind=c.MmlMtext.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmtext=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtextMixin=function(t){var e,n;return i(r,n=t),r.prototype.getVariant=function(){var t=this.jax.options;if(t.mtextInheritFont||t.merrorInheritFont&&this.node.Parent.isKind(\"merror\")){var e=this.node.attributes.get(\"mathvariant\"),r=this.constructor.INHERITFONTS[e];if(r)return void(this.variant=this.explicitVariant.apply(this,a(r)))}n.prototype.getVariant.call(this)},(e=r).INHERITFONTS={normal:[\"\",\"\",\"\"],bold:[\"\",\"bold\",\"\"],italic:[\"\",\"\",\"italic\"],\"bold-italic\":[\"\",\"bold\",\"italic\"],script:[\"cursive\",\"\",\"\"],\"bold-script\":[\"cursive\",\"bold\",\"\"],\"sans-serif\":[\"sans-serif\",\"\",\"\"],\"bold-sans-serif\":[\"sans-serif\",\"bold\",\"\"],\"sans-serif-italic\":[\"sans-serif\",\"\",\"italic\"],\"bold-sans-serif-italic\":[\"sans-serif\",\"bold\",\"italic\"],monospace:[\"monospace\",\"\",\"\"]},e;function r(){return null!==n&&n.apply(this,arguments)||this}}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(143),c=r(50),l=(o=s.CommonMspaceMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.getBBox(),n=r.w,i=r.h,o=r.d;n<0&&(this.adaptor.setStyle(e,\"marginRight\",this.em(n)),n=0),n&&this.adaptor.setStyle(e,\"width\",this.em(n)),(i=Math.max(0,i+o))&&this.adaptor.setStyle(e,\"height\",this.em(Math.max(0,i))),o&&this.adaptor.setStyle(e,\"verticalAlign\",this.em(-o))},u.kind=c.MmlMspace.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmspace=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMspaceMixin=function(t){return i(e,r=t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.node.attributes;t.w=this.length2em(r.get(\"width\"),0),t.h=this.length2em(r.get(\"height\"),0),t.d=this.length2em(r.get(\"depth\"),0)},e.prototype.handleVariant=function(){},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),v=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},b=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(145),c=r(56),l=(o=s.CommonMpaddedMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t),i=[],o={},a=v(this.getDimens(),9),s=(a[0],a[1],a[2]),c=a[3],l=a[4],u=a[5],h=a[6],f=a[7],p=a[8];if(u&&(o.width=this.em(s+u)),(c||l)&&(o.margin=this.em(c)+\" 0 \"+this.em(l)),h+p||f){o.position=\"relative\";var d=this.html(\"mjx-rbox\",{style:{left:this.em(h+p),top:this.em(-f)}});h+p&&this.childNodes[0].getBBox().pwidth&&(this.adaptor.setAttribute(d,\"width\",\"full\"),this.adaptor.setStyle(d,\"left\",this.em(h))),i.push(d)}n=this.adaptor.append(n,this.html(\"mjx-block\",{style:o},i));try{for(var m=b(this.childNodes),y=m.next();!y.done;y=m.next())y.value.toCHTML(i[0]||n)}catch(t){e={error:t}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(e)throw e.error}}},u.kind=c.MmlMpadded.prototype.kind,u.styles={\"mjx-mpadded\":{display:\"inline-block\"},\"mjx-rbox\":{display:\"inline-block\",position:\"relative\"}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmpadded=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMpaddedMixin=function(t){return i(e,r=t),e.prototype.getDimens=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"depth\",\"lspace\",\"voffset\"),e=this.childNodes[0].getBBox(),r=e.w,n=e.h,i=e.d,o=r,a=n,s=i,c=0,l=0,u=0;\"\"!==t.width&&(r=this.dimen(t.width,e,\"w\",0)),\"\"!==t.height&&(n=this.dimen(t.height,e,\"h\",0)),\"\"!==t.depth&&(i=this.dimen(t.depth,e,\"d\",0)),\"\"!==t.voffset&&(l=this.dimen(t.voffset,e)),\"\"!==t.lspace&&(c=this.dimen(t.lspace,e));var h=this.node.attributes.get(\"data-align\");return h&&(u=this.getAlignX(r,e,h)),[a,s,o,n-a,i-s,r-o,c,l,u]},e.prototype.dimen=function(t,e,r,n){void 0===r&&(r=\"\"),void 0===n&&(n=null);var i=(t=String(t)).match(/width|height|depth/),o=i?e[i[0].charAt(0)]:r?e[r]:0,a=this.length2em(t,o)||0;return t.match(/^[-+]/)&&r&&(a+=o),null!=n&&(a=Math.max(n,a)),a},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=l(this.getDimens(),8),n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],c=r[5];r[6],r[7],t.w=o+c,t.h=n+a,t.d=i+s,this.setChildPWidths(e,t.w)},e.prototype.getWrapWidth=function(t){return this.getBBox().w},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"data-align\")||\"left\"},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),v=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},m=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(2),a=r(147),b=r(148),s=r(58),c=r(14);function y(t,e){return Math.atan2(t,e).toFixed(3).replace(/\\.?0+$/,\"\")}var l,u=y(b.ARROWDX,b.ARROWY),h=(l=a.CommonMencloseMixin(o.CHTMLWrapper),i(f,l),f.prototype.toCHTML=function(t){var e,r,n,i,o=this.adaptor,a=this.standardCHTMLnode(t),s=o.append(a,this.html(\"mjx-box\"));this.renderChild?this.renderChild(this,s):this.childNodes[0].toCHTML(s);try{for(var c=v(Object.keys(this.notations)),l=c.next();!l.done;l=c.next()){var u=l.value,h=this.notations[u];h.renderChild||h.renderer(this,s)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}var f=this.getPadding();try{for(var p=v(b.sideNames),d=p.next();!d.done;d=p.next()){var m=d.value,y=b.sideIndex[m];0<f[y]&&o.setStyle(s,\"padding-\"+m,this.em(f[y]))}}catch(t){n={error:t}}finally{try{d&&!d.done&&(i=p.return)&&i.call(p)}finally{if(n)throw n.error}}},f.prototype.arrow=function(t,e,r){void 0===r&&(r=!1);var n=this.getBBox().w,i={width:this.em(t)};n!==t&&(i.left=this.em((n-t)/2)),e&&(i.transform=\"rotate(\"+this.fixed(e)+\"rad)\");var o=this.html(\"mjx-arrow\",{style:i},[this.html(\"mjx-aline\"),this.html(\"mjx-rthead\"),this.html(\"mjx-rbhead\")]);return r&&(this.adaptor.append(o,this.html(\"mjx-lthead\")),this.adaptor.append(o,this.html(\"mjx-lbhead\")),this.adaptor.setAttribute(o,\"double\",\"true\")),this.adjustArrow(o,r),o},f.prototype.adjustArrow=function(t,e){var r=this,n=this.thickness,i=this.arrowhead;if(i.x!==b.ARROWX||i.y!==b.ARROWY||i.dx!==b.ARROWDX||n!==b.THICKNESS){var o=m([n*i.x,n*i.y,n*i.dx].map(function(t){return r.em(t)}),3),a=o[0],s=o[1],c=(o[2],y(i.dx,i.y)),l=m(this.adaptor.childNodes(t),5),u=l[0],h=l[1],f=l[2],p=l[3],d=l[4];this.adjustHead(h,[s,\"0\",\"1px\",a],c),this.adjustHead(f,[\"1px\",\"0\",s,a],\"-\"+c),this.adjustHead(p,[s,a,\"1px\",\"0\"],\"-\"+c),this.adjustHead(d,[\"1px\",a,s,\"0\"],c),this.adjustLine(u,n,i.x,e)}},f.prototype.adjustHead=function(t,e,r){t&&(this.adaptor.setStyle(t,\"border-width\",e.join(\" \")),this.adaptor.setStyle(t,\"transform\",\"skewX(\"+r+\"rad)\"))},f.prototype.adjustLine=function(t,e,r,n){this.adaptor.setStyle(t,\"borderTop\",this.em(e)+\" solid\"),this.adaptor.setStyle(t,\"top\",this.em(-e/2)),this.adaptor.setStyle(t,\"right\",this.em(e*(r-1))),n&&this.adaptor.setStyle(t,\"left\",this.em(e*(r-1)))},f.prototype.adjustBorder=function(t){return this.thickness!==b.THICKNESS&&this.adaptor.setStyle(t,\"borderWidth\",this.em(this.thickness)),t},f.prototype.adjustThickness=function(t){return this.thickness!==b.THICKNESS&&this.adaptor.setStyle(t,\"strokeWidth\",this.fixed(this.thickness)),t},f.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?\"0\":t.toFixed(e).replace(/\\.?0+$/,\"\")},f.prototype.em=function(t){return l.prototype.em.call(this,t)},f.kind=s.MmlMenclose.prototype.kind,f.styles={\"mjx-menclose\":{position:\"relative\"},\"mjx-menclose > mjx-dstrike\":{display:\"inline-block\",left:0,top:0,position:\"absolute\",\"border-top\":b.SOLID,\"transform-origin\":\"top left\"},\"mjx-menclose > mjx-ustrike\":{display:\"inline-block\",left:0,bottom:0,position:\"absolute\",\"border-top\":b.SOLID,\"transform-origin\":\"bottom left\"},\"mjx-menclose > mjx-hstrike\":{\"border-top\":b.SOLID,position:\"absolute\",left:0,right:0,bottom:\"50%\",transform:\"translateY(\"+c.em(b.THICKNESS/2)+\")\"},\"mjx-menclose > mjx-vstrike\":{\"border-left\":b.SOLID,position:\"absolute\",top:0,bottom:0,right:\"50%\",transform:\"translateX(\"+c.em(b.THICKNESS/2)+\")\"},\"mjx-menclose > mjx-rbox\":{position:\"absolute\",top:0,bottom:0,right:0,left:0,border:b.SOLID,\"border-radius\":c.em(b.THICKNESS+b.PADDING)},\"mjx-menclose > mjx-cbox\":{position:\"absolute\",top:0,bottom:0,right:0,left:0,border:b.SOLID,\"border-radius\":\"50%\"},\"mjx-menclose > mjx-arrow\":{position:\"absolute\",left:0,bottom:\"50%\",height:0,width:0},\"mjx-menclose > mjx-arrow > *\":{display:\"block\",position:\"absolute\",\"transform-origin\":\"bottom\",\"border-left\":c.em(b.THICKNESS*b.ARROWX)+\" solid\",\"border-right\":0,\"box-sizing\":\"border-box\"},\"mjx-menclose > mjx-arrow > mjx-aline\":{left:0,top:c.em(-b.THICKNESS/2),right:c.em(b.THICKNESS*(b.ARROWX-1)),height:0,\"border-top\":c.em(b.THICKNESS)+\" solid\",\"border-left\":0},\"mjx-menclose > mjx-arrow[double] > mjx-aline\":{left:c.em(b.THICKNESS*(b.ARROWX-1)),height:0},\"mjx-menclose > mjx-arrow > mjx-rthead\":{transform:\"skewX(\"+u+\"rad)\",right:0,bottom:\"-1px\",\"border-bottom\":\"1px solid transparent\",\"border-top\":c.em(b.THICKNESS*b.ARROWY)+\" solid transparent\"},\"mjx-menclose > mjx-arrow > mjx-rbhead\":{transform:\"skewX(-\"+u+\"rad)\",\"transform-origin\":\"top\",right:0,top:\"-1px\",\"border-top\":\"1px solid transparent\",\"border-bottom\":c.em(b.THICKNESS*b.ARROWY)+\" solid transparent\"},\"mjx-menclose > mjx-arrow > mjx-lthead\":{transform:\"skewX(-\"+u+\"rad)\",left:0,bottom:\"-1px\",\"border-left\":0,\"border-right\":c.em(b.THICKNESS*b.ARROWX)+\" solid\",\"border-bottom\":\"1px solid transparent\",\"border-top\":c.em(b.THICKNESS*b.ARROWY)+\" solid transparent\"},\"mjx-menclose > mjx-arrow > mjx-lbhead\":{transform:\"skewX(\"+u+\"rad)\",\"transform-origin\":\"top\",left:0,top:\"-1px\",\"border-left\":0,\"border-right\":c.em(b.THICKNESS*b.ARROWX)+\" solid\",\"border-top\":\"1px solid transparent\",\"border-bottom\":c.em(b.THICKNESS*b.ARROWY)+\" solid transparent\"},\"mjx-menclose > dbox\":{position:\"absolute\",top:0,bottom:0,left:c.em(-1.5*b.PADDING),width:c.em(3*b.PADDING),border:c.em(b.THICKNESS)+\" solid\",\"border-radius\":\"50%\",\"clip-path\":\"inset(0 0 0 \"+c.em(1.5*b.PADDING)+\")\",\"box-sizing\":\"border-box\"}},f.notations=new Map([b.Border(\"top\"),b.Border(\"right\"),b.Border(\"bottom\"),b.Border(\"left\"),b.Border2(\"actuarial\",\"top\",\"right\"),b.Border2(\"madruwb\",\"bottom\",\"right\"),b.DiagonalStrike(\"up\",1),b.DiagonalStrike(\"down\",-1),[\"horizontalstrike\",{renderer:b.RenderElement(\"hstrike\",\"Y\"),bbox:function(t){return[0,t.padding,0,t.padding]}}],[\"verticalstrike\",{renderer:b.RenderElement(\"vstrike\",\"X\"),bbox:function(t){return[t.padding,0,t.padding,0]}}],[\"box\",{renderer:function(t,e){t.adaptor.setStyle(e,\"border\",t.em(t.thickness)+\" solid\")},bbox:b.fullBBox,border:b.fullBorder,remove:\"left right top bottom\"}],[\"roundedbox\",{renderer:b.RenderElement(\"rbox\"),bbox:b.fullBBox}],[\"circle\",{renderer:b.RenderElement(\"cbox\"),bbox:b.fullBBox}],[\"phasorangle\",{renderer:function(t,e){var r=t.getBBox(),n=(r.w,r.h),i=r.d,o=m(t.getArgMod(1.75*t.padding,n+i),2),a=o[0],s=o[1],c=t.thickness*Math.sin(a)*.9;t.adaptor.setStyle(e,\"border-bottom\",t.em(t.thickness)+\" solid\");var l=t.adjustBorder(t.html(\"mjx-ustrike\",{style:{width:t.em(s),transform:\"translateX(\"+t.em(c)+\") rotate(\"+t.fixed(-a)+\"rad)\"}}));t.adaptor.append(t.chtml,l)},bbox:function(t){var e=t.padding/2,r=t.thickness;return[2*e,e,e+r,3*e+r]},border:function(t){return[0,0,t.thickness,0]},remove:\"bottom\"}],b.Arrow(\"up\"),b.Arrow(\"down\"),b.Arrow(\"left\"),b.Arrow(\"right\"),b.Arrow(\"updown\"),b.Arrow(\"leftright\"),b.DiagonalArrow(\"updiagonal\"),b.DiagonalArrow(\"northeast\"),b.DiagonalArrow(\"southeast\"),b.DiagonalArrow(\"northwest\"),b.DiagonalArrow(\"southwest\"),b.DiagonalArrow(\"northeastsouthwest\"),b.DiagonalArrow(\"northwestsoutheast\"),[\"longdiv\",{renderer:function(t,e){var r=t.adaptor;r.setStyle(e,\"border-top\",t.em(t.thickness)+\" solid\");var n=r.append(t.chtml,t.html(\"dbox\")),i=t.thickness,o=t.padding;i!==b.THICKNESS&&r.setStyle(n,\"border-width\",t.em(i)),o!==b.PADDING&&(r.setStyle(n,\"left\",t.em(-1.5*o)),r.setStyle(n,\"width\",t.em(3*o)),r.setStyle(n,\"clip-path\",\"inset(0 0 0 \"+t.em(1.5*o)+\")\"))},bbox:function(t){var e=t.padding,r=t.thickness;return[e+r,e,e,2*e+r/2]}}],[\"radical\",{renderer:function(e,t){e.msqrt.toCHTML(t);var r=e.sqrtTRBL();e.adaptor.setStyle(e.msqrt.chtml,\"margin\",r.map(function(t){return e.em(-t)}).join(\" \"))},init:function(t){t.msqrt=t.createMsqrt(t.childNodes[0])},bbox:function(t){return t.sqrtTRBL()},renderChild:!0}]]),f);function f(){return null!==l&&l.apply(this,arguments)||this}e.CHTMLmenclose=h},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),f=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(f(arguments[e]));return t},h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var c=r(36),l=r(10);e.CommonMencloseMixin=function(t){return i(e,n=t),e.prototype.getParameters=function(){var t=this.node.attributes,e=t.get(\"data-padding\");void 0!==e&&(this.padding=this.length2em(e,c.PADDING));var r=t.get(\"data-thickness\");void 0!==r&&(this.thickness=this.length2em(r,c.THICKNESS));var n=t.get(\"data-arrowhead\");if(void 0!==n){var i=f(l.split(n),3),o=i[0],a=i[1],s=i[2];this.arrowhead={x:o?parseFloat(o):c.ARROWX,y:a?parseFloat(a):c.ARROWY,dx:s?parseFloat(s):c.ARROWDX}}},e.prototype.getNotations=function(){var e,t,r=this.constructor.notations;try{for(var n=h(l.split(this.node.attributes.get(\"notation\"))),i=n.next();!i.done;i=n.next()){var o=i.value,a=r.get(o);a&&(this.notations[o]=a).renderChild&&(this.renderChild=a.renderer)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},e.prototype.removeRedundantNotations=function(){var e,t,r,n;try{for(var i=h(Object.keys(this.notations)),o=i.next();!o.done;o=i.next()){var a=o.value;if(this.notations[a]){var s=this.notations[a].remove||\"\";try{for(var c=(r=void 0,h(s.split(/ /))),l=c.next();!l.done;l=c.next()){var u=l.value;delete this.notations[u]}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},e.prototype.initializeNotations=function(){var e,t;try{for(var r=h(Object.keys(this.notations)),n=r.next();!n.done;n=r.next()){var i=n.value,o=this.notations[i].init;o&&o(this)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=f(this.getBBoxExtenders(),4),n=r[0],i=r[1],o=r[2],a=r[3],s=this.childNodes[0].getBBox();t.combine(s,a,0),t.h+=n,t.d+=o,t.w+=i,this.setChildPWidths(e)},e.prototype.getBBoxExtenders=function(){var e,t,r=[0,0,0,0];try{for(var n=h(Object.keys(this.notations)),i=n.next();!i.done;i=n.next()){var o=i.value;this.maximizeEntries(r,this.notations[o].bbox(this))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r},e.prototype.getPadding=function(){var e,t,r=[0,0,0,0],n=[0,0,0,0];try{for(var i=h(Object.keys(this.notations)),o=i.next();!o.done;o=i.next()){var a=o.value;this.maximizeEntries(r,this.notations[a].bbox(this));var s=this.notations[a].border;s&&this.maximizeEntries(n,s(this))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return[0,1,2,3].map(function(t){return r[t]-n[t]})},e.prototype.maximizeEntries=function(t,e){for(var r=0;r<t.length;r++)t[r]<e[r]&&(t[r]=e[r])},e.prototype.getArgMod=function(t,e){return[Math.atan2(e,t),Math.sqrt(t*t+e*e)]},e.prototype.arrow=function(t,e,r){return void 0===r&&(r=!1),null},e.prototype.arrowData=function(){var t=f([this.padding,this.thickness],2),e=t[0],r=t[1]*(this.arrowhead.x+Math.max(1,this.arrowhead.dx)),n=this.childNodes[0].getBBox(),i=n.h,o=n.d,a=n.w,s=i+o,c=Math.sqrt(s*s+a*a),l=Math.max(e,r*a/c),u=Math.max(e,r*s/c),h=f(this.getArgMod(a+2*l,s+2*u),2);return{a:h[0],W:h[1],x:l,y:u}},e.prototype.createMsqrt=function(t){var e=this.node.factory.create(\"msqrt\");e.inheritAttributesFrom(this.node),e.childNodes[0]=t.node;var r=this.wrap(e);return r.parent=this,r},e.prototype.sqrtTRBL=function(){var t=this.msqrt.getBBox(),e=this.msqrt.childNodes[0].getBBox();return[t.h-e.h,0,t.d-e.d,t.w-e.w]},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=n.apply(this,o(t))||this;return r.notations={},r.renderChild=null,r.msqrt=null,r.padding=c.PADDING,r.thickness=c.THICKNESS,r.arrowhead={x:c.ARROWX,y:c.ARROWY,dx:c.ARROWDX},r.getParameters(),r.getNotations(),r.removeRedundantNotations(),r.initializeNotations(),r}var n}},function(t,r,e){\"use strict\";var p=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(r,\"__esModule\",{value:!0});var a=e(36);!function(t){for(var e in t)r.hasOwnProperty(e)||(r[e]=t[e])}(e(36)),r.RenderElement=function(i,o){return void 0===o&&(o=\"\"),function(t,e){var r=t.adjustBorder(t.html(\"mjx-\"+i));if(o&&t.thickness!==a.THICKNESS){var n=\"translate\"+o+\"(\"+t.em(t.thickness/2)+\")\";t.adaptor.setStyle(r,\"transform\",n)}t.adaptor.append(t.chtml,r)}},r.Border=function(r){return a.CommonBorder(function(t,e){t.adaptor.setStyle(e,\"border-\"+r,t.em(t.thickness)+\" solid\")})(r)},r.Border2=function(t,n,i){return a.CommonBorder2(function(t,e){var r=t.em(t.thickness)+\" solid\";t.adaptor.setStyle(e,\"border-\"+n,r),t.adaptor.setStyle(e,\"border-\"+i,r)})(t,n,i)},r.DiagonalStrike=function(t,f){return a.CommonDiagonalStrike(function(h){return function(t,e){var r=t.getBBox(),n=r.w,i=r.h,o=r.d,a=p(t.getArgMod(n,i+o),2),s=a[0],c=a[1],l=f*t.thickness/2,u=t.adjustBorder(t.html(h,{style:{width:t.em(c),transform:\"rotate(\"+t.fixed(-f*s)+\"rad) translateY(\"+l+\"em)\"}}));t.adaptor.append(t.chtml,u)}})(t)},r.DiagonalArrow=function(t){return a.CommonDiagonalArrow(function(t,e){t.adaptor.append(t.chtml,e)})(t)},r.Arrow=function(t){return a.CommonArrow(function(t,e){t.adaptor.append(t.chtml,e)})(t)}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(73),c=r(73),u=r(52),h=(o=s.CommonMrowMixin(a.CHTMLWrapper),i(f,o),f.prototype.toCHTML=function(t){var e,r,n=this.node.isInferred?this.chtml=t:this.standardCHTMLnode(t),i=!1;try{for(var o=l(this.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value;s.toCHTML(n),s.bbox.w<0&&(i=!0)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}if(i){var c=this.getBBox().w;c&&(this.adaptor.setStyle(n,\"width\",this.em(Math.max(0,c))),c<0&&this.adaptor.setStyle(n,\"marginRight\",this.em(c)))}},f.kind=u.MmlMrow.prototype.kind,f);function f(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmrow=h;var p,d=(p=c.CommonInferredMrowMixin(h),i(m,p),m.kind=u.MmlInferredMrow.prototype.kind,m);function m(){return null!==p&&p.apply(this,arguments)||this}e.CHTMLinferredMrow=d},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(151),c=r(57),l=(o=s.CommonMfencedMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.mrow.toCHTML(e)},u.kind=c.MmlMfenced.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmfenced=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfencedMixin=function(t){return i(e,n=t),e.prototype.createMrow=function(){var t=this.node.factory.create(\"inferredMrow\");t.inheritAttributesFrom(this.node),this.mrow=this.wrap(t),this.mrow.parent=this},e.prototype.addMrowChildren=function(){var e,t,r=this.node,n=this.mrow;this.addMo(r.open),this.childNodes.length&&n.childNodes.push(this.childNodes[0]);var i=0;try{for(var o=c(this.childNodes.slice(1)),a=o.next();!a.done;a=o.next()){var s=a.value;this.addMo(r.separators[i++]),n.childNodes.push(s)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}this.addMo(r.close),n.stretchChildren()},e.prototype.addMo=function(t){if(t){var e=this.wrap(t);this.mrow.childNodes.push(e),e.parent=this.mrow}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.mrow.getBBox()),this.setChildPWidths(e)},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=n.apply(this,a(t))||this;return r.mrow=null,r.createMrow(),r.addMrowChildren(),r}var n}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),x=this&&this.__assign||function(){return(x=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(153),c=r(53),l=(o=s.CommonMfracMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){this.standardCHTMLnode(t);var e=this.node.attributes.getList(\"linethickness\",\"bevelled\"),r=e.linethickness,n=e.bevelled,i=this.isDisplay();if(n)this.makeBevelled(i);else{var o=this.length2em(String(r));0===o?this.makeAtop(i):this.makeFraction(i,o)}},u.prototype.makeFraction=function(t,e){var r,n,i=this.node.attributes.getList(\"numalign\",\"denomalign\"),o=i.numalign,a=i.denomalign,s=t?{type:\"d\"}:{},c=this.node.getProperty(\"withDelims\")?x(x({},s),{delims:\"true\"}):x({},s),l=\"center\"!==o?{align:o}:{},u=\"center\"!==a?{align:a}:{},h=x({},s),f=x({},s),p=this.font.params;if(.06!==e){var d=p.axis_height,m=this.em(e),y=this.getTUV(t,e),v=y.T,b=y.u,g=y.v,M=(t?this.em(3*e):m)+\" -.1em\";s.style={height:m,\"border-top\":m+\" solid\",margin:M};var O=this.em(Math.max(0,b));f.style={height:O,\"vertical-align\":\"-\"+O},h.style={height:this.em(Math.max(0,g))},c.style={\"vertical-align\":this.em(d-v)}}this.adaptor.append(this.chtml,this.html(\"mjx-frac\",c,[r=this.html(\"mjx-num\",l,[this.html(\"mjx-nstrut\",f)]),this.html(\"mjx-dbox\",{},[this.html(\"mjx-dtable\",{},[this.html(\"mjx-line\",s),this.html(\"mjx-row\",{},[n=this.html(\"mjx-den\",u,[this.html(\"mjx-dstrut\",h)])])])])])),this.childNodes[0].toCHTML(r),this.childNodes[1].toCHTML(n)},u.prototype.makeAtop=function(t){var e,r,n=this.node.attributes.getList(\"numalign\",\"denomalign\"),i=n.numalign,o=n.denomalign,a=t?{type:\"d\",atop:!0}:{atop:!0},s=this.node.getProperty(\"withDelims\")?x(x({},a),{delims:!0}):x({},a),c=\"center\"!==i?{align:i}:{},l=\"center\"!==o?{align:o}:{},u=this.getUVQ(t),h=u.v,f=u.q;c.style={\"padding-bottom\":this.em(f)},s.style={\"vertical-align\":this.em(-h)},this.adaptor.append(this.chtml,this.html(\"mjx-frac\",s,[e=this.html(\"mjx-num\",c),r=this.html(\"mjx-den\",l)])),this.childNodes[0].toCHTML(e),this.childNodes[1].toCHTML(r)},u.prototype.makeBevelled=function(t){var e=this.adaptor;e.setAttribute(this.chtml,\"bevelled\",\"ture\");var r=e.append(this.chtml,this.html(\"mjx-num\"));this.childNodes[0].toCHTML(r),this.bevel.toCHTML(this.chtml);var n=e.append(this.chtml,this.html(\"mjx-den\"));this.childNodes[1].toCHTML(n);var i=this.getBevelData(t),o=i.u,a=i.v,s=i.delta,c=i.nbox,l=i.dbox;o&&e.setStyle(r,\"verticalAlign\",this.em(o/c.scale)),a&&e.setStyle(n,\"verticalAlign\",this.em(a/l.scale));var u=this.em(-s/2);e.setStyle(this.bevel.chtml,\"marginLeft\",u),e.setStyle(this.bevel.chtml,\"marginRight\",u)},u.kind=c.MmlMfrac.prototype.kind,u.styles={\"mjx-frac\":{display:\"inline-block\",\"vertical-align\":\"0.17em\",padding:\"0 .22em\"},'mjx-frac[type=\"d\"]':{\"vertical-align\":\".04em\"},\"mjx-frac[delims]\":{padding:\"0 .1em\"},\"mjx-frac[atop]\":{padding:\"0 .12em\"},\"mjx-frac[atop][delims]\":{padding:\"0\"},\"mjx-dtable\":{display:\"inline-table\",width:\"100%\"},\"mjx-dtable > *\":{\"font-size\":\"2000%\"},\"mjx-dbox\":{display:\"block\",\"font-size\":\"5%\"},\"mjx-num\":{display:\"block\",\"text-align\":\"center\"},\"mjx-den\":{display:\"block\",\"text-align\":\"center\"},\"mjx-mfrac[bevelled] > mjx-num\":{display:\"inline-block\"},\"mjx-mfrac[bevelled] > mjx-den\":{display:\"inline-block\"},'mjx-den[align=\"right\"], mjx-num[align=\"right\"]':{\"text-align\":\"right\"},'mjx-den[align=\"left\"], mjx-num[align=\"left\"]':{\"text-align\":\"left\"},\"mjx-nstrut\":{display:\"inline-block\",height:\".054em\",width:0,\"vertical-align\":\"-.054em\"},'mjx-nstrut[type=\"d\"]':{height:\".217em\",\"vertical-align\":\"-.217em\"},\"mjx-dstrut\":{display:\"inline-block\",height:\".505em\",width:0},'mjx-dstrut[type=\"d\"]':{height:\".726em\"},\"mjx-line\":{display:\"block\",\"box-sizing\":\"border-box\",\"min-height\":\"1px\",height:\".06em\",\"border-top\":\".06em solid\",margin:\".06em -.1em\",overflow:\"hidden\"},'mjx-line[type=\"d\"]':{margin:\".18em -.1em\"}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmfrac=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(l(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfracMixin=function(t){return i(e,o=t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.empty();var r=this.node.attributes.getList(\"linethickness\",\"bevelled\"),n=r.linethickness,i=r.bevelled,o=this.isDisplay(),a=null;if(i)this.getBevelledBBox(t,o);else{var s=this.length2em(String(n));a=-2*this.pad,0===s?this.getAtopBBox(t,o):(this.getFractionBBox(t,o,s),a-=.2),a+=t.w}t.clean(),this.setChildPWidths(e,a)},e.prototype.getFractionBBox=function(t,e,r){var n=this.childNodes[0].getBBox(),i=this.childNodes[1].getBBox(),o=this.font.params.axis_height,a=this.getTUV(e,r),s=a.T,c=a.u,l=a.v;t.combine(n,0,o+s+Math.max(n.d*n.rscale,c)),t.combine(i,0,o-s-Math.max(i.h*i.rscale,l)),t.w+=2*this.pad+.2},e.prototype.getTUV=function(t,e){var r=this.font.params,n=r.axis_height,i=(t?3.5:1.5)*e;return{T:(t?3.5:1.5)*e,u:(t?r.num1:r.num2)-n-i,v:(t?r.denom1:r.denom2)+n-i}},e.prototype.getAtopBBox=function(t,e){this.font.params;var r=this.getUVQ(e),n=r.u,i=r.v,o=r.nbox,a=r.dbox;t.combine(o,0,n),t.combine(a,0,-i),t.w+=2*this.pad},e.prototype.getUVQ=function(t){var e=this.childNodes[0].getBBox(),r=this.childNodes[1].getBBox(),n=this.font.params,i=l(t?[n.num1,n.denom1]:[n.num3,n.denom2],2),o=i[0],a=i[1],s=(t?7:3)*n.rule_thickness,c=o-e.d*e.scale-(r.h*r.scale-a);return c<s&&(o+=(s-c)/2,a+=(s-c)/2,c=s),{u:o,v:a,q:c,nbox:e,dbox:r}},e.prototype.getBevelledBBox=function(t,e){var r=this.getBevelData(e),n=r.u,i=r.v,o=r.delta,a=r.nbox,s=r.dbox,c=this.bevel.getBBox();t.combine(a,0,n),t.combine(c,t.w-o/2,0),t.combine(s,t.w-o/2,i)},e.prototype.getBevelData=function(t){var e=this.childNodes[0].getBBox(),r=this.childNodes[1].getBBox(),n=t?.4:.15,i=Math.max(e.scale*(e.h+e.d),r.scale*(r.h+r.d))+2*n,o=this.font.params.axis_height;return{H:i,delta:n,u:e.scale*(e.d-e.h)/2+o+n,v:r.scale*(r.d-r.h)/2+o-n,nbox:e,dbox:r}},e.prototype.canStretch=function(t){return!1},e.prototype.isDisplay=function(){var t=this.node.attributes.getList(\"displaystyle\",\"scriptlevel\"),e=t.displaystyle,r=t.scriptlevel;return e&&0===r},e.prototype.getWrapWidth=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?this.childNodes[t].getBBox().w:this.getBBox().w-(this.length2em(e.get(\"linethickness\"))?.2:0)-2*this.pad},e.prototype.getChildAlign=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?\"left\":e.get([\"numalign\",\"denomalign\"][t])},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=o.apply(this,a(t))||this;if(r.bevel=null,r.pad=r.node.getProperty(\"withDelims\")?0:r.font.params.nulldelimiterspace,r.node.attributes.get(\"bevelled\")){var n=r.getBevelData(r.isDisplay()).H,i=r.bevel=r.createMo(\"/\");i.canStretch(1),i.getStretchedVariant([n],!0)}return r}var o}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),u=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},h=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(u(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var f=r(16);e.CommonMsqrtMixin=function(t){return i(e,l=t),Object.defineProperty(e.prototype,\"base\",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return null},enumerable:!0,configurable:!0}),e.prototype.createMo=function(t){var e=l.prototype.createMo.call(this,t);return this.childNodes.push(e),e},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.childNodes[this.surd].getBBox(),n=new f.BBox(this.childNodes[this.base].getBBox()),i=u(this.getPQ(r),2),o=(i[0],i[1]),a=u(this.getRootDimens(r),1)[0],s=this.font.params.rule_thickness,c=n.h+o+s;t.h=c+s,this.combineRootBBox(t,r),t.combine(r,a,c-r.h),t.combine(n,a+r.w,0),t.clean(),this.setChildPWidths(e)},e.prototype.combineRootBBox=function(t,e){},e.prototype.getPQ=function(t){var e=this.font.params.rule_thickness,r=this.node.attributes.get(\"displaystyle\")?this.font.params.x_height:e;return[r,t.h+t.d>this.surdH?(t.h+t.d-(this.surdH-e))/2:e+r/4]},e.prototype.getRootDimens=function(t){return[0,0,0,0]},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=l.apply(this,h(t))||this,n=r.createMo(\"\\u221a\");n.canStretch(1);var i=r.childNodes[r.base].getBBox(),o=i.h,a=i.d,s=r.font.params.rule_thickness,c=r.node.attributes.get(\"displaystyle\")?r.font.params.x_height:s;return r.surdH=o+a+2*s+c/4,n.getStretchedVariant([r.surdH-a,a],!0),r}var l}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(74),c=r(156),l=r(55),u=(o=c.CommonMrootMixin(a.CHTMLmsqrt),i(h,o),h.prototype.addRoot=function(t,e,r){e.toCHTML(t);var n=s(this.getRootDimens(r),3),i=n[0],o=n[1],a=n[2];e.getBBox(),this.adaptor.setStyle(t,\"verticalAlign\",this.em(o)),this.adaptor.setStyle(t,\"width\",this.em(i)),a&&this.adaptor.setStyle(this.adaptor.firstChild(t),\"paddingLeft\",this.em(a))},h.kind=l.MmlMroot.prototype.kind,h);function h(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmroot=u},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMrootMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return 1},enumerable:!0,configurable:!0}),e.prototype.combineRootBBox=function(t,e){var r=this.childNodes[this.root].getBBox(),n=o(this.getRootDimens(e),2),i=(n[0],n[1]);t.combine(r,0,i)},e.prototype.getRootDimens=function(t){var e=this.childNodes[this.surd],r=this.childNodes[this.root].getBBox(),n=(e.size<0?.5:.6)*t.w,i=r.w,o=r.rscale,a=Math.max(i,n/o),s=Math.max(0,a-i);return[a*o-n,this.rootHeight(r,t,e.size),s]},e.prototype.rootHeight=function(t,e,r){var n=e.h+e.d;return(r<0?2+.3*(n-4):.55*n)-e.d+Math.max(0,t.d*t.rscale)},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(2),c=r(158),l=(a=c.CommonScriptbaseMixin(s.CHTMLWrapper),i(h,a),h.prototype.toCHTML=function(t){this.chtml=this.standardCHTMLnode(t);var e=o(this.getOffset(this.baseChild.getBBox(),this.script.getBBox()),2),r=e[0],n=e[1],i={\"vertical-align\":this.em(n)};r&&(i[\"margin-left\"]=this.em(r)),this.baseChild.toCHTML(this.chtml),this.script.toCHTML(this.adaptor.append(this.chtml,this.html(\"mjx-script\",{style:i})))},h.prototype.setDeltaW=function(t,e){for(var r=0;r<e.length;r++)e[r]&&this.adaptor.setStyle(t[r],\"paddingLeft\",this.em(e[r]))},h.prototype.adjustOverDepth=function(t,e){0<=e.d||this.adaptor.setStyle(t,\"marginBottom\",this.em(e.d*e.rscale))},h.prototype.adjustUnderDepth=function(t,e){var r,n;if(!(0<=e.d)){var i=this.adaptor,o=(i.firstChild(i.firstChild(t)),this.em(e.d)),a=this.html(\"mjx-box\",{style:{\"margin-bottom\":o,\"vertical-align\":o}});try{for(var s=u(i.childNodes(i.firstChild(t))),c=s.next();!c.done;c=s.next()){var l=c.value;i.append(a,l)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}i.append(i.firstChild(t),a)}},h.kind=\"scriptbase\",h.useIC=!1,h);function h(){return null!==a&&a.apply(this,arguments)||this}e.CHTMLscriptbase=l},function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},y=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t},x=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a=1.5;e.CommonScriptbaseMixin=function(t){var e,i;return o(r,i=t),Object.defineProperty(r.prototype,\"baseChild\",{get:function(){return this.childNodes[this.node.base]},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,\"script\",{get:function(){return this.childNodes[1]},enumerable:!0,configurable:!0}),r.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.baseChild.getBBox(),n=this.script.getBBox(),i=s(this.getOffset(r,n),2),o=i[0],a=i[1];t.append(r),t.combine(n,t.w+o,a),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},r.prototype.coreIC=function(){var t=this.baseCore.getBBox();return t.ic?1.2*t.ic+.05:0},r.prototype.isCharBase=function(){var t=this.baseChild;return(t.node.isKind(\"mstyle\")||t.node.isKind(\"mrow\"))&&1===t.childNodes.length&&(t=t.childNodes[0]),(t.node.isKind(\"mo\")||t.node.isKind(\"mi\")||t.node.isKind(\"mn\"))&&1===t.bbox.rscale&&1===t.getText().length&&!t.node.attributes.get(\"largeop\")},r.prototype.getOffset=function(t,e){return[0,0]},r.prototype.getV=function(t,e){var r=this.font.params,n=this.length2em(this.node.attributes.get(\"subscriptshift\"),r.sub1);return Math.max(this.isCharBase()?0:t.d+r.sub_drop*e.rscale,n,e.h*e.rscale-.8*r.x_height)},r.prototype.getU=function(t,e){var r=this.font.params,n=this.node.attributes.getList(\"displaystyle\",\"texprimestyle\",\"superscriptshift\"),i=n.displaystyle?r.sup1:n.texprimestyle?r.sup3:r.sup2,o=this.length2em(n.superscriptshift,i);return Math.max(this.isCharBase()?0:t.h-r.sup_drop*e.rscale,o,e.d*e.rscale+.25*r.x_height)},r.prototype.hasMovableLimits=function(){return!this.node.attributes.get(\"displaystyle\")&&(this.node.getProperty(\"movablelimits\")||this.node.attributes.get(\"movablelimits\")||this.baseChild.coreMO().node.attributes.get(\"movablelimits\"))},r.prototype.getOverKU=function(t,e){var r=this.node.attributes.get(\"accent\"),n=this.font.params,i=e.d*e.rscale,o=(r?n.rule_thickness:Math.max(n.big_op_spacing1,n.big_op_spacing3-Math.max(0,i)))-(this.baseChild.node.isKind(\"munderover\")?.1:0);return[o,t.h*t.rscale+o+i]},r.prototype.getUnderKV=function(t,e){var r=this.node.attributes.get(\"accentunder\"),n=this.font.params,i=e.h*e.rscale,o=(r?n.rule_thickness:Math.max(n.big_op_spacing2,n.big_op_spacing4-i))-(this.baseChild.node.isKind(\"munderover\")?.1:0);return[o,-(t.d*t.rscale+o+i)]},r.prototype.getDeltaW=function(t,e){var r,n,i,o;void 0===e&&(e=[0,0,0]);var a=this.node.attributes.get(\"align\"),s=t.map(function(t){return t.w*t.rscale}),c=Math.max.apply(Math,y(s)),l=[],u=0;try{for(var h=x(s.keys()),f=h.next();!f.done;f=h.next())l[m=f.value]=(\"center\"===a?(c-s[m])/2:\"right\"===a?c-s[m]:0)+e[m],l[m]<u&&(u=-l[m])}catch(t){r={error:t}}finally{try{f&&!f.done&&(n=h.return)&&n.call(h)}finally{if(r)throw r.error}}if(u)try{for(var p=x(l.keys()),d=p.next();!d.done;d=p.next()){var m;l[m=d.value]+=u}}catch(t){i={error:t}}finally{try{d&&!d.done&&(o=p.return)&&o.call(p)}finally{if(i)throw i.error}}return l},r.prototype.getDelta=function(t){void 0===t&&(t=!1);var e=this.node.attributes.get(\"accent\")&&!t?this.baseChild.coreMO().bbox.sk:0;return a*this.baseCore.bbox.ic/2+e},r.prototype.stretchChildren=function(){var e,t,r,n,i,o,a=[];try{for(var s=x(this.childNodes),c=s.next();!c.done;c=s.next())(O=c.value).canStretch(2)&&a.push(O)}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}var l=a.length,u=this.childNodes.length;if(l&&1<u){var h=0,f=1<l&&l===u;try{for(var p=x(this.childNodes),d=p.next();!d.done;d=p.next()){var m=0===(O=d.value).stretch.dir;if(f||m){var y=O.getBBox(m),v=y.w,b=y.rscale;h<v*b&&(h=v*b)}}}catch(t){r={error:t}}finally{try{d&&!d.done&&(n=p.return)&&n.call(p)}finally{if(r)throw r.error}}try{for(var g=x(a),M=g.next();!M.done;M=g.next()){var O;(O=M.value).coreMO().getStretchedVariant([h/O.bbox.rscale])}}catch(t){i={error:t}}finally{try{M&&!M.done&&(o=g.return)&&o.call(g)}finally{if(i)throw i.error}}}},(e=r).useIC=!1,e;function r(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=i.apply(this,y(t))||this,n=r.baseCore=r.childNodes[0];if(!n)return r;for(;1===n.childNodes.length&&(n.node.isKind(\"mrow\")||n.node.isKind(\"TeXAtom\")||n.node.isKind(\"mstyle\")||n.node.isKind(\"mpadded\")||n.node.isKind(\"mphantom\")||n.node.isKind(\"semantics\"));)if(!(n=n.childNodes[0]))return r;return\"noIC\"in n&&(r.baseCore=n,r.constructor.useIC||(n.noIC=!0)),r}}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),p=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var c,o=r(37),a=r(39),s=r(39),l=r(39),u=r(60),h=(c=a.CommonMunderMixin(o.CHTMLmsub),i(f,c),f.prototype.toCHTML=function(t){if(this.hasMovableLimits())return c.prototype.toCHTML.call(this,t),void this.adaptor.setAttribute(this.chtml,\"limits\",\"false\");this.chtml=this.standardCHTMLnode(t);var e=this.adaptor.append(this.adaptor.append(this.chtml,this.html(\"mjx-row\")),this.html(\"mjx-base\")),r=this.adaptor.append(this.adaptor.append(this.chtml,this.html(\"mjx-row\")),this.html(\"mjx-under\"));this.baseChild.toCHTML(e),this.script.toCHTML(r);var n=this.baseChild.getBBox(),i=this.script.getBBox(),o=p(this.getUnderKV(n,i),2),a=o[0],s=(o[1],this.getDelta(!0));this.adaptor.setStyle(r,\"paddingTop\",this.em(a)),this.setDeltaW([e,r],this.getDeltaW([n,i],[0,-s])),this.adjustUnderDepth(r,i)},f.kind=u.MmlMunder.prototype.kind,f.useIC=!0,f.styles={\"mjx-over\":{\"text-align\":\"left\"},'mjx-munder:not([limits=\"false\"])':{display:\"inline-table\"},\"mjx-munder > mjx-row\":{\"text-align\":\"left\"},\"mjx-under\":{\"padding-bottom\":\".1em\"}},f);function f(){return null!==c&&c.apply(this,arguments)||this}e.CHTMLmunder=h;var d,m=(d=s.CommonMoverMixin(o.CHTMLmsup),i(y,d),y.prototype.toCHTML=function(t){if(this.hasMovableLimits())return d.prototype.toCHTML.call(this,t),void this.adaptor.setAttribute(this.chtml,\"limits\",\"false\");this.chtml=this.standardCHTMLnode(t);var e=this.adaptor.append(this.chtml,this.html(\"mjx-over\")),r=this.adaptor.append(this.chtml,this.html(\"mjx-base\"));this.script.toCHTML(e),this.baseChild.toCHTML(r);var n=this.script.getBBox(),i=this.baseChild.getBBox(),o=p(this.getOverKU(i,n),2),a=o[0],s=(o[1],this.getDelta());this.adaptor.setStyle(e,\"paddingBottom\",this.em(a)),this.setDeltaW([r,e],this.getDeltaW([i,n],[0,s])),this.adjustOverDepth(e,n)},y.kind=u.MmlMover.prototype.kind,y.useIC=!0,y.styles={'mjx-mover:not([limits=\"false\"])':{\"padding-top\":\".1em\"},'mjx-mover:not([limits=\"false\"]) > *':{display:\"block\",\"text-align\":\"left\"}},y);function y(){return null!==d&&d.apply(this,arguments)||this}e.CHTMLmover=m;var v,b=(v=l.CommonMunderoverMixin(o.CHTMLmsubsup),i(g,v),g.prototype.toCHTML=function(t){if(this.hasMovableLimits())return v.prototype.toCHTML.call(this,t),void this.adaptor.setAttribute(this.chtml,\"limits\",\"false\");this.chtml=this.standardCHTMLnode(t);var e=this.adaptor.append(this.chtml,this.html(\"mjx-over\")),r=this.adaptor.append(this.adaptor.append(this.chtml,this.html(\"mjx-box\")),this.html(\"mjx-munder\")),n=this.adaptor.append(this.adaptor.append(r,this.html(\"mjx-row\")),this.html(\"mjx-base\")),i=this.adaptor.append(this.adaptor.append(r,this.html(\"mjx-row\")),this.html(\"mjx-under\"));this.overChild.toCHTML(e),this.baseChild.toCHTML(n),this.underChild.toCHTML(i);var o=this.overChild.getBBox(),a=this.baseChild.getBBox(),s=this.underChild.getBBox(),c=p(this.getOverKU(a,o),2),l=c[0],u=(c[1],p(this.getUnderKV(a,s),2)),h=u[0],f=(u[1],this.getDelta());this.adaptor.setStyle(e,\"paddingBottom\",this.em(l)),this.adaptor.setStyle(i,\"paddingTop\",this.em(h)),this.setDeltaW([n,i,e],this.getDeltaW([a,s,o],[0,-f,f])),this.adjustOverDepth(e,o),this.adjustUnderDepth(i,s)},g.kind=u.MmlMunderover.prototype.kind,g.useIC=!0,g.styles={'mjx-munderover:not([limits=\"false\"])':{\"padding-top\":\".1em\"},'mjx-munderover:not([limits=\"false\"]) > *':{display:\"block\"}},g);function g(){return null!==v&&v.apply(this,arguments)||this}e.CHTMLmunderover=b},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(37),s=r(161),l=r(61),u=(o=s.CommonMmultiscriptsMixin(a.CHTMLmsubsup),i(h,o),h.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.getScriptData(),n=this.combinePrePost(r.sub,r.psub),i=this.combinePrePost(r.sup,r.psup),o=c(this.getUVQ(r.base,n,i),3),a=o[0],s=o[1];o[2],r.numPrescripts&&this.addScripts(a,-s,!0,r.psub,r.psup,this.firstPrescript,r.numPrescripts),this.childNodes[0].toCHTML(e),r.numScripts&&this.addScripts(a,-s,!1,r.sub,r.sup,1,r.numScripts)},h.prototype.addScripts=function(t,e,r,n,i,o,a){var s=this.adaptor,c=t-i.d+(e-n.h),l=t<0&&0===e?n.h+t:t,u=0<c?{style:{height:this.em(c)}}:{},h=l?{style:{\"vertical-align\":this.em(l)}}:{},f=this.html(\"mjx-row\"),p=this.html(\"mjx-row\",u),d=this.html(\"mjx-row\"),m=\"mjx-\"+(r?\"pre\":\"\")+\"scripts\";s.append(this.chtml,this.html(m,h,[f,p,d]));for(var y=o+2*a;o<y;)this.childNodes[o++].toCHTML(s.append(d,this.html(\"mjx-cell\"))),this.childNodes[o++].toCHTML(s.append(f,this.html(\"mjx-cell\")))},h.kind=l.MmlMmultiscripts.prototype.kind,h.styles={\"mjx-prescripts\":{display:\"inline-table\",\"padding-left\":\".05em\"},\"mjx-scripts\":{display:\"inline-table\",\"padding-right\":\".05em\"},\"mjx-prescripts > mjx-row > mjx-cell\":{\"text-align\":\"right\"}},h);function h(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmmultiscripts=u},function(t,s,e){\"use strict\";var n,r=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),d=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(s,\"__esModule\",{value:!0});var i=e(16);s.NextScript={base:\"subList\",subList:\"supList\",supList:\"subList\",psubList:\"psupList\",psupList:\"psubList\"},s.ScriptNames=[\"sup\",\"sup\",\"psup\",\"psub\"],s.CommonMmultiscriptsMixin=function(t){return r(e,c=t),e.prototype.combinePrePost=function(t,e){var r=new i.BBox(t);return r.combine(e,0,0),r},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.font.params.scriptspace,n=this.getScriptData(),i=this.combinePrePost(n.sub,n.psub),o=this.combinePrePost(n.sup,n.psup),a=d(this.getUVQ(n.base,i,o),2),s=a[0],c=a[1];if(t.empty(),n.numPrescripts&&(t.combine(n.psup,r,s),t.combine(n.psub,r,c)),t.append(n.base),n.numScripts){var l=t.w;t.combine(n.sup,l,s),t.combine(n.sub,l,c),t.w+=r}t.clean(),this.setChildPWidths(e)},e.prototype.getScriptData=function(){if(this.scriptData)return this.scriptData;var t=this.scriptData={base:null,sub:i.BBox.empty(),sup:i.BBox.empty(),psub:i.BBox.empty(),psup:i.BBox.empty(),numPrescripts:0,numScripts:0},e=this.getScriptBBoxLists();return this.combineBBoxLists(t.sub,t.sup,e.subList,e.supList),this.combineBBoxLists(t.psub,t.psup,e.psubList,e.psupList),this.scriptData.base=e.base[0],this.scriptData.numPrescripts=e.psubList.length,this.scriptData.numScripts=e.subList.length,this.scriptData},e.prototype.getScriptBBoxLists=function(){var e,t,r={base:[],subList:[],supList:[],psubList:[],psupList:[]},n=\"base\";try{for(var i=l(this.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;n=a.node.isKind(\"mprescripts\")?\"psubList\":(r[n].push(a.getBBox()),s.NextScript[n])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return this.firstPrescript=r.subList.length+r.supList.length+2,this.padLists(r.subList,r.supList),this.padLists(r.psubList,r.psupList),r},e.prototype.padLists=function(t,e){t.length>e.length&&e.push(i.BBox.empty())},e.prototype.combineBBoxLists=function(t,e,r,n){for(var i=0;i<r.length;i++){var o=d(this.getScaledWHD(r[i]),3),a=o[0],s=o[1],c=o[2],l=d(this.getScaledWHD(n[i]),3),u=l[0],h=l[1],f=l[2],p=Math.max(a,u);t.w+=p,e.w+=p,s>t.h&&(t.h=s),c>t.d&&(t.d=c),h>e.h&&(e.h=h),f>e.d&&(e.d=f)}},e.prototype.getScaledWHD=function(t){var e=t.w,r=t.h,n=t.d,i=t.rscale;return[e*i,r*i,n*i]},e.prototype.getUVQ=function(t,e,r){var n;if(!this.UVQ){var i=d([0,0,0],3),o=i[0],a=i[1],s=i[2];0===e.h&&0===e.d?o=this.getU(t,r):0===r.h&&0===r.d?o=-this.getV(t,e):(o=(n=d(c.prototype.getUVQ.call(this,t,e,r),3))[0],a=n[1],s=n[2]),this.UVQ=[o,a,s]}return this.UVQ},e;function e(){var t=null!==c&&c.apply(this,arguments)||this;return t.scriptData=null,t.firstPrescript=0,t}var c}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),y=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},u=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(163),c=r(62),h=r(10),l=(o=s.CommonMtableMixin(a.CHTMLWrapper),i(f,o),f.prototype.getAlignShift=function(){var t=o.prototype.getAlignShift.call(this);return this.isTop||(t[1]=0),t},f.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t);this.adaptor.append(n,this.html(\"mjx-table\",{},[this.itable]));try{for(var i=y(this.childNodes),o=i.next();!o.done;o=i.next())o.value.toCHTML(this.itable)}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}this.padRows(),this.handleColumnSpacing(),this.handleColumnLines(),this.handleColumnWidths(),this.handleRowSpacing(),this.handleRowLines(),this.handleEqualRows(),this.handleFrame(),this.handleWidth(),this.handleLabels(),this.handleAlign(),this.handleJustify(),this.shiftColor()},f.prototype.shiftColor=function(){var t=this.adaptor,e=t.getStyle(this.chtml,\"backgroundColor\");e&&(t.setStyle(this.chtml,\"backgroundColor\",\"\"),t.setStyle(this.itable,\"backgroundColor\",e))},f.prototype.padRows=function(){var e,t,r=this.adaptor;try{for(var n=y(r.childNodes(this.itable)),i=n.next();!i.done;i=n.next())for(var o=i.value;r.childNodes(o).length<this.numCols;)r.append(o,this.html(\"mjx-mtd\"))}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},f.prototype.handleColumnSpacing=function(){var e,t,r,n,i=this.getEmHalfSpacing(this.fSpace[0],this.cSpace),o=this.frame;try{for(var a=y(this.tableRows),s=a.next();!s.done;s=a.next()){var c=s.value,l=0;try{for(var u=(r=void 0,y(c.tableCells)),h=u.next();!h.done;h=u.next()){var f=h.value,p=i[l++],d=i[l],m=f?f.chtml:this.adaptor.childNodes(c.chtml)[l];(1<l&&\"0.4em\"!==p||o&&1===l)&&this.adaptor.setStyle(m,\"paddingLeft\",p),(l<this.numCols&&\"0.4em\"!==d||o&&l===this.numCols)&&this.adaptor.setStyle(m,\"paddingRight\",d)}}catch(t){r={error:t}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}},f.prototype.handleColumnLines=function(){var e,t,r,n;if(\"none\"!==this.node.attributes.get(\"columnlines\")){var i=this.getColumnAttributes(\"columnlines\");try{for(var o=y(this.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value,c=0;try{for(var l=(r=void 0,y(this.adaptor.childNodes(s.chtml).slice(1))),u=l.next();!u.done;u=l.next()){var h=u.value,f=i[c++];\"none\"!==f&&this.adaptor.setStyle(h,\"borderLeft\",\".07em \"+f)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}}},f.prototype.handleColumnWidths=function(){var e,t,r,n;try{for(var i=y(this.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value,s=0;try{for(var c=(r=void 0,y(this.adaptor.childNodes(a.chtml))),l=c.next();!l.done;l=c.next()){var u=l.value,h=this.cWidths[s++];if(null!==h){var f=\"number\"==typeof h?this.em(h):h;this.adaptor.setStyle(u,\"width\",f),this.adaptor.setStyle(u,\"maxWidth\",f),this.adaptor.setStyle(u,\"minWidth\",f)}}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}},f.prototype.handleRowSpacing=function(){var e,t,r,n,i=this.getEmHalfSpacing(this.fSpace[1],this.rSpace),o=this.frame,a=0;try{for(var s=y(this.childNodes),c=s.next();!c.done;c=s.next()){var l=c.value,u=i[a++],h=i[a];try{for(var f=(r=void 0,y(l.childNodes)),p=f.next();!p.done;p=f.next()){var d=p.value;(1<a&&\"0.215em\"!==u||o&&1===a)&&this.adaptor.setStyle(d.chtml,\"paddingTop\",u),(a<this.numRows&&\"0.215em\"!==h||o&&a===this.numRows)&&this.adaptor.setStyle(d.chtml,\"paddingBottom\",h)}}catch(t){r={error:t}}finally{try{p&&!p.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}},f.prototype.handleRowLines=function(){var e,t,r,n;if(\"none\"!==this.node.attributes.get(\"rowlines\")){var i=this.getRowAttributes(\"rowlines\"),o=0;try{for(var a=y(this.childNodes.slice(1)),s=a.next();!s.done;s=a.next()){var c=s.value,l=i[o++];if(\"none\"!==l)try{for(var u=(r=void 0,y(this.adaptor.childNodes(c.chtml))),h=u.next();!h.done;h=u.next()){var f=h.value;this.adaptor.setStyle(f,\"borderTop\",\".07em \"+l)}}catch(t){r={error:t}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}}},f.prototype.handleEqualRows=function(){if(this.node.attributes.get(\"equalrows\"))for(var t=this.getRowHalfSpacing(),e=this.getTableData(),r=e.H,n=e.D,i=e.NH,o=e.ND,a=this.getEqualRowHeight(),s=(this.em(a),0);s<this.numRows;s++){var c=this.childNodes[s];a!==i[s]+o[s]&&this.setRowHeight(c,a,(a-r[s]+n[s])/2,t[s]+t[s+1])}},f.prototype.setRowHeight=function(t,e,r,n){var i,o;this.adaptor.setStyle(t.chtml,\"height\",this.em(e+n));var a=t.node.attributes.get(\"rowalign\");try{for(var s=y(t.childNodes),c=s.next();!c.done;c=s.next()){var l=c.value;if(this.setCellBaseline(l,a,e,r))break}}catch(t){i={error:t}}finally{try{c&&!c.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}},f.prototype.setCellBaseline=function(t,e,r,n){var i=t.node.attributes.get(\"rowalign\");if(\"baseline\"===i||\"axis\"===i){var o=this.adaptor,a=o.lastChild(t.chtml);o.setStyle(a,\"height\",this.em(r)),o.setStyle(a,\"verticalAlign\",this.em(-n));var s=t.parent;if(!(s.node.isKind(\"mlabeledtr\")&&t===s.childNodes[0]||\"baseline\"!==e&&\"axis\"!==e))return!0}return!1},f.prototype.handleFrame=function(){this.frame&&this.adaptor.setStyle(this.itable,\"border\",\".07em \"+this.node.attributes.get(\"frame\"))},f.prototype.handleWidth=function(){var t=this.adaptor,e=this.getBBox(),r=e.w,n=e.L,i=e.R;t.setStyle(this.chtml,\"minWidth\",this.em(n+r+i));var o=this.node.attributes.get(\"width\");if(h.isPercent(o))t.setStyle(this.chtml,\"width\",\"\"),t.setAttribute(this.chtml,\"width\",\"full\");else if(!this.hasLabels){if(\"auto\"===o)return;o=this.em(this.length2em(o)+2*this.fLine)}var a=t.firstChild(this.chtml);t.setStyle(a,\"width\",o),t.setStyle(a,\"minWidth\",this.em(r)),(n||i)&&(t.setStyle(this.chtml,\"margin\",\"\"),n===i?t.setStyle(a,\"margin\",\"0 \"+this.em(i)):t.setStyle(a,\"margin\",\"0 \"+this.em(i)+\" 0 \"+this.em(n))),t.setAttribute(this.itable,\"width\",\"full\")},f.prototype.handleAlign=function(){var t=u(this.getAlignmentRow(),2),e=t[0],r=t[1];if(null===r)\"axis\"!==e&&this.adaptor.setAttribute(this.chtml,\"align\",e);else{var n=this.getVerticalPosition(r,e);this.adaptor.setAttribute(this.chtml,\"align\",\"top\"),this.adaptor.setStyle(this.chtml,\"verticalAlign\",this.em(n))}},f.prototype.handleJustify=function(){var t=u(this.getAlignShift(),2),e=t[0];t[1],\"center\"!==e&&this.adaptor.setAttribute(this.chtml,\"justify\",e)},f.prototype.handleLabels=function(){if(this.hasLabels){var t=this.labels,e=this.node.attributes,r=this.adaptor,n=e.get(\"side\");r.setAttribute(this.chtml,\"side\",n),r.setAttribute(t,\"align\",n),r.setStyle(t,n,\"0\");var i=u(this.addLabelPadding(n),2),o=i[0],a=i[1];if(a){var s=r.firstChild(this.chtml);this.setIndent(s,o,a)}this.updateRowHeights(),this.addLabelSpacing()}},f.prototype.addLabelPadding=function(t){var e=u(this.getPadAlignShift(t),3),r=(e[0],e[1]),n=e[2],i={};if(\"right\"===t){var o=this.node.attributes.get(\"width\"),a=this.getBBox(),s=a.w,c=a.L,l=a.R;i.style={width:h.isPercent(o)?\"calc(\"+o+\" + \"+this.em(c+l)+\")\":this.em(c+s+l),minWidth:\"100%\"}}return this.adaptor.append(this.chtml,this.html(\"mjx-labels\",i,[this.labels])),[r,n]},f.prototype.updateRowHeights=function(){if(!this.node.attributes.get(\"equalrows\"))for(var t=this.getTableData(),e=t.H,r=t.D,n=t.NH,i=t.ND,o=this.getRowHalfSpacing(),a=0;a<this.numRows;a++){var s=this.childNodes[a];e[a]!==n[a]||r[a]!==i[a]?this.setRowHeight(s,e[a]+r[a],r[a],o[a]+o[a+1]):s.node.isKind(\"mlabeledtr\")&&this.setCellBaseline(s.childNodes[0],\"\",e[a]+r[a],r[a])}},f.prototype.addLabelSpacing=function(){for(var t=this.adaptor,e=this.node.attributes.get(\"equalrows\"),r=this.getTableData(),n=r.H,i=r.D,o=e?this.getEqualRowHeight():0,a=this.getRowHalfSpacing(),s=this.fLine,c=t.firstChild(this.labels),l=0;l<this.numRows;l++)this.childNodes[l].node.isKind(\"mlabeledtr\")?(s&&t.insert(this.html(\"mjx-mtr\",{style:{height:this.em(s)}}),c),t.setStyle(c,\"height\",this.em((e?o:n[l]+i[l])+a[l]+a[l+1])),c=t.next(c),s=this.rLines[l]):s+=a[l]+(e?o:n[l]+i[l])+a[l+1]+this.rLines[l]},f.kind=c.MmlMtable.prototype.kind,f.styles={\"mjx-mtable\":{\"vertical-align\":\".25em\",\"text-align\":\"center\",position:\"relative\",\"box-sizing\":\"border-box\"},\"mjx-labels\":{position:\"absolute\",left:0,top:0},\"mjx-table\":{display:\"inline-block\"},\"mjx-table > mjx-itable\":{\"vertical-align\":\"middle\",\"text-align\":\"left\",\"box-sizing\":\"border-box\"},\"mjx-labels > mjx-itable\":{position:\"absolute\",top:0},'mjx-mtable[justify=\"left\"]':{\"text-align\":\"left\"},'mjx-mtable[justify=\"right\"]':{\"text-align\":\"right\"},'mjx-mtable[justify=\"left\"][side=\"left\"]':{\"padding-right\":\"0 ! important\"},'mjx-mtable[justify=\"left\"][side=\"right\"]':{\"padding-left\":\"0 ! important\"},'mjx-mtable[justify=\"right\"][side=\"left\"]':{\"padding-right\":\"0 ! important\"},'mjx-mtable[justify=\"right\"][side=\"right\"]':{\"padding-left\":\"0 ! important\"},\"mjx-mtable[align]\":{\"vertical-align\":\"baseline\"},'mjx-mtable[align=\"top\"] > mjx-table':{\"vertical-align\":\"top\"},'mjx-mtable[align=\"bottom\"] > mjx-table':{\"vertical-align\":\"bottom\"},'mjx-mtable[align=\"center\"] > mjx-table':{\"vertical-align\":\"middle\"},'mjx-mtable[align=\"baseline\"] > mjx-table':{\"vertical-align\":\"middle\"}},f);function f(t,e,r){void 0===r&&(r=null);var n=o.call(this,t,e,r)||this;return n.itable=n.html(\"mjx-itable\"),n.labels=n.html(\"mjx-itable\"),n}e.CHTMLmtable=l},function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),y=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(y(arguments[e]));return t},x=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var s=r(16),v=r(10),b=r(104);e.CommonMtableMixin=function(t){return o(e,i=t),Object.defineProperty(e.prototype,\"tableRows\",{get:function(){return this.childNodes},enumerable:!0,configurable:!0}),e.prototype.findContainer=function(){for(var t=this,e=t.parent;e&&(e.node.notParent||e.node.isKind(\"mrow\"));)e=(t=e).parent;this.container=e,this.containerI=t.node.childPosition()},e.prototype.getPercentageWidth=function(){if(this.hasLabels)this.bbox.pwidth=s.BBox.fullWidth;else{var t=this.node.attributes.get(\"width\");v.isPercent(t)&&(this.bbox.pwidth=t)}},e.prototype.stretchRows=function(){for(var t=this.node.attributes.get(\"equalrows\"),e=t?this.getEqualRowHeight():0,r=t?this.getTableData():{H:[0],D:[0]},n=r.H,i=r.D,o=this.tableRows,a=0;a<this.numRows;a++){var s=t?[(e+n[a]-i[a])/2,(e-n[a]+i[a])/2]:null;o[a].stretchChildren(s)}},e.prototype.stretchColumns=function(){for(var t=0;t<this.numCols;t++){var e=\"number\"==typeof this.cWidths[t]?this.cWidths[t]:null;this.stretchColumn(t,e)}},e.prototype.stretchColumn=function(t,e){var r,n,i,o,a,s,c=[];try{for(var l=x(this.tableRows),u=l.next();!u.done;u=l.next())(y=u.value.getChild(t))&&0===(O=y.childNodes[0]).stretch.dir&&O.canStretch(2)&&c.push(O)}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}var h=c.length,f=this.childNodes.length;if(h&&1<f){if(null===e){e=0;var p=1<h&&h===f;try{for(var d=x(this.tableRows),m=d.next();!m.done;m=d.next()){var y;if(y=m.value.getChild(t)){var v=0===(O=y.childNodes[0]).stretch.dir;if(p||v){var b=O.getBBox(v).w;e<b&&(e=b)}}}}catch(t){i={error:t}}finally{try{m&&!m.done&&(o=d.return)&&o.call(d)}finally{if(i)throw i.error}}}try{for(var g=x(c),M=g.next();!M.done;M=g.next()){var O;(O=M.value).coreMO().getStretchedVariant([e])}}catch(t){a={error:t}}finally{try{M&&!M.done&&(s=g.return)&&s.call(g)}finally{if(a)throw a.error}}}},e.prototype.getTableData=function(){if(this.data)return this.data;for(var t=new Array(this.numRows).fill(0),e=new Array(this.numRows).fill(0),r=new Array(this.numCols).fill(0),n=new Array(this.numRows),i=new Array(this.numRows),o=[0],a=this.tableRows,s=0;s<a.length;s++){for(var c=a[s],l=0;l<c.numCells;l++){var u=c.getChild(l);this.updateHDW(u,l,s,t,e,r),this.recordPWidthCell(u,l)}n[s]=t[s],i[s]=e[s],c.labeled&&this.updateHDW(c.childNodes[0],0,s,t,e,o)}this.node.attributes.get(\"width\");var h=o[0];return this.data={H:t,D:e,W:r,NH:n,ND:i,L:h},this.data},e.prototype.updateHDW=function(t,e,r,n,i,o){void 0===o&&(o=null);var a=t.getBBox(),s=a.h,c=a.d,l=a.w;a.pwidth,s<.75&&(s=.75),c<.25&&(c=.25),s>n[r]&&(n[r]=s),c>i[r]&&(i[r]=c),o&&l>o[e]&&(o[e]=l)},e.prototype.recordPWidthCell=function(t,e){t.childNodes[0]&&t.childNodes[0].getBBox().pwidth&&this.pwidthCells.push([t,e])},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r,n,i=this.getTableData(),o=i.H,a=i.D;if(this.node.attributes.get(\"equalrows\")){var s=this.getEqualRowHeight();r=b.sum([].concat(this.rLines,this.rSpace))+s*this.numRows}else r=b.sum(o.concat(a,this.rLines,this.rSpace));r+=2*(this.fLine+this.fSpace[1]);var c=this.getComputedWidths();n=b.sum(c.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]);var l=this.node.attributes.get(\"width\");\"auto\"!==l&&(n=Math.max(this.length2em(l,0)+2*this.fLine,n));var u=y(this.getBBoxHD(r),2),h=u[0],f=u[1];t.h=h,t.d=f,t.w=n;var p=y(this.getBBoxLR(),2),d=p[0],m=p[1];t.L=d,t.R=m,v.isPercent(l)||this.setColumnPWidths()},e.prototype.setChildPWidths=function(t,e,r){var n=this.node.attributes.get(\"width\");if(v.isPercent(n)){this.hasLabels||(this.bbox.pwidth=\"\",this.container.bbox.pwidth=\"\");var i=this.bbox,o=i.w,a=i.L,s=i.R,c=Math.max(o,this.length2em(n,Math.max(e,a+o+s))),l=this.node.attributes.get(\"equalcolumns\")?Array(this.numCols).fill(this.percent(1/Math.max(1,this.numCols))):this.getColumnAttributes(\"columnwidth\",0);this.cWidths=this.getColumnWidthsFixed(l,c);var u=this.getComputedWidths();return this.pWidth=b.sum(u.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),this.isTop&&(this.bbox.w=this.pWidth),this.setColumnPWidths(),this.pWidth!==o&&this.parent.invalidateBBox(),this.pWidth!==o}},e.prototype.setColumnPWidths=function(){var e,t,r=this.cWidths;try{for(var n=x(this.pwidthCells),i=n.next();!i.done;i=n.next()){var o=y(i.value,2),a=o[0],s=o[1];a.setChildPWidths(!1,r[s])&&(a.invalidateBBox(),a.getBBox())}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},e.prototype.getBBoxHD=function(t){var e=y(this.getAlignmentRow(),2),r=e[0],n=e[1];if(null===n){var i=this.font.params.axis_height,o=t/2;return{top:[0,t],center:[o,o],bottom:[t,0],baseline:[o,o],axis:[o+i,o-i]}[r]||[o,o]}var a=this.getVerticalPosition(n,r);return[a,t-a]},e.prototype.getBBoxLR=function(){if(this.hasLabels){var t=this.node.attributes.get(\"side\"),e=y(this.getPadAlignShift(t),3),r=e[0],n=e[1];return e[2],\"center\"===n?[r,r]:\"left\"===t?[r,0]:[0,r]}return[0,0]},e.prototype.getPadAlignShift=function(t){var e=this.getTableData().L+this.length2em(this.node.attributes.get(\"minlabelspacing\")),r=y(null==this.styles?[\"\",\"\"]:[this.styles.get(\"padding-left\"),this.styles.get(\"padding-right\")],2),n=r[0],i=r[1];(n||i)&&(e=Math.max(e,this.length2em(n||\"0\"),this.length2em(i||\"0\")));var o=y(this.getAlignShift(),2),a=o[0],s=o[1];return a===t&&(s=\"left\"===t?Math.max(e,s)-e:Math.min(-e,s)+e),[e,a,s]},e.prototype.getAlignShift=function(){return this.isTop?i.prototype.getAlignShift.call(this):[this.container.getChildAlign(this.containerI),0]},e.prototype.getWidth=function(){return this.pWidth||this.getBBox().w},e.prototype.getEqualRowHeight=function(){var t=this.getTableData(),e=t.H,r=t.D,n=Array.from(e.keys()).map(function(t){return e[t]+r[t]});return Math.max.apply(Math,n)},e.prototype.getComputedWidths=function(){var e=this,r=this.getTableData().W,t=Array.from(r.keys()).map(function(t){return\"number\"==typeof e.cWidths[t]?e.cWidths[t]:r[t]});return this.node.attributes.get(\"equalcolumns\")&&(t=Array(t.length).fill(b.max(t))),t},e.prototype.getColumnWidths=function(){var t=this.node.attributes.get(\"width\");if(this.node.attributes.get(\"equalcolumns\"))return this.getEqualColumns(t);var e=this.getColumnAttributes(\"columnwidth\",0);return\"auto\"===t?this.getColumnWidthsAuto(e):v.isPercent(t)?this.getColumnWidthsPercent(e,t):this.getColumnWidthsFixed(e,this.length2em(t))},e.prototype.getEqualColumns=function(t){var e,r=Math.max(1,this.numCols);if(\"auto\"===t){var n=this.getTableData().W;e=b.max(n)}else if(v.isPercent(t))e=this.percent(1/r);else{var i=b.sum([].concat(this.cLines,this.cSpace))+2*this.fSpace[0];e=Math.max(0,this.length2em(t)-i)/r}return Array(this.numCols).fill(e)},e.prototype.getColumnWidthsAuto=function(t){var e=this;return t.map(function(t){return\"auto\"===t||\"fit\"===t?null:v.isPercent(t)?t:e.length2em(t)})},e.prototype.getColumnWidthsPercent=function(r,t){var n=this,i=0<=r.indexOf(\"fit\"),o=(i?this.getTableData():{W:null}).W;return Array.from(r.keys()).map(function(t){var e=r[t];return\"fit\"===e?null:\"auto\"===e?i?o[t]:null:v.isPercent(e)?e:n.length2em(e)})},e.prototype.getColumnWidthsFixed=function(r,n){var i=this,t=Array.from(r.keys()),o=t.filter(function(t){return\"fit\"===r[t]}),e=t.filter(function(t){return\"auto\"===r[t]}),a=o.length||e.length,s=(a?this.getTableData():{W:null}).W,c=n-b.sum([].concat(this.cLines,this.cSpace))-2*this.fSpace[0],l=c;t.forEach(function(t){var e=r[t];l-=\"fit\"===e||\"auto\"===e?s[t]:i.length2em(e,n)});var u=a&&0<l?l/a:0;return t.map(function(t){var e=r[t];return\"fit\"===e?s[t]+u:\"auto\"===e?s[t]+(0===o.length?u:0):i.length2em(e,c)})},e.prototype.getVerticalPosition=function(t,e){for(var r=this.node.attributes.get(\"equalrows\"),n=this.getTableData(),i=n.H,o=n.D,a=r?this.getEqualRowHeight():0,s=this.getRowHalfSpacing(),c=this.fLine,l=0;l<t;l++)c+=s[l]+(r?a:i[l]+o[l])+s[l+1]+this.rLines[l];var u=y(r?[(a+i[t]-o[t])/2,(a-i[t]+o[t])/2]:[i[t],o[t]],2),h=u[0],f=u[1];return c+={top:0,center:s[t]+(h+f)/2,bottom:s[t]+h+f+s[t+1],baseline:s[t]+h,axis:s[t]+h-.25}[e]||0},e.prototype.getEmHalfSpacing=function(t,e){var r=this.em(t),n=this.addEm(e,2);return n.unshift(r),n.push(r),n},e.prototype.getRowHalfSpacing=function(){var t=this.rSpace.map(function(t){return t/2});return t.unshift(this.fSpace[1]),t.push(this.fSpace[1]),t},e.prototype.getColumnHalfSpacing=function(){var t=this.cSpace.map(function(t){return t/2});return t.unshift(this.fSpace[0]),t.push(this.fSpace[0]),t},e.prototype.getAlignmentRow=function(){var t=y(v.split(this.node.attributes.get(\"align\")),2),e=t[0],r=t[1];if(null==r)return[e,null];var n=parseInt(r);return n<0&&(n+=this.numRows),[e,n<1||n>this.numRows?null:n-1]},e.prototype.getColumnAttributes=function(t,e){void 0===e&&(e=1);var r=this.numCols-e,n=this.getAttributeArray(t);if(0!==n.length){for(;n.length<r;)n.push(n[n.length-1]);return n.length>r&&n.splice(r),n}},e.prototype.getRowAttributes=function(t,e){void 0===e&&(e=1);var r=this.numRows-e,n=this.getAttributeArray(t);if(0!==n.length){for(;n.length<r;)n.push(n[n.length-1]);return n.length>r&&n.splice(r),n}},e.prototype.getAttributeArray=function(t){var e=this.node.attributes.get(t);return e?v.split(e):[this.node.attributes.getDefault(t)]},e.prototype.addEm=function(t,e){var r=this;if(void 0===e&&(e=1),t)return t.map(function(t){return r.em(t/e)})},e.prototype.convertLengths=function(t){var e=this;if(t)return t.map(function(t){return e.length2em(t)})},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=i.apply(this,a(t))||this;r.numCols=0,r.numRows=0,r.data=null,r.pwidthCells=[],r.pWidth=0,r.numCols=b.max(r.tableRows.map(function(t){return t.numCells})),r.numRows=r.childNodes.length,r.hasLabels=r.childNodes.reduce(function(t,e){return t||e.node.isKind(\"mlabeledtr\")},!1),r.findContainer(),r.isTop=!r.container||r.container.node.isKind(\"math\")&&!r.container.parent,r.getPercentageWidth();var n=r.node.attributes;return r.frame=\"none\"!==n.get(\"frame\"),r.fLine=r.frame?.07:0,r.fSpace=r.frame?r.convertLengths(r.getAttributeArray(\"framespacing\")):[0,0],r.cSpace=r.convertLengths(r.getColumnAttributes(\"columnspacing\")),r.rSpace=r.convertLengths(r.getRowAttributes(\"rowspacing\")),r.cLines=r.getColumnAttributes(\"columnlines\").map(function(t){return\"none\"===t?0:.07}),r.rLines=r.getRowAttributes(\"rowlines\").map(function(t){return\"none\"===t?0:.07}),r.cWidths=r.getColumnWidths(),r.stretchRows(),r.stretchColumns(),r}var i}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(75),c=r(75),l=r(63),u=(o=s.CommonMtrMixin(a.CHTMLWrapper),i(h,o),h.prototype.toCHTML=function(t){o.prototype.toCHTML.call(this,t);var e=this.node.attributes.get(\"rowalign\");\"baseline\"!==e&&this.adaptor.setAttribute(this.chtml,\"rowalign\",e)},h.kind=l.MmlMtr.prototype.kind,h.styles={\"mjx-mtr\":{display:\"table-row\"},'mjx-mtr[rowalign=\"top\"] > mjx-mtd':{\"vertical-align\":\"top\"},'mjx-mtr[rowalign=\"center\"] > mjx-mtd':{\"vertical-align\":\"middle\"},'mjx-mtr[rowalign=\"bottom\"] > mjx-mtd':{\"vertical-align\":\"bottom\"},'mjx-mtr[rowalign=\"baseline\"] > mjx-mtd':{\"vertical-align\":\"baseline\"},'mjx-mtr[rowalign=\"axis\"] > mjx-mtd':{\"vertical-align\":\".25em\"}},h);function h(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmtr=u;var f,p=(f=c.CommonMlabeledtrMixin(u),i(d,f),d.prototype.toCHTML=function(t){f.prototype.toCHTML.call(this,t);var e=this.adaptor.firstChild(this.chtml);if(e){this.adaptor.remove(e);var r=this.node.attributes.get(\"rowalign\"),n=\"baseline\"!==r&&\"axis\"!==r?{rowalign:r}:{},i=this.html(\"mjx-mtr\",n,[e]);this.adaptor.append(this.parent.labels,i)}},d.kind=l.MmlMlabeledtr.prototype.kind,d.styles={\"mjx-mlabeledtr\":{display:\"table-row\"},'mjx-mlabeledtr[rowalign=\"top\"] > mjx-mtd':{\"vertical-align\":\"top\"},'mjx-mlabeledtr[rowalign=\"center\"] > mjx-mtd':{\"vertical-align\":\"middle\"},'mjx-mlabeledtr[rowalign=\"bottom\"] > mjx-mtd':{\"vertical-align\":\"bottom\"},'mjx-mlabeledtr[rowalign=\"baseline\"] > mjx-mtd':{\"vertical-align\":\"baseline\"},'mjx-mlabeledtr[rowalign=\"axis\"] > mjx-mtd':{\"vertical-align\":\".25em\"}},d);function d(){return null!==f&&f.apply(this,arguments)||this}e.CHTMLmlabeledtr=p},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(166),c=r(64),l=(o=s.CommonMtdMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){o.prototype.toCHTML.call(this,t);var e=this.node.attributes.get(\"rowalign\"),r=this.node.attributes.get(\"columnalign\");e!==this.parent.node.attributes.get(\"rowalign\")&&this.adaptor.setAttribute(this.chtml,\"rowalign\",e),\"center\"===r||\"mlabeledtr\"===this.parent.kind&&this===this.parent.childNodes[0]&&r===this.parent.parent.node.attributes.get(\"side\")||this.adaptor.setStyle(this.chtml,\"textAlign\",r),this.adaptor.append(this.chtml,this.html(\"mjx-tstrut\"))},u.kind=c.MmlMtd.prototype.kind,u.styles={\"mjx-mtd\":{display:\"table-cell\",\"text-align\":\"center\",padding:\".215em .4em\"},\"mjx-mtd:first-child\":{\"padding-left\":0},\"mjx-mtd:last-child\":{\"padding-right\":0},\"mjx-mtable > * > mjx-itable > *:first-child > mjx-mtd\":{\"padding-top\":0},\"mjx-mtable > * > mjx-itable > *:last-child > mjx-mtd\":{\"padding-bottom\":0},\"mjx-tstrut\":{display:\"inline-block\",height:\"1em\",\"vertical-align\":\"-.25em\"},'mjx-labels[align=\"left\"] > mjx-mtr > mjx-mtd':{\"text-align\":\"left\"},'mjx-labels[align=\"right\"] > mjx-mtr > mjx-mtd':{\"text-align\":\"right\"},'mjx-mtr mjx-mtd[rowalign=\"top\"], mjx-mlabeledtr mjx-mtd[rowalign=\"top\"]':{\"vertical-align\":\"top\"},'mjx-mtr mjx-mtd[rowalign=\"center\"], mjx-mlabeledtr mjx-mtd[rowalign=\"center\"]':{\"vertical-align\":\"middle\"},'mjx-mtr mjx-mtd[rowalign=\"bottom\"], mjx-mlabeledtr mjx-mtd[rowalign=\"bottom\"]':{\"vertical-align\":\"bottom\"},'mjx-mtr mjx-mtd[rowalign=\"baseline\"], mjx-mlabeledtr mjx-mtd[rowalign=\"baseline\"]':{\"vertical-align\":\"baseline\"},'mjx-mtr mjx-mtd[rowalign=\"axis\"], mjx-mlabeledtr mjx-mtd[rowalign=\"axis\"]':{\"vertical-align\":\".25em\"}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmtd=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtdMixin=function(t){return i(e,r=t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!0,configurable:!0}),e.prototype.invalidateBBox=function(){this.bboxComputed=!1},e.prototype.getWrapWidth=function(t){var e=this.parent.parent,r=this.parent,n=this.node.childPosition()-(r.labeled?1:0);return\"number\"==typeof e.cWidths[n]?e.cWidths[n]:e.getTableData().W[n]},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"columnalign\")},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(76),c=r(76),l=r(59),u=(o=s.CommonMactionMixin(a.CHTMLWrapper),i(h,o),h.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.selected.toCHTML(e),this.action(this,this.data)},h.prototype.setEventHandler=function(t,e){this.chtml.addEventListener(t,e)},h.kind=l.MmlMaction.prototype.kind,h.styles={\"mjx-maction\":{position:\"relative\"},\"mjx-maction > mjx-tool\":{display:\"none\",position:\"absolute\",bottom:0,right:0,width:0,height:0,\"z-index\":500},\"mjx-tool > mjx-tip\":{display:\"inline-block\",padding:\".2em\",border:\"1px solid #888\",\"font-size\":\"70%\",\"background-color\":\"#F8F8F8\",color:\"black\",\"box-shadow\":\"2px 2px 5px #AAAAAA\"},\"mjx-maction[toggle]\":{cursor:\"pointer\"},\"mjx-status\":{display:\"block\",position:\"fixed\",left:\"1em\",bottom:\"1em\",\"min-width\":\"25%\",padding:\".2em .4em\",border:\"1px solid #888\",\"font-size\":\"90%\",\"background-color\":\"#F8F8F8\",color:\"black\"}},h.actions=new Map([[\"toggle\",[function(t,e){t.adaptor.setAttribute(t.chtml,\"toggle\",t.node.attributes.get(\"selection\"));var r=t.factory.jax.math,n=t.factory.jax.document,i=t.node;t.setEventHandler(\"click\",function(t){r.start.node||(r.start.node=r.end.node=r.typesetRoot,r.start.n=r.end.n=0),i.nextToggleSelection(),r.rerender(n),t.stopPropagation()})},{}]],[\"tooltip\",[function(r,n){var t=r.childNodes[1];if(t)if(t.node.isKind(\"mtext\")){var e=t.node.getText();r.adaptor.setAttribute(r.chtml,\"title\",e)}else{var i=r.adaptor,o=i.append(r.chtml,r.html(\"mjx-tool\",{style:{bottom:r.em(-r.dy),right:r.em(-r.dx)}},[r.html(\"mjx-tip\")]));t.toCHTML(i.firstChild(o)),r.setEventHandler(\"mouseover\",function(t){n.stopTimers(r,n);var e=setTimeout(function(){return i.setStyle(o,\"display\",\"block\")},n.postDelay);n.hoverTimer.set(r,e),t.stopPropagation()}),r.setEventHandler(\"mouseout\",function(t){n.stopTimers(r,n);var e=setTimeout(function(){return i.setStyle(o,\"display\",\"\")},n.clearDelay);n.clearTimer.set(r,e),t.stopPropagation()})}},c.TooltipData]],[\"statusline\",[function(r,n){var t=r.childNodes[1];if(t&&t.node.isKind(\"mtext\")){var i=r.adaptor,o=t.node.getText();i.setAttribute(r.chtml,\"statusline\",o),r.setEventHandler(\"mouseover\",function(t){if(null===n.status){var e=i.body(i.document);n.status=i.append(e,r.html(\"mjx-status\",{},[r.text(o)]))}t.stopPropagation()}),r.setEventHandler(\"mouseout\",function(t){n.status&&(i.remove(n.status),n.status=null),t.stopPropagation()})}},{status:null}]]]),h);function h(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmaction=u},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(169),c=r(65),l=(o=s.CommonMglyphMixin(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.node.attributes.getList(\"src\",\"alt\"),n=r.src,i=r.alt,o={width:this.em(this.width),height:this.em(this.height)};this.voffset&&(o.verticalAlign=this.em(-this.voffset));var a=this.html(\"img\",{src:n,style:o,alt:i,title:i});this.adaptor.append(e,a)},u.kind=c.MmlMglyph.prototype.kind,u.styles={\"mjx-mglyph > img\":{display:\"inline-block\",border:0,padding:0}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmglyph=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMglyphMixin=function(t){return i(e,n=t),e.prototype.getParameters=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"voffset\"),e=t.width,r=t.height,n=t.voffset;this.width=\"auto\"===e?1:this.length2em(e),this.height=\"auto\"===r?1:this.length2em(r),this.voffset=this.length2em(n||\"0\")},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.w=this.width,t.h=this.height-this.voffset,t.d=this.voffset},e;function e(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=n.apply(this,a(t))||this;return r.getParameters(),r}var n}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(171),c=r(66),l=r(0),u=(o=s.CommonSemanticsMixin(a.CHTMLWrapper),i(h,o),h.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.childNodes.length&&this.childNodes[0].toCHTML(e)},h.kind=c.MmlSemantics.prototype.kind,h);function h(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLsemantics=u;var f,p=(f=a.CHTMLWrapper,i(d,f),d.prototype.toCHTML=function(t){f.prototype.toCHTML.call(this,t)},d.prototype.computeBBox=function(){return this.bbox},d.kind=c.MmlAnnotation.prototype.kind,d);function d(){return null!==f&&f.apply(this,arguments)||this}e.CHTMLannotation=p;var m,y=(m=a.CHTMLWrapper,i(v,m),v.kind=c.MmlAnnotationXML.prototype.kind,v);function v(){return null!==m&&m.apply(this,arguments)||this}e.CHTMLannotationXML=y;var b,g=(b=a.CHTMLWrapper,i(M,b),M.prototype.toCHTML=function(t){this.adaptor.append(t,this.adaptor.clone(this.node.getXML()))},M.prototype.computeBBox=function(){return this.bbox},M.prototype.getStyles=function(){},M.prototype.getScale=function(){},M.prototype.getVariant=function(){},M.kind=l.XMLNode.prototype.kind,M.autoStyle=!1,M);function M(){return null!==b&&b.apply(this,arguments)||this}e.CHTMLxml=g},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonSemanticsMixin=function(t){return i(e,r=t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.childNodes.length){var r=this.childNodes[0].getBBox(),n=r.w,i=r.h,o=r.d;t.w=n,t.h=i,t.d=o}},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(173),c=r(67),l=r(0),u=(o=s.CommonTeXAtomMixin(a.CHTMLWrapper),i(h,o),h.prototype.toCHTML=function(t){if(o.prototype.toCHTML.call(this,t),this.node.texClass===l.TEXCLASS.VCENTER){var e=this.childNodes[0].getBBox(),r=e.h,n=(r+e.d)/2+this.font.params.axis_height-r;this.adaptor.setStyle(this.chtml,\"verticalAlign\",this.em(n))}},h.kind=c.TeXAtom.prototype.kind,h);function h(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLTeXAtom=u},function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(0);e.CommonTeXAtomMixin=function(t){return o(e,i=t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),i.prototype.computeBBox.call(this,t,e),this.childNodes[0]&&this.childNodes[0].bbox.ic&&(t.ic=this.childNodes[0].bbox.ic),this.node.texClass===a.TEXCLASS.VCENTER){var r=t.h,n=(r+t.d)/2+this.font.params.axis_height-r;t.h+=n,t.d-=n}},e;function e(){return null!==i&&i.apply(this,arguments)||this}var i}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),d=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(0),s=r(2),c=r(175),l=(o=c.CommonTextNodeMixin(s.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e,r;this.markUsed();var n=this.adaptor,i=this.parent.variant,o=this.node.getText();if(\"-explicitFont\"===i){var a=this.jax.getFontData(this.parent.styles);n.append(t,this.jax.unknownText(o,i,a))}else{var s=this.parent.stretch.c,c=this.parent.remapChars(s?[s]:this.unicodeChars(o));try{for(var l=d(c),u=l.next();!u.done;u=l.next()){var h=u.value,f=this.getVariantChar(i,h)[3],p=f.unknown?this.jax.unknownText(String.fromCharCode(h),i):this.html(\"mjx-c\",{class:this.char(h)});n.append(t,p),f.used=!0}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}}},u.kind=a.TextNode.prototype.kind,u.autoStyle=!1,u.styles={\"mjx-c\":{display:\"inline-block\"},\"mjx-utext\":{display:\"inline-block\",padding:\".75em 0 .25em 0\"},\"mjx-measure-text\":{position:\"absolute\",\"font-family\":\"MJXZERO\",\"white-space\":\"nowrap\",height:\"1px\",width:\"1px\",overflow:\"hidden\"}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLTextNode=l},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),g=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},M=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTextNodeMixin=function(t){return i(e,r=t),e.prototype.computeBBox=function(t,e){var r,n;void 0===e&&(e=!1);var i=this.parent.variant,o=this.node.getText();if(\"-explicitFont\"===i){var a=this.jax.getFontData(this.parent.styles),s=this.jax.measureText(o,i,a),c=s.w,l=s.h,u=s.d;t.h=l,t.d=u,t.w=c}else{var h=this.parent.stretch.c,f=this.parent.remapChars(h?[h]:this.unicodeChars(o));t.empty();try{for(var p=g(f),d=p.next();!d.done;d=p.next()){var m=d.value,y=M(this.getVariantChar(i,m),4),v=(l=y[0],u=y[1],c=y[2],y[3]);if(v.unknown){var b=this.jax.measureText(String.fromCharCode(m),i);c=b.w,l=b.h,u=b.d}t.w+=c,l>t.h&&(t.h=l),u>t.d&&(t.d=u),t.ic=v.ic||0,t.sk=v.sk||0}}catch(t){r={error:t}}finally{try{d&&!d.done&&(n=p.return)&&n.call(p)}finally{if(r)throw r.error}}1<f.length&&(t.sk=0),t.clean()}},e.prototype.getStyles=function(){},e.prototype.getVariant=function(){},e.prototype.getScale=function(){},e.prototype.getSpace=function(){},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(177);e.boldItalic=n.AddCSS(i.boldItalic,{32:{c:\" \"},47:{c:\"/\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"},10744:{c:\"/\",f:\"BI\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.boldItalic={32:[0,0,.25],47:[.711,.21,.894],65:[.711,0,.869,{sk:.16}],66:[.686,0,.866,{sk:.0958}],67:[.703,.017,.817,{sk:.0958}],68:[.686,0,.938,{sk:.0639}],69:[.68,0,.81,{sk:.0958}],70:[.68,0,.689,{ic:.12,sk:.0958}],71:[.703,.016,.887,{sk:.0958}],72:[.686,0,.982,{sk:.0639}],73:[.686,0,.511,{ic:.062,sk:.128}],74:[.686,.017,.631,{ic:.063,sk:.192}],75:[.686,0,.971,{sk:.0639}],76:[.686,0,.756,{sk:.0319}],77:[.686,0,1.142,{ic:.077,sk:.0958}],78:[.686,0,.95,{ic:.077,sk:.0958}],79:[.703,.017,.837,{sk:.0958}],80:[.686,0,.723,{ic:.124,sk:.0958}],81:[.703,.194,.869,{sk:.0958}],82:[.686,.017,.872,{sk:.0958}],83:[.703,.017,.693,{sk:.0958}],84:[.675,0,.637,{ic:.135,sk:.0958}],85:[.686,.016,.8,{ic:.077,sk:.0319}],86:[.686,.016,.678,{ic:.208}],87:[.686,.017,1.093,{ic:.114}],88:[.686,0,.947,{sk:.0958}],89:[.686,0,.675,{ic:.201}],90:[.686,0,.773,{sk:.0958}],97:[.452,.008,.633],98:[.694,.008,.521],99:[.451,.008,.513,{sk:.0639}],100:[.694,.008,.61,{sk:.192}],101:[.452,.008,.554,{sk:.0639}],102:[.701,.201,.568,{ic:.056,sk:.192}],103:[.452,.202,.545,{sk:.0319}],104:[.694,.008,.668,{sk:-.0319}],105:[.694,.008,.405],106:[.694,.202,.471],107:[.694,.008,.604],108:[.694,.008,.348,{sk:.0958}],109:[.452,.008,1.032],110:[.452,.008,.713],111:[.452,.008,.585,{sk:.0639}],112:[.452,.194,.601,{sk:.0958}],113:[.452,.194,.542,{sk:.0958}],114:[.452,.008,.529,{sk:.0639}],115:[.451,.008,.531,{sk:.0639}],116:[.643,.007,.415,{sk:.0958}],117:[.452,.008,.681,{sk:.0319}],118:[.453,.008,.567,{sk:.0319}],119:[.453,.008,.831,{sk:.0958}],120:[.452,.008,.659,{sk:.0319}],121:[.452,.202,.59,{sk:.0639}],122:[.452,.008,.555,{sk:.0639}],160:[0,0,.25],913:[.711,0,.869,{sk:.16}],914:[.686,0,.866,{sk:.0958}],915:[.68,0,.657,{ic:.12,sk:.0958}],916:[.711,0,.958,{sk:.192}],917:[.68,0,.81,{sk:.0958}],918:[.686,0,.773,{sk:.0958}],919:[.686,0,.982,{sk:.0639}],920:[.702,.017,.867,{sk:.0958}],921:[.686,0,.511,{ic:.062,sk:.128}],922:[.686,0,.971,{sk:.0639}],923:[.711,0,.806,{sk:.192}],924:[.686,0,1.142,{ic:.077,sk:.0958}],925:[.686,0,.95,{ic:.077,sk:.0958}],926:[.675,0,.841,{sk:.0958}],927:[.703,.017,.837,{sk:.0958}],928:[.68,0,.982,{sk:.0639}],929:[.686,0,.723,{ic:.124,sk:.0958}],930:[.702,.017,.867,{sk:.0958}],931:[.686,0,.885,{sk:.0958}],932:[.675,0,.637,{ic:.135,sk:.0958}],933:[.703,0,.671,{ic:.131,sk:.0639}],934:[.686,0,.767,{sk:.0958}],935:[.686,0,.947,{sk:.0958}],936:[.686,0,.714,{ic:.076,sk:.0639}],937:[.703,0,.879,{sk:.0958}],945:[.452,.008,.761,{sk:.0319}],946:[.701,.194,.66,{sk:.0958}],947:[.451,.211,.59],948:[.725,.008,.522,{sk:.0639}],949:[.461,.017,.529,{sk:.0958}],950:[.711,.202,.508,{sk:.0958}],951:[.452,.211,.6,{sk:.0639}],952:[.702,.008,.562,{sk:.0958}],953:[.452,.008,.412,{sk:.0639}],954:[.452,.008,.668],955:[.694,.013,.671],956:[.452,.211,.708,{sk:.0319}],957:[.452,0,.577,{sk:.0319}],958:[.711,.201,.508,{sk:.128}],959:[.452,.008,.585,{sk:.0639}],960:[.444,.008,.682],961:[.451,.211,.612,{sk:.0958}],962:[.451,.105,.424,{sk:.0958}],963:[.444,.008,.686],964:[.444,.013,.521,{ic:.089,sk:.0319}],965:[.453,.008,.631,{sk:.0319}],966:[.452,.216,.747,{sk:.0958}],967:[.452,.201,.718,{sk:.0639}],968:[.694,.202,.758,{sk:.128}],969:[.453,.008,.718],977:[.701,.008,.692,{sk:.0958}],978:[.703,0,.671,{ic:.131,sk:.0639}],981:[.694,.202,.712,{sk:.0958}],982:[.444,.008,.975],988:[.68,0,.689,{ic:.12,sk:.0958}],1009:[.451,.194,.612,{sk:.0958}],1013:[.444,.007,.483,{sk:.0639}],8260:[.711,.21,.894],8710:[.711,0,.958,{sk:.192}],10744:[.711,.21,.894]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(179);e.bold=n.AddCSS(i.bold,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},60:{c:\"<\"},61:{c:\"=\"},62:{c:\">\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},96:{c:\"`\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},123:{c:\"{\"},124:{c:\"|\"},125:{c:\"}\"},126:{c:\"~\"},183:{c:\"\\\\22C5\"},697:{c:\"\\\\2032\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8194:{c:\"\"},8195:{c:\"\"},8196:{c:\"\"},8197:{c:\"\"},8198:{c:\"\"},8201:{c:\"\"},8202:{c:\"\"},8213:{c:\"\\\\2014\"},8214:{c:\"\\\\2225\"},8215:{c:\"_\"},8226:{c:\"\\\\2219\"},8243:{c:\"\\\\2032\\\\2032\"},8244:{c:\"\\\\2032\\\\2032\\\\2032\"},8254:{c:\"\\\\2C9\"},8260:{c:\"/\"},8279:{c:\"\\\\2032\\\\2032\\\\2032\\\\2032\"},8407:{c:\"\\\\2192\",f:\"VB\"},8465:{c:\"I\",f:\"FR\"},8476:{c:\"R\",f:\"FR\"},8602:{c:\"\\\\2190\\\\338\"},8603:{c:\"\\\\2192\\\\338\"},8622:{c:\"\\\\2194\\\\338\"},8653:{c:\"\\\\21D0\\\\338\"},8654:{c:\"\\\\21D4\\\\338\"},8655:{c:\"\\\\21D2\\\\338\"},8708:{c:\"\\\\2203\\\\338\"},8710:{c:\"\\\\394\"},8716:{c:\"\\\\220B\\\\338\"},8740:{c:\"\\\\2223\\\\338\"},8742:{c:\"\\\\2225\\\\338\"},8769:{c:\"\\\\223C\\\\338\"},8772:{c:\"\\\\2243\\\\338\"},8775:{c:\"\\\\2245\\\\338\"},8777:{c:\"\\\\2248\\\\338\"},8802:{c:\"\\\\2261\\\\338\"},8813:{c:\"\\\\224D\\\\338\"},8814:{c:\"<\\\\338\"},8815:{c:\">\\\\338\"},8816:{c:\"\\\\2264\\\\338\"},8817:{c:\"\\\\2265\\\\338\"},8832:{c:\"\\\\227A\\\\338\"},8833:{c:\"\\\\227B\\\\338\"},8836:{c:\"\\\\2282\\\\338\"},8837:{c:\"\\\\2283\\\\338\"},8840:{c:\"\\\\2286\\\\338\"},8841:{c:\"\\\\2287\\\\338\"},8876:{c:\"\\\\22A2\\\\338\"},8877:{c:\"\\\\22A8\\\\338\"},8930:{c:\"\\\\2291\\\\338\"},8931:{c:\"\\\\2292\\\\338\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},9653:{c:\"\\\\25B3\"},9663:{c:\"\\\\25BD\"},10072:{c:\"\\\\2223\"},10744:{c:\"/\",f:\"BI\"},10799:{c:\"\\\\D7\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.bold={32:[0,0,.25],33:[.705,0,.35],34:[.694,-.329,.603],35:[.694,.193,.958],36:[.75,.056,.575],37:[.75,.056,.958],38:[.705,.011,.894],39:[.694,-.329,.319],40:[.75,.249,.447],41:[.75,.249,.447],42:[.75,-.306,.575],43:[.633,.131,.894],44:[.171,.194,.319],45:[.278,-.166,.383],46:[.171,0,.319],47:[.75,.25,.575],48:[.654,.01,.575],49:[.655,0,.575],50:[.654,0,.575],51:[.655,.011,.575],52:[.656,0,.575],53:[.655,.011,.575],54:[.655,.011,.575],55:[.676,.011,.575],56:[.654,.011,.575],57:[.654,.011,.575],58:[.444,0,.319],59:[.444,.194,.319],60:[.587,.085,.894],61:[.393,-.109,.894],62:[.587,.085,.894],63:[.7,0,.543],64:[.699,.006,.894],65:[.698,0,.869],66:[.686,0,.818],67:[.697,.011,.831],68:[.686,0,.882],69:[.68,0,.756],70:[.68,0,.724],71:[.697,.01,.904],72:[.686,0,.9],73:[.686,0,.436],74:[.686,.011,.594],75:[.686,0,.901],76:[.686,0,.692],77:[.686,0,1.092],78:[.686,0,.9],79:[.696,.01,.864],80:[.686,0,.786],81:[.696,.193,.864],82:[.686,.011,.862],83:[.697,.011,.639],84:[.675,0,.8],85:[.686,.011,.885],86:[.686,.007,.869],87:[.686,.007,1.189],88:[.686,0,.869],89:[.686,0,.869],90:[.686,0,.703],91:[.75,.25,.319],92:[.75,.25,.575],93:[.75,.25,.319],94:[.694,-.52,.575],95:[-.01,.061,.575],96:[.706,-.503,.575],97:[.453,.006,.559],98:[.694,.006,.639],99:[.453,.006,.511],100:[.694,.006,.639],101:[.452,.006,.527],102:[.7,0,.351,{ic:.101}],103:[.455,.201,.575],104:[.694,0,.639],105:[.695,0,.319],106:[.695,.2,.351],107:[.694,0,.607],108:[.694,0,.319],109:[.45,0,.958],110:[.45,0,.639],111:[.452,.005,.575],112:[.45,.194,.639],113:[.45,.194,.607],114:[.45,0,.474],115:[.453,.006,.454],116:[.635,.005,.447],117:[.45,.006,.639],118:[.444,0,.607],119:[.444,0,.831],120:[.444,0,.607],121:[.444,.2,.607],122:[.444,0,.511],123:[.75,.25,.575],124:[.75,.249,.319],125:[.75,.25,.575],126:[.344,-.202,.575],160:[0,0,.25],168:[.695,-.535,.575],172:[.371,-.061,.767],175:[.607,-.54,.575],176:[.702,-.536,.575],177:[.728,.035,.894],180:[.706,-.503,.575],183:[.336,-.166,.319],215:[.53,.028,.894],247:[.597,.096,.894],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}],697:[.563,-.033,.344],710:[.694,-.52,.575],711:[.66,-.515,.575],713:[.607,-.54,.575],714:[.706,-.503,.575],715:[.706,-.503,.575],728:[.694,-.5,.575],729:[.695,-.525,.575],730:[.702,-.536,.575],732:[.694,-.552,.575],768:[.706,-.503,0],769:[.706,-.503,0],770:[.694,-.52,0],771:[.694,-.552,0],772:[.607,-.54,0],774:[.694,-.5,0],775:[.695,-.525,0],776:[.695,-.535,0],778:[.702,-.536,0],779:[.714,-.511,0],780:[.66,-.515,0],824:[.711,.21,0],913:[.698,0,.869],914:[.686,0,.818],915:[.68,0,.692],916:[.698,0,.958],917:[.68,0,.756],918:[.686,0,.703],919:[.686,0,.9],920:[.696,.01,.894],921:[.686,0,.436],922:[.686,0,.901],923:[.698,0,.806],924:[.686,0,1.092],925:[.686,0,.9],926:[.675,0,.767],927:[.696,.01,.864],928:[.68,0,.9],929:[.686,0,.786],930:[.696,.01,.894],931:[.686,0,.831],932:[.675,0,.8],933:[.697,0,.894],934:[.686,0,.831],935:[.686,0,.869],936:[.686,0,.894],937:[.696,0,.831],945:[.452,.008,.761,{sk:.0319}],946:[.701,.194,.66,{sk:.0958}],947:[.451,.211,.59],948:[.725,.008,.522,{sk:.0639}],949:[.461,.017,.529,{sk:.0958}],950:[.711,.202,.508,{sk:.0958}],951:[.452,.211,.6,{sk:.0639}],952:[.702,.008,.562,{sk:.0958}],953:[.452,.008,.412,{sk:.0639}],954:[.452,.008,.668],955:[.694,.013,.671],956:[.452,.211,.708,{sk:.0319}],957:[.452,0,.577,{sk:.0319}],958:[.711,.201,.508,{sk:.128}],959:[.452,.008,.585,{sk:.0639}],960:[.444,.008,.682],961:[.451,.211,.612,{sk:.0958}],962:[.451,.105,.424,{sk:.0958}],963:[.444,.008,.686],964:[.444,.013,.521,{ic:.089,sk:.0319}],965:[.453,.008,.631,{sk:.0319}],966:[.452,.216,.747,{sk:.0958}],967:[.452,.201,.718,{sk:.0639}],968:[.694,.202,.758,{sk:.128}],969:[.453,.008,.718],977:[.701,.008,.692,{sk:.0958}],978:[.697,0,.894],981:[.694,.202,.712,{sk:.0958}],982:[.444,.008,.975],988:[.68,0,.724],1009:[.451,.194,.612,{sk:.0958}],1013:[.444,.007,.483,{sk:.0639}],8194:[0,0,.5],8195:[0,0,.999],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.083],8211:[.3,-.249,.575],8212:[.3,-.249,1.15],8213:[.3,-.249,1.15],8214:[.75,.248,.575],8215:[-.01,.061,.575],8216:[.694,-.329,.319],8217:[.694,-.329,.319],8220:[.694,-.329,.603],8221:[.694,-.329,.603],8224:[.702,.211,.511],8225:[.702,.202,.511],8226:[.474,-.028,.575],8230:[.171,0,1.295],8242:[.563,-.033,.344],8243:[.563,0,.688],8244:[.563,0,1.032],8254:[.607,-.54,.575],8260:[.75,.25,.575],8279:[.563,0,1.376],8407:[.723,-.513,.575],8463:[.694,.008,.668,{sk:-.0319}],8465:[.686,.026,.554],8467:[.702,.019,.474,{sk:.128}],8472:[.461,.21,.74],8476:[.686,.026,.828],8501:[.694,0,.703],8592:[.518,.017,1.15],8593:[.694,.193,.575],8594:[.518,.017,1.15],8595:[.694,.194,.575],8596:[.518,.017,1.15],8597:[.767,.267,.575],8598:[.724,.194,1.15],8599:[.724,.193,1.15],8600:[.694,.224,1.15],8601:[.694,.224,1.15],8602:[.711,.21,1.15],8603:[.711,.21,1.15],8614:[.518,.017,1.15],8617:[.518,.017,1.282],8618:[.518,.017,1.282],8622:[.711,.21,1.15],8636:[.518,-.22,1.15],8637:[.281,.017,1.15],8640:[.518,-.22,1.15],8641:[.281,.017,1.15],8652:[.718,.017,1.15],8653:[.711,.21,1.15],8654:[.711,.21,1.15],8655:[.711,.21,1.15],8656:[.547,.046,1.15],8657:[.694,.193,.703],8658:[.547,.046,1.15],8659:[.694,.194,.703],8660:[.547,.046,1.15],8661:[.767,.267,.703],8704:[.694,.016,.639],8706:[.71,.017,.628,{sk:.0958}],8707:[.694,0,.639],8708:[.711,.21,.639],8709:[.767,.073,.575],8710:[.698,0,.958],8711:[.686,.024,.958],8712:[.587,.086,.767],8713:[.711,.21,.767],8715:[.587,.086,.767],8716:[.711,.21,.767],8722:[.281,-.221,.894],8723:[.537,.227,.894],8725:[.75,.25,.575],8726:[.75,.25,.575],8727:[.472,-.028,.575],8728:[.474,-.028,.575],8729:[.474,-.028,.575],8730:[.82,.18,.958],8733:[.451,.008,.894],8734:[.452,.008,1.15],8736:[.714,0,.722],8739:[.75,.249,.319],8740:[.75,.249,.319],8741:[.75,.248,.575],8742:[.75,.248,.575],8743:[.604,.017,.767],8744:[.604,.016,.767],8745:[.603,.016,.767],8746:[.604,.016,.767],8747:[.711,.211,.569,{ic:.063}],8764:[.391,-.109,.894],8768:[.583,.082,.319],8769:[.711,.21,.894],8771:[.502,0,.894],8772:[.711,.21,.894],8773:[.638,.027,.894],8775:[.711,.21,.894],8776:[.524,-.032,.894],8777:[.711,.21,.894],8781:[.533,.032,.894],8784:[.721,-.109,.894],8800:[.711,.21,.894],8801:[.505,0,.894],8802:[.711,.21,.894],8804:[.697,.199,.894],8805:[.697,.199,.894],8810:[.617,.116,1.15],8811:[.618,.116,1.15],8813:[.711,.21,.894],8814:[.711,.21,.894],8815:[.711,.21,.894],8816:[.711,.21,.894],8817:[.711,.21,.894],8826:[.585,.086,.894],8827:[.586,.086,.894],8832:[.711,.21,.894],8833:[.711,.21,.894],8834:[.587,.085,.894],8835:[.587,.086,.894],8836:[.711,.21,.894],8837:[.711,.21,.894],8838:[.697,.199,.894],8839:[.697,.199,.894],8840:[.711,.21,.894],8841:[.711,.21,.894],8846:[.604,.016,.767],8849:[.697,.199,.894],8850:[.697,.199,.894],8851:[.604,0,.767],8852:[.604,0,.767],8853:[.632,.132,.894],8854:[.632,.132,.894],8855:[.632,.132,.894],8856:[.632,.132,.894],8857:[.632,.132,.894],8866:[.693,0,.703],8867:[.693,0,.703],8868:[.694,0,.894],8869:[.693,0,.894],8872:[.75,.249,.974],8876:[.711,.21,.703],8877:[.75,.249,.974],8900:[.523,.021,.575],8901:[.336,-.166,.319],8902:[.502,0,.575],8904:[.54,.039,1],8930:[.711,.21,.894],8931:[.711,.21,.894],8942:[.951,.029,.319],8943:[.336,-.166,1.295],8945:[.871,-.101,1.323],8968:[.75,.248,.511],8969:[.75,.248,.511],8970:[.749,.248,.511],8971:[.749,.248,.511],8994:[.405,-.108,1.15],8995:[.392,-.126,1.15],9001:[.75,.249,.447],9002:[.75,.249,.447],9651:[.711,0,1.022],9653:[.711,0,1.022],9657:[.54,.039,.575],9661:[.5,.21,1.022],9663:[.5,.21,1.022],9667:[.539,.038,.575],9711:[.711,.211,1.15],9824:[.719,.129,.894],9825:[.711,.024,.894],9826:[.719,.154,.894],9827:[.719,.129,.894],9837:[.75,.017,.447],9838:[.741,.223,.447],9839:[.724,.224,.447],10072:[.75,.249,.319],10216:[.75,.249,.447],10217:[.75,.249,.447],10229:[.518,.017,1.805],10230:[.518,.017,1.833],10231:[.518,.017,2.126],10232:[.547,.046,1.868],10233:[.547,.046,1.87],10234:[.547,.046,2.126],10236:[.518,.017,1.833],10744:[.711,.21,.894],10799:[.53,.028,.894],10815:[.686,0,.9],10927:[.696,.199,.894],10928:[.697,.199,.894],12296:[.75,.249,.447],12297:[.75,.249,.447]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(181);e.doubleStruck=n.AddCSS(i.doubleStruck,{32:{c:\" \"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},107:{c:\"k\"},913:{c:\"A\",f:\"B\"},914:{c:\"B\",f:\"B\"},917:{c:\"E\",f:\"B\"},918:{c:\"Z\",f:\"B\"},919:{c:\"H\",f:\"B\"},921:{c:\"I\",f:\"B\"},922:{c:\"K\",f:\"B\"},924:{c:\"M\",f:\"B\"},925:{c:\"N\",f:\"B\"},927:{c:\"O\",f:\"B\"},929:{c:\"P\",f:\"B\"},930:{c:\"\\\\398\",f:\"B\"},932:{c:\"T\",f:\"B\"},935:{c:\"X\",f:\"B\"},978:{c:\"\\\\3A5\",f:\"B\"},988:{c:\"F\",f:\"B\"},8450:{c:\"C\",f:\"A\"},8461:{c:\"H\",f:\"A\"},8469:{c:\"N\",f:\"A\"},8473:{c:\"P\",f:\"A\"},8474:{c:\"Q\",f:\"A\"},8477:{c:\"R\",f:\"A\"},8484:{c:\"Z\",f:\"A\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.doubleStruck={32:[0,0,.25],65:[.701,0,.722],66:[.683,0,.667],67:[.702,.019,.722],68:[.683,0,.722],69:[.683,0,.667],70:[.683,0,.611],71:[.702,.019,.778],72:[.683,0,.778],73:[.683,0,.389],74:[.683,.077,.5],75:[.683,0,.778],76:[.683,0,.667],77:[.683,0,.944],78:[.683,.02,.722],79:[.701,.019,.778],80:[.683,0,.611],81:[.701,.181,.778],82:[.683,0,.722],83:[.702,.012,.556],84:[.683,0,.667],85:[.683,.019,.722],86:[.683,.02,.722],87:[.683,.019,1],88:[.683,0,.722],89:[.683,0,.722],90:[.683,0,.667],107:[.683,0,.556],160:[0,0,.25],913:[.698,0,.869],914:[.686,0,.818],917:[.68,0,.756],918:[.686,0,.703],919:[.686,0,.9],921:[.686,0,.436],922:[.686,0,.901],924:[.686,0,1.092],925:[.686,0,.9],927:[.696,.01,.864],929:[.686,0,.786],930:[.696,.01,.894],932:[.675,0,.8],935:[.686,0,.869],978:[.697,0,.894],988:[.68,0,.724],8450:[.702,.019,.722],8461:[.683,0,.778],8469:[.683,.02,.722],8473:[.683,0,.611],8474:[.701,.181,.778],8477:[.683,0,.722],8484:[.683,0,.667]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(183);e.frakturBold=n.AddCSS(i.frakturBold,{32:{c:\" \"},33:{c:\"!\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},913:{c:\"A\",f:\"B\"},914:{c:\"B\",f:\"B\"},917:{c:\"E\",f:\"B\"},918:{c:\"Z\",f:\"B\"},919:{c:\"H\",f:\"B\"},921:{c:\"I\",f:\"B\"},922:{c:\"K\",f:\"B\"},924:{c:\"M\",f:\"B\"},925:{c:\"N\",f:\"B\"},927:{c:\"O\",f:\"B\"},929:{c:\"P\",f:\"B\"},930:{c:\"\\\\398\",f:\"B\"},932:{c:\"T\",f:\"B\"},935:{c:\"X\",f:\"B\"},978:{c:\"\\\\3A5\",f:\"B\"},988:{c:\"F\",f:\"B\"},8260:{c:\"/\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.frakturBold={32:[0,0,.25],33:[.689,.012,.349],34:[.695,-.432,.254],38:[.696,.016,.871],39:[.695,-.436,.25],40:[.737,.186,.459],41:[.735,.187,.459],42:[.692,-.449,.328],43:[.598,.082,.893],44:[.107,.191,.328],45:[.275,-.236,.893],46:[.102,.015,.328],47:[.721,.182,.593],48:[.501,.012,.593],49:[.489,0,.593],50:[.491,0,.593],51:[.487,.193,.593],52:[.495,.196,.593],53:[.481,.19,.593],54:[.704,.012,.593],55:[.479,.197,.593],56:[.714,.005,.593],57:[.487,.195,.593],58:[.457,.012,.255],59:[.458,.19,.255],61:[.343,-.168,.582],63:[.697,.014,.428],65:[.686,.031,.847],66:[.684,.031,1.044],67:[.676,.032,.723],68:[.683,.029,.982],69:[.686,.029,.783],70:[.684,.146,.722],71:[.687,.029,.927],72:[.683,.126,.851],73:[.681,.025,.655],74:[.68,.141,.652],75:[.681,.026,.789],76:[.683,.028,.786],77:[.683,.032,1.239],78:[.679,.03,.983],79:[.726,.03,.976],80:[.688,.223,.977],81:[.726,.083,.976],82:[.688,.028,.978],83:[.685,.031,.978],84:[.686,.03,.79],85:[.688,.039,.851],86:[.685,.029,.982],87:[.683,.03,1.235],88:[.681,.035,.849],89:[.688,.214,.984],90:[.677,.148,.711],91:[.74,.13,.257],93:[.738,.132,.257],94:[.734,-.452,.59],97:[.472,.032,.603],98:[.69,.032,.59],99:[.473,.026,.464],100:[.632,.028,.589],101:[.471,.027,.472],102:[.687,.222,.388],103:[.472,.208,.595],104:[.687,.207,.615],105:[.686,.025,.331],106:[.682,.203,.332],107:[.682,.025,.464],108:[.681,.024,.337],109:[.476,.031,.921],110:[.473,.028,.654],111:[.482,.034,.609],112:[.557,.207,.604],113:[.485,.211,.596],114:[.472,.026,.46],115:[.479,.034,.523],116:[.648,.027,.393],117:[.472,.032,.589],118:[.546,.027,.604],119:[.549,.032,.918],120:[.471,.188,.459],121:[.557,.221,.589],122:[.471,.214,.461],160:[0,0,.25],913:[.698,0,.869],914:[.686,0,.818],917:[.68,0,.756],918:[.686,0,.703],919:[.686,0,.9],921:[.686,0,.436],922:[.686,0,.901],924:[.686,0,1.092],925:[.686,0,.9],927:[.696,.01,.864],929:[.686,0,.786],930:[.696,.01,.894],932:[.675,0,.8],935:[.686,0,.869],978:[.697,0,.894],988:[.68,0,.724],8216:[.708,-.411,.254],8217:[.692,-.394,.254],8260:[.721,.182,.593],58113:[.63,.027,.587],58114:[.693,.212,.394],58115:[.681,.219,.387],58116:[.473,.212,.593],58117:[.684,.027,.393],58120:[.679,.22,.981],58121:[.717,.137,.727]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(185);e.fraktur=n.AddCSS(i.fraktur,{32:{c:\" \"},33:{c:\"!\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},913:{c:\"A\",f:\"\"},914:{c:\"B\",f:\"\"},917:{c:\"E\",f:\"\"},918:{c:\"Z\",f:\"\"},919:{c:\"H\",f:\"\"},921:{c:\"I\",f:\"\"},922:{c:\"K\",f:\"\"},924:{c:\"M\",f:\"\"},925:{c:\"N\",f:\"\"},927:{c:\"O\",f:\"\"},929:{c:\"P\",f:\"\"},930:{c:\"\\\\398\",f:\"\"},932:{c:\"T\",f:\"\"},935:{c:\"X\",f:\"\"},978:{c:\"\\\\3A5\",f:\"\"},988:{c:\"F\",f:\"\"},8260:{c:\"/\"},8460:{c:\"H\",f:\"FR\"},8465:{c:\"I\",f:\"FR\"},8476:{c:\"R\",f:\"FR\"},8488:{c:\"Z\",f:\"FR\"},8493:{c:\"C\",f:\"FR\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.fraktur={32:[0,0,.25],33:[.689,.012,.296],34:[.695,-.432,.215],38:[.698,.011,.738],39:[.695,-.436,.212],40:[.737,.186,.389],41:[.735,.187,.389],42:[.692,-.449,.278],43:[.598,.082,.756],44:[.107,.191,.278],45:[.275,-.236,.756],46:[.102,.015,.278],47:[.721,.182,.502],48:[.492,.013,.502],49:[.468,0,.502],50:[.474,0,.502],51:[.473,.182,.502],52:[.476,.191,.502],53:[.458,.184,.502],54:[.7,.013,.502],55:[.468,.181,.502],56:[.705,.01,.502],57:[.469,.182,.502],58:[.457,.012,.216],59:[.458,.189,.216],61:[.368,-.132,.756],63:[.693,.011,.362],65:[.696,.026,.718],66:[.691,.027,.884],67:[.685,.024,.613],68:[.685,.027,.832],69:[.685,.024,.663],70:[.686,.153,.611],71:[.69,.026,.785],72:[.666,.133,.72],73:[.686,.026,.554],74:[.686,.139,.552],75:[.68,.027,.668],76:[.686,.026,.666],77:[.692,.027,1.05],78:[.686,.025,.832],79:[.729,.027,.827],80:[.692,.218,.828],81:[.729,.069,.827],82:[.686,.026,.828],83:[.692,.027,.829],84:[.701,.027,.669],85:[.697,.027,.646],86:[.686,.026,.831],87:[.686,.027,1.046],88:[.688,.027,.719],89:[.686,.218,.833],90:[.729,.139,.602],91:[.74,.13,.278],93:[.738,.131,.278],94:[.734,-.452,.5],97:[.47,.035,.5],98:[.685,.031,.513],99:[.466,.029,.389],100:[.609,.033,.499],101:[.467,.03,.401],102:[.681,.221,.326],103:[.47,.209,.504],104:[.688,.205,.521],105:[.673,.02,.279],106:[.672,.208,.281],107:[.689,.025,.389],108:[.685,.02,.28],109:[.475,.026,.767],110:[.475,.022,.527],111:[.48,.028,.489],112:[.541,.212,.5],113:[.479,.219,.489],114:[.474,.021,.389],115:[.478,.029,.443],116:[.64,.02,.333],117:[.474,.023,.517],118:[.53,.028,.512],119:[.532,.028,.774],120:[.472,.188,.389],121:[.528,.218,.499],122:[.471,.214,.391],160:[0,0,.25],913:[.716,0,.75],914:[.683,0,.708],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],921:[.683,0,.361],922:[.683,0,.778],924:[.683,0,.917],925:[.683,0,.75],927:[.705,.022,.778],929:[.683,0,.681],930:[.705,.022,.778],932:[.677,0,.722],935:[.683,0,.75],978:[.705,0,.778],988:[.68,0,.653],8216:[.708,-.41,.215],8217:[.692,-.395,.215],8260:[.721,.182,.502],8460:[.666,.133,.72],8465:[.686,.026,.554],8476:[.686,.026,.828],8488:[.729,.139,.602],8493:[.685,.024,.613],58112:[.683,.032,.497],58113:[.616,.03,.498],58114:[.68,.215,.333],58115:[.679,.224,.329],58116:[.471,.214,.503],58117:[.686,.02,.333],58118:[.577,.021,.334],58119:[.475,.022,.501]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(187);e.italic=n.AddCSS(i.italic,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},126:{c:\"~\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8462:{c:\"h\",f:\"I\"},8710:{c:\"\\\\394\"},10744:{c:\"/\",f:\"I\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.italic={32:[0,0,.25],33:[.716,0,.307,{ic:.073}],34:[.694,-.379,.514],35:[.694,.194,.818],37:[.75,.056,.818],38:[.716,.022,.767],39:[.694,-.379,.307,{ic:.07}],40:[.75,.25,.409,{ic:.108}],41:[.75,.25,.409],42:[.75,-.32,.511,{ic:.073}],43:[.557,.057,.767],44:[.121,.194,.307],45:[.251,-.18,.358],46:[.121,0,.307],47:[.716,.215,.778],48:[.665,.021,.511,{ic:.051}],49:[.666,0,.511],50:[.666,.022,.511],51:[.666,.022,.511,{ic:.051}],52:[.666,.194,.511],53:[.666,.022,.511,{ic:.056}],54:[.665,.022,.511,{ic:.054}],55:[.666,.022,.511,{ic:.123}],56:[.666,.021,.511],57:[.666,.022,.511],58:[.431,0,.307],59:[.431,.194,.307],61:[.367,-.133,.767],63:[.716,0,.511],64:[.705,.011,.767],65:[.716,0,.75,{sk:.139}],66:[.683,0,.759,{sk:.0833}],67:[.705,.022,.715,{sk:.0833}],68:[.683,0,.828,{sk:.0556}],69:[.68,0,.738,{sk:.0833}],70:[.68,0,.643,{ic:.106,sk:.0833}],71:[.705,.022,.786,{sk:.0833}],72:[.683,0,.831,{ic:.057,sk:.0556}],73:[.683,0,.44,{ic:.064,sk:.111}],74:[.683,.022,.555,{ic:.078,sk:.167}],75:[.683,0,.849,{sk:.0556}],76:[.683,0,.681,{sk:.0278}],77:[.683,0,.97,{ic:.081,sk:.0833}],78:[.683,0,.803,{ic:.085,sk:.0833}],79:[.704,.022,.763,{sk:.0833}],80:[.683,0,.642,{ic:.109,sk:.0833}],81:[.704,.194,.791,{sk:.0833}],82:[.683,.021,.759,{sk:.0833}],83:[.705,.022,.613,{sk:.0833}],84:[.677,0,.584,{ic:.12,sk:.0833}],85:[.683,.022,.683,{ic:.084,sk:.0278}],86:[.683,.022,.583,{ic:.186}],87:[.683,.022,.944,{ic:.104}],88:[.683,0,.828,{sk:.0833}],89:[.683,0,.581,{ic:.182}],90:[.683,0,.683,{sk:.0833}],91:[.75,.25,.307,{ic:.139}],93:[.75,.25,.307,{ic:.052}],94:[.694,-.527,.511],95:[-.025,.062,.511],97:[.441,.01,.529],98:[.694,.011,.429],99:[.442,.011,.433,{sk:.0556}],100:[.694,.01,.52,{sk:.167}],101:[.442,.011,.466,{sk:.0556}],102:[.705,.205,.49,{ic:.06,sk:.167}],103:[.442,.205,.477,{sk:.0278}],104:[.694,.011,.576,{sk:-.0278}],105:[.661,.011,.345],106:[.661,.204,.412],107:[.694,.011,.521],108:[.694,.011,.298,{sk:.0833}],109:[.442,.011,.878],110:[.442,.011,.6],111:[.441,.011,.485,{sk:.0556}],112:[.442,.194,.503,{sk:.0833}],113:[.442,.194,.446,{sk:.0833}],114:[.442,.011,.451,{sk:.0556}],115:[.442,.01,.469,{sk:.0556}],116:[.626,.011,.361,{sk:.0833}],117:[.442,.011,.572,{sk:.0278}],118:[.443,.011,.485,{sk:.0278}],119:[.443,.011,.716,{sk:.0833}],120:[.442,.011,.572,{sk:.0278}],121:[.442,.205,.49,{sk:.0556}],122:[.442,.011,.465,{sk:.0556}],126:[.318,-.208,.511,{ic:.06}],160:[0,0,.25],163:[.714,.011,.769],305:[.441,.01,.307],567:[.442,.204,.332],768:[.697,-.5,0],769:[.697,-.5,0],770:[.694,-.527,0],771:[.668,-.558,0,{ic:.06}],772:[.589,-.544,0,{ic:.054}],774:[.694,-.515,0,{ic:.062}],775:[.669,-.548,0],776:[.669,-.554,0],778:[.716,-.542,0],779:[.697,-.503,0,{ic:.065}],780:[.638,-.502,0],913:[.716,0,.75,{sk:.139}],914:[.683,0,.759,{sk:.0833}],915:[.68,0,.615,{ic:.106,sk:.0833}],916:[.716,0,.833,{sk:.167}],917:[.68,0,.738,{sk:.0833}],918:[.683,0,.683,{sk:.0833}],919:[.683,0,.831,{ic:.057,sk:.0556}],920:[.704,.022,.763,{sk:.0833}],921:[.683,0,.44,{ic:.064,sk:.111}],922:[.683,0,.849,{sk:.0556}],923:[.716,0,.694,{sk:.167}],924:[.683,0,.97,{ic:.081,sk:.0833}],925:[.683,0,.803,{ic:.085,sk:.0833}],926:[.677,0,.742,{sk:.0833}],927:[.704,.022,.763,{sk:.0833}],928:[.68,0,.831,{ic:.056,sk:.0556}],929:[.683,0,.642,{ic:.109,sk:.0833}],930:[.704,.022,.763,{sk:.0833}],931:[.683,0,.78,{sk:.0833}],932:[.677,0,.584,{ic:.12,sk:.0833}],933:[.705,0,.583,{ic:.117,sk:.0556}],934:[.683,0,.667,{sk:.0833}],935:[.683,0,.828,{sk:.0833}],936:[.683,0,.612,{ic:.08,sk:.0556}],937:[.704,0,.772,{sk:.0833}],945:[.442,.011,.64,{sk:.0278}],946:[.705,.194,.566,{sk:.0833}],947:[.441,.216,.518],948:[.717,.01,.444,{sk:.0556}],949:[.452,.022,.466,{sk:.0833}],950:[.704,.204,.438,{sk:.0833}],951:[.442,.216,.497,{sk:.0556}],952:[.705,.01,.469,{sk:.0833}],953:[.442,.01,.354,{sk:.0556}],954:[.442,.011,.576],955:[.694,.012,.583],956:[.442,.216,.603,{sk:.0278}],957:[.442,0,.494,{sk:.0278}],958:[.704,.205,.438,{sk:.111}],959:[.441,.011,.485,{sk:.0556}],960:[.431,.011,.57],961:[.442,.216,.517,{sk:.0833}],962:[.442,.107,.363,{sk:.0833}],963:[.431,.011,.571],964:[.431,.013,.437,{ic:.08,sk:.0278}],965:[.443,.01,.54,{sk:.0278}],966:[.442,.218,.654,{sk:.0833}],967:[.442,.204,.626,{sk:.0556}],968:[.694,.205,.651,{sk:.111}],969:[.443,.011,.622],977:[.705,.011,.591,{sk:.0833}],978:[.705,0,.583,{ic:.117,sk:.0556}],981:[.694,.205,.596,{sk:.0833}],982:[.431,.01,.828],988:[.68,0,.643,{ic:.106,sk:.0833}],1009:[.442,.194,.517,{sk:.0833}],1013:[.431,.011,.406,{sk:.0556}],8211:[.285,-.248,.511],8212:[.285,-.248,1.022],8213:[.285,-.248,1.022],8215:[-.025,.062,.511],8216:[.694,-.379,.307,{ic:.055}],8217:[.694,-.379,.307,{ic:.07}],8220:[.694,-.379,.514,{ic:.092}],8221:[.694,-.379,.514],8260:[.716,.215,.778],8462:[.694,.011,.576,{sk:-.0278}],8463:[.695,.013,.54],8710:[.716,0,.833,{sk:.167}],10744:[.716,.215,.778]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(189);e.largeop=n.AddCSS(i.largeop,{32:{c:\" \"},40:{c:\"(\"},41:{c:\")\"},47:{c:\"/\"},91:{c:\"[\"},93:{c:\"]\"},123:{c:\"{\"},125:{c:\"}\"},8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},10072:{c:\"\\\\2223\"},10764:{c:\"\\\\222C\\\\222C\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.largeop={32:[0,0,.25],40:[1.15,.649,.597],41:[1.15,.649,.597],47:[1.15,.649,.811],91:[1.15,.649,.472],92:[1.15,.649,.811],93:[1.15,.649,.472],123:[1.15,.649,.667],125:[1.15,.649,.667],160:[0,0,.25],710:[.772,-.565,1],732:[.75,-.611,1],770:[.772,-.565,0],771:[.75,-.611,0],8214:[.602,0,.778],8260:[1.15,.649,.811],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.95,.45,1.278],8720:[.95,.45,1.278],8721:[.95,.45,1.444],8730:[1.15,.65,1],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[1.36,.862,.556,{ic:.388}],8748:[1.36,.862,1.084,{ic:.388}],8749:[1.36,.862,1.592,{ic:.388}],8750:[1.36,.862,.556,{ic:.388}],8896:[.95,.45,1.111],8897:[.95,.45,1.111],8898:[.949,.45,1.111],8899:[.95,.449,1.111],8968:[1.15,.649,.528],8969:[1.15,.649,.528],8970:[1.15,.649,.528],8971:[1.15,.649,.528],9001:[1.15,.649,.611],9002:[1.15,.649,.611],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[1.15,.649,.611],10217:[1.15,.649,.611],10752:[.949,.449,1.511],10753:[.949,.449,1.511],10754:[.949,.449,1.511],10756:[.95,.449,1.111],10758:[.95,.45,1.111],10764:[1.36,.862,2.168,{ic:.388}],12296:[1.15,.649,.611],12297:[1.15,.649,.611]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(191);e.monospace=n.AddCSS(i.monospace,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},60:{c:\"<\"},61:{c:\"=\"},62:{c:\">\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},96:{c:\"`\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},123:{c:\"{\"},124:{c:\"|\"},125:{c:\"}\"},126:{c:\"~\"},697:{c:\"\\\\2032\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8215:{c:\"_\"},8243:{c:\"\\\\2032\\\\2032\"},8244:{c:\"\\\\2032\\\\2032\\\\2032\"},8260:{c:\"/\"},8279:{c:\"\\\\2032\\\\2032\\\\2032\\\\2032\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.monospace={32:[0,0,.525],33:[.622,0,.525],34:[.623,-.333,.525],35:[.611,0,.525],36:[.694,.082,.525],37:[.694,.083,.525],38:[.622,.011,.525],39:[.611,-.287,.525],40:[.694,.082,.525],41:[.694,.082,.525],42:[.52,-.09,.525],43:[.531,-.081,.525],44:[.14,.139,.525],45:[.341,-.271,.525],46:[.14,0,.525],47:[.694,.083,.525],48:[.621,.01,.525],49:[.622,0,.525],50:[.622,0,.525],51:[.622,.011,.525],52:[.624,0,.525],53:[.611,.01,.525],54:[.622,.011,.525],55:[.627,.01,.525],56:[.621,.01,.525],57:[.622,.011,.525],58:[.431,0,.525],59:[.431,.139,.525],60:[.557,-.055,.525],61:[.417,-.195,.525],62:[.557,-.055,.525],63:[.617,0,.525],64:[.617,.006,.525],65:[.623,0,.525],66:[.611,0,.525],67:[.622,.011,.525],68:[.611,0,.525],69:[.611,0,.525],70:[.611,0,.525],71:[.622,.011,.525],72:[.611,0,.525],73:[.611,0,.525],74:[.611,.011,.525],75:[.611,0,.525],76:[.611,0,.525],77:[.611,0,.525],78:[.611,0,.525],79:[.621,.01,.525],80:[.611,0,.525],81:[.621,.138,.525],82:[.611,.011,.525],83:[.622,.011,.525],84:[.611,0,.525],85:[.611,.011,.525],86:[.611,.007,.525],87:[.611,.007,.525],88:[.611,0,.525],89:[.611,0,.525],90:[.611,0,.525],91:[.694,.082,.525],92:[.694,.083,.525],93:[.694,.082,.525],94:[.611,-.46,.525],95:[-.025,.095,.525],96:[.681,-.357,.525],97:[.439,.006,.525],98:[.611,.006,.525],99:[.44,.006,.525],100:[.611,.006,.525],101:[.44,.006,.525],102:[.617,0,.525],103:[.442,.229,.525],104:[.611,0,.525],105:[.612,0,.525],106:[.612,.228,.525],107:[.611,0,.525],108:[.611,0,.525],109:[.436,0,.525],110:[.436,0,.525],111:[.44,.006,.525],112:[.437,.221,.525],113:[.437,.221,.525],114:[.437,0,.525],115:[.44,.006,.525],116:[.554,.006,.525],117:[.431,.005,.525],118:[.431,0,.525],119:[.431,0,.525],120:[.431,0,.525],121:[.431,.228,.525],122:[.431,0,.525],123:[.694,.083,.525],124:[.694,.082,.525],125:[.694,.083,.525],126:[.611,-.466,.525],127:[.612,-.519,.525],160:[0,0,.525],305:[.431,0,.525],567:[.431,.228,.525],697:[.623,-.334,.525],768:[.611,-.485,0],769:[.611,-.485,0],770:[.611,-.46,0],771:[.611,-.466,0],772:[.577,-.5,0],774:[.611,-.504,0],776:[.612,-.519,0],778:[.619,-.499,0],780:[.577,-.449,0],913:[.623,0,.525],914:[.611,0,.525],915:[.611,0,.525],916:[.623,0,.525],917:[.611,0,.525],918:[.611,0,.525],919:[.611,0,.525],920:[.621,.01,.525],921:[.611,0,.525],922:[.611,0,.525],923:[.623,0,.525],924:[.611,0,.525],925:[.611,0,.525],926:[.611,0,.525],927:[.621,.01,.525],928:[.611,0,.525],929:[.611,0,.525],930:[.621,.01,.525],931:[.611,0,.525],932:[.611,0,.525],933:[.622,0,.525],934:[.611,0,.525],935:[.611,0,.525],936:[.611,0,.525],937:[.622,0,.525],978:[.622,0,.525],988:[.611,0,.525],8215:[-.025,.095,.525],8242:[.623,-.334,.525],8243:[.623,0,1.05],8244:[.623,0,1.575],8260:[.694,.083,.525],8279:[.623,0,2.1],8710:[.623,0,.525]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(193);e.normal=n.AddCSS(i.normal,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},60:{c:\"<\"},61:{c:\"=\"},62:{c:\">\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},96:{c:\"`\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},123:{c:\"{\"},124:{c:\"|\"},125:{c:\"}\"},126:{c:\"~\"},163:{f:\"MI\"},183:{c:\"\\\\22C5\"},697:{c:\"\\\\2032\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},1014:{c:\"\\\\220D\"},8192:{c:\"\"},8193:{c:\"\"},8194:{c:\"\"},8195:{c:\"\"},8196:{c:\"\"},8197:{c:\"\"},8198:{c:\"\"},8201:{c:\"\"},8202:{c:\"\"},8203:{c:\"\"},8204:{c:\"\"},8213:{c:\"\\\\2014\"},8214:{c:\"\\\\2225\"},8215:{c:\"_\"},8226:{c:\"\\\\2219\"},8243:{c:\"\\\\2032\\\\2032\"},8244:{c:\"\\\\2032\\\\2032\\\\2032\"},8246:{c:\"\\\\2035\\\\2035\"},8247:{c:\"\\\\2035\\\\2035\\\\2035\"},8254:{c:\"\\\\2C9\"},8260:{c:\"/\"},8279:{c:\"\\\\2032\\\\2032\\\\2032\\\\2032\"},8289:{c:\"\"},8290:{c:\"\"},8291:{c:\"\"},8292:{c:\"\"},8407:{c:\"\\\\2192\",f:\"V\"},8450:{c:\"C\",f:\"A\"},8459:{c:\"H\",f:\"SC\"},8460:{c:\"H\",f:\"FR\"},8461:{c:\"H\",f:\"A\"},8462:{c:\"h\",f:\"I\"},8463:{f:\"\"},8464:{c:\"J\",f:\"SC\"},8465:{c:\"I\",f:\"FR\"},8466:{c:\"L\",f:\"SC\"},8469:{c:\"N\",f:\"A\"},8473:{c:\"P\",f:\"A\"},8474:{c:\"Q\",f:\"A\"},8475:{c:\"R\",f:\"SC\"},8476:{c:\"R\",f:\"FR\"},8477:{c:\"R\",f:\"A\"},8484:{c:\"Z\",f:\"A\"},8486:{c:\"\\\\3A9\",f:\"\"},8488:{c:\"Z\",f:\"FR\"},8492:{c:\"B\",f:\"SC\"},8493:{c:\"C\",f:\"FR\"},8496:{c:\"E\",f:\"SC\"},8497:{c:\"F\",f:\"SC\"},8499:{c:\"M\",f:\"SC\"},8708:{c:\"\\\\2203\\\\338\"},8710:{c:\"\\\\394\"},8716:{c:\"\\\\220B\\\\338\"},8726:{f:\"\"},8772:{c:\"\\\\2243\\\\338\"},8775:{c:\"\\\\2246\"},8777:{c:\"\\\\2248\\\\338\"},8802:{c:\"\\\\2261\\\\338\"},8813:{c:\"\\\\224D\\\\338\"},8820:{c:\"\\\\2272\\\\338\"},8821:{c:\"\\\\2273\\\\338\"},8824:{c:\"\\\\2276\\\\338\"},8825:{c:\"\\\\2277\\\\338\"},8836:{c:\"\\\\2282\\\\338\"},8837:{c:\"\\\\2283\\\\338\"},8930:{c:\"\\\\2291\\\\338\"},8931:{c:\"\\\\2292\\\\338\"},8965:{c:\"\\\\22BC\"},8966:{c:\"\\\\2A5E\"},8988:{c:\"\\\\250C\"},8989:{c:\"\\\\2510\"},8990:{c:\"\\\\2514\"},8991:{c:\"\\\\2518\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},9642:{c:\"\\\\25A0\"},9652:{c:\"\\\\25B2\"},9653:{c:\"\\\\25B3\"},9656:{c:\"\\\\25B6\"},9662:{c:\"\\\\25BC\"},9663:{c:\"\\\\25BD\"},9666:{c:\"\\\\25C0\"},9723:{c:\"\\\\25A1\"},9724:{c:\"\\\\25A0\"},10072:{c:\"\\\\2223\"},10744:{c:\"/\",f:\"I\"},10764:{c:\"\\\\222C\\\\222C\"},10799:{c:\"\\\\D7\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"},119808:{c:\"A\",f:\"B\"},119809:{c:\"B\",f:\"B\"},119810:{c:\"C\",f:\"B\"},119811:{c:\"D\",f:\"B\"},119812:{c:\"E\",f:\"B\"},119813:{c:\"F\",f:\"B\"},119814:{c:\"G\",f:\"B\"},119815:{c:\"H\",f:\"B\"},119816:{c:\"I\",f:\"B\"},119817:{c:\"J\",f:\"B\"},119818:{c:\"K\",f:\"B\"},119819:{c:\"L\",f:\"B\"},119820:{c:\"M\",f:\"B\"},119821:{c:\"N\",f:\"B\"},119822:{c:\"O\",f:\"B\"},119823:{c:\"P\",f:\"B\"},119824:{c:\"Q\",f:\"B\"},119825:{c:\"R\",f:\"B\"},119826:{c:\"S\",f:\"B\"},119827:{c:\"T\",f:\"B\"},119828:{c:\"U\",f:\"B\"},119829:{c:\"V\",f:\"B\"},119830:{c:\"W\",f:\"B\"},119831:{c:\"X\",f:\"B\"},119832:{c:\"Y\",f:\"B\"},119833:{c:\"Z\",f:\"B\"},119834:{c:\"a\",f:\"B\"},119835:{c:\"b\",f:\"B\"},119836:{c:\"c\",f:\"B\"},119837:{c:\"d\",f:\"B\"},119838:{c:\"e\",f:\"B\"},119839:{c:\"f\",f:\"B\"},119840:{c:\"g\",f:\"B\"},119841:{c:\"h\",f:\"B\"},119842:{c:\"i\",f:\"B\"},119843:{c:\"j\",f:\"B\"},119844:{c:\"k\",f:\"B\"},119845:{c:\"l\",f:\"B\"},119846:{c:\"m\",f:\"B\"},119847:{c:\"n\",f:\"B\"},119848:{c:\"o\",f:\"B\"},119849:{c:\"p\",f:\"B\"},119850:{c:\"q\",f:\"B\"},119851:{c:\"r\",f:\"B\"},119852:{c:\"s\",f:\"B\"},119853:{c:\"t\",f:\"B\"},119854:{c:\"u\",f:\"B\"},119855:{c:\"v\",f:\"B\"},119856:{c:\"w\",f:\"B\"},119857:{c:\"x\",f:\"B\"},119858:{c:\"y\",f:\"B\"},119859:{c:\"z\",f:\"B\"},119860:{c:\"A\",f:\"I\"},119861:{c:\"B\",f:\"I\"},119862:{c:\"C\",f:\"I\"},119863:{c:\"D\",f:\"I\"},119864:{c:\"E\",f:\"I\"},119865:{c:\"F\",f:\"I\"},119866:{c:\"G\",f:\"I\"},119867:{c:\"H\",f:\"I\"},119868:{c:\"I\",f:\"I\"},119869:{c:\"J\",f:\"I\"},119870:{c:\"K\",f:\"I\"},119871:{c:\"L\",f:\"I\"},119872:{c:\"M\",f:\"I\"},119873:{c:\"N\",f:\"I\"},119874:{c:\"O\",f:\"I\"},119875:{c:\"P\",f:\"I\"},119876:{c:\"Q\",f:\"I\"},119877:{c:\"R\",f:\"I\"},119878:{c:\"S\",f:\"I\"},119879:{c:\"T\",f:\"I\"},119880:{c:\"U\",f:\"I\"},119881:{c:\"V\",f:\"I\"},119882:{c:\"W\",f:\"I\"},119883:{c:\"X\",f:\"I\"},119884:{c:\"Y\",f:\"I\"},119885:{c:\"Z\",f:\"I\"},119886:{c:\"a\",f:\"I\"},119887:{c:\"b\",f:\"I\"},119888:{c:\"c\",f:\"I\"},119889:{c:\"d\",f:\"I\"},119890:{c:\"e\",f:\"I\"},119891:{c:\"f\",f:\"I\"},119892:{c:\"g\",f:\"I\"},119893:{c:\"h\",f:\"I\"},119894:{c:\"i\",f:\"I\"},119895:{c:\"j\",f:\"I\"},119896:{c:\"k\",f:\"I\"},119897:{c:\"l\",f:\"I\"},119898:{c:\"m\",f:\"I\"},119899:{c:\"n\",f:\"I\"},119900:{c:\"o\",f:\"I\"},119901:{c:\"p\",f:\"I\"},119902:{c:\"q\",f:\"I\"},119903:{c:\"r\",f:\"I\"},119904:{c:\"s\",f:\"I\"},119905:{c:\"t\",f:\"I\"},119906:{c:\"u\",f:\"I\"},119907:{c:\"v\",f:\"I\"},119908:{c:\"w\",f:\"I\"},119909:{c:\"x\",f:\"I\"},119910:{c:\"y\",f:\"I\"},119911:{c:\"z\",f:\"I\"},119912:{c:\"A\",f:\"BI\"},119913:{c:\"B\",f:\"BI\"},119914:{c:\"C\",f:\"BI\"},119915:{c:\"D\",f:\"BI\"},119916:{c:\"E\",f:\"BI\"},119917:{c:\"F\",f:\"BI\"},119918:{c:\"G\",f:\"BI\"},119919:{c:\"H\",f:\"BI\"},119920:{c:\"I\",f:\"BI\"},119921:{c:\"J\",f:\"BI\"},119922:{c:\"K\",f:\"BI\"},119923:{c:\"L\",f:\"BI\"},119924:{c:\"M\",f:\"BI\"},119925:{c:\"N\",f:\"BI\"},119926:{c:\"O\",f:\"BI\"},119927:{c:\"P\",f:\"BI\"},119928:{c:\"Q\",f:\"BI\"},119929:{c:\"R\",f:\"BI\"},119930:{c:\"S\",f:\"BI\"},119931:{c:\"T\",f:\"BI\"},119932:{c:\"U\",f:\"BI\"},119933:{c:\"V\",f:\"BI\"},119934:{c:\"W\",f:\"BI\"},119935:{c:\"X\",f:\"BI\"},119936:{c:\"Y\",f:\"BI\"},119937:{c:\"Z\",f:\"BI\"},119938:{c:\"a\",f:\"BI\"},119939:{c:\"b\",f:\"BI\"},119940:{c:\"c\",f:\"BI\"},119941:{c:\"d\",f:\"BI\"},119942:{c:\"e\",f:\"BI\"},119943:{c:\"f\",f:\"BI\"},119944:{c:\"g\",f:\"BI\"},119945:{c:\"h\",f:\"BI\"},119946:{c:\"i\",f:\"BI\"},119947:{c:\"j\",f:\"BI\"},119948:{c:\"k\",f:\"BI\"},119949:{c:\"l\",f:\"BI\"},119950:{c:\"m\",f:\"BI\"},119951:{c:\"n\",f:\"BI\"},119952:{c:\"o\",f:\"BI\"},119953:{c:\"p\",f:\"BI\"},119954:{c:\"q\",f:\"BI\"},119955:{c:\"r\",f:\"BI\"},119956:{c:\"s\",f:\"BI\"},119957:{c:\"t\",f:\"BI\"},119958:{c:\"u\",f:\"BI\"},119959:{c:\"v\",f:\"BI\"},119960:{c:\"w\",f:\"BI\"},119961:{c:\"x\",f:\"BI\"},119962:{c:\"y\",f:\"BI\"},119963:{c:\"z\",f:\"BI\"},119964:{c:\"A\",f:\"SC\"},119965:{c:\"B\",f:\"SC\"},119966:{c:\"C\",f:\"SC\"},119967:{c:\"D\",f:\"SC\"},119968:{c:\"E\",f:\"SC\"},119969:{c:\"F\",f:\"SC\"},119970:{c:\"G\",f:\"SC\"},119971:{c:\"H\",f:\"SC\"},119972:{c:\"I\",f:\"SC\"},119973:{c:\"J\",f:\"SC\"},119974:{c:\"K\",f:\"SC\"},119975:{c:\"L\",f:\"SC\"},119976:{c:\"M\",f:\"SC\"},119977:{c:\"N\",f:\"SC\"},119978:{c:\"O\",f:\"SC\"},119979:{c:\"P\",f:\"SC\"},119980:{c:\"Q\",f:\"SC\"},119981:{c:\"R\",f:\"SC\"},119982:{c:\"S\",f:\"SC\"},119983:{c:\"T\",f:\"SC\"},119984:{c:\"U\",f:\"SC\"},119985:{c:\"V\",f:\"SC\"},119986:{c:\"W\",f:\"SC\"},119987:{c:\"X\",f:\"SC\"},119988:{c:\"Y\",f:\"SC\"},119989:{c:\"Z\",f:\"SC\"},119990:{c:\"a\",f:\"I\"},119991:{c:\"b\",f:\"I\"},119992:{c:\"c\",f:\"I\"},119993:{c:\"d\",f:\"I\"},119994:{c:\"e\",f:\"I\"},119995:{c:\"f\",f:\"I\"},119996:{c:\"g\",f:\"I\"},119997:{c:\"h\",f:\"I\"},119998:{c:\"i\",f:\"I\"},119999:{c:\"j\",f:\"I\"},12e4:{c:\"k\",f:\"I\"},120001:{c:\"l\",f:\"I\"},120002:{c:\"m\",f:\"I\"},120003:{c:\"n\",f:\"I\"},120004:{c:\"o\",f:\"I\"},120005:{c:\"p\",f:\"I\"},120006:{c:\"q\",f:\"I\"},120007:{c:\"r\",f:\"I\"},120008:{c:\"s\",f:\"I\"},120009:{c:\"t\",f:\"I\"},120010:{c:\"u\",f:\"I\"},120011:{c:\"v\",f:\"I\"},120012:{c:\"w\",f:\"I\"},120013:{c:\"x\",f:\"I\"},120014:{c:\"y\",f:\"I\"},120015:{c:\"z\",f:\"I\"},120016:{c:\"A\",f:\"SC\"},120017:{c:\"B\",f:\"SC\"},120018:{c:\"C\",f:\"SC\"},120019:{c:\"D\",f:\"SC\"},120020:{c:\"E\",f:\"SC\"},120021:{c:\"F\",f:\"SC\"},120022:{c:\"G\",f:\"SC\"},120023:{c:\"H\",f:\"SC\"},120024:{c:\"I\",f:\"SC\"},120025:{c:\"J\",f:\"SC\"},120026:{c:\"K\",f:\"SC\"},120027:{c:\"L\",f:\"SC\"},120028:{c:\"M\",f:\"SC\"},120029:{c:\"N\",f:\"SC\"},120030:{c:\"O\",f:\"SC\"},120031:{c:\"P\",f:\"SC\"},120032:{c:\"Q\",f:\"SC\"},120033:{c:\"R\",f:\"SC\"},120034:{c:\"S\",f:\"SC\"},120035:{c:\"T\",f:\"SC\"},120036:{c:\"U\",f:\"SC\"},120037:{c:\"V\",f:\"SC\"},120038:{c:\"W\",f:\"SC\"},120039:{c:\"X\",f:\"SC\"},120040:{c:\"Y\",f:\"SC\"},120041:{c:\"Z\",f:\"SC\"},120042:{c:\"a\",f:\"BI\"},120043:{c:\"b\",f:\"BI\"},120044:{c:\"c\",f:\"BI\"},120045:{c:\"d\",f:\"BI\"},120046:{c:\"e\",f:\"BI\"},120047:{c:\"f\",f:\"BI\"},120048:{c:\"g\",f:\"BI\"},120049:{c:\"h\",f:\"BI\"},120050:{c:\"i\",f:\"BI\"},120051:{c:\"j\",f:\"BI\"},120052:{c:\"k\",f:\"BI\"},120053:{c:\"l\",f:\"BI\"},120054:{c:\"m\",f:\"BI\"},120055:{c:\"n\",f:\"BI\"},120056:{c:\"o\",f:\"BI\"},120057:{c:\"p\",f:\"BI\"},120058:{c:\"q\",f:\"BI\"},120059:{c:\"r\",f:\"BI\"},120060:{c:\"s\",f:\"BI\"},120061:{c:\"t\",f:\"BI\"},120062:{c:\"u\",f:\"BI\"},120063:{c:\"v\",f:\"BI\"},120064:{c:\"w\",f:\"BI\"},120065:{c:\"x\",f:\"BI\"},120066:{c:\"y\",f:\"BI\"},120067:{c:\"z\",f:\"BI\"},120068:{c:\"A\",f:\"FR\"},120069:{c:\"B\",f:\"FR\"},120070:{c:\"C\",f:\"FR\"},120071:{c:\"D\",f:\"FR\"},120072:{c:\"E\",f:\"FR\"},120073:{c:\"F\",f:\"FR\"},120074:{c:\"G\",f:\"FR\"},120075:{c:\"H\",f:\"FR\"},120076:{c:\"I\",f:\"FR\"},120077:{c:\"J\",f:\"FR\"},120078:{c:\"K\",f:\"FR\"},120079:{c:\"L\",f:\"FR\"},120080:{c:\"M\",f:\"FR\"},120081:{c:\"N\",f:\"FR\"},120082:{c:\"O\",f:\"FR\"},120083:{c:\"P\",f:\"FR\"},120084:{c:\"Q\",f:\"FR\"},120085:{c:\"R\",f:\"FR\"},120086:{c:\"S\",f:\"FR\"},120087:{c:\"T\",f:\"FR\"},120088:{c:\"U\",f:\"FR\"},120089:{c:\"V\",f:\"FR\"},120090:{c:\"W\",f:\"FR\"},120091:{c:\"X\",f:\"FR\"},120092:{c:\"Y\",f:\"FR\"},120093:{c:\"Z\",f:\"FR\"},120094:{c:\"a\",f:\"FR\"},120095:{c:\"b\",f:\"FR\"},120096:{c:\"c\",f:\"FR\"},120097:{c:\"d\",f:\"FR\"},120098:{c:\"e\",f:\"FR\"},120099:{c:\"f\",f:\"FR\"},120100:{c:\"g\",f:\"FR\"},120101:{c:\"h\",f:\"FR\"},120102:{c:\"i\",f:\"FR\"},120103:{c:\"j\",f:\"FR\"},120104:{c:\"k\",f:\"FR\"},120105:{c:\"l\",f:\"FR\"},120106:{c:\"m\",f:\"FR\"},120107:{c:\"n\",f:\"FR\"},120108:{c:\"o\",f:\"FR\"},120109:{c:\"p\",f:\"FR\"},120110:{c:\"q\",f:\"FR\"},120111:{c:\"r\",f:\"FR\"},120112:{c:\"s\",f:\"FR\"},120113:{c:\"t\",f:\"FR\"},120114:{c:\"u\",f:\"FR\"},120115:{c:\"v\",f:\"FR\"},120116:{c:\"w\",f:\"FR\"},120117:{c:\"x\",f:\"FR\"},120118:{c:\"y\",f:\"FR\"},120119:{c:\"z\",f:\"FR\"},120120:{c:\"A\",f:\"A\"},120121:{c:\"B\",f:\"A\"},120122:{c:\"C\",f:\"A\"},120123:{c:\"D\",f:\"A\"},120124:{c:\"E\",f:\"A\"},120125:{c:\"F\",f:\"A\"},120126:{c:\"G\",f:\"A\"},120127:{c:\"H\",f:\"A\"},120128:{c:\"I\",f:\"A\"},120129:{c:\"J\",f:\"A\"},120130:{c:\"K\",f:\"A\"},120131:{c:\"L\",f:\"A\"},120132:{c:\"M\",f:\"A\"},120133:{c:\"N\",f:\"A\"},120134:{c:\"O\",f:\"A\"},120135:{c:\"P\",f:\"A\"},120136:{c:\"Q\",f:\"A\"},120137:{c:\"R\",f:\"A\"},120138:{c:\"S\",f:\"A\"},120139:{c:\"T\",f:\"A\"},120140:{c:\"U\",f:\"A\"},120141:{c:\"V\",f:\"A\"},120142:{c:\"W\",f:\"A\"},120143:{c:\"X\",f:\"A\"},120144:{c:\"Y\",f:\"A\"},120145:{c:\"Z\",f:\"A\"},120146:{c:\"a\",f:\"B\"},120147:{c:\"b\",f:\"B\"},120148:{c:\"c\",f:\"B\"},120149:{c:\"d\",f:\"B\"},120150:{c:\"e\",f:\"B\"},120151:{c:\"f\",f:\"B\"},120152:{c:\"g\",f:\"B\"},120153:{c:\"h\",f:\"B\"},120154:{c:\"i\",f:\"B\"},120155:{c:\"j\",f:\"B\"},120156:{c:\"k\",f:\"A\"},120157:{c:\"l\",f:\"B\"},120158:{c:\"m\",f:\"B\"},120159:{c:\"n\",f:\"B\"},120160:{c:\"o\",f:\"B\"},120161:{c:\"p\",f:\"B\"},120162:{c:\"q\",f:\"B\"},120163:{c:\"r\",f:\"B\"},120164:{c:\"s\",f:\"B\"},120165:{c:\"t\",f:\"B\"},120166:{c:\"u\",f:\"B\"},120167:{c:\"v\",f:\"B\"},120168:{c:\"w\",f:\"B\"},120169:{c:\"x\",f:\"B\"},120170:{c:\"y\",f:\"B\"},120171:{c:\"z\",f:\"B\"},120172:{c:\"A\",f:\"FR-B\"},120173:{c:\"B\",f:\"FR-B\"},120174:{c:\"C\",f:\"FR-B\"},120175:{c:\"D\",f:\"FR-B\"},120176:{c:\"E\",f:\"FR-B\"},120177:{c:\"F\",f:\"FR-B\"},120178:{c:\"G\",f:\"FR-B\"},120179:{c:\"H\",f:\"FR-B\"},120180:{c:\"I\",f:\"FR-B\"},120181:{c:\"J\",f:\"FR-B\"},120182:{c:\"K\",f:\"FR-B\"},120183:{c:\"L\",f:\"FR-B\"},120184:{c:\"M\",f:\"FR-B\"},120185:{c:\"N\",f:\"FR-B\"},120186:{c:\"O\",f:\"FR-B\"},120187:{c:\"P\",f:\"FR-B\"},120188:{c:\"Q\",f:\"FR-B\"},120189:{c:\"R\",f:\"FR-B\"},120190:{c:\"S\",f:\"FR-B\"},120191:{c:\"T\",f:\"FR-B\"},120192:{c:\"U\",f:\"FR-B\"},120193:{c:\"V\",f:\"FR-B\"},120194:{c:\"W\",f:\"FR-B\"},120195:{c:\"X\",f:\"FR-B\"},120196:{c:\"Y\",f:\"FR-B\"},120197:{c:\"Z\",f:\"FR-B\"},120198:{c:\"a\",f:\"FR-B\"},120199:{c:\"b\",f:\"FR-B\"},120200:{c:\"c\",f:\"FR-B\"},120201:{c:\"d\",f:\"FR-B\"},120202:{c:\"e\",f:\"FR-B\"},120203:{c:\"f\",f:\"FR-B\"},120204:{c:\"g\",f:\"FR-B\"},120205:{c:\"h\",f:\"FR-B\"},120206:{c:\"i\",f:\"FR-B\"},120207:{c:\"j\",f:\"FR-B\"},120208:{c:\"k\",f:\"FR-B\"},120209:{c:\"l\",f:\"FR-B\"},120210:{c:\"m\",f:\"FR-B\"},120211:{c:\"n\",f:\"FR-B\"},120212:{c:\"o\",f:\"FR-B\"},120213:{c:\"p\",f:\"FR-B\"},120214:{c:\"q\",f:\"FR-B\"},120215:{c:\"r\",f:\"FR-B\"},120216:{c:\"s\",f:\"FR-B\"},120217:{c:\"t\",f:\"FR-B\"},120218:{c:\"u\",f:\"FR-B\"},120219:{c:\"v\",f:\"FR-B\"},120220:{c:\"w\",f:\"FR-B\"},120221:{c:\"x\",f:\"FR-B\"},120222:{c:\"y\",f:\"FR-B\"},120223:{c:\"z\",f:\"FR-B\"},120224:{c:\"A\",f:\"SS\"},120225:{c:\"B\",f:\"SS\"},120226:{c:\"C\",f:\"SS\"},120227:{c:\"D\",f:\"SS\"},120228:{c:\"E\",f:\"SS\"},120229:{c:\"F\",f:\"SS\"},120230:{c:\"G\",f:\"SS\"},120231:{c:\"H\",f:\"SS\"},120232:{c:\"I\",f:\"SS\"},120233:{c:\"J\",f:\"SS\"},120234:{c:\"K\",f:\"SS\"},120235:{c:\"L\",f:\"SS\"},120236:{c:\"M\",f:\"SS\"},120237:{c:\"N\",f:\"SS\"},120238:{c:\"O\",f:\"SS\"},120239:{c:\"P\",f:\"SS\"},120240:{c:\"Q\",f:\"SS\"},120241:{c:\"R\",f:\"SS\"},120242:{c:\"S\",f:\"SS\"},120243:{c:\"T\",f:\"SS\"},120244:{c:\"U\",f:\"SS\"},120245:{c:\"V\",f:\"SS\"},120246:{c:\"W\",f:\"SS\"},120247:{c:\"X\",f:\"SS\"},120248:{c:\"Y\",f:\"SS\"},120249:{c:\"Z\",f:\"SS\"},120250:{c:\"a\",f:\"SS\"},120251:{c:\"b\",f:\"SS\"},120252:{c:\"c\",f:\"SS\"},120253:{c:\"d\",f:\"SS\"},120254:{c:\"e\",f:\"SS\"},120255:{c:\"f\",f:\"SS\"},120256:{c:\"g\",f:\"SS\"},120257:{c:\"h\",f:\"SS\"},120258:{c:\"i\",f:\"SS\"},120259:{c:\"j\",f:\"SS\"},120260:{c:\"k\",f:\"SS\"},120261:{c:\"l\",f:\"SS\"},120262:{c:\"m\",f:\"SS\"},120263:{c:\"n\",f:\"SS\"},120264:{c:\"o\",f:\"SS\"},120265:{c:\"p\",f:\"SS\"},120266:{c:\"q\",f:\"SS\"},120267:{c:\"r\",f:\"SS\"},120268:{c:\"s\",f:\"SS\"},120269:{c:\"t\",f:\"SS\"},120270:{c:\"u\",f:\"SS\"},120271:{c:\"v\",f:\"SS\"},120272:{c:\"w\",f:\"SS\"},120273:{c:\"x\",f:\"SS\"},120274:{c:\"y\",f:\"SS\"},120275:{c:\"z\",f:\"SS\"},120276:{c:\"A\",f:\"SS-B\"},120277:{c:\"B\",f:\"SS-B\"},120278:{c:\"C\",f:\"SS-B\"},120279:{c:\"D\",f:\"SS-B\"},120280:{c:\"E\",f:\"SS-B\"},120281:{c:\"F\",f:\"SS-B\"},120282:{c:\"G\",f:\"SS-B\"},120283:{c:\"H\",f:\"SS-B\"},120284:{c:\"I\",f:\"SS-B\"},120285:{c:\"J\",f:\"SS-B\"},120286:{c:\"K\",f:\"SS-B\"},120287:{c:\"L\",f:\"SS-B\"},120288:{c:\"M\",f:\"SS-B\"},120289:{c:\"N\",f:\"SS-B\"},120290:{c:\"O\",f:\"SS-B\"},120291:{c:\"P\",f:\"SS-B\"},120292:{c:\"Q\",f:\"SS-B\"},120293:{c:\"R\",f:\"SS-B\"},120294:{c:\"S\",f:\"SS-B\"},120295:{c:\"T\",f:\"SS-B\"},120296:{c:\"U\",f:\"SS-B\"},120297:{c:\"V\",f:\"SS-B\"},120298:{c:\"W\",f:\"SS-B\"},120299:{c:\"X\",f:\"SS-B\"},120300:{c:\"Y\",f:\"SS-B\"},120301:{c:\"Z\",f:\"SS-B\"},120302:{c:\"a\",f:\"SS-B\"},120303:{c:\"b\",f:\"SS-B\"},120304:{c:\"c\",f:\"SS-B\"},120305:{c:\"d\",f:\"SS-B\"},120306:{c:\"e\",f:\"SS-B\"},120307:{c:\"f\",f:\"SS-B\"},120308:{c:\"g\",f:\"SS-B\"},120309:{c:\"h\",f:\"SS-B\"},120310:{c:\"i\",f:\"SS-B\"},120311:{c:\"j\",f:\"SS-B\"},120312:{c:\"k\",f:\"SS-B\"},120313:{c:\"l\",f:\"SS-B\"},120314:{c:\"m\",f:\"SS-B\"},120315:{c:\"n\",f:\"SS-B\"},120316:{c:\"o\",f:\"SS-B\"},120317:{c:\"p\",f:\"SS-B\"},120318:{c:\"q\",f:\"SS-B\"},120319:{c:\"r\",f:\"SS-B\"},120320:{c:\"s\",f:\"SS-B\"},120321:{c:\"t\",f:\"SS-B\"},120322:{c:\"u\",f:\"SS-B\"},120323:{c:\"v\",f:\"SS-B\"},120324:{c:\"w\",f:\"SS-B\"},120325:{c:\"x\",f:\"SS-B\"},120326:{c:\"y\",f:\"SS-B\"},120327:{c:\"z\",f:\"SS-B\"},120328:{c:\"A\",f:\"SS-I\"},120329:{c:\"B\",f:\"SS-I\"},120330:{c:\"C\",f:\"SS-I\"},120331:{c:\"D\",f:\"SS-I\"},120332:{c:\"E\",f:\"SS-I\"},120333:{c:\"F\",f:\"SS-I\"},120334:{c:\"G\",f:\"SS-I\"},120335:{c:\"H\",f:\"SS-I\"},120336:{c:\"I\",f:\"SS-I\"},120337:{c:\"J\",f:\"SS-I\"},120338:{c:\"K\",f:\"SS-I\"},120339:{c:\"L\",f:\"SS-I\"},120340:{c:\"M\",f:\"SS-I\"},120341:{c:\"N\",f:\"SS-I\"},120342:{c:\"O\",f:\"SS-I\"},120343:{c:\"P\",f:\"SS-I\"},120344:{c:\"Q\",f:\"SS-I\"},120345:{c:\"R\",f:\"SS-I\"},120346:{c:\"S\",f:\"SS-I\"},120347:{c:\"T\",f:\"SS-I\"},120348:{c:\"U\",f:\"SS-I\"},120349:{c:\"V\",f:\"SS-I\"},120350:{c:\"W\",f:\"SS-I\"},120351:{c:\"X\",f:\"SS-I\"},120352:{c:\"Y\",f:\"SS-I\"},120353:{c:\"Z\",f:\"SS-I\"},120354:{c:\"a\",f:\"SS-I\"},120355:{c:\"b\",f:\"SS-I\"},120356:{c:\"c\",f:\"SS-I\"},120357:{c:\"d\",f:\"SS-I\"},120358:{c:\"e\",f:\"SS-I\"},120359:{c:\"f\",f:\"SS-I\"},120360:{c:\"g\",f:\"SS-I\"},120361:{c:\"h\",f:\"SS-I\"},120362:{c:\"i\",f:\"SS-I\"},120363:{c:\"j\",f:\"SS-I\"},120364:{c:\"k\",f:\"SS-I\"},120365:{c:\"l\",f:\"SS-I\"},120366:{c:\"m\",f:\"SS-I\"},120367:{c:\"n\",f:\"SS-I\"},120368:{c:\"o\",f:\"SS-I\"},120369:{c:\"p\",f:\"SS-I\"},120370:{c:\"q\",f:\"SS-I\"},120371:{c:\"r\",f:\"SS-I\"},120372:{c:\"s\",f:\"SS-I\"},120373:{c:\"t\",f:\"SS-I\"},120374:{c:\"u\",f:\"SS-I\"},120375:{c:\"v\",f:\"SS-I\"},120376:{c:\"w\",f:\"SS-I\"},120377:{c:\"x\",f:\"SS-I\"},120378:{c:\"y\",f:\"SS-I\"},120379:{c:\"z\",f:\"SS-I\"},120380:{c:\"A\",f:\"SS-I\"},120381:{c:\"B\",f:\"SS-I\"},120382:{c:\"C\",f:\"SS-I\"},120383:{c:\"D\",f:\"SS-I\"},120384:{c:\"E\",f:\"SS-I\"},120385:{c:\"F\",f:\"SS-I\"},120386:{c:\"G\",f:\"SS-I\"},120387:{c:\"H\",f:\"SS-I\"},120388:{c:\"I\",f:\"SS-I\"},120389:{c:\"J\",f:\"SS-I\"},120390:{c:\"K\",f:\"SS-I\"},120391:{c:\"L\",f:\"SS-I\"},120392:{c:\"M\",f:\"SS-I\"},120393:{c:\"N\",f:\"SS-I\"},120394:{c:\"O\",f:\"SS-I\"},120395:{c:\"P\",f:\"SS-I\"},120396:{c:\"Q\",f:\"SS-I\"},120397:{c:\"R\",f:\"SS-I\"},120398:{c:\"S\",f:\"SS-I\"},120399:{c:\"T\",f:\"SS-I\"},120400:{c:\"U\",f:\"SS-I\"},120401:{c:\"V\",f:\"SS-I\"},120402:{c:\"W\",f:\"SS-I\"},120403:{c:\"X\",f:\"SS-I\"},120404:{c:\"Y\",f:\"SS-I\"},120405:{c:\"Z\",f:\"SS-I\"},120406:{c:\"a\",f:\"SS-I\"},120407:{c:\"b\",f:\"SS-I\"},120408:{c:\"c\",f:\"SS-I\"},120409:{c:\"d\",f:\"SS-I\"},120410:{c:\"e\",f:\"SS-I\"},120411:{c:\"f\",f:\"SS-I\"},120412:{c:\"g\",f:\"SS-I\"},120413:{c:\"h\",f:\"SS-I\"},120414:{c:\"i\",f:\"SS-I\"},120415:{c:\"j\",f:\"SS-I\"},120416:{c:\"k\",f:\"SS-I\"},120417:{c:\"l\",f:\"SS-I\"},120418:{c:\"m\",f:\"SS-I\"},120419:{c:\"n\",f:\"SS-I\"},120420:{c:\"o\",f:\"SS-I\"},120421:{c:\"p\",f:\"SS-I\"},120422:{c:\"q\",f:\"SS-I\"},120423:{c:\"r\",f:\"SS-I\"},120424:{c:\"s\",f:\"SS-I\"},120425:{c:\"t\",f:\"SS-I\"},120426:{c:\"u\",f:\"SS-I\"},120427:{c:\"v\",f:\"SS-I\"},120428:{c:\"w\",f:\"SS-I\"},120429:{c:\"x\",f:\"SS-I\"},120430:{c:\"y\",f:\"SS-I\"},120431:{c:\"z\",f:\"SS-I\"},120432:{c:\"A\",f:\"T\"},120433:{c:\"B\",f:\"T\"},120434:{c:\"C\",f:\"T\"},120435:{c:\"D\",f:\"T\"},120436:{c:\"E\",f:\"T\"},120437:{c:\"F\",f:\"T\"},120438:{c:\"G\",f:\"T\"},120439:{c:\"H\",f:\"T\"},120440:{c:\"I\",f:\"T\"},120441:{c:\"J\",f:\"T\"},120442:{c:\"K\",f:\"T\"},120443:{c:\"L\",f:\"T\"},120444:{c:\"M\",f:\"T\"},120445:{c:\"N\",f:\"T\"},120446:{c:\"O\",f:\"T\"},120447:{c:\"P\",f:\"T\"},120448:{c:\"Q\",f:\"T\"},120449:{c:\"R\",f:\"T\"},120450:{c:\"S\",f:\"T\"},120451:{c:\"T\",f:\"T\"},120452:{c:\"U\",f:\"T\"},120453:{c:\"V\",f:\"T\"},120454:{c:\"W\",f:\"T\"},120455:{c:\"X\",f:\"T\"},120456:{c:\"Y\",f:\"T\"},120457:{c:\"Z\",f:\"T\"},120458:{c:\"a\",f:\"T\"},120459:{c:\"b\",f:\"T\"},120460:{c:\"c\",f:\"T\"},120461:{c:\"d\",f:\"T\"},120462:{c:\"e\",f:\"T\"},120463:{c:\"f\",f:\"T\"},120464:{c:\"g\",f:\"T\"},120465:{c:\"h\",f:\"T\"},120466:{c:\"i\",f:\"T\"},120467:{c:\"j\",f:\"T\"},120468:{c:\"k\",f:\"T\"},120469:{c:\"l\",f:\"T\"},120470:{c:\"m\",f:\"T\"},120471:{c:\"n\",f:\"T\"},120472:{c:\"o\",f:\"T\"},120473:{c:\"p\",f:\"T\"},120474:{c:\"q\",f:\"T\"},120475:{c:\"r\",f:\"T\"},120476:{c:\"s\",f:\"T\"},120477:{c:\"t\",f:\"T\"},120478:{c:\"u\",f:\"T\"},120479:{c:\"v\",f:\"T\"},120480:{c:\"w\",f:\"T\"},120481:{c:\"x\",f:\"T\"},120482:{c:\"y\",f:\"T\"},120483:{c:\"z\",f:\"T\"},120484:{c:\"\\\\131\",f:\"MI\"},120485:{c:\"\\\\237\",f:\"MI\"},120488:{c:\"A\",f:\"B\"},120489:{c:\"B\",f:\"B\"},120490:{c:\"\\\\393\",f:\"B\"},120491:{c:\"\\\\394\",f:\"B\"},120492:{c:\"E\",f:\"B\"},120493:{c:\"Z\",f:\"B\"},120494:{c:\"H\",f:\"B\"},120495:{c:\"\\\\398\",f:\"B\"},120496:{c:\"I\",f:\"B\"},120497:{c:\"K\",f:\"B\"},120498:{c:\"\\\\39B\",f:\"B\"},120499:{c:\"M\",f:\"B\"},120500:{c:\"N\",f:\"B\"},120501:{c:\"\\\\39E\",f:\"B\"},120502:{c:\"O\",f:\"B\"},120503:{c:\"\\\\3A0\",f:\"B\"},120504:{c:\"P\",f:\"B\"},120505:{c:\"\\\\398\",f:\"B\"},120506:{c:\"\\\\3A3\",f:\"B\"},120507:{c:\"T\",f:\"B\"},120508:{c:\"\\\\3A5\",f:\"B\"},120509:{c:\"\\\\3A6\",f:\"B\"},120510:{c:\"X\",f:\"B\"},120511:{c:\"\\\\3A8\",f:\"B\"},120512:{c:\"\\\\3A9\",f:\"B\"},120513:{c:\"\\\\2207\",f:\"B\"},120514:{c:\"\\\\3B1\",f:\"BI\"},120515:{c:\"\\\\3B2\",f:\"BI\"},120516:{c:\"\\\\3B3\",f:\"BI\"},120517:{c:\"\\\\3B4\",f:\"BI\"},120518:{c:\"\\\\3B5\",f:\"BI\"},120519:{c:\"\\\\3B6\",f:\"BI\"},120520:{c:\"\\\\3B7\",f:\"BI\"},120521:{c:\"\\\\3B8\",f:\"BI\"},120522:{c:\"\\\\3B9\",f:\"BI\"},120523:{c:\"\\\\3BA\",f:\"BI\"},120524:{c:\"\\\\3BB\",f:\"BI\"},120525:{c:\"\\\\3BC\",f:\"BI\"},120526:{c:\"\\\\3BD\",f:\"BI\"},120527:{c:\"\\\\3BE\",f:\"BI\"},120528:{c:\"\\\\3BF\",f:\"BI\"},120529:{c:\"\\\\3C0\",f:\"BI\"},120530:{c:\"\\\\3C1\",f:\"BI\"},120531:{c:\"\\\\3C2\",f:\"BI\"},120532:{c:\"\\\\3C3\",f:\"BI\"},120533:{c:\"\\\\3C4\",f:\"BI\"},120534:{c:\"\\\\3C5\",f:\"BI\"},120535:{c:\"\\\\3C6\",f:\"BI\"},120536:{c:\"\\\\3C7\",f:\"BI\"},120537:{c:\"\\\\3C8\",f:\"BI\"},120538:{c:\"\\\\3C9\",f:\"BI\"},120539:{c:\"\\\\2202\",f:\"BI\"},120540:{c:\"\\\\3F5\",f:\"BI\"},120541:{c:\"\\\\3D1\",f:\"BI\"},120542:{c:\"\\\\E009\",f:\"A\"},120543:{c:\"\\\\3D5\",f:\"BI\"},120544:{c:\"\\\\3F1\",f:\"BI\"},120545:{c:\"\\\\3D6\",f:\"BI\"},120546:{c:\"A\",f:\"I\"},120547:{c:\"B\",f:\"I\"},120548:{c:\"\\\\393\",f:\"I\"},120549:{c:\"\\\\394\",f:\"I\"},120550:{c:\"E\",f:\"I\"},120551:{c:\"Z\",f:\"I\"},120552:{c:\"H\",f:\"I\"},120553:{c:\"\\\\398\",f:\"I\"},120554:{c:\"I\",f:\"I\"},120555:{c:\"K\",f:\"I\"},120556:{c:\"\\\\39B\",f:\"I\"},120557:{c:\"M\",f:\"I\"},120558:{c:\"N\",f:\"I\"},120559:{c:\"\\\\39E\",f:\"I\"},120560:{c:\"O\",f:\"I\"},120561:{c:\"\\\\3A0\",f:\"I\"},120562:{c:\"P\",f:\"I\"},120563:{c:\"\\\\398\",f:\"I\"},120564:{c:\"\\\\3A3\",f:\"I\"},120565:{c:\"T\",f:\"I\"},120566:{c:\"\\\\3A5\",f:\"I\"},120567:{c:\"\\\\3A6\",f:\"I\"},120568:{c:\"X\",f:\"I\"},120569:{c:\"\\\\3A8\",f:\"I\"},120570:{c:\"\\\\3A9\",f:\"I\"},120571:{c:\"\\\\2207\",f:\"\"},120572:{c:\"\\\\3B1\",f:\"I\"},120573:{c:\"\\\\3B2\",f:\"I\"},120574:{c:\"\\\\3B3\",f:\"I\"},120575:{c:\"\\\\3B4\",f:\"I\"},120576:{c:\"\\\\3B5\",f:\"I\"},120577:{c:\"\\\\3B6\",f:\"I\"},120578:{c:\"\\\\3B7\",f:\"I\"},120579:{c:\"\\\\3B8\",f:\"I\"},120580:{c:\"\\\\3B9\",f:\"I\"},120581:{c:\"\\\\3BA\",f:\"I\"},120582:{c:\"\\\\3BB\",f:\"I\"},120583:{c:\"\\\\3BC\",f:\"I\"},120584:{c:\"\\\\3BD\",f:\"I\"},120585:{c:\"\\\\3BE\",f:\"I\"},120586:{c:\"\\\\3BF\",f:\"I\"},120587:{c:\"\\\\3C0\",f:\"I\"},120588:{c:\"\\\\3C1\",f:\"I\"},120589:{c:\"\\\\3C2\",f:\"I\"},120590:{c:\"\\\\3C3\",f:\"I\"},120591:{c:\"\\\\3C4\",f:\"I\"},120592:{c:\"\\\\3C5\",f:\"I\"},120593:{c:\"\\\\3C6\",f:\"I\"},120594:{c:\"\\\\3C7\",f:\"I\"},120595:{c:\"\\\\3C8\",f:\"I\"},120596:{c:\"\\\\3C9\",f:\"I\"},120597:{c:\"\\\\2202\",f:\"\"},120598:{c:\"\\\\3F5\",f:\"I\"},120599:{c:\"\\\\3D1\",f:\"I\"},120600:{c:\"\\\\E009\",f:\"A\"},120601:{c:\"\\\\3D5\",f:\"I\"},120602:{c:\"\\\\3F1\",f:\"I\"},120603:{c:\"\\\\3D6\",f:\"I\"},120604:{c:\"A\",f:\"BI\"},120605:{c:\"B\",f:\"BI\"},120606:{c:\"\\\\393\",f:\"BI\"},120607:{c:\"\\\\394\",f:\"BI\"},120608:{c:\"E\",f:\"BI\"},120609:{c:\"Z\",f:\"BI\"},120610:{c:\"H\",f:\"BI\"},120611:{c:\"\\\\398\",f:\"BI\"},120612:{c:\"I\",f:\"BI\"},120613:{c:\"K\",f:\"BI\"},120614:{c:\"\\\\39B\",f:\"BI\"},120615:{c:\"M\",f:\"BI\"},120616:{c:\"N\",f:\"BI\"},120617:{c:\"\\\\39E\",f:\"BI\"},120618:{c:\"O\",f:\"BI\"},120619:{c:\"\\\\3A0\",f:\"BI\"},120620:{c:\"P\",f:\"BI\"},120621:{c:\"\\\\398\",f:\"BI\"},120622:{c:\"\\\\3A3\",f:\"BI\"},120623:{c:\"T\",f:\"BI\"},120624:{c:\"\\\\3A5\",f:\"BI\"},120625:{c:\"\\\\3A6\",f:\"BI\"},120626:{c:\"X\",f:\"BI\"},120627:{c:\"\\\\3A8\",f:\"BI\"},120628:{c:\"\\\\3A9\",f:\"BI\"},120629:{c:\"\\\\2207\",f:\"\"},120630:{c:\"\\\\3B1\",f:\"BI\"},120631:{c:\"\\\\3B2\",f:\"BI\"},120632:{c:\"\\\\3B3\",f:\"BI\"},120633:{c:\"\\\\3B4\",f:\"BI\"},120634:{c:\"\\\\3B5\",f:\"BI\"},120635:{c:\"\\\\3B6\",f:\"BI\"},120636:{c:\"\\\\3B7\",f:\"BI\"},120637:{c:\"\\\\3B8\",f:\"BI\"},120638:{c:\"\\\\3B9\",f:\"BI\"},120639:{c:\"\\\\3BA\",f:\"BI\"},120640:{c:\"\\\\3BB\",f:\"BI\"},120641:{c:\"\\\\3BC\",f:\"BI\"},120642:{c:\"\\\\3BD\",f:\"BI\"},120643:{c:\"\\\\3BE\",f:\"BI\"},120644:{c:\"\\\\3BF\",f:\"BI\"},120645:{c:\"\\\\3C0\",f:\"BI\"},120646:{c:\"\\\\3C1\",f:\"BI\"},120647:{c:\"\\\\3C2\",f:\"BI\"},120648:{c:\"\\\\3C3\",f:\"BI\"},120649:{c:\"\\\\3C4\",f:\"BI\"},120650:{c:\"\\\\3C5\",f:\"BI\"},120651:{c:\"\\\\3C6\",f:\"BI\"},120652:{c:\"\\\\3C7\",f:\"BI\"},120653:{c:\"\\\\3C8\",f:\"BI\"},120654:{c:\"\\\\3C9\",f:\"BI\"},120655:{c:\"\\\\2202\",f:\"\"},120656:{c:\"\\\\3F5\",f:\"BI\"},120657:{c:\"\\\\3D1\",f:\"BI\"},120658:{c:\"\\\\E009\",f:\"A\"},120659:{c:\"\\\\3D5\",f:\"BI\"},120660:{c:\"\\\\3F1\",f:\"BI\"},120661:{c:\"\\\\3D6\",f:\"BI\"},120662:{c:\"A\",f:\"SS-B\"},120663:{c:\"B\",f:\"SS-B\"},120664:{c:\"\\\\393\",f:\"SS-B\"},120665:{c:\"\\\\394\",f:\"SS-B\"},120666:{c:\"E\",f:\"SS-B\"},120667:{c:\"Z\",f:\"SS-B\"},120668:{c:\"H\",f:\"SS-B\"},120669:{c:\"\\\\398\",f:\"SS-B\"},120670:{c:\"I\",f:\"SS-B\"},120671:{c:\"K\",f:\"SS-B\"},120672:{c:\"\\\\39B\",f:\"SS-B\"},120673:{c:\"M\",f:\"SS-B\"},120674:{c:\"N\",f:\"SS-B\"},120675:{c:\"\\\\39E\",f:\"SS-B\"},120676:{c:\"O\",f:\"SS-B\"},120677:{c:\"\\\\3A0\",f:\"SS-B\"},120678:{c:\"P\",f:\"SS-B\"},120679:{c:\"\\\\398\",f:\"SS-B\"},120680:{c:\"\\\\3A3\",f:\"SS-B\"},120681:{c:\"T\",f:\"SS-B\"},120682:{c:\"\\\\3A5\",f:\"SS-B\"},120683:{c:\"\\\\3A6\",f:\"SS-B\"},120684:{c:\"X\",f:\"SS-B\"},120685:{c:\"\\\\3A8\",f:\"SS-B\"},120686:{c:\"\\\\3A9\",f:\"SS-B\"},120687:{c:\"\\\\2207\",f:\"\"},120688:{c:\"\\\\3B1\",f:\"BI\"},120689:{c:\"\\\\3B2\",f:\"BI\"},120690:{c:\"\\\\3B3\",f:\"BI\"},120691:{c:\"\\\\3B4\",f:\"BI\"},120692:{c:\"\\\\3B5\",f:\"BI\"},120693:{c:\"\\\\3B6\",f:\"BI\"},120694:{c:\"\\\\3B7\",f:\"BI\"},120695:{c:\"\\\\3B8\",f:\"BI\"},120696:{c:\"\\\\3B9\",f:\"BI\"},120697:{c:\"\\\\3BA\",f:\"BI\"},120698:{c:\"\\\\3BB\",f:\"BI\"},120699:{c:\"\\\\3BC\",f:\"BI\"},120700:{c:\"\\\\3BD\",f:\"BI\"},120701:{c:\"\\\\3BE\",f:\"BI\"},120702:{c:\"\\\\3BF\",f:\"BI\"},120703:{c:\"\\\\3C0\",f:\"BI\"},120704:{c:\"\\\\3C1\",f:\"BI\"},120705:{c:\"\\\\3C2\",f:\"BI\"},120706:{c:\"\\\\3C3\",f:\"BI\"},120707:{c:\"\\\\3C4\",f:\"BI\"},120708:{c:\"\\\\3C5\",f:\"BI\"},120709:{c:\"\\\\3C6\",f:\"BI\"},120710:{c:\"\\\\3C7\",f:\"BI\"},120711:{c:\"\\\\3C8\",f:\"BI\"},120712:{c:\"\\\\3C9\",f:\"BI\"},120713:{c:\"\\\\2202\",f:\"\"},120714:{c:\"\\\\3F5\",f:\"BI\"},120715:{c:\"\\\\3D1\",f:\"BI\"},120716:{c:\"\\\\E009\",f:\"A\"},120717:{c:\"\\\\3D5\",f:\"BI\"},120718:{c:\"\\\\3F1\",f:\"BI\"},120719:{c:\"\\\\3D6\",f:\"BI\"},120720:{c:\"A\",f:\"SS-I\"},120721:{c:\"B\",f:\"SS-I\"},120722:{c:\"\\\\393\",f:\"SS-I\"},120723:{c:\"\\\\394\",f:\"SS-I\"},120724:{c:\"E\",f:\"SS-I\"},120725:{c:\"Z\",f:\"SS-I\"},120726:{c:\"H\",f:\"SS-I\"},120727:{c:\"\\\\398\",f:\"SS-I\"},120728:{c:\"I\",f:\"SS-I\"},120729:{c:\"K\",f:\"SS-I\"},120730:{c:\"\\\\39B\",f:\"SS-I\"},120731:{c:\"M\",f:\"SS-I\"},120732:{c:\"N\",f:\"SS-I\"},120733:{c:\"\\\\39E\",f:\"SS-I\"},120734:{c:\"O\",f:\"SS-I\"},120735:{c:\"\\\\3A0\",f:\"SS-I\"},120736:{c:\"P\",f:\"SS-I\"},120737:{c:\"\\\\398\",f:\"SS-I\"},120738:{c:\"\\\\3A3\",f:\"SS-I\"},120739:{c:\"T\",f:\"SS-I\"},120740:{c:\"\\\\3A5\",f:\"SS-I\"},120741:{c:\"\\\\3A6\",f:\"SS-I\"},120742:{c:\"X\",f:\"SS-I\"},120743:{c:\"\\\\3A8\",f:\"SS-I\"},120744:{c:\"\\\\3A9\",f:\"SS-I\"},120745:{c:\"\\\\2207\",f:\"\"},120746:{c:\"\\\\3B1\",f:\"BI\"},120747:{c:\"\\\\3B2\",f:\"BI\"},120748:{c:\"\\\\3B3\",f:\"BI\"},120749:{c:\"\\\\3B4\",f:\"BI\"},120750:{c:\"\\\\3B5\",f:\"BI\"},120751:{c:\"\\\\3B6\",f:\"BI\"},120752:{c:\"\\\\3B7\",f:\"BI\"},120753:{c:\"\\\\3B8\",f:\"BI\"},120754:{c:\"\\\\3B9\",f:\"BI\"},120755:{c:\"\\\\3BA\",f:\"BI\"},120756:{c:\"\\\\3BB\",f:\"BI\"},120757:{c:\"\\\\3BC\",f:\"BI\"},120758:{c:\"\\\\3BD\",f:\"BI\"},120759:{c:\"\\\\3BE\",f:\"BI\"},120760:{c:\"\\\\3BF\",f:\"BI\"},120761:{c:\"\\\\3C0\",f:\"BI\"},120762:{c:\"\\\\3C1\",f:\"BI\"},120763:{c:\"\\\\3C2\",f:\"BI\"},120764:{c:\"\\\\3C3\",f:\"BI\"},120765:{c:\"\\\\3C4\",f:\"BI\"},120766:{c:\"\\\\3C5\",f:\"BI\"},120767:{c:\"\\\\3C6\",f:\"BI\"},120768:{c:\"\\\\3C7\",f:\"BI\"},120769:{c:\"\\\\3C8\",f:\"BI\"},120770:{c:\"\\\\3C9\",f:\"BI\"},120771:{c:\"\\\\2202\",f:\"\"},120772:{c:\"\\\\3F5\",f:\"BI\"},120773:{c:\"\\\\3D1\",f:\"BI\"},120774:{c:\"\\\\E009\",f:\"A\"},120775:{c:\"\\\\3D5\",f:\"BI\"},120776:{c:\"\\\\3F1\",f:\"BI\"},120777:{c:\"\\\\3D6\",f:\"BI\"},120778:{c:\"F\",f:\"I\"},120779:{c:\"\\\\3DD\",f:\"A\"},120782:{c:\"0\",f:\"B\"},120783:{c:\"1\",f:\"B\"},120784:{c:\"2\",f:\"B\"},120785:{c:\"3\",f:\"B\"},120786:{c:\"4\",f:\"B\"},120787:{c:\"5\",f:\"B\"},120788:{c:\"6\",f:\"B\"},120789:{c:\"7\",f:\"B\"},120790:{c:\"8\",f:\"B\"},120791:{c:\"9\",f:\"B\"},120792:{c:\"0\",f:\"B\"},120793:{c:\"1\",f:\"B\"},120794:{c:\"2\",f:\"B\"},120795:{c:\"3\",f:\"B\"},120796:{c:\"4\",f:\"B\"},120797:{c:\"5\",f:\"B\"},120798:{c:\"6\",f:\"B\"},120799:{c:\"7\",f:\"B\"},120800:{c:\"8\",f:\"B\"},120801:{c:\"9\",f:\"B\"},120802:{c:\"0\",f:\"SS\"},120803:{c:\"1\",f:\"SS\"},120804:{c:\"2\",f:\"SS\"},120805:{c:\"3\",f:\"SS\"},120806:{c:\"4\",f:\"SS\"},120807:{c:\"5\",f:\"SS\"},120808:{c:\"6\",f:\"SS\"},120809:{c:\"7\",f:\"SS\"},120810:{c:\"8\",f:\"SS\"},120811:{c:\"9\",f:\"SS\"},120812:{c:\"0\",f:\"SS-B\"},120813:{c:\"1\",f:\"SS-B\"},120814:{c:\"2\",f:\"SS-B\"},120815:{c:\"3\",f:\"SS-B\"},120816:{c:\"4\",f:\"SS-B\"},120817:{c:\"5\",f:\"SS-B\"},120818:{c:\"6\",f:\"SS-B\"},120819:{c:\"7\",f:\"SS-B\"},120820:{c:\"8\",f:\"SS-B\"},120821:{c:\"9\",f:\"SS-B\"},120822:{c:\"0\",f:\"T\"},120823:{c:\"1\",f:\"T\"},120824:{c:\"2\",f:\"T\"},120825:{c:\"3\",f:\"T\"},120826:{c:\"4\",f:\"T\"},120827:{c:\"5\",f:\"T\"},120828:{c:\"6\",f:\"T\"},120829:{c:\"7\",f:\"T\"},120830:{c:\"8\",f:\"T\"},120831:{c:\"9\",f:\"T\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.normal={32:[0,0,.25],33:[.716,0,.278],34:[.694,-.379,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.778],39:[.694,-.379,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.32,.5],43:[.583,.082,.778],44:[.121,.194,.278],45:[.252,-.179,.333],46:[.12,0,.278],47:[.75,.25,.5],48:[.666,.022,.5],49:[.666,0,.5],50:[.666,0,.5],51:[.665,.022,.5],52:[.677,0,.5],53:[.666,.022,.5],54:[.666,.022,.5],55:[.676,.022,.5],56:[.666,.022,.5],57:[.666,.022,.5],58:[.43,0,.278],59:[.43,.194,.278],60:[.54,.04,.778],61:[.583,.082,.778],62:[.54,.04,.778],63:[.705,0,.472],64:[.705,.011,.778],65:[.716,0,.75],66:[.683,0,.708],67:[.705,.021,.722],68:[.683,0,.764],69:[.68,0,.681],70:[.68,0,.653],71:[.705,.022,.785],72:[.683,0,.75],73:[.683,0,.361],74:[.683,.022,.514],75:[.683,0,.778],76:[.683,0,.625],77:[.683,0,.917],78:[.683,0,.75],79:[.705,.022,.778],80:[.683,0,.681],81:[.705,.193,.778],82:[.683,.022,.736],83:[.705,.022,.556],84:[.677,0,.722],85:[.683,.022,.75],86:[.683,.022,.75],87:[.683,.022,1.028],88:[.683,0,.75],89:[.683,0,.75],90:[.683,0,.611],91:[.75,.25,.278],92:[.75,.25,.5],93:[.75,.25,.278],94:[.694,-.531,.5],95:[-.025,.062,.5],96:[.699,-.505,.5],97:[.448,.011,.5],98:[.694,.011,.556],99:[.448,.011,.444],100:[.694,.011,.556],101:[.448,.011,.444],102:[.705,0,.306,{ic:.066}],103:[.453,.206,.5],104:[.694,0,.556],105:[.669,0,.278],106:[.669,.205,.306],107:[.694,0,.528],108:[.694,0,.278],109:[.442,0,.833],110:[.442,0,.556],111:[.448,.01,.5],112:[.442,.194,.556],113:[.442,.194,.528],114:[.442,0,.392],115:[.448,.011,.394],116:[.615,.01,.389],117:[.442,.011,.556],118:[.431,.011,.528],119:[.431,.011,.722],120:[.431,0,.528],121:[.431,.204,.528],122:[.431,0,.444],123:[.75,.25,.5],124:[.75,.249,.278],125:[.75,.25,.5],126:[.318,-.215,.5],160:[0,0,.25],163:[.714,.011,.769],165:[.683,0,.75],168:[.669,-.554,.5],172:[.356,-.089,.667],174:[.709,.175,.947],175:[.59,-.544,.5],176:[.715,-.542,.5],177:[.666,0,.778],180:[.699,-.505,.5],183:[.31,-.19,.278],215:[.491,-.009,.778],240:[.749,.021,.556],247:[.537,.036,.778],295:[.695,.013,.54],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.56,-.043,.275],710:[.694,-.531,.5],711:[.644,-.513,.5],713:[.59,-.544,.5],714:[.699,-.505,.5],715:[.699,-.505,.5],728:[.694,-.515,.5],729:[.669,-.549,.5],730:[.715,-.542,.5],732:[.668,-.565,.5],768:[.699,-.505,0],769:[.699,-.505,0],770:[.694,-.531,0],771:[.668,-.565,0],772:[.59,-.544,0],774:[.694,-.515,0],775:[.669,-.549,0],776:[.669,-.554,0],778:[.715,-.542,0],779:[.701,-.51,0],780:[.644,-.513,0],824:[.716,.215,0],913:[.716,0,.75],914:[.683,0,.708],915:[.68,0,.625],916:[.716,0,.833],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],920:[.705,.022,.778],921:[.683,0,.361],922:[.683,0,.778],923:[.716,0,.694],924:[.683,0,.917],925:[.683,0,.75],926:[.677,0,.667],927:[.705,.022,.778],928:[.68,0,.75],929:[.683,0,.681],930:[.705,.022,.778],931:[.683,0,.722],932:[.677,0,.722],933:[.705,0,.778],934:[.683,0,.722],935:[.683,0,.75],936:[.683,0,.778],937:[.704,0,.722],978:[.705,0,.778],988:[.68,0,.653],989:[.605,.085,.778],1008:[.434,.006,.667,{ic:.067}],1014:[.44,0,.429],8192:[0,0,.5],8193:[0,0,1],8194:[0,0,.5],8195:[0,0,1],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.1],8203:[0,0,0],8204:[0,0,0],8211:[.285,-.248,.5],8212:[.285,-.248,1],8213:[.285,-.248,1],8214:[.75,.25,.5],8215:[-.025,.062,.5],8216:[.694,-.379,.278],8217:[.694,-.379,.278],8220:[.694,-.379,.5],8221:[.694,-.379,.5],8224:[.705,.216,.444],8225:[.705,.205,.444],8226:[.444,-.055,.5],8230:[.12,0,1.172],8242:[.56,-.043,.275],8243:[.56,0,.55],8244:[.56,0,.825],8245:[.56,-.043,.275],8246:[.56,0,.55],8247:[.56,0,.825],8254:[.59,-.544,.5],8260:[.75,.25,.5],8279:[.56,0,1.1],8289:[0,0,0],8290:[0,0,0],8291:[0,0,0],8292:[0,0,0],8407:[.714,-.516,.5],8450:[.702,.019,.722],8459:[.717,.036,.969,{ic:.272,sk:.333}],8460:[.666,.133,.72],8461:[.683,0,.778],8462:[.694,.011,.576,{sk:-.0278}],8463:[.695,.013,.54],8464:[.717,.314,1.052,{ic:.081,sk:.417}],8465:[.686,.026,.554],8466:[.717,.017,.874,{ic:.161,sk:.306}],8467:[.705,.02,.417,{sk:.111}],8469:[.683,.02,.722],8472:[.453,.216,.636,{sk:.111}],8473:[.683,0,.611],8474:[.701,.181,.778],8475:[.717,.017,.85,{sk:.194}],8476:[.686,.026,.828],8477:[.683,0,.722],8484:[.683,0,.667],8486:[.704,0,.722],8487:[.684,.022,.722],8488:[.729,.139,.602],8492:[.708,.028,.908,{sk:.194}],8493:[.685,.024,.613],8496:[.707,.008,.562,{ic:.156,sk:.139}],8497:[.735,.036,.895,{ic:.095,sk:.222}],8498:[.695,0,.556],8499:[.721,.05,1.08,{ic:.136,sk:.444}],8501:[.694,0,.611],8502:[.763,.021,.667],8503:[.764,.043,.444],8504:[.764,.043,.667],8513:[.705,.023,.639],8592:[.511,.011,1],8593:[.694,.193,.5],8594:[.511,.011,1],8595:[.694,.194,.5],8596:[.511,.011,1],8597:[.772,.272,.5],8598:[.72,.195,1],8599:[.72,.195,1],8600:[.695,.22,1],8601:[.695,.22,1],8602:[.437,-.06,1],8603:[.437,-.06,1],8606:[.417,-.083,1],8608:[.417,-.083,1],8610:[.417,-.083,1.111],8611:[.417,-.083,1.111],8614:[.511,.011,1],8617:[.511,.011,1.126],8618:[.511,.011,1.126],8619:[.575,.041,1],8620:[.575,.041,1],8621:[.417,-.083,1.389],8622:[.437,-.06,1],8624:[.722,0,.5],8625:[.722,0,.5],8630:[.461,0,1],8631:[.46,0,1],8634:[.65,.083,.778],8635:[.65,.083,.778],8636:[.511,-.23,1],8637:[.27,.011,1],8638:[.694,.194,.417],8639:[.694,.194,.417],8640:[.511,-.23,1],8641:[.27,.011,1],8642:[.694,.194,.417],8643:[.694,.194,.417],8644:[.667,0,1],8646:[.667,0,1],8647:[.583,.083,1],8648:[.694,.193,.833],8649:[.583,.083,1],8650:[.694,.194,.833],8651:[.514,.014,1],8652:[.671,.011,1],8653:[.534,.035,1],8654:[.534,.037,1],8655:[.534,.035,1],8656:[.525,.024,1],8657:[.694,.194,.611],8658:[.525,.024,1],8659:[.694,.194,.611],8660:[.526,.025,1],8661:[.772,.272,.611],8666:[.611,.111,1],8667:[.611,.111,1],8669:[.417,-.083,1],8672:[.437,-.064,1.334],8674:[.437,-.064,1.334],8704:[.694,.022,.556],8705:[.846,.021,.5],8706:[.715,.022,.531,{sk:.0833}],8707:[.694,0,.556],8708:[.716,.215,.556],8709:[.772,.078,.5],8710:[.716,0,.833],8711:[.683,.033,.833],8712:[.54,.04,.667],8713:[.716,.215,.667],8715:[.54,.04,.667],8716:[.716,.215,.667],8717:[.44,0,.429],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8722:[.583,.082,.778],8723:[.5,.166,.778],8724:[.766,.093,.778],8725:[.75,.25,.5],8726:[.43,.023,.778],8727:[.465,-.035,.5],8728:[.444,-.055,.5],8729:[.444,-.055,.5],8730:[.8,.2,.833],8733:[.442,.011,.778],8734:[.442,.011,1],8736:[.694,0,.722],8737:[.714,.02,.722],8738:[.551,.051,.722],8739:[.75,.249,.278],8740:[.75,.252,.278],8741:[.75,.25,.5],8742:[.75,.25,.5],8743:[.598,.022,.667],8744:[.598,.022,.667],8745:[.598,.022,.667],8746:[.598,.022,.667],8747:[.716,.216,.417,{ic:.055}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8756:[.471,.082,.667],8757:[.471,.082,.667],8764:[.367,-.133,.778],8765:[.367,-.133,.778],8768:[.583,.083,.278],8769:[.467,-.032,.778],8770:[.463,-.034,.778],8771:[.464,-.036,.778],8772:[.716,.215,.778],8773:[.589,-.022,.778],8774:[.652,.155,.778],8775:[.652,.155,.778],8776:[.483,-.055,.778],8777:[.716,.215,.778],8778:[.579,.039,.778],8781:[.484,-.016,.778],8782:[.492,-.008,.778],8783:[.492,-.133,.778],8784:[.67,-.133,.778],8785:[.609,.108,.778],8786:[.601,.101,.778],8787:[.601,.102,.778],8790:[.367,-.133,.778],8791:[.721,-.133,.778],8796:[.859,-.133,.778],8800:[.716,.215,.778],8801:[.464,-.036,.778],8802:[.716,.215,.778],8804:[.636,.138,.778],8805:[.636,.138,.778],8806:[.753,.175,.778],8807:[.753,.175,.778],8808:[.752,.286,.778],8809:[.752,.286,.778],8810:[.568,.067,1],8811:[.567,.067,1],8812:[.75,.25,.5],8813:[.716,.215,.778],8814:[.708,.209,.778],8815:[.708,.209,.778],8816:[.801,.303,.778],8817:[.801,.303,.778],8818:[.732,.228,.778],8819:[.732,.228,.778],8820:[.732,.228,.778],8821:[.732,.228,.778],8822:[.681,.253,.778],8823:[.681,.253,.778],8824:[.716,.253,.778],8825:[.716,.253,.778],8826:[.539,.041,.778],8827:[.539,.041,.778],8828:[.58,.153,.778],8829:[.58,.154,.778],8830:[.732,.228,.778],8831:[.732,.228,.778],8832:[.705,.208,.778],8833:[.705,.208,.778],8834:[.54,.04,.778],8835:[.54,.04,.778],8836:[.716,.215,.778],8837:[.716,.215,.778],8838:[.636,.138,.778],8839:[.636,.138,.778],8840:[.801,.303,.778],8841:[.801,.303,.778],8842:[.635,.241,.778],8843:[.635,.241,.778],8846:[.598,.022,.667],8847:[.539,.041,.778],8848:[.539,.041,.778],8849:[.636,.138,.778],8850:[.636,.138,.778],8851:[.598,0,.667],8852:[.598,0,.667],8853:[.583,.083,.778],8854:[.583,.083,.778],8855:[.583,.083,.778],8856:[.583,.083,.778],8857:[.583,.083,.778],8858:[.582,.082,.778],8859:[.582,.082,.778],8861:[.582,.082,.778],8862:[.689,0,.778],8863:[.689,0,.778],8864:[.689,0,.778],8865:[.689,0,.778],8866:[.694,0,.611],8867:[.694,0,.611],8868:[.668,0,.778],8869:[.668,0,.778],8872:[.75,.249,.867],8873:[.694,0,.722],8874:[.694,0,.889],8876:[.695,0,.611],8877:[.695,0,.611],8878:[.695,0,.722],8879:[.695,0,.722],8882:[.539,.041,.778],8883:[.539,.041,.778],8884:[.636,.138,.778],8885:[.636,.138,.778],8888:[.408,-.092,1.111],8890:[.431,.212,.556],8891:[.716,0,.611],8892:[.716,0,.611],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8900:[.488,-.012,.5],8901:[.31,-.19,.278],8902:[.486,-.016,.5],8903:[.545,.044,.778],8904:[.505,.005,.9],8905:[.492,-.008,.778],8906:[.492,-.008,.778],8907:[.694,.022,.778],8908:[.694,.022,.778],8909:[.464,-.036,.778],8910:[.578,.021,.76],8911:[.578,.022,.76],8912:[.54,.04,.778],8913:[.54,.04,.778],8914:[.598,.022,.667],8915:[.598,.022,.667],8916:[.736,.022,.667],8918:[.541,.041,.778],8919:[.541,.041,.778],8920:[.568,.067,1.333],8921:[.568,.067,1.333],8922:[.886,.386,.778],8923:[.886,.386,.778],8926:[.734,0,.778],8927:[.734,0,.778],8928:[.801,.303,.778],8929:[.801,.303,.778],8930:[.716,.215,.778],8931:[.716,.215,.778],8934:[.73,.359,.778],8935:[.73,.359,.778],8936:[.73,.359,.778],8937:[.73,.359,.778],8938:[.706,.208,.778],8939:[.706,.208,.778],8940:[.802,.303,.778],8941:[.801,.303,.778],8942:[1.3,.03,.278],8943:[.31,-.19,1.172],8945:[1.52,-.1,1.282],8965:[.716,0,.611],8966:[.813,.097,.611],8968:[.75,.25,.444],8969:[.75,.25,.444],8970:[.75,.25,.444],8971:[.75,.25,.444],8988:[.694,-.306,.5],8989:[.694,-.306,.5],8990:[.366,.022,.5],8991:[.366,.022,.5],8994:[.388,-.122,1],8995:[.378,-.134,1],9001:[.75,.25,.389],9002:[.75,.25,.389],9136:[.744,.244,.412],9137:[.744,.244,.412],9168:[.602,0,.667],9416:[.709,.175,.902],9484:[.694,-.306,.5],9488:[.694,-.306,.5],9492:[.366,.022,.5],9496:[.366,.022,.5],9585:[.694,.195,.889],9586:[.694,.195,.889],9632:[.689,0,.778],9633:[.689,0,.778],9642:[.689,0,.778],9650:[.575,.02,.722],9651:[.716,0,.889],9652:[.575,.02,.722],9653:[.716,0,.889],9654:[.539,.041,.778],9656:[.539,.041,.778],9657:[.505,.005,.5],9660:[.576,.019,.722],9661:[.5,.215,.889],9662:[.576,.019,.722],9663:[.5,.215,.889],9664:[.539,.041,.778],9666:[.539,.041,.778],9667:[.505,.005,.5],9674:[.716,.132,.667],9711:[.715,.215,1],9723:[.689,0,.778],9724:[.689,0,.778],9733:[.694,.111,.944],9824:[.727,.13,.778],9825:[.716,.033,.778],9826:[.727,.162,.778],9827:[.726,.13,.778],9837:[.75,.022,.389],9838:[.734,.223,.389],9839:[.723,.223,.389],10003:[.706,.034,.833],10016:[.716,.022,.833],10072:[.75,.249,.278],10216:[.75,.25,.389],10217:[.75,.25,.389],10222:[.744,.244,.412],10223:[.744,.244,.412],10229:[.511,.011,1.609],10230:[.511,.011,1.638],10231:[.511,.011,1.859],10232:[.525,.024,1.609],10233:[.525,.024,1.638],10234:[.525,.024,1.858],10236:[.511,.011,1.638],10731:[.716,.132,.667],10744:[.716,.215,.778],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],10799:[.491,-.009,.778],10815:[.683,0,.75],10846:[.813,.097,.611],10877:[.636,.138,.778],10878:[.636,.138,.778],10885:[.762,.29,.778],10886:[.762,.29,.778],10887:[.635,.241,.778],10888:[.635,.241,.778],10889:[.761,.387,.778],10890:[.761,.387,.778],10891:[1.003,.463,.778],10892:[1.003,.463,.778],10901:[.636,.138,.778],10902:[.636,.138,.778],10927:[.636,.138,.778],10928:[.636,.138,.778],10933:[.752,.286,.778],10934:[.752,.286,.778],10935:[.761,.294,.778],10936:[.761,.294,.778],10937:[.761,.337,.778],10938:[.761,.337,.778],10949:[.753,.215,.778],10950:[.753,.215,.778],10955:[.783,.385,.778],10956:[.783,.385,.778],12296:[.75,.25,.389],12297:[.75,.25,.389],57350:[.43,.023,.222],57351:[.431,.024,.389],57352:[.605,.085,.778],57353:[.434,.006,.667,{ic:.067}],57356:[.752,.284,.778],57357:[.752,.284,.778],57358:[.919,.421,.778],57359:[.801,.303,.778],57360:[.801,.303,.778],57361:[.919,.421,.778],57366:[.828,.33,.778],57367:[.752,.332,.778],57368:[.828,.33,.778],57369:[.752,.333,.778],57370:[.634,.255,.778],57371:[.634,.254,.778],119808:[.698,0,.869],119809:[.686,0,.818],119810:[.697,.011,.831],119811:[.686,0,.882],119812:[.68,0,.756],119813:[.68,0,.724],119814:[.697,.01,.904],119815:[.686,0,.9],119816:[.686,0,.436],119817:[.686,.011,.594],119818:[.686,0,.901],119819:[.686,0,.692],119820:[.686,0,1.092],119821:[.686,0,.9],119822:[.696,.01,.864],119823:[.686,0,.786],119824:[.696,.193,.864],119825:[.686,.011,.862],119826:[.697,.011,.639],119827:[.675,0,.8],119828:[.686,.011,.885],119829:[.686,.007,.869],119830:[.686,.007,1.189],119831:[.686,0,.869],119832:[.686,0,.869],119833:[.686,0,.703],119834:[.453,.006,.559],119835:[.694,.006,.639],119836:[.453,.006,.511],119837:[.694,.006,.639],119838:[.452,.006,.527],119839:[.7,0,.351,{ic:.101}],119840:[.455,.201,.575],119841:[.694,0,.639],119842:[.695,0,.319],119843:[.695,.2,.351],119844:[.694,0,.607],119845:[.694,0,.319],119846:[.45,0,.958],119847:[.45,0,.639],119848:[.452,.005,.575],119849:[.45,.194,.639],119850:[.45,.194,.607],119851:[.45,0,.474],119852:[.453,.006,.454],119853:[.635,.005,.447],119854:[.45,.006,.639],119855:[.444,0,.607],119856:[.444,0,.831],119857:[.444,0,.607],119858:[.444,.2,.607],119859:[.444,0,.511],119860:[.716,0,.75,{sk:.139}],119861:[.683,0,.759,{sk:.0833}],119862:[.705,.022,.715,{sk:.0833}],119863:[.683,0,.828,{sk:.0556}],119864:[.68,0,.738,{sk:.0833}],119865:[.68,0,.643,{ic:.106,sk:.0833}],119866:[.705,.022,.786,{sk:.0833}],119867:[.683,0,.831,{ic:.057,sk:.0556}],119868:[.683,0,.44,{ic:.064,sk:.111}],119869:[.683,.022,.555,{ic:.078,sk:.167}],119870:[.683,0,.849,{sk:.0556}],119871:[.683,0,.681,{sk:.0278}],119872:[.683,0,.97,{ic:.081,sk:.0833}],119873:[.683,0,.803,{ic:.085,sk:.0833}],119874:[.704,.022,.763,{sk:.0833}],119875:[.683,0,.642,{ic:.109,sk:.0833}],119876:[.704,.194,.791,{sk:.0833}],119877:[.683,.021,.759,{sk:.0833}],119878:[.705,.022,.613,{sk:.0833}],119879:[.677,0,.584,{ic:.12,sk:.0833}],119880:[.683,.022,.683,{ic:.084,sk:.0278}],119881:[.683,.022,.583,{ic:.186}],119882:[.683,.022,.944,{ic:.104}],119883:[.683,0,.828,{sk:.0833}],119884:[.683,0,.581,{ic:.182}],119885:[.683,0,.683,{sk:.0833}],119886:[.441,.01,.529],119887:[.694,.011,.429],119888:[.442,.011,.433,{sk:.0556}],119889:[.694,.01,.52,{sk:.167}],119890:[.442,.011,.466,{sk:.0556}],119891:[.705,.205,.49,{ic:.06,sk:.167}],119892:[.442,.205,.477,{sk:.0278}],119893:[.694,.011,.576,{sk:-.0278}],119894:[.661,.011,.345],119895:[.661,.204,.412],119896:[.694,.011,.521],119897:[.694,.011,.298,{sk:.0833}],119898:[.442,.011,.878],119899:[.442,.011,.6],119900:[.441,.011,.485,{sk:.0556}],119901:[.442,.194,.503,{sk:.0833}],119902:[.442,.194,.446,{sk:.0833}],119903:[.442,.011,.451,{sk:.0556}],119904:[.442,.01,.469,{sk:.0556}],119905:[.626,.011,.361,{sk:.0833}],119906:[.442,.011,.572,{sk:.0278}],119907:[.443,.011,.485,{sk:.0278}],119908:[.443,.011,.716,{sk:.0833}],119909:[.442,.011,.572,{sk:.0278}],119910:[.442,.205,.49,{sk:.0556}],119911:[.442,.011,.465,{sk:.0556}],119912:[.711,0,.869,{sk:.16}],119913:[.686,0,.866,{sk:.0958}],119914:[.703,.017,.817,{sk:.0958}],119915:[.686,0,.938,{sk:.0639}],119916:[.68,0,.81,{sk:.0958}],119917:[.68,0,.689,{ic:.12,sk:.0958}],119918:[.703,.016,.887,{sk:.0958}],119919:[.686,0,.982,{sk:.0639}],119920:[.686,0,.511,{ic:.062,sk:.128}],119921:[.686,.017,.631,{ic:.063,sk:.192}],119922:[.686,0,.971,{sk:.0639}],119923:[.686,0,.756,{sk:.0319}],119924:[.686,0,1.142,{ic:.077,sk:.0958}],119925:[.686,0,.95,{ic:.077,sk:.0958}],119926:[.703,.017,.837,{sk:.0958}],119927:[.686,0,.723,{ic:.124,sk:.0958}],119928:[.703,.194,.869,{sk:.0958}],119929:[.686,.017,.872,{sk:.0958}],119930:[.703,.017,.693,{sk:.0958}],119931:[.675,0,.637,{ic:.135,sk:.0958}],119932:[.686,.016,.8,{ic:.077,sk:.0319}],119933:[.686,.016,.678,{ic:.208}],119934:[.686,.017,1.093,{ic:.114}],119935:[.686,0,.947,{sk:.0958}],119936:[.686,0,.675,{ic:.201}],119937:[.686,0,.773,{sk:.0958}],119938:[.452,.008,.633],119939:[.694,.008,.521],119940:[.451,.008,.513,{sk:.0639}],119941:[.694,.008,.61,{sk:.192}],119942:[.452,.008,.554,{sk:.0639}],119943:[.701,.201,.568,{ic:.056,sk:.192}],119944:[.452,.202,.545,{sk:.0319}],119945:[.694,.008,.668,{sk:-.0319}],119946:[.694,.008,.405],119947:[.694,.202,.471],119948:[.694,.008,.604],119949:[.694,.008,.348,{sk:.0958}],119950:[.452,.008,1.032],119951:[.452,.008,.713],119952:[.452,.008,.585,{sk:.0639}],119953:[.452,.194,.601,{sk:.0958}],119954:[.452,.194,.542,{sk:.0958}],119955:[.452,.008,.529,{sk:.0639}],119956:[.451,.008,.531,{sk:.0639}],119957:[.643,.007,.415,{sk:.0958}],119958:[.452,.008,.681,{sk:.0319}],119959:[.453,.008,.567,{sk:.0319}],119960:[.453,.008,.831,{sk:.0958}],119961:[.452,.008,.659,{sk:.0319}],119962:[.452,.202,.59,{sk:.0639}],119963:[.452,.008,.555,{sk:.0639}],119964:[.717,.008,.803,{ic:.213,sk:.389}],119965:[.708,.028,.908,{sk:.194}],119966:[.728,.026,.666,{ic:.153,sk:.278}],119967:[.708,.031,.774,{ic:.081,sk:.111}],119968:[.707,.008,.562,{ic:.156,sk:.139}],119969:[.735,.036,.895,{ic:.095,sk:.222}],119970:[.717,.037,.61,{ic:.128,sk:.25}],119971:[.717,.036,.969,{ic:.272,sk:.333}],119972:[.717,.017,.809,{ic:.137,sk:.333}],119973:[.717,.314,1.052,{ic:.081,sk:.417}],119974:[.717,.037,.914,{ic:.29,sk:.361}],119975:[.717,.017,.874,{ic:.161,sk:.306}],119976:[.721,.05,1.08,{ic:.136,sk:.444}],119977:[.726,.036,.902,{ic:.306,sk:.389}],119978:[.707,.008,.738,{ic:.067,sk:.167}],119979:[.716,.037,1.013,{sk:.222}],119980:[.717,.017,.883,{sk:.278}],119981:[.717,.017,.85,{sk:.194}],119982:[.708,.036,.868,{ic:.148,sk:.333}],119983:[.735,.037,.747,{ic:.249,sk:.222}],119984:[.717,.017,.8,{ic:.16,sk:.25}],119985:[.717,.017,.622,{ic:.228,sk:.222}],119986:[.717,.017,.805,{ic:.221,sk:.25}],119987:[.717,.017,.944,{ic:.187,sk:.278}],119988:[.716,.017,.71,{ic:.249,sk:.194}],119989:[.717,.016,.821,{ic:.211,sk:.306}],119990:[.441,.01,.529],119991:[.694,.011,.429],119992:[.442,.011,.433,{sk:.0556}],119993:[.694,.01,.52,{sk:.167}],119994:[.442,.011,.466,{sk:.0556}],119995:[.705,.205,.49,{ic:.06,sk:.167}],119996:[.442,.205,.477,{sk:.0278}],119997:[.694,.011,.576,{sk:-.0278}],119998:[.661,.011,.345],119999:[.661,.204,.412],12e4:[.694,.011,.521],120001:[.694,.011,.298,{sk:.0833}],120002:[.442,.011,.878],120003:[.442,.011,.6],120004:[.441,.011,.485,{sk:.0556}],120005:[.442,.194,.503,{sk:.0833}],120006:[.442,.194,.446,{sk:.0833}],120007:[.442,.011,.451,{sk:.0556}],120008:[.442,.01,.469,{sk:.0556}],120009:[.626,.011,.361,{sk:.0833}],120010:[.442,.011,.572,{sk:.0278}],120011:[.443,.011,.485,{sk:.0278}],120012:[.443,.011,.716,{sk:.0833}],120013:[.442,.011,.572,{sk:.0278}],120014:[.442,.205,.49,{sk:.0556}],120015:[.442,.011,.465,{sk:.0556}],120016:[.717,.008,.803,{ic:.213,sk:.389}],120017:[.708,.028,.908,{sk:.194}],120018:[.728,.026,.666,{ic:.153,sk:.278}],120019:[.708,.031,.774,{ic:.081,sk:.111}],120020:[.707,.008,.562,{ic:.156,sk:.139}],120021:[.735,.036,.895,{ic:.095,sk:.222}],120022:[.717,.037,.61,{ic:.128,sk:.25}],120023:[.717,.036,.969,{ic:.272,sk:.333}],120024:[.717,.017,.809,{ic:.137,sk:.333}],120025:[.717,.314,1.052,{ic:.081,sk:.417}],120026:[.717,.037,.914,{ic:.29,sk:.361}],120027:[.717,.017,.874,{ic:.161,sk:.306}],120028:[.721,.05,1.08,{ic:.136,sk:.444}],120029:[.726,.036,.902,{ic:.306,sk:.389}],120030:[.707,.008,.738,{ic:.067,sk:.167}],120031:[.716,.037,1.013,{sk:.222}],120032:[.717,.017,.883,{sk:.278}],120033:[.717,.017,.85,{sk:.194}],120034:[.708,.036,.868,{ic:.148,sk:.333}],120035:[.735,.037,.747,{ic:.249,sk:.222}],120036:[.717,.017,.8,{ic:.16,sk:.25}],120037:[.717,.017,.622,{ic:.228,sk:.222}],120038:[.717,.017,.805,{ic:.221,sk:.25}],120039:[.717,.017,.944,{ic:.187,sk:.278}],120040:[.716,.017,.71,{ic:.249,sk:.194}],120041:[.717,.016,.821,{ic:.211,sk:.306}],120042:[.452,.008,.633],120043:[.694,.008,.521],120044:[.451,.008,.513,{sk:.0639}],120045:[.694,.008,.61,{sk:.192}],120046:[.452,.008,.554,{sk:.0639}],120047:[.701,.201,.568,{ic:.056,sk:.192}],120048:[.452,.202,.545,{sk:.0319}],120049:[.694,.008,.668,{sk:-.0319}],120050:[.694,.008,.405],120051:[.694,.202,.471],120052:[.694,.008,.604],120053:[.694,.008,.348,{sk:.0958}],120054:[.452,.008,1.032],120055:[.452,.008,.713],120056:[.452,.008,.585,{sk:.0639}],120057:[.452,.194,.601,{sk:.0958}],120058:[.452,.194,.542,{sk:.0958}],120059:[.452,.008,.529,{sk:.0639}],120060:[.451,.008,.531,{sk:.0639}],120061:[.643,.007,.415,{sk:.0958}],120062:[.452,.008,.681,{sk:.0319}],120063:[.453,.008,.567,{sk:.0319}],120064:[.453,.008,.831,{sk:.0958}],120065:[.452,.008,.659,{sk:.0319}],120066:[.452,.202,.59,{sk:.0639}],120067:[.452,.008,.555,{sk:.0639}],120068:[.696,.026,.718],120069:[.691,.027,.884],120070:[.685,.024,.613],120071:[.685,.027,.832],120072:[.685,.024,.663],120073:[.686,.153,.611],120074:[.69,.026,.785],120075:[.666,.133,.72],120076:[.686,.026,.554],120077:[.686,.139,.552],120078:[.68,.027,.668],120079:[.686,.026,.666],120080:[.692,.027,1.05],120081:[.686,.025,.832],120082:[.729,.027,.827],120083:[.692,.218,.828],120084:[.729,.069,.827],120085:[.686,.026,.828],120086:[.692,.027,.829],120087:[.701,.027,.669],120088:[.697,.027,.646],120089:[.686,.026,.831],120090:[.686,.027,1.046],120091:[.688,.027,.719],120092:[.686,.218,.833],120093:[.729,.139,.602],120094:[.47,.035,.5],120095:[.685,.031,.513],120096:[.466,.029,.389],120097:[.609,.033,.499],120098:[.467,.03,.401],120099:[.681,.221,.326],120100:[.47,.209,.504],120101:[.688,.205,.521],120102:[.673,.02,.279],120103:[.672,.208,.281],120104:[.689,.025,.389],120105:[.685,.02,.28],120106:[.475,.026,.767],120107:[.475,.022,.527],120108:[.48,.028,.489],120109:[.541,.212,.5],120110:[.479,.219,.489],120111:[.474,.021,.389],120112:[.478,.029,.443],120113:[.64,.02,.333],120114:[.474,.023,.517],120115:[.53,.028,.512],120116:[.532,.028,.774],120117:[.472,.188,.389],120118:[.528,.218,.499],120119:[.471,.214,.391],120120:[.701,0,.722],120121:[.683,0,.667],120122:[.702,.019,.722],120123:[.683,0,.722],120124:[.683,0,.667],120125:[.683,0,.611],120126:[.702,.019,.778],120127:[.683,0,.778],120128:[.683,0,.389],120129:[.683,.077,.5],120130:[.683,0,.778],120131:[.683,0,.667],120132:[.683,0,.944],120133:[.683,.02,.722],120134:[.701,.019,.778],120135:[.683,0,.611],120136:[.701,.181,.778],120137:[.683,0,.722],120138:[.702,.012,.556],120139:[.683,0,.667],120140:[.683,.019,.722],120141:[.683,.02,.722],120142:[.683,.019,1],120143:[.683,0,.722],120144:[.683,0,.722],120145:[.683,0,.667],120146:[.453,.006,.559],120147:[.694,.006,.639],120148:[.453,.006,.511],120149:[.694,.006,.639],120150:[.452,.006,.527],120151:[.7,0,.351,{ic:.101}],120152:[.455,.201,.575],120153:[.694,0,.639],120154:[.695,0,.319],120155:[.695,.2,.351],120156:[.683,0,.556],120157:[.694,0,.319],120158:[.45,0,.958],120159:[.45,0,.639],120160:[.452,.005,.575],120161:[.45,.194,.639],120162:[.45,.194,.607],120163:[.45,0,.474],120164:[.453,.006,.454],120165:[.635,.005,.447],120166:[.45,.006,.639],120167:[.444,0,.607],120168:[.444,0,.831],120169:[.444,0,.607],120170:[.444,.2,.607],120171:[.444,0,.511],120172:[.686,.031,.847],120173:[.684,.031,1.044],120174:[.676,.032,.723],120175:[.683,.029,.982],120176:[.686,.029,.783],120177:[.684,.146,.722],120178:[.687,.029,.927],120179:[.683,.126,.851],120180:[.681,.025,.655],120181:[.68,.141,.652],120182:[.681,.026,.789],120183:[.683,.028,.786],120184:[.683,.032,1.239],120185:[.679,.03,.983],120186:[.726,.03,.976],120187:[.688,.223,.977],120188:[.726,.083,.976],120189:[.688,.028,.978],120190:[.685,.031,.978],120191:[.686,.03,.79],120192:[.688,.039,.851],120193:[.685,.029,.982],120194:[.683,.03,1.235],120195:[.681,.035,.849],120196:[.688,.214,.984],120197:[.677,.148,.711],120198:[.472,.032,.603],120199:[.69,.032,.59],120200:[.473,.026,.464],120201:[.632,.028,.589],120202:[.471,.027,.472],120203:[.687,.222,.388],120204:[.472,.208,.595],120205:[.687,.207,.615],120206:[.686,.025,.331],120207:[.682,.203,.332],120208:[.682,.025,.464],120209:[.681,.024,.337],120210:[.476,.031,.921],120211:[.473,.028,.654],120212:[.482,.034,.609],120213:[.557,.207,.604],120214:[.485,.211,.596],120215:[.472,.026,.46],120216:[.479,.034,.523],120217:[.648,.027,.393],120218:[.472,.032,.589],120219:[.546,.027,.604],120220:[.549,.032,.918],120221:[.471,.188,.459],120222:[.557,.221,.589],120223:[.471,.214,.461],120224:[.694,0,.667],120225:[.694,0,.667],120226:[.705,.011,.639],120227:[.694,0,.722],120228:[.691,0,.597],120229:[.691,0,.569],120230:[.704,.011,.667],120231:[.694,0,.708],120232:[.694,0,.278],120233:[.694,.022,.472],120234:[.694,0,.694],120235:[.694,0,.542],120236:[.694,0,.875],120237:[.694,0,.708],120238:[.715,.022,.736],120239:[.694,0,.639],120240:[.715,.125,.736],120241:[.694,0,.646],120242:[.716,.022,.556],120243:[.688,0,.681],120244:[.694,.022,.688],120245:[.694,0,.667],120246:[.694,0,.944],120247:[.694,0,.667],120248:[.694,0,.667],120249:[.694,0,.611],120250:[.46,.01,.481],120251:[.694,.011,.517],120252:[.46,.01,.444],120253:[.694,.01,.517],120254:[.461,.01,.444],120255:[.705,0,.306],120256:[.455,.206,.5],120257:[.694,0,.517],120258:[.68,0,.239],120259:[.68,.205,.267],120260:[.694,0,.489],120261:[.694,0,.239],120262:[.455,0,.794],120263:[.455,0,.517],120264:[.46,.01,.5],120265:[.455,.194,.517],120266:[.455,.194,.517],120267:[.455,0,.342],120268:[.46,.01,.383],120269:[.571,.01,.361],120270:[.444,.01,.517],120271:[.444,0,.461],120272:[.444,0,.683],120273:[.444,0,.461],120274:[.444,.204,.461],120275:[.444,0,.435],120276:[.694,0,.733],120277:[.694,0,.733],120278:[.704,.011,.703],120279:[.694,0,.794],120280:[.691,0,.642],120281:[.691,0,.611],120282:[.705,.011,.733],120283:[.694,0,.794],120284:[.694,0,.331],120285:[.694,.022,.519],120286:[.694,0,.764],120287:[.694,0,.581],120288:[.694,0,.978],120289:[.694,0,.794],120290:[.716,.022,.794],120291:[.694,0,.703],120292:[.716,.106,.794],120293:[.694,0,.703],120294:[.716,.022,.611],120295:[.688,0,.733],120296:[.694,.022,.764],120297:[.694,0,.733],120298:[.694,0,1.039],120299:[.694,0,.733],120300:[.694,0,.733],120301:[.694,0,.672],120302:[.475,.011,.525],120303:[.694,.01,.561],120304:[.475,.011,.489],120305:[.694,.011,.561],120306:[.474,.01,.511],120307:[.705,0,.336],120308:[.469,.206,.55],120309:[.694,0,.561],120310:[.695,0,.256],120311:[.695,.205,.286],120312:[.694,0,.531],120313:[.694,0,.256],120314:[.469,0,.867],120315:[.468,0,.561],120316:[.474,.011,.55],120317:[.469,.194,.561],120318:[.469,.194,.561],120319:[.469,0,.372],120320:[.474,.01,.422],120321:[.589,.01,.404],120322:[.458,.011,.561],120323:[.458,0,.5],120324:[.458,0,.744],120325:[.458,0,.5],120326:[.458,.205,.5],120327:[.458,0,.476],120328:[.694,0,.667],120329:[.694,0,.667],120330:[.705,.01,.639,{ic:.08}],120331:[.694,0,.722],120332:[.691,0,.597,{ic:.091}],120333:[.691,0,.569,{ic:.104}],120334:[.705,.011,.667,{ic:.063}],120335:[.694,0,.708,{ic:.06}],120336:[.694,0,.278,{ic:.06}],120337:[.694,.022,.472,{ic:.063}],120338:[.694,0,.694,{ic:.091}],120339:[.694,0,.542],120340:[.694,0,.875,{ic:.054}],120341:[.694,0,.708,{ic:.058}],120342:[.716,.022,.736],120343:[.694,0,.639,{ic:.051}],120344:[.716,.125,.736],120345:[.694,0,.646,{ic:.052}],120346:[.716,.022,.556,{ic:.053}],120347:[.688,0,.681,{ic:.109}],120348:[.694,.022,.688,{ic:.059}],120349:[.694,0,.667,{ic:.132}],120350:[.694,0,.944,{ic:.132}],120351:[.694,0,.667,{ic:.091}],120352:[.694,0,.667,{ic:.143}],120353:[.694,0,.611,{ic:.091}],120354:[.461,.01,.481],120355:[.694,.011,.517],120356:[.46,.011,.444,{ic:.055}],120357:[.694,.01,.517,{ic:.071}],120358:[.46,.011,.444],120359:[.705,0,.306,{ic:.188}],120360:[.455,.206,.5,{ic:.068}],120361:[.694,0,.517],120362:[.68,0,.239,{ic:.076}],120363:[.68,.204,.267,{ic:.069}],120364:[.694,0,.489,{ic:.054}],120365:[.694,0,.239,{ic:.072}],120366:[.455,0,.794],120367:[.454,0,.517],120368:[.461,.011,.5],120369:[.455,.194,.517],120370:[.455,.194,.517],120371:[.455,0,.342,{ic:.082}],120372:[.461,.011,.383,{ic:.053}],120373:[.571,.011,.361],120374:[.444,.01,.517],120375:[.444,0,.461,{ic:.079}],120376:[.444,0,.683,{ic:.079}],120377:[.444,0,.461,{ic:.076}],120378:[.444,.205,.461,{ic:.079}],120379:[.444,0,.435,{ic:.059}],120380:[.694,0,.667],120381:[.694,0,.667],120382:[.705,.01,.639,{ic:.08}],120383:[.694,0,.722],120384:[.691,0,.597,{ic:.091}],120385:[.691,0,.569,{ic:.104}],120386:[.705,.011,.667,{ic:.063}],120387:[.694,0,.708,{ic:.06}],120388:[.694,0,.278,{ic:.06}],120389:[.694,.022,.472,{ic:.063}],120390:[.694,0,.694,{ic:.091}],120391:[.694,0,.542],120392:[.694,0,.875,{ic:.054}],120393:[.694,0,.708,{ic:.058}],120394:[.716,.022,.736],120395:[.694,0,.639,{ic:.051}],120396:[.716,.125,.736],120397:[.694,0,.646,{ic:.052}],120398:[.716,.022,.556,{ic:.053}],120399:[.688,0,.681,{ic:.109}],120400:[.694,.022,.688,{ic:.059}],120401:[.694,0,.667,{ic:.132}],120402:[.694,0,.944,{ic:.132}],120403:[.694,0,.667,{ic:.091}],120404:[.694,0,.667,{ic:.143}],120405:[.694,0,.611,{ic:.091}],120406:[.461,.01,.481],120407:[.694,.011,.517],120408:[.46,.011,.444,{ic:.055}],120409:[.694,.01,.517,{ic:.071}],120410:[.46,.011,.444],120411:[.705,0,.306,{ic:.188}],120412:[.455,.206,.5,{ic:.068}],120413:[.694,0,.517],120414:[.68,0,.239,{ic:.076}],120415:[.68,.204,.267,{ic:.069}],120416:[.694,0,.489,{ic:.054}],120417:[.694,0,.239,{ic:.072}],120418:[.455,0,.794],120419:[.454,0,.517],120420:[.461,.011,.5],120421:[.455,.194,.517],120422:[.455,.194,.517],120423:[.455,0,.342,{ic:.082}],120424:[.461,.011,.383,{ic:.053}],120425:[.571,.011,.361],120426:[.444,.01,.517],120427:[.444,0,.461,{ic:.079}],120428:[.444,0,.683,{ic:.079}],120429:[.444,0,.461,{ic:.076}],120430:[.444,.205,.461,{ic:.079}],120431:[.444,0,.435,{ic:.059}],120432:[.623,0,.525],120433:[.611,0,.525],120434:[.622,.011,.525],120435:[.611,0,.525],120436:[.611,0,.525],120437:[.611,0,.525],120438:[.622,.011,.525],120439:[.611,0,.525],120440:[.611,0,.525],120441:[.611,.011,.525],120442:[.611,0,.525],120443:[.611,0,.525],120444:[.611,0,.525],120445:[.611,0,.525],120446:[.621,.01,.525],120447:[.611,0,.525],120448:[.621,.138,.525],120449:[.611,.011,.525],120450:[.622,.011,.525],120451:[.611,0,.525],120452:[.611,.011,.525],120453:[.611,.007,.525],120454:[.611,.007,.525],120455:[.611,0,.525],120456:[.611,0,.525],120457:[.611,0,.525],120458:[.439,.006,.525],120459:[.611,.006,.525],120460:[.44,.006,.525],120461:[.611,.006,.525],120462:[.44,.006,.525],120463:[.617,0,.525],120464:[.442,.229,.525],120465:[.611,0,.525],120466:[.612,0,.525],120467:[.612,.228,.525],120468:[.611,0,.525],120469:[.611,0,.525],120470:[.436,0,.525],120471:[.436,0,.525],120472:[.44,.006,.525],120473:[.437,.221,.525],120474:[.437,.221,.525],120475:[.437,0,.525],120476:[.44,.006,.525],120477:[.554,.006,.525],120478:[.431,.005,.525],120479:[.431,0,.525],120480:[.431,0,.525],120481:[.431,0,.525],120482:[.431,.228,.525],120483:[.431,0,.525],120484:[.441,.01,.307],120485:[.442,.204,.332],120488:[.698,0,.869],120489:[.686,0,.818],120490:[.68,0,.692],120491:[.698,0,.958],120492:[.68,0,.756],120493:[.686,0,.703],120494:[.686,0,.9],120495:[.696,.01,.894],120496:[.686,0,.436],120497:[.686,0,.901],120498:[.698,0,.806],120499:[.686,0,1.092],120500:[.686,0,.9],120501:[.675,0,.767],120502:[.696,.01,.864],120503:[.68,0,.9],120504:[.686,0,.786],120505:[.696,.01,.894],120506:[.686,0,.831],120507:[.675,0,.8],120508:[.697,0,.894],120509:[.686,0,.831],120510:[.686,0,.869],120511:[.686,0,.894],120512:[.696,0,.831],120513:[.686,.024,.958],120514:[.452,.008,.761,{sk:.0319}],120515:[.701,.194,.66,{sk:.0958}],120516:[.451,.211,.59],120517:[.725,.008,.522,{sk:.0639}],120518:[.461,.017,.529,{sk:.0958}],120519:[.711,.202,.508,{sk:.0958}],120520:[.452,.211,.6,{sk:.0639}],120521:[.702,.008,.562,{sk:.0958}],120522:[.452,.008,.412,{sk:.0639}],120523:[.452,.008,.668],120524:[.694,.013,.671],120525:[.452,.211,.708,{sk:.0319}],120526:[.452,0,.577,{sk:.0319}],120527:[.711,.201,.508,{sk:.128}],120528:[.452,.008,.585,{sk:.0639}],120529:[.444,.008,.682],120530:[.451,.211,.612,{sk:.0958}],120531:[.451,.105,.424,{sk:.0958}],120532:[.444,.008,.686],120533:[.444,.013,.521,{ic:.089,sk:.0319}],120534:[.453,.008,.631,{sk:.0319}],120535:[.452,.216,.747,{sk:.0958}],120536:[.452,.201,.718,{sk:.0639}],120537:[.694,.202,.758,{sk:.128}],120538:[.453,.008,.718],120539:[.71,.017,.628,{sk:.0958}],120540:[.444,.007,.483,{sk:.0639}],120541:[.701,.008,.692,{sk:.0958}],120542:[.434,.006,.667,{ic:.067}],120543:[.694,.202,.712,{sk:.0958}],120544:[.451,.194,.612,{sk:.0958}],120545:[.444,.008,.975],120546:[.716,0,.75,{sk:.139}],120547:[.683,0,.759,{sk:.0833}],120548:[.68,0,.615,{ic:.106,sk:.0833}],120549:[.716,0,.833,{sk:.167}],120550:[.68,0,.738,{sk:.0833}],120551:[.683,0,.683,{sk:.0833}],120552:[.683,0,.831,{ic:.057,sk:.0556}],120553:[.704,.022,.763,{sk:.0833}],120554:[.683,0,.44,{ic:.064,sk:.111}],120555:[.683,0,.849,{sk:.0556}],120556:[.716,0,.694,{sk:.167}],120557:[.683,0,.97,{ic:.081,sk:.0833}],120558:[.683,0,.803,{ic:.085,sk:.0833}],120559:[.677,0,.742,{sk:.0833}],120560:[.704,.022,.763,{sk:.0833}],120561:[.68,0,.831,{ic:.056,sk:.0556}],120562:[.683,0,.642,{ic:.109,sk:.0833}],120563:[.704,.022,.763,{sk:.0833}],120564:[.683,0,.78,{sk:.0833}],120565:[.677,0,.584,{ic:.12,sk:.0833}],120566:[.705,0,.583,{ic:.117,sk:.0556}],120567:[.683,0,.667,{sk:.0833}],120568:[.683,0,.828,{sk:.0833}],120569:[.683,0,.612,{ic:.08,sk:.0556}],120570:[.704,0,.772,{sk:.0833}],120571:[.683,.033,.833],120572:[.442,.011,.64,{sk:.0278}],120573:[.705,.194,.566,{sk:.0833}],120574:[.441,.216,.518],120575:[.717,.01,.444,{sk:.0556}],120576:[.452,.022,.466,{sk:.0833}],120577:[.704,.204,.438,{sk:.0833}],120578:[.442,.216,.497,{sk:.0556}],120579:[.705,.01,.469,{sk:.0833}],120580:[.442,.01,.354,{sk:.0556}],120581:[.442,.011,.576],120582:[.694,.012,.583],120583:[.442,.216,.603,{sk:.0278}],120584:[.442,0,.494,{sk:.0278}],120585:[.704,.205,.438,{sk:.111}],120586:[.441,.011,.485,{sk:.0556}],120587:[.431,.011,.57],120588:[.442,.216,.517,{sk:.0833}],120589:[.442,.107,.363,{sk:.0833}],120590:[.431,.011,.571],120591:[.431,.013,.437,{ic:.08,sk:.0278}],120592:[.443,.01,.54,{sk:.0278}],120593:[.442,.218,.654,{sk:.0833}],120594:[.442,.204,.626,{sk:.0556}],120595:[.694,.205,.651,{sk:.111}],120596:[.443,.011,.622],120597:[.715,.022,.531,{sk:.0833}],120598:[.431,.011,.406,{sk:.0556}],120599:[.705,.011,.591,{sk:.0833}],120600:[.434,.006,.667,{ic:.067}],120601:[.694,.205,.596,{sk:.0833}],120602:[.442,.194,.517,{sk:.0833}],120603:[.431,.01,.828],120604:[.711,0,.869,{sk:.16}],120605:[.686,0,.866,{sk:.0958}],120606:[.68,0,.657,{ic:.12,sk:.0958}],120607:[.711,0,.958,{sk:.192}],120608:[.68,0,.81,{sk:.0958}],120609:[.686,0,.773,{sk:.0958}],120610:[.686,0,.982,{sk:.0639}],120611:[.702,.017,.867,{sk:.0958}],120612:[.686,0,.511,{ic:.062,sk:.128}],120613:[.686,0,.971,{sk:.0639}],120614:[.711,0,.806,{sk:.192}],120615:[.686,0,1.142,{ic:.077,sk:.0958}],120616:[.686,0,.95,{ic:.077,sk:.0958}],120617:[.675,0,.841,{sk:.0958}],120618:[.703,.017,.837,{sk:.0958}],120619:[.68,0,.982,{sk:.0639}],120620:[.686,0,.723,{ic:.124,sk:.0958}],120621:[.702,.017,.867,{sk:.0958}],120622:[.686,0,.885,{sk:.0958}],120623:[.675,0,.637,{ic:.135,sk:.0958}],120624:[.703,0,.671,{ic:.131,sk:.0639}],120625:[.686,0,.767,{sk:.0958}],120626:[.686,0,.947,{sk:.0958}],120627:[.686,0,.714,{ic:.076,sk:.0639}],120628:[.703,0,.879,{sk:.0958}],120629:[.683,.033,.833],120630:[.452,.008,.761,{sk:.0319}],120631:[.701,.194,.66,{sk:.0958}],120632:[.451,.211,.59],120633:[.725,.008,.522,{sk:.0639}],120634:[.461,.017,.529,{sk:.0958}],120635:[.711,.202,.508,{sk:.0958}],120636:[.452,.211,.6,{sk:.0639}],120637:[.702,.008,.562,{sk:.0958}],120638:[.452,.008,.412,{sk:.0639}],120639:[.452,.008,.668],120640:[.694,.013,.671],120641:[.452,.211,.708,{sk:.0319}],120642:[.452,0,.577,{sk:.0319}],120643:[.711,.201,.508,{sk:.128}],120644:[.452,.008,.585,{sk:.0639}],120645:[.444,.008,.682],120646:[.451,.211,.612,{sk:.0958}],120647:[.451,.105,.424,{sk:.0958}],120648:[.444,.008,.686],120649:[.444,.013,.521,{ic:.089,sk:.0319}],120650:[.453,.008,.631,{sk:.0319}],120651:[.452,.216,.747,{sk:.0958}],120652:[.452,.201,.718,{sk:.0639}],120653:[.694,.202,.758,{sk:.128}],120654:[.453,.008,.718],120655:[.715,.022,.531,{sk:.0833}],120656:[.444,.007,.483,{sk:.0639}],120657:[.701,.008,.692,{sk:.0958}],120658:[.434,.006,.667,{ic:.067}],120659:[.694,.202,.712,{sk:.0958}],120660:[.451,.194,.612,{sk:.0958}],120661:[.444,.008,.975],120662:[.694,0,.733],120663:[.694,0,.733],120664:[.691,0,.581],120665:[.694,0,.917],120666:[.691,0,.642],120667:[.694,0,.672],120668:[.694,0,.794],120669:[.716,.022,.856],120670:[.694,0,.331],120671:[.694,0,.764],120672:[.694,0,.672],120673:[.694,0,.978],120674:[.694,0,.794],120675:[.688,0,.733],120676:[.716,.022,.794],120677:[.691,0,.794],120678:[.694,0,.703],120679:[.716,.022,.856],120680:[.694,0,.794],120681:[.688,0,.733],120682:[.715,0,.856],120683:[.694,0,.794],120684:[.694,0,.733],120685:[.694,0,.856],120686:[.716,0,.794],120687:[.683,.033,.833],120688:[.452,.008,.761,{sk:.0319}],120689:[.701,.194,.66,{sk:.0958}],120690:[.451,.211,.59],120691:[.725,.008,.522,{sk:.0639}],120692:[.461,.017,.529,{sk:.0958}],120693:[.711,.202,.508,{sk:.0958}],120694:[.452,.211,.6,{sk:.0639}],120695:[.702,.008,.562,{sk:.0958}],120696:[.452,.008,.412,{sk:.0639}],120697:[.452,.008,.668],120698:[.694,.013,.671],120699:[.452,.211,.708,{sk:.0319}],120700:[.452,0,.577,{sk:.0319}],120701:[.711,.201,.508,{sk:.128}],120702:[.452,.008,.585,{sk:.0639}],120703:[.444,.008,.682],120704:[.451,.211,.612,{sk:.0958}],120705:[.451,.105,.424,{sk:.0958}],120706:[.444,.008,.686],120707:[.444,.013,.521,{ic:.089,sk:.0319}],120708:[.453,.008,.631,{sk:.0319}],120709:[.452,.216,.747,{sk:.0958}],120710:[.452,.201,.718,{sk:.0639}],120711:[.694,.202,.758,{sk:.128}],120712:[.453,.008,.718],120713:[.715,.022,.531,{sk:.0833}],120714:[.444,.007,.483,{sk:.0639}],120715:[.701,.008,.692,{sk:.0958}],120716:[.434,.006,.667,{ic:.067}],120717:[.694,.202,.712,{sk:.0958}],120718:[.451,.194,.612,{sk:.0958}],120719:[.444,.008,.975],120720:[.694,0,.667],120721:[.694,0,.667],120722:[.691,0,.542,{ic:.104}],120723:[.694,0,.833],120724:[.691,0,.597,{ic:.091}],120725:[.694,0,.611,{ic:.091}],120726:[.694,0,.708,{ic:.06}],120727:[.715,.022,.778],120728:[.694,0,.278,{ic:.06}],120729:[.694,0,.694,{ic:.091}],120730:[.694,0,.611],120731:[.694,0,.875,{ic:.054}],120732:[.694,0,.708,{ic:.058}],120733:[.688,0,.667,{ic:.098}],120734:[.716,.022,.736],120735:[.691,0,.708,{ic:.06}],120736:[.694,0,.639,{ic:.051}],120737:[.715,.022,.778],120738:[.694,0,.722,{ic:.091}],120739:[.688,0,.681,{ic:.109}],120740:[.716,0,.778,{ic:.065}],120741:[.694,0,.722],120742:[.694,0,.667,{ic:.091}],120743:[.694,0,.778,{ic:.076}],120744:[.716,0,.722],120745:[.683,.033,.833],120746:[.452,.008,.761,{sk:.0319}],120747:[.701,.194,.66,{sk:.0958}],120748:[.451,.211,.59],120749:[.725,.008,.522,{sk:.0639}],120750:[.461,.017,.529,{sk:.0958}],120751:[.711,.202,.508,{sk:.0958}],120752:[.452,.211,.6,{sk:.0639}],120753:[.702,.008,.562,{sk:.0958}],120754:[.452,.008,.412,{sk:.0639}],120755:[.452,.008,.668],120756:[.694,.013,.671],120757:[.452,.211,.708,{sk:.0319}],120758:[.452,0,.577,{sk:.0319}],120759:[.711,.201,.508,{sk:.128}],120760:[.452,.008,.585,{sk:.0639}],120761:[.444,.008,.682],120762:[.451,.211,.612,{sk:.0958}],120763:[.451,.105,.424,{sk:.0958}],120764:[.444,.008,.686],120765:[.444,.013,.521,{ic:.089,sk:.0319}],120766:[.453,.008,.631,{sk:.0319}],120767:[.452,.216,.747,{sk:.0958}],120768:[.452,.201,.718,{sk:.0639}],120769:[.694,.202,.758,{sk:.128}],120770:[.453,.008,.718],120771:[.715,.022,.531,{sk:.0833}],120772:[.444,.007,.483,{sk:.0639}],120773:[.701,.008,.692,{sk:.0958}],120774:[.434,.006,.667,{ic:.067}],120775:[.694,.202,.712,{sk:.0958}],120776:[.451,.194,.612,{sk:.0958}],120777:[.444,.008,.975],120778:[.68,0,.643,{ic:.106,sk:.0833}],120779:[.605,.085,.778],120782:[.654,.01,.575],120783:[.655,0,.575],120784:[.654,0,.575],120785:[.655,.011,.575],120786:[.656,0,.575],120787:[.655,.011,.575],120788:[.655,.011,.575],120789:[.676,.011,.575],120790:[.654,.011,.575],120791:[.654,.011,.575],120792:[.654,.01,.575],120793:[.655,0,.575],120794:[.654,0,.575],120795:[.655,.011,.575],120796:[.656,0,.575],120797:[.655,.011,.575],120798:[.655,.011,.575],120799:[.676,.011,.575],120800:[.654,.011,.575],120801:[.654,.011,.575],120802:[.678,.022,.5],120803:[.678,0,.5],120804:[.677,0,.5],120805:[.678,.022,.5],120806:[.656,0,.5],120807:[.656,.021,.5],120808:[.677,.022,.5],120809:[.656,.011,.5],120810:[.678,.022,.5],120811:[.677,.022,.5],120812:[.715,.022,.55],120813:[.716,0,.55],120814:[.716,0,.55],120815:[.716,.022,.55],120816:[.694,0,.55],120817:[.694,.022,.55],120818:[.716,.022,.55],120819:[.695,.011,.55],120820:[.715,.022,.55],120821:[.716,.022,.55],120822:[.621,.01,.525],120823:[.622,0,.525],120824:[.622,0,.525],120825:[.622,.011,.525],120826:[.624,0,.525],120827:[.611,.01,.525],120828:[.622,.011,.525],120829:[.627,.01,.525],120830:[.621,.01,.525],120831:[.622,.011,.525]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(195);e.sansSerifBoldItalic=n.AddCSS(i.sansSerifBoldItalic,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},126:{c:\"~\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifBoldItalic={32:[0,0,.25],33:[.694,0,.319],34:[.694,-.471,.5],35:[.694,.194,.833],36:[.75,.056,.5,{ic:.065}],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278,{ic:.057}],40:[.75,.25,.389,{ic:.102}],41:[.75,.25,.389],42:[.75,-.306,.5,{ic:.068}],43:[.583,.083,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5,{ic:.1}],48:[.678,.022,.5],49:[.678,0,.5],50:[.678,0,.5,{ic:.051}],51:[.678,.022,.5],52:[.656,0,.5],53:[.656,.022,.5,{ic:.055}],54:[.678,.022,.5],55:[.656,.011,.5,{ic:.096}],56:[.678,.022,.5,{ic:.054}],57:[.677,.022,.5],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778],63:[.704,0,.472,{ic:.064}],64:[.705,.01,.667],65:[.694,0,.667],66:[.694,0,.667],67:[.705,.01,.639,{ic:.08}],68:[.694,0,.722],69:[.691,0,.597,{ic:.091}],70:[.691,0,.569,{ic:.104}],71:[.705,.011,.667,{ic:.063}],72:[.694,0,.708,{ic:.06}],73:[.694,0,.278,{ic:.06}],74:[.694,.022,.472,{ic:.063}],75:[.694,0,.694,{ic:.091}],76:[.694,0,.542],77:[.694,0,.875,{ic:.054}],78:[.694,0,.708,{ic:.058}],79:[.716,.022,.736],80:[.694,0,.639,{ic:.051}],81:[.716,.125,.736],82:[.694,0,.646,{ic:.052}],83:[.716,.022,.556,{ic:.053}],84:[.688,0,.681,{ic:.109}],85:[.694,.022,.688,{ic:.059}],86:[.694,0,.667,{ic:.132}],87:[.694,0,.944,{ic:.132}],88:[.694,0,.667,{ic:.091}],89:[.694,0,.667,{ic:.143}],90:[.694,0,.611,{ic:.091}],91:[.75,.25,.289,{ic:.136}],93:[.75,.25,.289,{ic:.064}],94:[.694,-.527,.5],95:[-.038,.114,.5,{ic:.065}],97:[.461,.01,.481],98:[.694,.011,.517],99:[.46,.011,.444,{ic:.055}],100:[.694,.01,.517,{ic:.071}],101:[.46,.011,.444],102:[.705,0,.306,{ic:.188}],103:[.455,.206,.5,{ic:.068}],104:[.694,0,.517],105:[.68,0,.239,{ic:.076}],106:[.68,.204,.267,{ic:.069}],107:[.694,0,.489,{ic:.054}],108:[.694,0,.239,{ic:.072}],109:[.455,0,.794],110:[.454,0,.517],111:[.461,.011,.5],112:[.455,.194,.517],113:[.455,.194,.517],114:[.455,0,.342,{ic:.082}],115:[.461,.011,.383,{ic:.053}],116:[.571,.011,.361],117:[.444,.01,.517],118:[.444,0,.461,{ic:.079}],119:[.444,0,.683,{ic:.079}],120:[.444,0,.461,{ic:.076}],121:[.444,.205,.461,{ic:.079}],122:[.444,0,.435,{ic:.059}],126:[.327,-.193,.5,{ic:.06}],160:[0,0,.25],305:[.444,0,.239],567:[.444,.204,.267],768:[.694,-.527,0],769:[.694,-.527,0,{ic:.063}],770:[.694,-.527,0],771:[.677,-.543,0,{ic:.06}],772:[.631,-.552,0,{ic:.064}],774:[.694,-.508,0,{ic:.073}],775:[.68,-.576,0],776:[.68,-.582,0],778:[.693,-.527,0],779:[.694,-.527,0,{ic:.063}],780:[.654,-.487,0,{ic:.06}],913:[.694,0,.667],914:[.694,0,.667],915:[.691,0,.542,{ic:.104}],916:[.694,0,.833],917:[.691,0,.597,{ic:.091}],918:[.694,0,.611,{ic:.091}],919:[.694,0,.708,{ic:.06}],920:[.715,.022,.778],921:[.694,0,.278,{ic:.06}],922:[.694,0,.694,{ic:.091}],923:[.694,0,.611],924:[.694,0,.875,{ic:.054}],925:[.694,0,.708,{ic:.058}],926:[.688,0,.667,{ic:.098}],927:[.716,.022,.736],928:[.691,0,.708,{ic:.06}],929:[.694,0,.639,{ic:.051}],930:[.715,.022,.778],931:[.694,0,.722,{ic:.091}],932:[.688,0,.681,{ic:.109}],933:[.716,0,.778,{ic:.065}],934:[.694,0,.722],935:[.694,0,.667,{ic:.091}],936:[.694,0,.778,{ic:.076}],937:[.716,0,.722],978:[.716,0,.778,{ic:.065}],988:[.691,0,.569,{ic:.104}],8211:[.312,-.236,.5,{ic:.065}],8212:[.312,-.236,1,{ic:.065}],8213:[.312,-.236,1,{ic:.065}],8215:[-.038,.114,.5,{ic:.065}],8216:[.694,-.471,.278,{ic:.058}],8217:[.694,-.471,.278,{ic:.057}],8220:[.694,-.471,.5,{ic:.114}],8221:[.694,-.471,.5],8260:[.75,.25,.5,{ic:.1}],8710:[.694,0,.833]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(197);e.sansSerifBold=n.AddCSS(i.sansSerifBold,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},126:{c:\"~\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifBold={32:[0,0,.25],33:[.694,0,.367],34:[.694,-.442,.558],35:[.694,.193,.917],36:[.75,.056,.55],37:[.75,.056,1.029],38:[.716,.022,.831],39:[.694,-.442,.306],40:[.75,.249,.428],41:[.75,.25,.428],42:[.75,-.293,.55],43:[.617,.116,.856],44:[.146,.106,.306],45:[.273,-.186,.367],46:[.146,0,.306],47:[.75,.249,.55],48:[.715,.022,.55],49:[.716,0,.55],50:[.716,0,.55],51:[.716,.022,.55],52:[.694,0,.55],53:[.694,.022,.55],54:[.716,.022,.55],55:[.695,.011,.55],56:[.715,.022,.55],57:[.716,.022,.55],58:[.458,0,.306],59:[.458,.106,.306],61:[.407,-.094,.856],63:[.705,0,.519],64:[.704,.011,.733],65:[.694,0,.733],66:[.694,0,.733],67:[.704,.011,.703],68:[.694,0,.794],69:[.691,0,.642],70:[.691,0,.611],71:[.705,.011,.733],72:[.694,0,.794],73:[.694,0,.331],74:[.694,.022,.519],75:[.694,0,.764],76:[.694,0,.581],77:[.694,0,.978],78:[.694,0,.794],79:[.716,.022,.794],80:[.694,0,.703],81:[.716,.106,.794],82:[.694,0,.703],83:[.716,.022,.611],84:[.688,0,.733],85:[.694,.022,.764],86:[.694,0,.733],87:[.694,0,1.039],88:[.694,0,.733],89:[.694,0,.733],90:[.694,0,.672],91:[.75,.25,.343],93:[.75,.25,.343],94:[.694,-.537,.55],95:[-.023,.11,.55],97:[.475,.011,.525],98:[.694,.01,.561],99:[.475,.011,.489],100:[.694,.011,.561],101:[.474,.01,.511],102:[.705,0,.336],103:[.469,.206,.55],104:[.694,0,.561],105:[.695,0,.256],106:[.695,.205,.286],107:[.694,0,.531],108:[.694,0,.256],109:[.469,0,.867],110:[.468,0,.561],111:[.474,.011,.55],112:[.469,.194,.561],113:[.469,.194,.561],114:[.469,0,.372],115:[.474,.01,.422],116:[.589,.01,.404],117:[.458,.011,.561],118:[.458,0,.5],119:[.458,0,.744],120:[.458,0,.5],121:[.458,.205,.5],122:[.458,0,.476],126:[.344,-.198,.55],160:[0,0,.25],305:[.458,0,.256],567:[.458,.205,.286],768:[.694,-.537,0],769:[.694,-.537,0],770:[.694,-.537,0],771:[.694,-.548,0],772:[.66,-.56,0],774:[.694,-.552,0],775:[.695,-.596,0],776:[.695,-.595,0],778:[.694,-.538,0],779:[.694,-.537,0],780:[.657,-.5,0],913:[.694,0,.733],914:[.694,0,.733],915:[.691,0,.581],916:[.694,0,.917],917:[.691,0,.642],918:[.694,0,.672],919:[.694,0,.794],920:[.716,.022,.856],921:[.694,0,.331],922:[.694,0,.764],923:[.694,0,.672],924:[.694,0,.978],925:[.694,0,.794],926:[.688,0,.733],927:[.716,.022,.794],928:[.691,0,.794],929:[.694,0,.703],930:[.716,.022,.856],931:[.694,0,.794],932:[.688,0,.733],933:[.715,0,.856],934:[.694,0,.794],935:[.694,0,.733],936:[.694,0,.856],937:[.716,0,.794],978:[.715,0,.856],988:[.691,0,.611],8211:[.327,-.24,.55],8212:[.327,-.24,1.1],8213:[.327,-.24,1.1],8215:[-.023,.11,.55],8216:[.694,-.443,.306],8217:[.694,-.442,.306],8220:[.694,-.443,.558],8221:[.694,-.442,.558],8260:[.75,.249,.55],8710:[.694,0,.917]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(199);e.sansSerifItalic=n.AddCSS(i.sansSerifItalic,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},126:{c:\"~\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifItalic={32:[0,0,.25],33:[.694,0,.319],34:[.694,-.471,.5],35:[.694,.194,.833],36:[.75,.056,.5,{ic:.065}],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278,{ic:.057}],40:[.75,.25,.389,{ic:.102}],41:[.75,.25,.389],42:[.75,-.306,.5,{ic:.068}],43:[.583,.083,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5,{ic:.1}],48:[.678,.022,.5],49:[.678,0,.5],50:[.678,0,.5,{ic:.051}],51:[.678,.022,.5],52:[.656,0,.5],53:[.656,.022,.5,{ic:.055}],54:[.678,.022,.5],55:[.656,.011,.5,{ic:.096}],56:[.678,.022,.5,{ic:.054}],57:[.677,.022,.5],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778],63:[.704,0,.472,{ic:.064}],64:[.705,.01,.667],65:[.694,0,.667],66:[.694,0,.667],67:[.705,.01,.639,{ic:.08}],68:[.694,0,.722],69:[.691,0,.597,{ic:.091}],70:[.691,0,.569,{ic:.104}],71:[.705,.011,.667,{ic:.063}],72:[.694,0,.708,{ic:.06}],73:[.694,0,.278,{ic:.06}],74:[.694,.022,.472,{ic:.063}],75:[.694,0,.694,{ic:.091}],76:[.694,0,.542],77:[.694,0,.875,{ic:.054}],78:[.694,0,.708,{ic:.058}],79:[.716,.022,.736],80:[.694,0,.639,{ic:.051}],81:[.716,.125,.736],82:[.694,0,.646,{ic:.052}],83:[.716,.022,.556,{ic:.053}],84:[.688,0,.681,{ic:.109}],85:[.694,.022,.688,{ic:.059}],86:[.694,0,.667,{ic:.132}],87:[.694,0,.944,{ic:.132}],88:[.694,0,.667,{ic:.091}],89:[.694,0,.667,{ic:.143}],90:[.694,0,.611,{ic:.091}],91:[.75,.25,.289,{ic:.136}],93:[.75,.25,.289,{ic:.064}],94:[.694,-.527,.5],95:[-.038,.114,.5,{ic:.065}],97:[.461,.01,.481],98:[.694,.011,.517],99:[.46,.011,.444,{ic:.055}],100:[.694,.01,.517,{ic:.071}],101:[.46,.011,.444],102:[.705,0,.306,{ic:.188}],103:[.455,.206,.5,{ic:.068}],104:[.694,0,.517],105:[.68,0,.239,{ic:.076}],106:[.68,.204,.267,{ic:.069}],107:[.694,0,.489,{ic:.054}],108:[.694,0,.239,{ic:.072}],109:[.455,0,.794],110:[.454,0,.517],111:[.461,.011,.5],112:[.455,.194,.517],113:[.455,.194,.517],114:[.455,0,.342,{ic:.082}],115:[.461,.011,.383,{ic:.053}],116:[.571,.011,.361],117:[.444,.01,.517],118:[.444,0,.461,{ic:.079}],119:[.444,0,.683,{ic:.079}],120:[.444,0,.461,{ic:.076}],121:[.444,.205,.461,{ic:.079}],122:[.444,0,.435,{ic:.059}],126:[.327,-.193,.5,{ic:.06}],160:[0,0,.25],305:[.444,0,.239],567:[.444,.204,.267],768:[.694,-.527,0],769:[.694,-.527,0,{ic:.063}],770:[.694,-.527,0],771:[.677,-.543,0,{ic:.06}],772:[.631,-.552,0,{ic:.064}],774:[.694,-.508,0,{ic:.073}],775:[.68,-.576,0],776:[.68,-.582,0],778:[.693,-.527,0],779:[.694,-.527,0,{ic:.063}],780:[.654,-.487,0,{ic:.06}],913:[.694,0,.667],914:[.694,0,.667],915:[.691,0,.542,{ic:.104}],916:[.694,0,.833],917:[.691,0,.597,{ic:.091}],918:[.694,0,.611,{ic:.091}],919:[.694,0,.708,{ic:.06}],920:[.715,.022,.778],921:[.694,0,.278,{ic:.06}],922:[.694,0,.694,{ic:.091}],923:[.694,0,.611],924:[.694,0,.875,{ic:.054}],925:[.694,0,.708,{ic:.058}],926:[.688,0,.667,{ic:.098}],927:[.716,.022,.736],928:[.691,0,.708,{ic:.06}],929:[.694,0,.639,{ic:.051}],930:[.715,.022,.778],931:[.694,0,.722,{ic:.091}],932:[.688,0,.681,{ic:.109}],933:[.716,0,.778,{ic:.065}],934:[.694,0,.722],935:[.694,0,.667,{ic:.091}],936:[.694,0,.778,{ic:.076}],937:[.716,0,.722],978:[.716,0,.778,{ic:.065}],988:[.691,0,.569,{ic:.104}],8211:[.312,-.236,.5,{ic:.065}],8212:[.312,-.236,1,{ic:.065}],8213:[.312,-.236,1,{ic:.065}],8215:[-.038,.114,.5,{ic:.065}],8216:[.694,-.471,.278,{ic:.058}],8217:[.694,-.471,.278,{ic:.057}],8220:[.694,-.471,.5,{ic:.114}],8221:[.694,-.471,.5],8260:[.75,.25,.5,{ic:.1}],8710:[.694,0,.833]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(201);e.sansSerif=n.AddCSS(i.sansSerif,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},36:{c:\"$\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},126:{c:\"~\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerif={32:[0,0,.25],33:[.694,0,.319],34:[.694,-.471,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.306,.5],43:[.583,.082,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5],48:[.678,.022,.5],49:[.678,0,.5],50:[.677,0,.5],51:[.678,.022,.5],52:[.656,0,.5],53:[.656,.021,.5],54:[.677,.022,.5],55:[.656,.011,.5],56:[.678,.022,.5],57:[.677,.022,.5],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778],63:[.704,0,.472],64:[.704,.011,.667],65:[.694,0,.667],66:[.694,0,.667],67:[.705,.011,.639],68:[.694,0,.722],69:[.691,0,.597],70:[.691,0,.569],71:[.704,.011,.667],72:[.694,0,.708],73:[.694,0,.278],74:[.694,.022,.472],75:[.694,0,.694],76:[.694,0,.542],77:[.694,0,.875],78:[.694,0,.708],79:[.715,.022,.736],80:[.694,0,.639],81:[.715,.125,.736],82:[.694,0,.646],83:[.716,.022,.556],84:[.688,0,.681],85:[.694,.022,.688],86:[.694,0,.667],87:[.694,0,.944],88:[.694,0,.667],89:[.694,0,.667],90:[.694,0,.611],91:[.75,.25,.289],93:[.75,.25,.289],94:[.694,-.527,.5],95:[-.038,.114,.5],97:[.46,.01,.481],98:[.694,.011,.517],99:[.46,.01,.444],100:[.694,.01,.517],101:[.461,.01,.444],102:[.705,0,.306],103:[.455,.206,.5],104:[.694,0,.517],105:[.68,0,.239],106:[.68,.205,.267],107:[.694,0,.489],108:[.694,0,.239],109:[.455,0,.794],110:[.455,0,.517],111:[.46,.01,.5],112:[.455,.194,.517],113:[.455,.194,.517],114:[.455,0,.342],115:[.46,.01,.383],116:[.571,.01,.361],117:[.444,.01,.517],118:[.444,0,.461],119:[.444,0,.683],120:[.444,0,.461],121:[.444,.204,.461],122:[.444,0,.435],126:[.327,-.193,.5],160:[0,0,.25],305:[.444,0,.239],567:[.444,.205,.267],768:[.694,-.527,0],769:[.694,-.527,0],770:[.694,-.527,0],771:[.677,-.543,0],772:[.631,-.552,0],774:[.694,-.508,0],775:[.68,-.576,0],776:[.68,-.582,0],778:[.694,-.527,0],779:[.694,-.527,0],780:[.654,-.487,0],913:[.694,0,.667],914:[.694,0,.667],915:[.691,0,.542],916:[.694,0,.833],917:[.691,0,.597],918:[.694,0,.611],919:[.694,0,.708],920:[.716,.021,.778],921:[.694,0,.278],922:[.694,0,.694],923:[.694,0,.611],924:[.694,0,.875],925:[.694,0,.708],926:[.688,0,.667],927:[.715,.022,.736],928:[.691,0,.708],929:[.694,0,.639],930:[.716,.021,.778],931:[.694,0,.722],932:[.688,0,.681],933:[.716,0,.778],934:[.694,0,.722],935:[.694,0,.667],936:[.694,0,.778],937:[.716,0,.722],978:[.716,0,.778],988:[.691,0,.569],8211:[.312,-.236,.5],8212:[.312,-.236,1],8213:[.312,-.236,1],8215:[-.038,.114,.5],8216:[.694,-.471,.278],8217:[.694,-.471,.278],8220:[.694,-.471,.5],8221:[.694,-.471,.5],8260:[.75,.25,.5],8710:[.694,0,.833]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(203);e.scriptBold=n.AddCSS(i.scriptBold,{32:{c:\" \"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},913:{c:\"A\",f:\"B\"},914:{c:\"B\",f:\"B\"},917:{c:\"E\",f:\"B\"},918:{c:\"Z\",f:\"B\"},919:{c:\"H\",f:\"B\"},921:{c:\"I\",f:\"B\"},922:{c:\"K\",f:\"B\"},924:{c:\"M\",f:\"B\"},925:{c:\"N\",f:\"B\"},927:{c:\"O\",f:\"B\"},929:{c:\"P\",f:\"B\"},930:{c:\"\\\\398\",f:\"B\"},932:{c:\"T\",f:\"B\"},935:{c:\"X\",f:\"B\"},978:{c:\"\\\\3A5\",f:\"B\"},988:{c:\"F\",f:\"B\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.scriptBold={32:[0,0,.25],65:[.717,.008,.803,{ic:.213,sk:.389}],66:[.708,.028,.908,{sk:.194}],67:[.728,.026,.666,{ic:.153,sk:.278}],68:[.708,.031,.774,{ic:.081,sk:.111}],69:[.707,.008,.562,{ic:.156,sk:.139}],70:[.735,.036,.895,{ic:.095,sk:.222}],71:[.717,.037,.61,{ic:.128,sk:.25}],72:[.717,.036,.969,{ic:.272,sk:.333}],73:[.717,.017,.809,{ic:.137,sk:.333}],74:[.717,.314,1.052,{ic:.081,sk:.417}],75:[.717,.037,.914,{ic:.29,sk:.361}],76:[.717,.017,.874,{ic:.161,sk:.306}],77:[.721,.05,1.08,{ic:.136,sk:.444}],78:[.726,.036,.902,{ic:.306,sk:.389}],79:[.707,.008,.738,{ic:.067,sk:.167}],80:[.716,.037,1.013,{sk:.222}],81:[.717,.017,.883,{sk:.278}],82:[.717,.017,.85,{sk:.194}],83:[.708,.036,.868,{ic:.148,sk:.333}],84:[.735,.037,.747,{ic:.249,sk:.222}],85:[.717,.017,.8,{ic:.16,sk:.25}],86:[.717,.017,.622,{ic:.228,sk:.222}],87:[.717,.017,.805,{ic:.221,sk:.25}],88:[.717,.017,.944,{ic:.187,sk:.278}],89:[.716,.017,.71,{ic:.249,sk:.194}],90:[.717,.016,.821,{ic:.211,sk:.306}],160:[0,0,.25],913:[.698,0,.869],914:[.686,0,.818],917:[.68,0,.756],918:[.686,0,.703],919:[.686,0,.9],921:[.686,0,.436],922:[.686,0,.901],924:[.686,0,1.092],925:[.686,0,.9],927:[.696,.01,.864],929:[.686,0,.786],930:[.696,.01,.894],932:[.675,0,.8],935:[.686,0,.869],978:[.697,0,.894],988:[.68,0,.724]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(205);e.script=n.AddCSS(i.script,{32:{c:\" \"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},913:{c:\"A\",f:\"\"},914:{c:\"B\",f:\"\"},917:{c:\"E\",f:\"\"},918:{c:\"Z\",f:\"\"},919:{c:\"H\",f:\"\"},921:{c:\"I\",f:\"\"},922:{c:\"K\",f:\"\"},924:{c:\"M\",f:\"\"},925:{c:\"N\",f:\"\"},927:{c:\"O\",f:\"\"},929:{c:\"P\",f:\"\"},930:{c:\"\\\\398\",f:\"\"},932:{c:\"T\",f:\"\"},935:{c:\"X\",f:\"\"},978:{c:\"\\\\3A5\",f:\"\"},988:{c:\"F\",f:\"\"},8459:{c:\"H\",f:\"SC\"},8464:{c:\"J\",f:\"SC\"},8466:{c:\"L\",f:\"SC\"},8475:{c:\"R\",f:\"SC\"},8492:{c:\"B\",f:\"SC\"},8496:{c:\"E\",f:\"SC\"},8497:{c:\"F\",f:\"SC\"},8499:{c:\"M\",f:\"SC\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.script={32:[0,0,.25],65:[.717,.008,.803,{ic:.213,sk:.389}],66:[.708,.028,.908,{sk:.194}],67:[.728,.026,.666,{ic:.153,sk:.278}],68:[.708,.031,.774,{ic:.081,sk:.111}],69:[.707,.008,.562,{ic:.156,sk:.139}],70:[.735,.036,.895,{ic:.095,sk:.222}],71:[.717,.037,.61,{ic:.128,sk:.25}],72:[.717,.036,.969,{ic:.272,sk:.333}],73:[.717,.017,.809,{ic:.137,sk:.333}],74:[.717,.314,1.052,{ic:.081,sk:.417}],75:[.717,.037,.914,{ic:.29,sk:.361}],76:[.717,.017,.874,{ic:.161,sk:.306}],77:[.721,.05,1.08,{ic:.136,sk:.444}],78:[.726,.036,.902,{ic:.306,sk:.389}],79:[.707,.008,.738,{ic:.067,sk:.167}],80:[.716,.037,1.013,{sk:.222}],81:[.717,.017,.883,{sk:.278}],82:[.717,.017,.85,{sk:.194}],83:[.708,.036,.868,{ic:.148,sk:.333}],84:[.735,.037,.747,{ic:.249,sk:.222}],85:[.717,.017,.8,{ic:.16,sk:.25}],86:[.717,.017,.622,{ic:.228,sk:.222}],87:[.717,.017,.805,{ic:.221,sk:.25}],88:[.717,.017,.944,{ic:.187,sk:.278}],89:[.716,.017,.71,{ic:.249,sk:.194}],90:[.717,.016,.821,{ic:.211,sk:.306}],160:[0,0,.25],913:[.716,0,.75],914:[.683,0,.708],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],921:[.683,0,.361],922:[.683,0,.778],924:[.683,0,.917],925:[.683,0,.75],927:[.705,.022,.778],929:[.683,0,.681],930:[.705,.022,.778],932:[.677,0,.722],935:[.683,0,.75],978:[.705,0,.778],988:[.68,0,.653],8459:[.717,.036,.969,{ic:.272,sk:.333}],8464:[.717,.314,1.052,{ic:.081,sk:.417}],8466:[.717,.017,.874,{ic:.161,sk:.306}],8475:[.717,.017,.85,{sk:.194}],8492:[.708,.028,.908,{sk:.194}],8496:[.707,.008,.562,{ic:.156,sk:.139}],8497:[.735,.036,.895,{ic:.095,sk:.222}],8499:[.721,.05,1.08,{ic:.136,sk:.444}]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(207);e.smallop=n.AddCSS(i.smallop,{32:{c:\" \"},40:{c:\"(\"},41:{c:\")\"},47:{c:\"/\"},91:{c:\"[\"},93:{c:\"]\"},123:{c:\"{\"},125:{c:\"}\"},8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},10072:{c:\"\\\\2223\"},10764:{c:\"\\\\222C\\\\222C\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.smallop={32:[0,0,.25],40:[.85,.349,.458],41:[.85,.349,.458],47:[.85,.349,.578],91:[.85,.349,.417],92:[.85,.349,.578],93:[.85,.349,.417],123:[.85,.349,.583],125:[.85,.349,.583],160:[0,0,.25],710:[.744,-.551,.556],732:[.722,-.597,.556],770:[.744,-.551,0],771:[.722,-.597,0],8214:[.602,0,.778],8260:[.85,.349,.578],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8730:[.85,.35,1],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[.805,.306,.472,{ic:.138}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8968:[.85,.349,.472],8969:[.85,.349,.472],8970:[.85,.349,.472],8971:[.85,.349,.472],9001:[.85,.35,.472],9002:[.85,.35,.472],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[.85,.35,.472],10217:[.85,.35,.472],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],12296:[.85,.35,.472],12297:[.85,.35,.472]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(209);e.texCalligraphicBold=n.AddCSS(i.texCalligraphicBold,{32:{c:\" \"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},913:{c:\"A\",f:\"BI\"},914:{c:\"B\",f:\"BI\"},917:{c:\"E\",f:\"BI\"},918:{c:\"Z\",f:\"BI\"},919:{c:\"H\",f:\"BI\"},921:{c:\"I\",f:\"BI\"},922:{c:\"K\",f:\"BI\"},924:{c:\"M\",f:\"BI\"},925:{c:\"N\",f:\"BI\"},927:{c:\"O\",f:\"BI\"},929:{c:\"P\",f:\"BI\"},930:{c:\"\\\\398\",f:\"BI\"},932:{c:\"T\",f:\"BI\"},935:{c:\"X\",f:\"BI\"},978:{c:\"\\\\3A5\",f:\"BI\"},988:{c:\"F\",f:\"BI\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texCalligraphicBold={32:[0,0,.25],47:[.711,.21,.894],48:[.46,.017,.575],49:[.461,0,.575],50:[.46,0,.575],51:[.461,.211,.575],52:[.469,.194,.575],53:[.461,.211,.575],54:[.66,.017,.575],55:[.476,.211,.575],56:[.661,.017,.575],57:[.461,.21,.575],65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{sk:.0319}],87:[.686,.077,1.169,{sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{sk:.0958}],90:[.686,0,.818,{sk:.16}],97:[.452,.008,.633],98:[.694,.008,.521],99:[.451,.008,.513,{sk:.0639}],100:[.694,.008,.61,{sk:.192}],101:[.452,.008,.554,{sk:.0639}],102:[.701,.201,.568,{ic:.056,sk:.192}],103:[.452,.202,.545,{sk:.0319}],104:[.694,.008,.668,{sk:-.0319}],105:[.694,.008,.405],106:[.694,.202,.471],107:[.694,.008,.604],108:[.694,.008,.348,{sk:.0958}],109:[.452,.008,1.032],110:[.452,.008,.713],111:[.452,.008,.585,{sk:.0639}],112:[.452,.194,.601,{sk:.0958}],113:[.452,.194,.542,{sk:.0958}],114:[.452,.008,.529,{sk:.0639}],115:[.451,.008,.531,{sk:.0639}],116:[.643,.007,.415,{sk:.0958}],117:[.452,.008,.681,{sk:.0319}],118:[.453,.008,.567,{sk:.0319}],119:[.453,.008,.831,{sk:.0958}],120:[.452,.008,.659,{sk:.0319}],121:[.452,.202,.59,{sk:.0639}],122:[.452,.008,.555,{sk:.0639}],160:[0,0,.25],913:[.711,0,.869,{sk:.16}],914:[.686,0,.866,{sk:.0958}],915:[.68,0,.657,{ic:.12,sk:.0958}],916:[.711,0,.958,{sk:.192}],917:[.68,0,.81,{sk:.0958}],918:[.686,0,.773,{sk:.0958}],919:[.686,0,.982,{sk:.0639}],920:[.702,.017,.867,{sk:.0958}],921:[.686,0,.511,{ic:.062,sk:.128}],922:[.686,0,.971,{sk:.0639}],923:[.711,0,.806,{sk:.192}],924:[.686,0,1.142,{ic:.077,sk:.0958}],925:[.686,0,.95,{ic:.077,sk:.0958}],926:[.675,0,.841,{sk:.0958}],927:[.703,.017,.837,{sk:.0958}],928:[.68,0,.982,{sk:.0639}],929:[.686,0,.723,{ic:.124,sk:.0958}],930:[.702,.017,.867,{sk:.0958}],931:[.686,0,.885,{sk:.0958}],932:[.675,0,.637,{ic:.135,sk:.0958}],933:[.703,0,.671,{ic:.131,sk:.0639}],934:[.686,0,.767,{sk:.0958}],935:[.686,0,.947,{sk:.0958}],936:[.686,0,.714,{ic:.076,sk:.0639}],937:[.703,0,.879,{sk:.0958}],945:[.452,.008,.761,{sk:.0319}],946:[.701,.194,.66,{sk:.0958}],947:[.451,.211,.59],948:[.725,.008,.522,{sk:.0639}],949:[.461,.017,.529,{sk:.0958}],950:[.711,.202,.508,{sk:.0958}],951:[.452,.211,.6,{sk:.0639}],952:[.702,.008,.562,{sk:.0958}],953:[.452,.008,.412,{sk:.0639}],954:[.452,.008,.668],955:[.694,.013,.671],956:[.452,.211,.708,{sk:.0319}],957:[.452,0,.577,{sk:.0319}],958:[.711,.201,.508,{sk:.128}],959:[.452,.008,.585,{sk:.0639}],960:[.444,.008,.682],961:[.451,.211,.612,{sk:.0958}],962:[.451,.105,.424,{sk:.0958}],963:[.444,.008,.686],964:[.444,.013,.521,{ic:.089,sk:.0319}],965:[.453,.008,.631,{sk:.0319}],966:[.452,.216,.747,{sk:.0958}],967:[.452,.201,.718,{sk:.0639}],968:[.694,.202,.758,{sk:.128}],969:[.453,.008,.718],977:[.701,.008,.692,{sk:.0958}],978:[.703,0,.671,{ic:.131,sk:.0639}],981:[.694,.202,.712,{sk:.0958}],982:[.444,.008,.975],988:[.68,0,.689,{ic:.12,sk:.0958}],1009:[.451,.194,.612,{sk:.0958}],1013:[.444,.007,.483,{sk:.0639}],8260:[.711,.21,.894],8710:[.711,0,.958,{sk:.192}]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(211);e.texCalligraphic=n.AddCSS(i.texCalligraphic,{32:{c:\" \"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},913:{c:\"A\",f:\"I\"},914:{c:\"B\",f:\"I\"},917:{c:\"E\",f:\"I\"},918:{c:\"Z\",f:\"I\"},919:{c:\"H\",f:\"I\"},921:{c:\"I\",f:\"I\"},922:{c:\"K\",f:\"I\"},924:{c:\"M\",f:\"I\"},925:{c:\"N\",f:\"I\"},927:{c:\"O\",f:\"I\"},929:{c:\"P\",f:\"I\"},930:{c:\"\\\\398\",f:\"I\"},932:{c:\"T\",f:\"I\"},935:{c:\"X\",f:\"I\"},978:{c:\"\\\\3A5\",f:\"I\"},988:{c:\"F\",f:\"I\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texCalligraphic={32:[0,0,.25],48:[.452,.022,.5],49:[.453,0,.5],50:[.453,0,.5],51:[.452,.216,.5],52:[.464,.194,.5],53:[.453,.216,.5],54:[.665,.022,.5],55:[.463,.216,.5],56:[.666,.021,.5],57:[.453,.216,.5],65:[.728,.05,.798,{sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{sk:.0278}],87:[.683,.053,.988,{sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{sk:.0833}],90:[.683,0,.725,{sk:.139}],160:[0,0,.25],913:[.716,0,.75,{sk:.139}],914:[.683,0,.759,{sk:.0833}],917:[.68,0,.738,{sk:.0833}],918:[.683,0,.683,{sk:.0833}],919:[.683,0,.831,{ic:.057,sk:.0556}],921:[.683,0,.44,{ic:.064,sk:.111}],922:[.683,0,.849,{sk:.0556}],924:[.683,0,.97,{ic:.081,sk:.0833}],925:[.683,0,.803,{ic:.085,sk:.0833}],927:[.704,.022,.763,{sk:.0833}],929:[.683,0,.642,{ic:.109,sk:.0833}],930:[.704,.022,.763,{sk:.0833}],932:[.677,0,.584,{ic:.12,sk:.0833}],935:[.683,0,.828,{sk:.0833}],978:[.705,0,.583,{ic:.117,sk:.0556}],988:[.68,0,.643,{ic:.106,sk:.0833}]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(213);e.texMathit=n.AddCSS(i.texMathit,{32:{c:\" \"},33:{c:\"!\"},35:{c:\"#\"},37:{c:\"%\"},38:{c:\"&\"},40:{c:\"(\"},41:{c:\")\"},42:{c:\"*\"},43:{c:\"+\"},44:{c:\",\"},45:{c:\"-\"},46:{c:\".\"},47:{c:\"/\"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},58:{c:\":\"},59:{c:\";\"},61:{c:\"=\"},63:{c:\"?\"},64:{c:\"@\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},91:{c:\"[\"},93:{c:\"]\"},94:{c:\"^\"},95:{c:\"_\"},97:{c:\"a\"},98:{c:\"b\"},99:{c:\"c\"},100:{c:\"d\"},101:{c:\"e\"},102:{c:\"f\"},103:{c:\"g\"},104:{c:\"h\"},105:{c:\"i\"},106:{c:\"j\"},107:{c:\"k\"},108:{c:\"l\"},109:{c:\"m\"},110:{c:\"n\"},111:{c:\"o\"},112:{c:\"p\"},113:{c:\"q\"},114:{c:\"r\"},115:{c:\"s\"},116:{c:\"t\"},117:{c:\"u\"},118:{c:\"v\"},119:{c:\"w\"},120:{c:\"x\"},121:{c:\"y\"},122:{c:\"z\"},126:{c:\"~\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},930:{c:\"\\\\398\"},932:{c:\"T\"},935:{c:\"X\"},978:{c:\"\\\\3A5\"},988:{c:\"F\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texMathit={32:[0,0,.25],33:[.716,0,.307,{ic:.073}],34:[.694,-.379,.514],35:[.694,.194,.818],37:[.75,.056,.818],38:[.716,.022,.767],39:[.694,-.379,.307,{ic:.07}],40:[.75,.25,.409,{ic:.108}],41:[.75,.25,.409],42:[.75,-.32,.511,{ic:.073}],43:[.557,.057,.767],44:[.121,.194,.307],45:[.251,-.18,.358],46:[.121,0,.307],47:[.75,.25,.511,{ic:.106}],48:[.665,.021,.511,{ic:.051}],49:[.666,0,.511],50:[.666,.022,.511],51:[.666,.022,.511,{ic:.051}],52:[.666,.194,.511],53:[.666,.022,.511,{ic:.056}],54:[.665,.022,.511,{ic:.054}],55:[.666,.022,.511,{ic:.123}],56:[.666,.021,.511],57:[.666,.022,.511],58:[.431,0,.307],59:[.431,.194,.307],61:[.367,-.133,.767],63:[.716,0,.511],64:[.705,.011,.767],65:[.716,0,.743],66:[.683,0,.704],67:[.705,.021,.716,{ic:.096}],68:[.683,0,.755],69:[.68,0,.678,{ic:.065}],70:[.68,0,.653,{ic:.078}],71:[.705,.022,.774],72:[.683,0,.743,{ic:.117}],73:[.683,0,.386,{ic:.122}],74:[.683,.021,.525,{ic:.097}],75:[.683,0,.769,{ic:.09}],76:[.683,0,.627],77:[.683,0,.897,{ic:.113}],78:[.683,0,.743,{ic:.117}],79:[.704,.022,.767],80:[.683,0,.678,{ic:.051}],81:[.704,.194,.767],82:[.683,.022,.729],83:[.705,.022,.562,{ic:.071}],84:[.677,0,.716,{ic:.09}],85:[.683,.022,.743,{ic:.117}],86:[.683,.022,.743,{ic:.125}],87:[.683,.022,.999,{ic:.125}],88:[.683,0,.743,{ic:.082}],89:[.683,0,.743,{ic:.132}],90:[.683,0,.613,{ic:.091}],91:[.75,.25,.307,{ic:.139}],93:[.75,.25,.307,{ic:.052}],94:[.694,-.527,.511],95:[-.025,.062,.511],97:[.442,.011,.511],98:[.694,.011,.46],99:[.441,.01,.46],100:[.694,.011,.511,{ic:.056}],101:[.442,.01,.46],102:[.705,.204,.307,{ic:.143}],103:[.442,.205,.46],104:[.694,.011,.511],105:[.656,.01,.307],106:[.656,.204,.307,{ic:.057}],107:[.694,.011,.46],108:[.694,.011,.256,{ic:.056}],109:[.442,.011,.818],110:[.442,.011,.562],111:[.442,.011,.511],112:[.442,.194,.511],113:[.442,.194,.46],114:[.442,.011,.422,{ic:.062}],115:[.442,.011,.409],116:[.626,.011,.332],117:[.441,.011,.537],118:[.443,.01,.46],119:[.443,.011,.664],120:[.442,.011,.464],121:[.441,.205,.486],122:[.442,.011,.409,{ic:.057}],126:[.318,-.208,.511,{ic:.06}],160:[0,0,.25],163:[.714,.011,.769],305:[.441,.01,.307],567:[.442,.204,.332],768:[.697,-.5,0],769:[.697,-.5,0],770:[.694,-.527,0],771:[.668,-.558,0,{ic:.06}],772:[.589,-.544,0,{ic:.054}],774:[.694,-.515,0,{ic:.062}],775:[.669,-.548,0],776:[.669,-.554,0],778:[.716,-.542,0],779:[.697,-.503,0,{ic:.065}],780:[.638,-.502,0],913:[.716,0,.743],914:[.683,0,.704],915:[.68,0,.627,{ic:.078}],916:[.716,0,.818],917:[.68,0,.678,{ic:.065}],918:[.683,0,.613,{ic:.091}],919:[.683,0,.743,{ic:.117}],920:[.704,.022,.767],921:[.683,0,.386,{ic:.122}],922:[.683,0,.769,{ic:.09}],923:[.716,0,.692],924:[.683,0,.897,{ic:.113}],925:[.683,0,.743,{ic:.117}],926:[.677,0,.664,{ic:.09}],927:[.704,.022,.767],928:[.68,0,.743,{ic:.116}],929:[.683,0,.678,{ic:.051}],930:[.704,.022,.767],931:[.683,0,.716,{ic:.066}],932:[.677,0,.716,{ic:.09}],933:[.705,0,.767,{ic:.065}],934:[.683,0,.716],935:[.683,0,.743,{ic:.082}],936:[.683,0,.767,{ic:.057}],937:[.705,0,.716],978:[.705,0,.767,{ic:.065}],988:[.68,0,.653,{ic:.078}],8211:[.285,-.248,.511],8212:[.285,-.248,1.022],8213:[.285,-.248,1.022],8215:[-.025,.062,.511],8216:[.694,-.379,.307,{ic:.055}],8217:[.694,-.379,.307,{ic:.07}],8220:[.694,-.379,.514,{ic:.092}],8221:[.694,-.379,.514],8260:[.75,.25,.511,{ic:.106}],8463:[.695,.013,.54],8710:[.716,0,.818]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(215);e.texOldstyleBold=n.AddCSS(i.texOldstyleBold,{32:{c:\" \"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},913:{c:\"A\",f:\"B\"},914:{c:\"B\",f:\"B\"},917:{c:\"E\",f:\"B\"},918:{c:\"Z\",f:\"B\"},919:{c:\"H\",f:\"B\"},921:{c:\"I\",f:\"B\"},922:{c:\"K\",f:\"B\"},924:{c:\"M\",f:\"B\"},925:{c:\"N\",f:\"B\"},927:{c:\"O\",f:\"B\"},929:{c:\"P\",f:\"B\"},930:{c:\"\\\\398\",f:\"B\"},932:{c:\"T\",f:\"B\"},935:{c:\"X\",f:\"B\"},978:{c:\"\\\\3A5\",f:\"B\"},988:{c:\"F\",f:\"B\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texOldstyleBold={32:[0,0,.25],48:[.46,.017,.575],49:[.461,0,.575],50:[.46,0,.575],51:[.461,.211,.575],52:[.469,.194,.575],53:[.461,.211,.575],54:[.66,.017,.575],55:[.476,.211,.575],56:[.661,.017,.575],57:[.461,.21,.575],65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{sk:.0319}],87:[.686,.077,1.169,{sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{sk:.0958}],90:[.686,0,.818,{sk:.16}],160:[0,0,.25],913:[.698,0,.869],914:[.686,0,.818],917:[.68,0,.756],918:[.686,0,.703],919:[.686,0,.9],921:[.686,0,.436],922:[.686,0,.901],924:[.686,0,1.092],925:[.686,0,.9],927:[.696,.01,.864],929:[.686,0,.786],930:[.696,.01,.894],932:[.675,0,.8],935:[.686,0,.869],978:[.697,0,.894],988:[.68,0,.724]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(217);e.texOldstyle=n.AddCSS(i.texOldstyle,{32:{c:\" \"},48:{c:\"0\"},49:{c:\"1\"},50:{c:\"2\"},51:{c:\"3\"},52:{c:\"4\"},53:{c:\"5\"},54:{c:\"6\"},55:{c:\"7\"},56:{c:\"8\"},57:{c:\"9\"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},913:{c:\"A\",f:\"\"},914:{c:\"B\",f:\"\"},917:{c:\"E\",f:\"\"},918:{c:\"Z\",f:\"\"},919:{c:\"H\",f:\"\"},921:{c:\"I\",f:\"\"},922:{c:\"K\",f:\"\"},924:{c:\"M\",f:\"\"},925:{c:\"N\",f:\"\"},927:{c:\"O\",f:\"\"},929:{c:\"P\",f:\"\"},930:{c:\"\\\\398\",f:\"\"},932:{c:\"T\",f:\"\"},935:{c:\"X\",f:\"\"},978:{c:\"\\\\3A5\",f:\"\"},988:{c:\"F\",f:\"\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texOldstyle={32:[0,0,.25],48:[.452,.022,.5],49:[.453,0,.5],50:[.453,0,.5],51:[.452,.216,.5],52:[.464,.194,.5],53:[.453,.216,.5],54:[.665,.022,.5],55:[.463,.216,.5],56:[.666,.021,.5],57:[.453,.216,.5],65:[.728,.05,.798,{sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{sk:.0278}],87:[.683,.053,.988,{sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{sk:.0833}],90:[.683,0,.725,{sk:.139}],160:[0,0,.25],913:[.716,0,.75],914:[.683,0,.708],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],921:[.683,0,.361],922:[.683,0,.778],924:[.683,0,.917],925:[.683,0,.75],927:[.705,.022,.778],929:[.683,0,.681],930:[.705,.022,.778],932:[.677,0,.722],935:[.683,0,.75],978:[.705,0,.778],988:[.68,0,.653]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(219);e.texSize3=n.AddCSS(i.texSize3,{32:{c:\" \"},40:{c:\"(\"},41:{c:\")\"},47:{c:\"/\"},91:{c:\"[\"},93:{c:\"]\"},123:{c:\"{\"},125:{c:\"}\"},8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texSize3={32:[0,0,.25],40:[1.45,.949,.736],41:[1.45,.949,.736],47:[1.45,.949,1.044],91:[1.45,.949,.528],92:[1.45,.949,1.044],93:[1.45,.949,.528],123:[1.45,.949,.75],125:[1.45,.949,.75],160:[0,0,.25],710:[.772,-.564,1.444],732:[.749,-.61,1.444],770:[.772,-.564,0],771:[.749,-.61,0],8260:[1.45,.949,1.044],8730:[1.45,.95,1],8968:[1.45,.949,.583],8969:[1.45,.949,.583],8970:[1.45,.949,.583],8971:[1.45,.949,.583],9001:[1.45,.95,.75],9002:[1.45,.949,.75],10216:[1.45,.95,.75],10217:[1.45,.949,.75],12296:[1.45,.95,.75],12297:[1.45,.949,.75]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(221);e.texSize4=n.AddCSS(i.texSize4,{32:{c:\" \"},40:{c:\"(\"},41:{c:\")\"},47:{c:\"/\"},91:{c:\"[\"},93:{c:\"]\"},123:{c:\"{\"},125:{c:\"}\"},8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"},57685:{c:\"\\\\E153\\\\E152\"},57686:{c:\"\\\\E151\\\\E150\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texSize4={32:[0,0,.25],40:[1.75,1.249,.792],41:[1.75,1.249,.792],47:[1.75,1.249,1.278],91:[1.75,1.249,.583],92:[1.75,1.249,1.278],93:[1.75,1.249,.583],123:[1.75,1.249,.806],125:[1.75,1.249,.806],160:[0,0,.25],710:[.845,-.561,1.889],732:[.823,-.583,1.889],770:[.845,-.561,0],771:[.823,-.583,0],8260:[1.75,1.249,1.278],8730:[1.75,1.25,1],8968:[1.75,1.249,.639],8969:[1.75,1.249,.639],8970:[1.75,1.249,.639],8971:[1.75,1.249,.639],9001:[1.75,1.248,.806],9002:[1.75,1.248,.806],9115:[1.154,.655,.875],9116:[.61,.01,.875],9117:[1.165,.644,.875],9118:[1.154,.655,.875],9119:[.61,.01,.875],9120:[1.165,.644,.875],9121:[1.154,.645,.667],9122:[.602,0,.667],9123:[1.155,.644,.667],9124:[1.154,.645,.667],9125:[.602,0,.667],9126:[1.155,.644,.667],9127:[.899,.01,.889],9128:[1.16,.66,.889],9129:[.01,.899,.889],9130:[.29,.015,.889],9131:[.899,.01,.889],9132:[1.16,.66,.889],9133:[.01,.899,.889],9143:[.935,.885,1.056],10216:[1.75,1.248,.806],10217:[1.75,1.248,.806],12296:[1.75,1.248,.806],12297:[1.75,1.248,.806],57344:[.625,.014,1.056],57345:[.605,.014,1.056],57680:[.12,.213,.45],57681:[.12,.213,.45],57682:[.333,0,.45],57683:[.333,0,.45],57684:[.32,.2,.4],57685:[.333,0,.9],57686:[.12,.213,.9]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),i=r(223);e.texVariant=n.AddCSS(i.texVariant,{32:{c:\" \"},65:{c:\"A\"},66:{c:\"B\"},67:{c:\"C\"},68:{c:\"D\"},69:{c:\"E\"},70:{c:\"F\"},71:{c:\"G\"},72:{c:\"H\"},73:{c:\"I\"},74:{c:\"J\"},75:{c:\"K\"},76:{c:\"L\"},77:{c:\"M\"},78:{c:\"N\"},79:{c:\"O\"},80:{c:\"P\"},81:{c:\"Q\"},82:{c:\"R\"},83:{c:\"S\"},84:{c:\"T\"},85:{c:\"U\"},86:{c:\"V\"},87:{c:\"W\"},88:{c:\"X\"},89:{c:\"Y\"},90:{c:\"Z\"},107:{c:\"k\"},988:{c:\"\\\\E008\"},1008:{c:\"\\\\E009\"},8463:{f:\"\"},8726:{f:\"\"},8740:{c:\"\\\\E006\"},8742:{c:\"\\\\E007\"},8808:{c:\"\\\\E00C\"},8809:{c:\"\\\\E00D\"},8816:{c:\"\\\\E011\"},8817:{c:\"\\\\E00E\"},8840:{c:\"\\\\E016\"},8841:{c:\"\\\\E018\"},8842:{c:\"\\\\E01A\"},8843:{c:\"\\\\E01B\"},10887:{c:\"\\\\E010\"},10888:{c:\"\\\\E00F\"},10955:{c:\"\\\\E017\"},10956:{c:\"\\\\E019\"}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texVariant={32:[0,0,.25],65:[.701,0,.722],66:[.683,0,.667],67:[.702,.019,.722],68:[.683,0,.722],69:[.683,0,.667],70:[.683,0,.611],71:[.702,.019,.778],72:[.683,0,.778],73:[.683,0,.389],74:[.683,.077,.5],75:[.683,0,.778],76:[.683,0,.667],77:[.683,0,.944],78:[.683,.02,.722],79:[.701,.019,.778],80:[.683,0,.611],81:[.701,.181,.778],82:[.683,0,.722],83:[.702,.012,.556],84:[.683,0,.667],85:[.683,.019,.722],86:[.683,.02,.722],87:[.683,.019,1],88:[.683,0,.722],89:[.683,0,.722],90:[.683,0,.667],107:[.683,0,.556],160:[0,0,.25],165:[.683,0,.75],174:[.709,.175,.947],240:[.749,.021,.556],295:[.695,.013,.54],710:[.845,-.561,2.333],732:[.899,-.628,2.333],770:[.845,-.561,0],771:[.899,-.628,0],988:[.605,.085,.778],989:[.605,.085,.778],1008:[.434,.006,.667,{ic:.067}],8245:[.56,-.043,.275],8463:[.695,.013,.54],8487:[.684,.022,.722],8498:[.695,0,.556],8502:[.763,.021,.667],8503:[.764,.043,.444],8504:[.764,.043,.667],8513:[.705,.023,.639],8592:[.437,-.064,.5],8594:[.437,-.064,.5],8602:[.437,-.06,1],8603:[.437,-.06,1],8606:[.417,-.083,1],8608:[.417,-.083,1],8610:[.417,-.083,1.111],8611:[.417,-.083,1.111],8619:[.575,.041,1],8620:[.575,.041,1],8621:[.417,-.083,1.389],8622:[.437,-.06,1],8624:[.722,0,.5],8625:[.722,0,.5],8630:[.461,0,1],8631:[.46,0,1],8634:[.65,.083,.778],8635:[.65,.083,.778],8638:[.694,.194,.417],8639:[.694,.194,.417],8642:[.694,.194,.417],8643:[.694,.194,.417],8644:[.667,0,1],8646:[.667,0,1],8647:[.583,.083,1],8648:[.694,.193,.833],8649:[.583,.083,1],8650:[.694,.194,.833],8651:[.514,.014,1],8652:[.514,.014,1],8653:[.534,.035,1],8654:[.534,.037,1],8655:[.534,.035,1],8666:[.611,.111,1],8667:[.611,.111,1],8669:[.417,-.083,1],8672:[.437,-.064,1.334],8674:[.437,-.064,1.334],8705:[.846,.021,.5],8708:[.86,.166,.556],8709:[.587,0,.778],8717:[.44,0,.429],8722:[.27,-.23,.5],8724:[.766,.093,.778],8726:[.43,.023,.778],8733:[.472,-.028,.778],8736:[.694,0,.722],8737:[.714,.02,.722],8738:[.551,.051,.722],8739:[.43,.023,.222],8740:[.43,.023,.222],8741:[.431,.023,.389],8742:[.431,.024,.389],8756:[.471,.082,.667],8757:[.471,.082,.667],8764:[.365,-.132,.778],8765:[.367,-.133,.778],8769:[.467,-.032,.778],8770:[.463,-.034,.778],8774:[.652,.155,.778],8776:[.481,-.05,.778],8778:[.579,.039,.778],8782:[.492,-.008,.778],8783:[.492,-.133,.778],8785:[.609,.108,.778],8786:[.601,.101,.778],8787:[.601,.102,.778],8790:[.367,-.133,.778],8791:[.721,-.133,.778],8796:[.859,-.133,.778],8806:[.753,.175,.778],8807:[.753,.175,.778],8808:[.752,.284,.778],8809:[.752,.284,.778],8812:[.75,.25,.5],8814:[.708,.209,.778],8815:[.708,.209,.778],8816:[.919,.421,.778],8817:[.919,.421,.778],8818:[.732,.228,.778],8819:[.732,.228,.778],8822:[.681,.253,.778],8823:[.681,.253,.778],8828:[.58,.153,.778],8829:[.58,.154,.778],8830:[.732,.228,.778],8831:[.732,.228,.778],8832:[.705,.208,.778],8833:[.705,.208,.778],8840:[.828,.33,.778],8841:[.828,.33,.778],8842:[.634,.255,.778],8843:[.634,.254,.778],8847:[.539,.041,.778],8848:[.539,.041,.778],8858:[.582,.082,.778],8859:[.582,.082,.778],8861:[.582,.082,.778],8862:[.689,0,.778],8863:[.689,0,.778],8864:[.689,0,.778],8865:[.689,0,.778],8872:[.694,0,.611],8873:[.694,0,.722],8874:[.694,0,.889],8876:[.695,0,.611],8877:[.695,0,.611],8878:[.695,0,.722],8879:[.695,0,.722],8882:[.539,.041,.778],8883:[.539,.041,.778],8884:[.636,.138,.778],8885:[.636,.138,.778],8888:[.408,-.092,1.111],8890:[.431,.212,.556],8891:[.716,0,.611],8892:[.716,0,.611],8901:[.189,0,.278],8903:[.545,.044,.778],8905:[.492,-.008,.778],8906:[.492,-.008,.778],8907:[.694,.022,.778],8908:[.694,.022,.778],8909:[.464,-.036,.778],8910:[.578,.021,.76],8911:[.578,.022,.76],8912:[.54,.04,.778],8913:[.54,.04,.778],8914:[.598,.022,.667],8915:[.598,.022,.667],8916:[.736,.022,.667],8918:[.541,.041,.778],8919:[.541,.041,.778],8920:[.568,.067,1.333],8921:[.568,.067,1.333],8922:[.886,.386,.778],8923:[.886,.386,.778],8926:[.734,0,.778],8927:[.734,0,.778],8928:[.801,.303,.778],8929:[.801,.303,.778],8934:[.73,.359,.778],8935:[.73,.359,.778],8936:[.73,.359,.778],8937:[.73,.359,.778],8938:[.706,.208,.778],8939:[.706,.208,.778],8940:[.802,.303,.778],8941:[.801,.303,.778],8994:[.378,-.122,.778],8995:[.378,-.143,.778],9416:[.709,.175,.902],9484:[.694,-.306,.5],9488:[.694,-.306,.5],9492:[.366,.022,.5],9496:[.366,.022,.5],9585:[.694,.195,.889],9586:[.694,.195,.889],9632:[.689,0,.778],9633:[.689,0,.778],9650:[.575,.02,.722],9651:[.575,.02,.722],9654:[.539,.041,.778],9660:[.576,.019,.722],9661:[.576,.019,.722],9664:[.539,.041,.778],9674:[.716,.132,.667],9733:[.694,.111,.944],10003:[.706,.034,.833],10016:[.716,.022,.833],10731:[.716,.132,.667],10846:[.813,.097,.611],10877:[.636,.138,.778],10878:[.636,.138,.778],10885:[.762,.29,.778],10886:[.762,.29,.778],10887:[.801,.303,.778],10888:[.801,.303,.778],10889:[.761,.387,.778],10890:[.761,.387,.778],10891:[1.003,.463,.778],10892:[1.003,.463,.778],10901:[.636,.138,.778],10902:[.636,.138,.778],10933:[.752,.286,.778],10934:[.752,.286,.778],10935:[.761,.294,.778],10936:[.761,.294,.778],10937:[.761,.337,.778],10938:[.761,.337,.778],10949:[.753,.215,.778],10950:[.753,.215,.778],10955:[.752,.332,.778],10956:[.752,.333,.778],57350:[.43,.023,.222],57351:[.431,.024,.389],57352:[.605,.085,.778],57353:[.434,.006,.667,{ic:.067}],57356:[.752,.284,.778],57357:[.752,.284,.778],57358:[.919,.421,.778],57359:[.801,.303,.778],57360:[.801,.303,.778],57361:[.919,.421,.778],57366:[.828,.33,.778],57367:[.752,.332,.778],57368:[.828,.33,.778],57369:[.752,.333,.778],57370:[.634,.255,.778],57371:[.634,.254,.778]}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(23);e.HDW1=[.75,.25,.875],e.HDW2=[.583,.082,1],e.HDW3=[.583,.082,.5],e.VSIZES=[1,1.2,1.8,2.4,3];var i={c:47,dir:n.V,sizes:e.VSIZES},o={c:175,dir:n.H,sizes:[.59],stretch:[0,175],HDW:[.59,-.544,.5]},a={c:710,dir:n.H,sizes:[.517,.817,1.335,1.777,1.909]},s={c:732,dir:n.H,sizes:[.583,.805,1.33,1.773,1.887]},c={c:8211,dir:n.H,sizes:[.5],stretch:[0,8211],HDW:[.285,-.248,.5]},l={c:8592,dir:n.H,sizes:[1],stretch:[8592,8722],HDW:e.HDW2},u={c:8594,dir:n.H,sizes:[1],stretch:[0,8722,8594],HDW:e.HDW2},h={c:8596,dir:n.H,sizes:[1],stretch:[8592,8722,8594],HDW:e.HDW2},f={c:8612,dir:n.H,stretch:[8592,8722,8739],HDW:e.HDW3,min:1.278},p={c:8614,dir:n.H,sizes:[1],stretch:[8739,8722,8594],HDW:e.HDW2},d={c:8656,dir:n.H,sizes:[1],stretch:[8656,61],HDW:e.HDW2},m={c:8658,dir:n.H,sizes:[1],stretch:[0,61,8658],HDW:e.HDW2},y={c:8660,dir:n.H,sizes:[1],stretch:[8656,61,8658],HDW:e.HDW2},v={c:8722,dir:n.H,sizes:[.778],stretch:[0,8722],HDW:[.583,.082,.778]},b={c:8739,dir:n.V,sizes:[1],stretch:[0,8739],HDW:[.75,.249,.278]},g={c:9180,dir:n.H,sizes:[.778,1],schar:[8994,8994],stretch:[57680,57684,57681],HDW:[.32,.2,.5]},M={c:9181,dir:n.H,sizes:[.778,1],schar:[8995,8995],stretch:[57682,57684,57683],HDW:[.32,.2,.5]},O={c:9182,dir:n.H,stretch:[57680,57684,57681,57685],HDW:[.32,.2,.5],min:1.8},x={c:9183,dir:n.H,stretch:[57682,57684,57683,57686],HDW:[.32,.2,.5],min:1.8},S={c:10216,dir:n.V,sizes:e.VSIZES},E={c:10217,dir:n.V,sizes:e.VSIZES},C={c:10502,dir:n.H,stretch:[8656,61,8739],HDW:e.HDW3,min:1.278},_={c:10503,dir:n.H,stretch:[8872,61,8658],HDW:e.HDW3,min:1.278};e.delimiters={40:{dir:n.V,sizes:e.VSIZES,stretch:[9115,9116,9117],HDW:[.75,.25,.875]},41:{dir:n.V,sizes:e.VSIZES,stretch:[9118,9119,9120],HDW:[.75,.25,.875]},45:v,47:i,61:{dir:n.H,sizes:[.767],stretch:[0,61],HDW:[.583,.082,.778]},91:{dir:n.V,sizes:e.VSIZES,stretch:[9121,9122,9123],HDW:e.HDW1},92:{dir:n.V,sizes:e.VSIZES},93:{dir:n.V,sizes:e.VSIZES,stretch:[9124,9125,9126],HDW:e.HDW1},94:a,95:c,123:{dir:n.V,sizes:e.VSIZES,stretch:[9127,9130,9129,9128],HDW:[.75,.25,.889]},124:{dir:n.V,sizes:[1],stretch:[0,8739],HDW:[.75,.249,.278]},125:{dir:n.V,sizes:e.VSIZES,stretch:[9131,9130,9133,9132],HDW:[.75,.25,.889]},126:s,175:o,710:a,713:o,732:s,770:a,771:s,818:c,8211:c,8212:c,8213:c,8214:{dir:n.V,sizes:[.602,1],schar:[0,8741],stretch:[0,8741],HDW:[.75,.25,.5]},8215:c,8254:o,8407:u,8592:l,8593:{dir:n.V,sizes:[.888],stretch:[8593,9168],HDW:[.694,.193,.667]},8594:u,8595:{dir:n.V,sizes:[.888],stretch:[0,9168,8595],HDW:[.694,.194,.667]},8596:h,8597:{dir:n.V,sizes:[1.044],stretch:[8593,9168,8595],HDW:[.772,.272,.667]},8606:{dir:n.H,sizes:[1],stretch:[8606,8722],HDW:e.HDW2},8608:{dir:n.H,sizes:[1],stretch:[0,8722,8608],HDW:e.HDW2},8612:f,8613:{dir:n.V,stretch:[8593,9168,8869],HDW:e.HDW1,min:1.555},8614:p,8615:{dir:n.V,stretch:[8868,9168,8595],HDW:e.HDW1,min:1.555},8624:{dir:n.V,sizes:[.722],stretch:[8624,9168],HDW:[.722,0,.667]},8625:{dir:n.V,sizes:[.722],stretch:[8625,9168],HDW:[.722,0,.667]},8636:{dir:n.H,sizes:[1],stretch:[8636,8722],HDW:e.HDW2},8637:{dir:n.H,sizes:[1],stretch:[8637,8722],HDW:e.HDW2},8638:{dir:n.V,sizes:[.888],stretch:[8638,9168],HDW:[.694,.194,.667]},8639:{dir:n.V,sizes:[.888],stretch:[8639,9168],HDW:[.694,.194,.667]},8640:{dir:n.H,sizes:[1],stretch:[0,8722,8640],HDW:e.HDW2},8641:{dir:n.H,sizes:[1],stretch:[0,8722,8641],HDW:e.HDW2},8642:{dir:n.V,sizes:[.888],stretch:[0,9168,8642],HDW:[.694,.194,.667]},8643:{dir:n.V,sizes:[.888],stretch:[0,9168,8643],HDW:[.694,.194,.667]},8656:d,8657:{dir:n.V,sizes:[.888],stretch:[8657,8214],HDW:[.694,.194,.778]},8658:m,8659:{dir:n.V,sizes:[.888],stretch:[0,8214,8659],HDW:[.694,.194,.778]},8660:y,8661:{dir:n.V,sizes:[1.044],stretch:[8657,8214,8659],HDW:[.772,.272,.778]},8666:{dir:n.H,sizes:[1],stretch:[8666,8801],HDW:[.464,-.036,1]},8667:{dir:n.H,sizes:[1],stretch:[0,8801,8667],HDW:[.464,-.036,1]},8722:v,8725:i,8730:{dir:n.V,sizes:e.VSIZES,stretch:[57345,57344,9143],HDW:[.8,.2,1.056]},8739:b,8741:{dir:n.V,sizes:[1],stretch:[0,8741],HDW:[.75,.25,.5]},8968:{dir:n.V,sizes:e.VSIZES,stretch:[9121,9122],HDW:e.HDW1},8969:{dir:n.V,sizes:e.VSIZES,stretch:[9124,9125],HDW:e.HDW1},8970:{dir:n.V,sizes:e.VSIZES,stretch:[0,9122,9123],HDW:e.HDW1},8971:{dir:n.V,sizes:e.VSIZES,stretch:[0,9125,9126],HDW:e.HDW1},8978:g,8994:g,8995:M,9001:S,9002:E,9130:{dir:n.V,sizes:[.32],stretch:[9130,9130,9130],HDW:[.29,.015,.889]},9135:c,9136:{dir:n.V,sizes:[.989],stretch:[9127,9130,9133],HDW:[.744,.244,.889]},9137:{dir:n.V,sizes:[.989],stretch:[9131,9130,9129],HDW:[.744,.244,.889]},9140:{dir:n.H,stretch:[9484,8722,9488],HDW:e.HDW3,min:1},9141:{dir:n.H,stretch:[9492,8722,9496],HDW:e.HDW3,min:1},9168:{dir:n.V,sizes:[.602,1],schar:[0,8739],stretch:[0,8739],HDW:[.602,0,.278]},9180:g,9181:M,9182:O,9183:x,9184:{dir:n.H,stretch:[714,713,715],HDW:[.59,-.544,.5],min:1},9185:{dir:n.H,stretch:[715,713,714],HDW:[.59,-.544,.5],min:1},9472:c,10072:b,10216:S,10217:E,10222:{dir:n.V,sizes:[.989],stretch:[9127,9130,9129],HDW:[.744,.244,.889]},10223:{dir:n.V,sizes:[.989],stretch:[9131,9130,9133],HDW:[.744,.244,.889]},10229:l,10230:u,10231:h,10232:d,10233:m,10234:y,10235:f,10236:p,10237:C,10238:_,10502:C,10503:_,10574:{dir:n.H,stretch:[8636,8722,8640],HDW:e.HDW3,min:2},10575:{dir:n.V,stretch:[8638,9168,8642],HDW:e.HDW1,min:1.776},10576:{dir:n.H,stretch:[8637,8722,8641],HDW:e.HDW3,min:2},10577:{dir:n.V,stretch:[8639,9168,8643],HDW:e.HDW1,min:.5},10586:{dir:n.H,stretch:[8636,8722,8739],HDW:e.HDW3,min:1.278},10587:{dir:n.H,stretch:[8739,8722,8640],HDW:e.HDW3,min:1.278},10588:{dir:n.V,stretch:[8638,9168,8869],HDW:e.HDW1,min:1.556},10589:{dir:n.V,stretch:[8868,9168,8642],HDW:e.HDW1,min:1.556},10590:{dir:n.H,stretch:[8637,8722,8739],HDW:e.HDW3,min:1.278},10591:{dir:n.H,stretch:[8739,8722,8641],HDW:e.HDW3,min:1.278},10592:{dir:n.V,stretch:[8639,9168,8869],HDW:e.HDW1,min:1.776},10593:{dir:n.V,stretch:[8868,9168,8643],HDW:e.HDW1,min:1.776},12296:S,12297:E,65079:O,65080:x}},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},u=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=(o=ContextMenu.ContextMenu,i(h,o),h.prototype.post=function(t,e){if(this.mathItem){if(void 0!==e){var r=this.mathItem.inputJax.name,n=this.findID(\"Show\",\"Original\");n.content=\"MathML\"===r?\"Original MathML\":r+\" Commands\",this.findID(\"Copy\",\"Original\").content=n.content;var i=this.findID(\"Settings\",\"semantics\");\"MathML\"===r?i.disable():i.enable(),this.getAnnotationMenu(),this.dynamicSubmenus()}o.prototype.post.call(this,t,e)}},h.prototype.unpost=function(){o.prototype.unpost.call(this),this.mathItem=null},h.prototype.findID=function(){for(var e,t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=this,o=null;try{for(var a=l(r),s=a.next();!s.done;s=a.next()){var c=s.value;i?i=(o=i.find(c))instanceof ContextMenu.Submenu?o.getSubmenu():null:o=null}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}return o},h.prototype.getAnnotationMenu=function(){var t=this,e=this.getAnnotations(this.getSemanticNode());this.createAnnotationMenu(\"Show\",e,function(){return t.showAnnotation.post()}),this.createAnnotationMenu(\"Copy\",e,function(){return t.copyAnnotation()})},h.prototype.getSemanticNode=function(){for(var t=this.mathItem.root;t&&!t.isKind(\"semantics\");){if(t.isToken||1!==t.childNodes.length)return;t=t.childNodes[0]}return t},h.prototype.getAnnotations=function(t){var e,r,n=[];if(!t)return n;try{for(var i=l(t.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;if(a.isKind(\"annotation\")){var s=this.annotationMatch(a);if(s){var c=a.childNodes.reduce(function(t,e){return t+e.toString()},\"\");n.push([s,c])}}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return n},h.prototype.annotationMatch=function(t){var e,r,n=t.attributes.get(\"encoding\");try{for(var i=l(Object.keys(this.annotationTypes)),o=i.next();!o.done;o=i.next()){var a=o.value;if(0<=this.annotationTypes[a].indexOf(n))return a}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return null},h.prototype.createAnnotationMenu=function(t,e,i){var o=this,r=this.findID(t,\"Annotation\");r.setSubmenu(ContextMenu.SubMenu.parse({items:e.map(function(t){var e=u(t,2),r=e[0],n=e[1];return{type:\"command\",id:r,content:r,action:function(){o.annotation=n,i()}}}),id:\"annotations\"},r)),e.length?r.enable():r.disable()},h.prototype.dynamicSubmenus=function(){var e,t;try{for(var r=l(h.DynamicSubmenus),n=r.next();!n.done;n=r.next()){var i=u(n.value,2),o=i[0],a=i[1],s=this.find(o);if(s){var c=a(this,s);s.setSubmenu(c),c.getItems().length?s.enable():s.disable()}}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},h.DynamicSubmenus=new Map,h);function h(){var t=null!==o&&o.apply(this,arguments)||this;return t.mathItem=null,t.annotation=\"\",t.annotationTypes={},t}e.MJContextMenu=a},function(t,e,r){\"use strict\";var u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(20),l=r(13),n=r(3),i=r(225),a=r(227),s=r(228),c=\"undefined\"!=typeof window&&window.navigator&&\"Mac\"===window.navigator.platform.substr(0,3),h=(Object.defineProperty(f.prototype,\"isLoading\",{get:function(){return 0<f.loading},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,\"loadingPromise\",{get:function(){return this.isLoading?(f._loadingPromise||(f._loadingPromise=new Promise(function(t,e){f._loadingOK=t,f._loadingFailed=e})),f._loadingPromise):Promise.resolve()},enumerable:!0,configurable:!0}),f.prototype.initSettings=function(){this.settings=this.options.settings,this.jax=this.options.jax;var t=this.document.outputJax;this.jax[t.name]=t,this.settings.renderer=t.name,window.MathJax._.a11y&&window.MathJax._.a11y.explorer&&Object.assign(this.settings,this.document.options.a11y),this.settings.scale=t.options.scale,this.defaultSettings=Object.assign({},this.settings)},f.prototype.initMenu=function(){var e=this;this.menu=i.MJContextMenu.parse({menu:{id:\"MathJax_Menu\",pool:[this.variable(\"texHints\"),this.variable(\"semantics\"),this.variable(\"zoom\"),this.variable(\"zscale\"),this.variable(\"renderer\",function(t){return e.setRenderer(t)}),this.variable(\"alt\"),this.variable(\"cmd\"),this.variable(\"ctrl\"),this.variable(\"shift\"),this.variable(\"scale\",function(t){return e.setScale(t)}),this.variable(\"explorer\",function(t){return e.setExplorer(t)}),this.a11yVar(\"highlight\"),this.a11yVar(\"backgroundColor\"),this.a11yVar(\"foregroundColor\"),this.a11yVar(\"speech\"),this.a11yVar(\"subtitles\"),this.a11yVar(\"braille\"),this.a11yVar(\"viewBraille\"),this.a11yVar(\"speechRules\"),this.a11yVar(\"magnification\"),this.a11yVar(\"magnify\"),this.a11yVar(\"treeColoring\"),this.a11yVar(\"infoType\"),this.a11yVar(\"infoRole\"),this.a11yVar(\"infoPrefix\"),this.variable(\"autocollapse\"),this.variable(\"collapsible\",function(t){return e.setCollapsible(t)}),this.variable(\"inTabOrder\",function(t){return e.setTabOrder(t)})],items:[this.submenu(\"Show\",\"Show Math As\",[this.command(\"MathMLcode\",\"MathML Code\",function(){return e.mathmlCode.post()}),this.command(\"Original\",\"Original Form\",function(){return e.originalText.post()}),this.submenu(\"Annotation\",\"Annotation\")]),this.submenu(\"Copy\",\"Copy to Clipboard\",[this.command(\"MathMLcode\",\"MathML Code\",function(){return e.copyMathML()}),this.command(\"Original\",\"Original Form\",function(){return e.copyOriginal()}),this.submenu(\"Annotation\",\"Annotation\")]),this.rule(),this.submenu(\"Settings\",\"Math Settings\",[this.submenu(\"Renderer\",\"Math Renderer\",this.radioGroup(\"renderer\",[[\"CHTML\"],[\"SVG\"]])),this.rule(),this.submenu(\"ZoomTrigger\",\"Zoom Trigger\",[this.command(\"ZoomNow\",\"Zoom Once Now\",function(){return e.zoom(null,\"\",e.menu.mathItem)}),this.rule(),this.radioGroup(\"zoom\",[[\"Click\"],[\"DoubleClick\",\"Double-Click\"],[\"NoZoom\",\"No Zoom\"]]),this.rule(),this.label(\"TriggerRequires\",\"Trigger Requires:\"),this.checkbox(c?\"Option\":\"Alt\",c?\"Option\":\"Alt\",\"alt\"),this.checkbox(\"Command\",\"Command\",\"cmd\",{hidden:!c}),this.checkbox(\"Control\",\"Control\",\"ctrl\",{hiddne:c}),this.checkbox(\"Shift\",\"Shift\",\"shift\")]),this.submenu(\"ZoomFactor\",\"Zoom Factor\",this.radioGroup(\"zscale\",[[\"150%\"],[\"175%\"],[\"200%\"],[\"250%\"],[\"300%\"],[\"400%\"]])),this.rule(),this.command(\"Scale\",\"Scale All Math...\",function(){return e.scaleAllMath()}),this.rule(),this.checkbox(\"texHints\",\"Add TeX hints to MathML\",\"texHints\"),this.checkbox(\"semantics\",\"Add original as annotation\",\"semantics\"),this.rule(),this.command(\"Reset\",\"Reset to defaults\",function(){return e.resetDefaults()})]),this.submenu(\"Accessibility\",\"Accessibility\",[this.checkbox(\"Activate\",\"Activate\",\"explorer\"),this.submenu(\"Speech\",\"Speech\",[this.checkbox(\"Speech\",\"Speech Output\",\"speech\"),this.checkbox(\"Subtitles\",\"Speech Subtities\",\"subtitles\"),this.checkbox(\"Braille\",\"Braille Output\",\"braille\"),this.checkbox(\"View Braille\",\"Braille Subtitles\",\"viewBraille\"),this.rule(),this.submenu(\"Mathspeak\",\"Mathspeak Rules\",this.radioGroup(\"speechRules\",[[\"mathspeak-default\",\"Verbose\"],[\"mathspeak-brief\",\"Brief\"],[\"mathspeak-sbrief\",\"Superbrief\"]])),this.submenu(\"Clearspeak\",\"Clearspeak Rules\",this.radioGroup(\"speechRules\",[[\"clearspeak-default\",\"Auto\"]])),this.submenu(\"ChromeVox\",\"ChromeVox Rules\",this.radioGroup(\"speechRules\",[[\"default-default\",\"Verbose\"],[\"default-short\",\"Short\"],[\"default-alternative\",\"Alternative\"]]))]),this.submenu(\"Highlight\",\"Highlight\",[this.submenu(\"Background\",\"Background\",this.radioGroup(\"backgroundColor\",[[\"Blue\"],[\"Red\"],[\"Green\"],[\"Yellow\"],[\"Cyan\"],[\"Magenta\"],[\"White\"],[\"Black\"]])),this.submenu(\"Foreground\",\"Foreground\",this.radioGroup(\"foregroundColor\",[[\"Black\"],[\"White\"],[\"Magenta\"],[\"Cyan\"],[\"Yellow\"],[\"Green\"],[\"Red\"],[\"Blue\"]])),this.rule(),this.radioGroup(\"highlight\",[[\"None\"],[\"Hover\"],[\"Flame\"]]),this.rule(),this.checkbox(\"TreeColoring\",\"Tree Coloring\",\"treeColoring\")]),this.submenu(\"Magnification\",\"Magnification\",[this.radioGroup(\"magnification\",[[\"None\"],[\"Keyboard\"],[\"Mouse\"]]),this.rule(),this.radioGroup(\"magnify\",[[\"200%\"],[\"300%\"],[\"400%\"],[\"500%\"]])]),this.submenu(\"Semantic Info\",\"Semantic Info\",[this.checkbox(\"Type\",\"Type\",\"infoType\"),this.checkbox(\"Role\",\"Role\",\"infoRole\"),this.checkbox(\"Prefix\",\"Prefix\",\"infoPrefix\")],!0),this.rule(),this.checkbox(\"Collapsible\",\"Collapsible Math\",\"collapsible\"),this.checkbox(\"AutoCollapse\",\"Auto Collapse\",\"autocollapse\",{disabled:!0}),this.rule(),this.checkbox(\"InTabOrder\",\"Include in Tab Order\",\"inTabOrder\")]),this.submenu(\"Language\",\"Language\"),this.rule(),this.command(\"About\",\"About MathJax\",function(){return e.about.post()}),this.command(\"Help\",\"MathJax Help\",function(){return e.help.post()})]}});var t=this.menu;this.about.attachMenu(t),this.help.attachMenu(t),this.originalText.attachMenu(t),this.annotationText.attachMenu(t),this.mathmlCode.attachMenu(t),this.zoomBox.attachMenu(t),this.checkLoadableItems(),this.enableExplorerItems(this.settings.explorer),t.showAnnotation=this.annotationText,t.copyAnnotation=this.copyAnnotation.bind(this),t.annotationTypes=this.options.annotationTypes,ContextMenu.CssStyles.addInfoStyles(this.document.document),ContextMenu.CssStyles.addMenuStyles(this.document.document)},f.prototype.checkLoadableItems=function(){var e,t,r=window.MathJax;if(r&&r._&&r.loader&&r.startup)!this.settings.collapsible||r._.a11y&&r._.a11y.complexity||this.loadA11y(\"complexity\"),!this.settings.explorer||r._.a11y&&r._.a11y.explorer||this.loadA11y(\"explorer\");else{var n=this.menu;try{for(var i=u(Object.keys(this.jax)),o=i.next();!o.done;o=i.next()){var a=o.value;this.jax[a]||n.findID(\"Settings\",\"Renderer\",a).disable()}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}n.findID(\"Accessibility\",\"Explorer\").disable(),n.findID(\"Accessibility\",\"AutoCollapse\").disable(),n.findID(\"Accessibility\",\"Collapsible\").disable()}},f.prototype.enableExplorerItems=function(t){var e,r,n=this.menu.findID(\"Accessibility\",\"Activate\").getMenu();try{for(var i=u(n.getItems().slice(1)),o=i.next();!o.done;o=i.next()){var a=o.value;if(a instanceof ContextMenu.Rule)break;t?a.enable():a.disable()}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},f.prototype.mergeUserSettings=function(){try{var t=localStorage.getItem(f.MENU_STORAGE);if(!t)return;Object.assign(this.settings,JSON.parse(t)),this.setA11y(this.settings)}catch(t){console.log(\"MathJax localStorage error: \"+t.message)}},f.prototype.saveUserSettings=function(){var e,t,r={};try{for(var n=u(Object.keys(this.settings)),i=n.next();!i.done;i=n.next()){var o=i.value;this.settings[o]!==this.defaultSettings[o]&&(r[o]=this.settings[o])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}try{Object.keys(r).length?localStorage.setItem(f.MENU_STORAGE,JSON.stringify(r)):localStorage.removeItem(f.MENU_STORAGE)}catch(t){console.log(\"MathJax localStorage error: \"+t.message)}},f.prototype.setA11y=function(t){window.MathJax._.a11y&&window.MathJax._.a11y.explorer&&window.MathJax._.a11y.explorer_ts.setA11yOptions(this.document,t)},f.prototype.getA11y=function(t){if(window.MathJax._.a11y&&window.MathJax._.a11y.explorer)return this.document.options.a11y[t]},f.prototype.setScale=function(t){this.document.outputJax.options.scale=parseFloat(t),this.document.rerender()},f.prototype.setRenderer=function(e){var r=this;if(this.jax[e])this.setOutputJax(e);else{var n=e.toLowerCase();this.loadComponent(\"output/\"+n,function(){var t=window.MathJax.startup;n in t.constructors&&(t.useOutput(n,!0),t.output=t.getOutputJax(),r.jax[e]=t.output,r.setOutputJax(e))})}},f.prototype.setOutputJax=function(t){this.jax[t].setAdaptor(this.document.adaptor),this.document.outputJax=this.jax[t],this.rerender()},f.prototype.setTabOrder=function(t){this.menu.getStore().inTaborder(t)},f.prototype.setExplorer=function(t){this.enableExplorerItems(t),!t||window.MathJax._.a11y&&window.MathJax._.a11y.explorer?this.rerender(this.settings.collapsible?l.STATE.RERENDER:l.STATE.COMPILED):this.loadA11y(\"explorer\")},f.prototype.setCollapsible=function(t){!t||window.MathJax._.a11y&&window.MathJax._.a11y.complexity?this.rerender(l.STATE.COMPILED):this.loadA11y(\"complexity\")},f.prototype.scaleAllMath=function(){var t=(100*parseFloat(this.settings.scale)).toFixed(1).replace(/.0$/,\"\"),e=prompt(\"Scale all mathematics (compared to surrounding text) by\",t+\"%\");if(e)if(e.match(/^\\s*\\d+(\\.\\d*)?\\s*%?\\s*$/)){var r=parseFloat(e)/100;r?this.setScale(String(r)):alert(\"The scale should not be zero\")}else alert(\"The scale should be a percentage (e.g., 120%)\")},f.prototype.resetDefaults=function(){var e,t;f.loading++;var r=this.menu.getPool(),n=this.defaultSettings;try{for(var i=u(Object.keys(this.settings)),o=i.next();!o.done;o=i.next()){var a=o.value,s=r.lookup(a);if(s){s.setValue(n[a]);var c=s.items[0];c&&c.executeCallbacks_()}else this.settings[a]=n[a]}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}f.loading--,this.rerender(l.STATE.COMPILED)},f.prototype.checkComponent=function(t){var e=f.loadingPromises.get(t);e&&o.mathjax.retryAfter(e)},f.prototype.loadComponent=function(t,e){if(!f.loadingPromises.has(t)){var r=window.MathJax.loader;if(r){f.loading++;var n=r.load(t).then(function(){f.loading--,f.loadingPromises.delete(t),e(),0===f.loading&&f._loadingPromise&&(f._loadingPromise=null,f._loadingOK())}).catch(function(t){f._loadingPromise?(f._loadingPromise=null,f._loadingFailed(t)):console.log(t)});f.loadingPromises.set(t,n)}}},f.prototype.loadA11y=function(r){var n=this,i=!l.STATE.ENRICHED;this.loadComponent(\"a11y/\"+r,function(){var t=window.MathJax.startup;o.mathjax.handlers.unregister(t.handler),t.handler=t.getHandler(),o.mathjax.handlers.register(t.handler);var e=n.document;n.document=t.document=t.getDocument(),(n.document.menu=n).transferMathList(e),f._loadingPromise||n.rerender(\"complexity\"===r||i?l.STATE.COMPILED:l.STATE.TYPESET)})},f.prototype.transferMathList=function(t){var e,r,n=this.document.options.MathItem;try{for(var i=u(t.math),o=i.next();!o.done;o=i.next()){var a=o.value,s=new n;Object.assign(s,a),this.document.math.push(s)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},f.prototype.formatSource=function(t){return t.trim().replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")},f.prototype.toMML=function(t){return this.MmlVisitor.visitTree(t.root,t,{texHints:this.settings.texHints,semantics:this.settings.semantics&&\"MathML\"!==t.inputJax.name})},f.prototype.zoom=function(t,e,r){t&&!this.isZoomEvent(t,e)||(this.menu.mathItem=r,t&&this.menu.post(t),this.zoomBox.post())},f.prototype.isZoomEvent=function(t,e){return this.settings.zoom===e&&(!this.settings.alt||t.altKey)&&(!this.settings.ctrl||t.ctrlKey)&&(!this.settings.cmd||t.metaKey)&&(!this.settings.shift||t.shiftKey)},f.prototype.rerender=function(t){void 0===t&&(t=l.STATE.TYPESET),this.rerenderStart=Math.min(t,this.rerenderStart),f.loading||(this.document.rerender(this.rerenderStart),this.rerenderStart=l.STATE.LAST)},f.prototype.copyMathML=function(){this.copyToClipboard(this.toMML(this.menu.mathItem))},f.prototype.copyOriginal=function(){this.copyToClipboard(this.menu.mathItem.math)},f.prototype.copyAnnotation=function(){this.copyToClipboard(this.menu.annotation)},f.prototype.copyToClipboard=function(t){var e=document.createElement(\"textarea\");e.value=t,e.setAttribute(\"readonly\",\"\"),e.style.cssText=\"height: 1px; width: 1px; padding: 1px; position: absolute; left: -10px\",document.body.appendChild(e),e.select();try{document.execCommand(\"copy\")}catch(t){alert(\"Can't copy to clipboard: \"+t.message)}document.body.removeChild(e)},f.prototype.addMenu=function(e){var r=this,t=e.typesetRoot;t.addEventListener(\"contextmenu\",function(){return r.menu.mathItem=e},!0),t.addEventListener(\"keydown\",function(){return r.menu.mathItem=e},!0),t.addEventListener(\"click\",function(t){return r.zoom(t,\"Click\",e)},!0),t.addEventListener(\"dblclick\",function(t){return r.zoom(t,\"DoubleClick\",e)},!0),this.menu.getStore().insert(t)},f.prototype.clear=function(){this.menu.getStore().clear()},f.prototype.variable=function(e,r){var n=this;return{name:e,getter:function(){return n.settings[e]},setter:function(t){n.settings[e]=t,r&&r(t),n.saveUserSettings()}}},f.prototype.a11yVar=function(r){var n=this;return{name:r,getter:function(){return n.getA11y(r)},setter:function(t){n.settings[r]=t;var e={};e[r]=t,n.setA11y(e),n.saveUserSettings()}}},f.prototype.submenu=function(t,e,r,n){var i,o;void 0===r&&(r=[]),void 0===n&&(n=!1);var a=[];try{for(var s=u(r),c=s.next();!c.done;c=s.next()){var l=c.value;Array.isArray(l)?a=a.concat(l):a.push(l)}}catch(t){i={error:t}}finally{try{c&&!c.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return{type:\"submenu\",id:t,content:e,menu:{items:a},disabled:0===a.length||n}},f.prototype.command=function(t,e,r,n){return void 0===n&&(n={}),Object.assign({type:\"command\",id:t,content:e,action:r},n)},f.prototype.checkbox=function(t,e,r,n){return void 0===n&&(n={}),Object.assign({type:\"checkbox\",id:t,content:e,variable:r},n)},f.prototype.radioGroup=function(e,t){var r=this;return t.map(function(t){return r.radio(t[0],t[1]||t[0],e)})},f.prototype.radio=function(t,e,r,n){return void 0===n&&(n={}),Object.assign({type:\"radio\",id:t,content:e,variable:r},n)},f.prototype.label=function(t,e){return{type:\"label\",id:t,content:e}},f.prototype.rule=function(){return{type:\"rule\"}},f.MENU_STORAGE=\"MathJax-Menu-Settings\",f.OPTIONS={settings:{texHints:!0,semantics:!1,zoom:\"NoZoom\",zscale:\"200%\",renderer:\"CHTML\",alt:!1,cmd:!1,ctrl:!1,shift:!1,scale:1,autocollapse:!1,collapsible:!1,inTabOrder:!0,explorer:!1},jax:{CHTML:null,SVG:null},annotationTypes:n.expandable({TeX:[\"TeX\",\"LaTeX\",\"application/x-tex\"],StarMath:[\"StarMath 5.0\"],Maple:[\"Maple\"],ContentMathML:[\"MathML-Content\",\"application/mathml-content+xml\"],OpenMath:[\"OpenMath\"]})},f.loading=0,f.loadingPromises=new Map,f._loadingPromise=null,f._loadingOK=null,f._loadingFailed=null,f);function f(t,e){var r=this;void 0===e&&(e={}),this.settings=null,this.defaultSettings=null,this.menu=null,this.MmlVisitor=new a.MmlVisitor,this.jax={CHTML:null,SVG:null},this.rerenderStart=l.STATE.LAST,this.about=new ContextMenu.Info('<b style=\"font-size:120%;\">MathJax</b> v'+o.mathjax.version,function(){var t=[];return t.push(\"Input Jax: \"+r.document.inputJax.map(function(t){return t.name}).join(\", \")),t.push(\"Output Jax: \"+r.document.outputJax.name),t.push(\"Document Type: \"+r.document.kind),t.join(\"<br/>\")},'<a href=\"https://www.mathjax.org\">www.mathjax.org</a>'),this.help=new ContextMenu.Info(\"<b>MathJax Help</b>\",function(){return[\"<p><b>MathJax</b> is a JavaScript library that allows page\",\" authors to include mathematics within their web pages.\",\" As a reader, you don't need to do anything to make that happen.</p>\",\"<p><b>Browsers</b>: MathJax works with all modern browsers including\",\" Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.</p>\",\"<p><b>Math Menu</b>: MathJax adds a contextual menu to equations.\",\" Right-click or CTRL-click on any mathematics to access the menu.</p>\",'<div style=\"margin-left: 1em;\">',\"<p><b>Show Math As:</b> These options allow you to view the formula's\",\" source markup (as MathML or in its original format).</p>\",\"<p><b>Copy to Clipboard:</b> These options copy the formula's source markup,\",\" as MathML or in its original format, to the clipboard\",\" (in browsers that support that).</p>\",\"<p><b>Math Settings:</b> These give you control over features of MathJax,\",\" such the size of the mathematics, and the mechanism used\",\" to display equations.</p>\",\"<p><b>Accessibility</b>: MathJax can work with screen\",\" readers to make mathematics accessible to the visually impaired.\",\" Turn on the explorer to enable generation of speech strings\",\" and the ability to investigate expressions interactively.</p>\",\"<p><b>Language</b>: This menu lets you select the language used by MathJax\",\" for its menus and warning messages. (Not yet implemented in version 3.)</p>\",\"</div>\",\"<p><b>Math Zoom</b>: If you are having difficulty reading an\",\" equation, MathJax can enlarge it to help you see it better, or\",\" you can scall all the math on the page to make it larger.\",\" Turn these features on in the <b>Math Settings</b> menu.</p>\",\"<p><b>Preferences</b>: MathJax uses your browser's localStorage database\",\" to save the preferences set via this menu locally in your browser.  These\",\" are not used to track you, and are not transferred or used remotely by\",\" MathJax in any way.</p>\"].join(\"\\n\")},'<a href=\"https://www.mathjax.org\">www.mathjax.org</a>'),this.mathmlCode=new s.SelectableInfo(\"MathJax MathML Expression\",function(){if(!r.menu.mathItem)return\"\";var t=r.toMML(r.menu.mathItem);return\"<pre>\"+r.formatSource(t)+\"</pre>\"},\"\"),this.originalText=new s.SelectableInfo(\"MathJax Original Source\",function(){if(!r.menu.mathItem)return\"\";var t=r.menu.mathItem.math;return'<pre style=\"font-size:125%; margin:0\">'+r.formatSource(t)+\"</pre>\"},\"\"),this.annotationText=new s.SelectableInfo(\"MathJax Annotation Text\",function(){if(!r.menu.mathItem)return\"\";var t=r.menu.annotation;return'<pre style=\"font-size:125%; margin:0\">'+r.formatSource(t)+\"</pre>\"},\"\"),this.zoomBox=new ContextMenu.Info(\"MathJax Zoomed Expression\",function(){if(!r.menu.mathItem)return\"\";var t=r.menu.mathItem.typesetRoot.cloneNode(!0);return t.style.margin=\"0\",'<div style=\"font-size: '+1.25*parseFloat(r.settings.zscale)+'%\">'+t.outerHTML+\"</div>\"},\"\"),this.document=t,this.options=n.userOptions(n.defaultOptions({},this.constructor.OPTIONS),e),this.initSettings(),this.mergeUserSettings(),this.initMenu()}e.Menu=h},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(96),s=r(3),c=(o=a.SerializedMmlVisitor,i(l,o),l.prototype.visitTree=function(t,e,r){return void 0===e&&(e=null),void 0===r&&(r={}),this.mathItem=e,s.userOptions(this.options,r),this.visitNode(t,\"\")},l.prototype.visitTeXAtomNode=function(t,e){return this.options.texHints?o.prototype.visitTeXAtomNode.call(this,t,e):t.childNodes[0]&&1===t.childNodes[0].childNodes.length?this.visitNode(t.childNodes[0],e):e+\"<mrow\"+this.getAttributes(t)+\">\\n\"+this.childNodeMml(t,e+\"  \",\"\\n\")+e+\"</mrow>\"},l.prototype.visitMathNode=function(t,e){if(!this.options.semantics||\"TeX\"!==this.mathItem.inputJax.name)return o.prototype.visitDefault.call(this,t,e);var r=t.childNodes.length&&1<t.childNodes[0].childNodes.length;return e+\"<math\"+this.getAttributes(t)+\">\\n\"+e+\"  <semantics>\\n\"+(r?e+\"    <mrow>\\n\":\"\")+this.childNodeMml(t,e+(r?\"      \":\"    \"),\"\\n\")+(r?e+\"    </mrow>\\n\":\"\")+e+'    <annotation encoding=\"application/x-tex\">'+this.mathItem.math+\"</annotation>\\n\"+e+\"  </semantics>\\n\"+e+\"</math>\"},l);function l(){var t=null!==o&&o.apply(this,arguments)||this;return t.options={texHints:!0,semantics:!1},t.mathItem=null,t}e.MmlVisitor=c},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=(o=ContextMenu.Info,i(s,o),s.prototype.addEvents=function(t){var e=this;t.addEventListener(\"keypress\",function(t){\"a\"===t.key&&(t.ctrlKey||t.metaKey)&&(e.selectAll(),e.stop(t))})},s.prototype.selectAll=function(){document.getSelection().selectAllChildren(this.getHtml().querySelector(\"pre\"))},s.prototype.copyToClipboard=function(){this.selectAll();try{document.execCommand(\"copy\")}catch(t){alert(\"Can't copy to clipboard: \"+t.message)}document.getSelection().removeAllRanges()},s.prototype.generateHtml=function(){var e=this;o.prototype.generateHtml.call(this);var t=this.getHtml().querySelector(\"span.\"+ContextMenu.HtmlClasses.INFOSIGNATURE).appendChild(document.createElement(\"input\"));t.type=\"button\",t.value=\"Copy to Clipboard\",t.addEventListener(\"click\",function(t){return e.copyToClipboard()})},s);function s(){return null!==o&&o.apply(this,arguments)||this}e.SelectableInfo=a},function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var l=r(20),u=r(13),h=r(3),f=r(226);function p(t){return o(e,n=t),e.prototype.addMenu=function(t){this.state()<u.STATE.CONTEXT_MENU&&(t.menu.addMenu(this),this.state(u.STATE.CONTEXT_MENU))},e.prototype.checkLoading=function(t){t.menu.isLoading&&l.mathjax.retryAfter(t.menu.loadingPromise.catch(function(t){return console.log(t)}))},e.prototype.enrich=function(t,e){void 0===e&&(e=!1);var r=t.menu.settings;(r.collapsible||r.explorer||e)&&(r.collapsible&&t.menu.checkComponent(\"a11y/complexity\"),r.explorer&&t.menu.checkComponent(\"a11y/explorer\"),n.prototype.enrich.call(this,t))},e.prototype.complexity=function(t,e){void 0===e&&(e=!1),(t.menu.settings.collapsible||e)&&(t.menu.checkComponent(\"a11y/complexity\"),n.prototype.complexity.call(this,t))},e.prototype.explorable=function(t,e){void 0===e&&(e=!1),(t.menu.settings.explorer||e)&&(t.menu.checkComponent(\"a11y/explorer\"),n.prototype.explorable.call(this,t))},e;function e(){return null!==n&&n.apply(this,arguments)||this}var n}function d(t){var e,i;return o(r,i=t),r.prototype.addMenu=function(){var e,t;if(!this.processed.isSet(\"context-menu\")){try{for(var r=c(this.math),n=r.next();!n.done;n=r.next())n.value.addMenu(this)}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.processed.set(\"context-menu\")}return this},r.prototype.checkLoading=function(){return this.menu.isLoading&&l.mathjax.retryAfter(this.menu.loadingPromise.catch(function(t){return console.log(t)})),this},r.prototype.state=function(t,e){return void 0===e&&(e=!1),i.prototype.state.call(this,t,e),t<u.STATE.CONTEXT_MENU&&this.processed.clear(\"context-menu\"),this},r.prototype.updateDocument=function(){return i.prototype.updateDocument.call(this),this.menu.menu.getStore().sort(),this},r.prototype.enrich=function(t){var e,r;void 0===t&&(t=!1);var n=this.menu.settings;if(!this.processed.isSet(\"enriched\")&&(n.collapsible||n.explorer||t)){n.collapsible&&this.menu.checkComponent(\"a11y/complexity\"),n.explorer&&this.menu.checkComponent(\"a11y/explorer\");try{for(var i=c(this.math),o=i.next();!o.done;o=i.next())o.value.enrich(this,t)}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}this.processed.set(\"enriched\")}return this},r.prototype.complexity=function(t){var e,r;if(void 0===t&&(t=!1),!this.processed.isSet(\"complexity\")&&(this.menu.settings.collapsible||t)){this.menu.checkComponent(\"a11y/complexity\");try{for(var n=c(this.math),i=n.next();!i.done;i=n.next())i.value.complexity(this,t)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}this.processed.set(\"complexity\")}return this},r.prototype.explorable=function(t){var e,r;if(void 0===t&&(t=!1),!this.processed.isSet(\"explorer\")&&(this.menu.settings.explorer||t)){this.menu.checkComponent(\"a11y/explorer\");try{for(var n=c(this.math),i=n.next();!i.done;i=n.next())i.value.explorable(this,t)}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}this.processed.set(\"explorer\")}return this},(e=r).OPTIONS=a(a({},t.OPTIONS),{MenuClass:f.Menu,menuOptions:f.Menu.OPTIONS,a11y:t.OPTIONS.a11y||h.expandable({}),renderActions:h.expandable(a(a({},t.OPTIONS.renderActions),{addMenu:[u.STATE.CONTEXT_MENU],checkLoading:[u.STATE.UNPROCESSED+1]}))}),e;function r(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r=i.apply(this,s(t))||this;r.menu=new r.options.MenuClass(r,r.options.menuOptions);var n=r.constructor.ProcessBits;return n.has(\"context-menu\")||n.allocate(\"context-menu\"),r.options.MathItem=p(r.options.MathItem),r}}u.newState(\"CONTEXT_MENU\",170),e.MenuMathItemMixin=p,e.MenuMathDocumentMixin=d,e.MenuHandler=function(t){return t.documentClass=d(t.documentClass),t}},function(t,e,r){\"use strict\";r(78),r(232),r(233),r(237),r(250),r(252),r(255),r(257),r(261)},function(t,S,E){\"use strict\";(function(i){var e=this&&this.__assign||function(){return(e=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(S,\"__esModule\",{value:!0});var t,c,r,o,l,n=E(5),a=E(24);function u(t){return r.visitTree(t,c.document)}function h(){r=new S.MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor,o=S.MathJax._.mathjax.mathjax,c.input=v(),c.output=b(),c.adaptor=g(),c.handler&&o.handlers.unregister(c.handler),c.handler=M(),c.handler&&(o.handlers.register(c.handler),c.document=O())}function f(){var e,t;c.input&&c.output&&p();var r=c.output?c.output.name.toLowerCase():\"\";try{for(var n=s(c.input),i=n.next();!i.done;i=n.next()){var o=i.value,a=o.name.toLowerCase();m(a,o),y(a,o),c.output&&d(a,r,o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}}function p(){S.MathJax.typeset=function(t){void 0===t&&(t=null),c.document.options.elements=t,c.document.render()},S.MathJax.typesetPromise=function(t){return void 0===t&&(t=null),c.document.options.elements=t,o.handleRetriesFor(function(){c.document.render()})},S.MathJax.typesetClear=function(){return c.document.clear()}}function d(t,e,r){var n=t+\"2\"+e;S.MathJax[n]=function(t,e){return void 0===e&&(e={}),e.format=r.name,c.document.convert(t,e)},S.MathJax[n+\"Promise\"]=function(t,e){return void 0===e&&(e={}),e.format=r.name,o.handleRetriesFor(function(){return c.document.convert(t,e)})},S.MathJax[e+\"Stylesheet\"]=function(){return c.output.styleSheet(c.document)},\"getMetricsFor\"in c.output&&(S.MathJax.getMetricsFor=function(t,e){return c.output.getMetricsFor(t,e)})}function m(t,r){var n=S.MathJax._.core.MathItem.STATE;S.MathJax[t+\"2mml\"]=function(t,e){return void 0===e&&(e={}),e.end=n.CONVERT,e.format=r.name,u(c.document.convert(t,e))},S.MathJax[t+\"2mmlPromise\"]=function(t,e){return void 0===e&&(e={}),e.end=n.CONVERT,e.format=r.name,o.handleRetriesFor(function(){return u(c.document.convert(t,e))})}}function y(t,e){\"tex\"===t&&(S.MathJax.texReset=function(t){return void 0===t&&(t=0),e.parseOptions.tags.reset(t)})}function v(){var e,t,r=[];try{for(var n=s(S.CONFIG.input),i=n.next();!i.done;i=n.next()){var o=i.value,a=c.constructors[o];if(!a)throw Error('Input Jax \"'+o+'\" is not defined (has it been loaded?)');r.push(new a(S.MathJax.config[o]))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r}function b(){var t=S.CONFIG.output;if(!t)return null;var e=c.constructors[t];if(!e)throw Error('Output Jax \"'+t+'\" is not defined (has it been loaded?)');return new e(S.MathJax.config[t])}function g(){var t=S.CONFIG.adaptor;if(!t||\"none\"===t)return null;var e=c.constructors[t];if(!e)throw Error('DOMAdaptor \"'+t+'\" is not defined (has it been loaded?)');return e(S.MathJax.config[t])}function M(){var e,t,r=S.CONFIG.handler;if(!r||\"none\"===r||!c.adaptor)return null;var n=c.constructors[r];if(!n)throw Error('Handler \"'+r+'\" is not defined (has it been loaded?)');var i=new n(c.adaptor,5);try{for(var o=s(l),a=o.next();!a.done;a=o.next()){i=a.value.item(i)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return i}function O(t){return void 0===t&&(t=null),o.document(t||S.CONFIG.document,e(e({},S.MathJax.config.options),{InputJax:c.input,OutputJax:c.output}))}c=t=S.Startup||(S.Startup={}),l=new a.PrioritizedList,c.constructors={},c.input=[],c.output=null,c.handler=null,c.adaptor=null,c.elements=null,c.document=null,c.promise=new Promise(function(t,e){var r=i.document;if(r&&r.readyState&&\"complete\"!==r.readyState&&\"interactive\"!==r.readyState){var n=function(){return t()};r.defaultView.addEventListener(\"load\",n,!0),r.defaultView.addEventListener(\"DOMContentLoaded\",n,!0)}else t()}),c.toMML=u,c.registerConstructor=function(t,e){c.constructors[t]=e},c.useHandler=function(t,e){void 0===e&&(e=!1),S.CONFIG.handler&&!e||(S.CONFIG.handler=t)},c.useAdaptor=function(t,e){void 0===e&&(e=!1),S.CONFIG.adaptor&&!e||(S.CONFIG.adaptor=t)},c.useInput=function(t,e){void 0===e&&(e=!1),x&&!e||S.CONFIG.input.push(t)},c.useOutput=function(t,e){void 0===e&&(e=!1),S.CONFIG.output&&!e||(S.CONFIG.output=t)},c.extendHandler=function(t,e){void 0===e&&(e=10),l.add(t,e)},c.defaultReady=function(){h(),f(),c.promise=c.promise.then(function(){return S.CONFIG.pageReady()})},c.defaultPageReady=function(){return S.CONFIG.typeset&&S.MathJax.typesetPromise?S.MathJax.typesetPromise():null},c.getComponents=h,c.makeMethods=f,c.makeTypesetMethods=p,c.makeOutputMethods=d,c.makeMmlMethods=m,c.makeResetMethod=y,c.getInputJax=v,c.getOutputJax=b,c.getAdaptor=g,c.getHandler=M,c.getDocument=O,S.MathJax=n.MathJax,void 0===S.MathJax._.startup&&(n.combineDefaults(S.MathJax.config,\"startup\",{input:[],output:\"\",handler:null,adaptor:null,document:\"undefined\"==typeof document?\"\":document,elements:null,typeset:!0,ready:t.defaultReady.bind(t),pageReady:t.defaultPageReady.bind(t)}),n.combineWithMathJax({startup:t,options:{}})),S.CONFIG=S.MathJax.config.startup;var x=0!==S.CONFIG.input.length}).call(this,E(28))},function(t,e,r){\"use strict\";r(17).Loader.preLoad(\"loader\",\"startup\",\"core\",\"input/tex\",\"input/mml\",\"output/chtml\",\"output/chtml/fonts/tex.js\",\"ui/menu\")},function(t,e,r){\"use strict\";r(234);var n=r(70),i=r(81);MathJax.startup&&(MathJax.startup.registerConstructor(\"HTMLHandler\",n.HTMLHandler),MathJax.startup.registerConstructor(\"browserAdaptor\",i.browserAdaptor),MathJax.startup.useHandler(\"HTMLHandler\"),MathJax.startup.useAdaptor(\"browserAdaptor\")),MathJax.loader&&(MathJax._.mathjax.mathjax.asyncLoad=function(t){return MathJax.loader.load(t)})},function(t,e,r){\"use strict\";var n=r(5),i=Ct(n),o=Ct(r(79)),a=Ct(r(81)),s=Ct(r(80)),c=Ct(r(40)),l=Ct(r(82)),u=Ct(r(94)),h=Ct(r(29)),f=Ct(r(41)),p=Ct(r(13)),d=Ct(r(43)),m=Ct(r(19)),y=Ct(r(85)),v=Ct(r(235)),b=Ct(r(44)),g=Ct(r(0)),M=Ct(r(67)),O=Ct(r(59)),x=Ct(r(90)),S=Ct(r(91)),E=Ct(r(46)),C=Ct(r(92)),_=Ct(r(58)),T=Ct(r(88)),w=Ct(r(57)),A=Ct(r(53)),k=Ct(r(65)),I=Ct(r(47)),L=Ct(r(61)),N=Ct(r(48)),P=Ct(r(26)),B=Ct(r(56)),R=Ct(r(89)),j=Ct(r(55)),H=Ct(r(52)),D=Ct(r(51)),X=Ct(r(50)),F=Ct(r(54)),W=Ct(r(87)),J=Ct(r(31)),q=Ct(r(62)),V=Ct(r(64)),U=Ct(r(49)),z=Ct(r(63)),G=Ct(r(60)),K=Ct(r(66)),Z=Ct(r(68)),Y=Ct(r(86)),$=Ct(r(96)),Q=Ct(r(42)),tt=Ct(r(30)),et=Ct(r(45)),rt=Ct(r(84)),nt=Ct(r(95)),it=Ct(r(97)),ot=Ct(r(98)),at=Ct(r(236)),st=Ct(r(99)),ct=Ct(r(102)),lt=Ct(r(70)),ut=Ct(r(100)),ht=Ct(r(101)),ft=Ct(r(20)),pt=Ct(r(103)),dt=Ct(r(93)),mt=Ct(r(12)),yt=Ct(r(25)),vt=Ct(r(83)),bt=Ct(r(3)),gt=Ct(r(24)),Mt=Ct(r(69)),Ot=Ct(r(71)),xt=Ct(r(14)),St=Ct(r(104)),Et=Ct(r(10));function Ct(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{adaptors:{HTMLAdaptor:o,browserAdaptor:a},components:{global:i},core:{DOMAdaptor:s,FindMath:c,Handler:l,HandlerList:u,InputJax:h,MathDocument:f,MathItem:p,MathList:d,MmlTree:{Attributes:m,MML:y,MathMLVisitor:v,MmlFactory:b,MmlNode:g,MmlNodes:{TeXAtom:M,maction:O,maligngroup:x,malignmark:S,math:E,mathchoice:C,menclose:_,merror:T,mfenced:w,mfrac:A,mglyph:k,mi:I,mmultiscripts:L,mn:N,mo:P,mpadded:B,mphantom:R,mroot:j,mrow:H,ms:D,mspace:X,msqrt:F,mstyle:W,msubsup:J,mtable:q,mtd:V,mtext:U,mtr:z,munderover:G,semantics:K},MmlVisitor:Z,OperatorDictionary:Y,SerializedMmlVisitor:$},OutputJax:Q,Tree:{Factory:tt,Node:et,NodeFactory:rt,Visitor:nt,Wrapper:it,WrapperFactory:ot}},handlers:{html_ts:at,html:{HTMLDocument:st,HTMLDomStrings:ct,HTMLHandler:lt,HTMLMathItem:ut,HTMLMathList:ht}},mathjax:ft,util:{AsyncLoad:pt,BitField:dt,Entities:mt,FunctionList:yt,LinkedList:vt,Options:bt,PrioritizedList:gt,Retries:Mt,Styles:Ot,lengths:xt,numeric:St,string:Et}}})},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(68),s=(o=a.MmlVisitor,i(c,o),c.prototype.visitTree=function(t,e){var r=(this.document=e).createElement(\"top\");return this.visitNode(t,r),this.document=null,r.firstChild},c.prototype.visitTextNode=function(t,e){e.appendChild(this.document.createTextNode(t.getText()))},c.prototype.visitXMLNode=function(t,e){e.appendChild(t.getXML().cloneNode(!0))},c.prototype.visitInferredMrowNode=function(t,e){var r,n;try{for(var i=l(t.childNodes),o=i.next();!o.done;o=i.next()){var a=o.value;this.visitNode(a,e)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},c.prototype.visitDefault=function(t,e){var r,n,i=this.document.createElement(t.kind);this.addAttributes(t,i);try{for(var o=l(t.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value;this.visitNode(s,i)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}e.appendChild(i)},c.prototype.addAttributes=function(t,e){var r,n,i=t.attributes,o=i.getExplicitNames();try{for(var a=l(o),s=a.next();!s.done;s=a.next()){var c=s.value;e.setAttribute(c,i.getExplicit(c).toString())}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}},c);function c(){var t=null!==o&&o.apply(this,arguments)||this;return t.document=null,t}e.MathMLVisitor=s},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(20),i=r(70);e.RegisterHTMLHandler=function(t){var e=new i.HTMLHandler(t);return n.mathjax.handlers.register(e),e}},function(t,e,r){\"use strict\";r(238);var n=r(249);r(17).Loader.preLoad(\"input/tex-base\",\"[tex]/ams\",\"[tex]/newcommand\",\"[tex]/noundefined\",\"[tex]/require\",\"[tex]/autoload\",\"[tex]/configMacros\"),(0,n.registerTeX)([\"base\",\"ams\",\"newcommand\",\"noundefined\",\"require\",\"autoload\",\"configMacros\"])},function(t,e,r){\"use strict\";var n=r(5),i=j(r(105)),o=j(r(11)),a=j(r(107)),s=j(r(106)),c=j(r(8)),l=j(r(112)),u=j(r(6)),h=j(r(33)),f=j(r(110)),p=j(r(7)),d=j(r(109)),m=j(r(32)),y=j(r(111)),v=j(r(22)),b=j(r(9)),g=j(r(27)),M=j(r(15)),O=j(r(4)),x=j(r(21)),S=j(r(242)),E=j(r(114)),C=j(r(115)),_=j(r(244)),T=j(r(113)),w=j(r(34)),A=j(r(35)),k=j(r(245)),I=j(r(246)),L=j(r(118)),N=j(r(72)),P=j(r(117)),B=j(r(248)),R=j(r(116));function j(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{input:{tex_ts:i,tex:{Configuration:o,FilterUtil:a,FindTeX:s,MapHandler:c,NodeFactory:l,NodeUtil:u,ParseMethods:h,ParseOptions:f,ParseUtil:p,Stack:d,StackItem:m,StackItemFactory:y,Symbol:v,SymbolMap:b,Tags:g,TexConstants:M,TexError:O,TexParser:x,ams:{AmsConfiguration:S,AmsItems:E,AmsMethods:C},autoload:{AutoloadConfiguration:_},base:{BaseConfiguration:T,BaseItems:w,BaseMethods:A},config_macros:{ConfigMacrosConfiguration:k},newcommand:{NewcommandConfiguration:I,NewcommandItems:L,NewcommandMethods:N,NewcommandUtil:P},noundefined:{NoUndefinedConfiguration:B},require:{RequireConfiguration:R}}}}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(9),i=r(15),o=r(35),a=r(33),s=r(0);new n.RegExpMap(\"letter\",a.default.variable,/[a-z]/i),new n.RegExpMap(\"digit\",a.default.digit,/[0-9.,]/),new n.RegExpMap(\"command\",a.default.controlSequence,/^\\\\/),new n.MacroMap(\"special\",{\"{\":\"Open\",\"}\":\"Close\",\"~\":\"Tilde\",\"^\":\"Superscript\",_:\"Subscript\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"'\":\"Prime\",\"%\":\"Comment\",\"&\":\"Entry\",\"#\":\"Hash\",\"\\xa0\":\"Space\",\"\\u2019\":\"Prime\"},o.default),new n.CharacterMap(\"mathchar0mi\",a.default.mathchar0mi,{alpha:\"\\u03b1\",beta:\"\\u03b2\",gamma:\"\\u03b3\",delta:\"\\u03b4\",epsilon:\"\\u03f5\",zeta:\"\\u03b6\",eta:\"\\u03b7\",theta:\"\\u03b8\",iota:\"\\u03b9\",kappa:\"\\u03ba\",lambda:\"\\u03bb\",mu:\"\\u03bc\",nu:\"\\u03bd\",xi:\"\\u03be\",omicron:\"\\u03bf\",pi:\"\\u03c0\",rho:\"\\u03c1\",sigma:\"\\u03c3\",tau:\"\\u03c4\",upsilon:\"\\u03c5\",phi:\"\\u03d5\",chi:\"\\u03c7\",psi:\"\\u03c8\",omega:\"\\u03c9\",varepsilon:\"\\u03b5\",vartheta:\"\\u03d1\",varpi:\"\\u03d6\",varrho:\"\\u03f1\",varsigma:\"\\u03c2\",varphi:\"\\u03c6\",S:[\"\\xa7\",{mathvariant:i.TexConstant.Variant.NORMAL}],aleph:[\"\\u2135\",{mathvariant:i.TexConstant.Variant.NORMAL}],hbar:[\"\\u210f\",{variantForm:!0}],imath:\"\\u0131\",jmath:\"\\u0237\",ell:\"\\u2113\",wp:[\"\\u2118\",{mathvariant:i.TexConstant.Variant.NORMAL}],Re:[\"\\u211c\",{mathvariant:i.TexConstant.Variant.NORMAL}],Im:[\"\\u2111\",{mathvariant:i.TexConstant.Variant.NORMAL}],partial:[\"\\u2202\",{mathvariant:i.TexConstant.Variant.NORMAL}],infty:[\"\\u221e\",{mathvariant:i.TexConstant.Variant.NORMAL}],prime:[\"\\u2032\",{mathvariant:i.TexConstant.Variant.NORMAL,variantForm:!0}],emptyset:[\"\\u2205\",{mathvariant:i.TexConstant.Variant.NORMAL}],nabla:[\"\\u2207\",{mathvariant:i.TexConstant.Variant.NORMAL}],top:[\"\\u22a4\",{mathvariant:i.TexConstant.Variant.NORMAL}],bot:[\"\\u22a5\",{mathvariant:i.TexConstant.Variant.NORMAL}],angle:[\"\\u2220\",{mathvariant:i.TexConstant.Variant.NORMAL}],triangle:[\"\\u25b3\",{mathvariant:i.TexConstant.Variant.NORMAL}],backslash:[\"\\u2216\",{mathvariant:i.TexConstant.Variant.NORMAL,variantForm:!0}],forall:[\"\\u2200\",{mathvariant:i.TexConstant.Variant.NORMAL}],exists:[\"\\u2203\",{mathvariant:i.TexConstant.Variant.NORMAL}],neg:[\"\\xac\",{mathvariant:i.TexConstant.Variant.NORMAL}],lnot:[\"\\xac\",{mathvariant:i.TexConstant.Variant.NORMAL}],flat:[\"\\u266d\",{mathvariant:i.TexConstant.Variant.NORMAL}],natural:[\"\\u266e\",{mathvariant:i.TexConstant.Variant.NORMAL}],sharp:[\"\\u266f\",{mathvariant:i.TexConstant.Variant.NORMAL}],clubsuit:[\"\\u2663\",{mathvariant:i.TexConstant.Variant.NORMAL}],diamondsuit:[\"\\u2662\",{mathvariant:i.TexConstant.Variant.NORMAL}],heartsuit:[\"\\u2661\",{mathvariant:i.TexConstant.Variant.NORMAL}],spadesuit:[\"\\u2660\",{mathvariant:i.TexConstant.Variant.NORMAL}]}),new n.CharacterMap(\"mathchar0mo\",a.default.mathchar0mo,{surd:\"\\u221a\",coprod:[\"\\u2210\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigvee:[\"\\u22c1\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigwedge:[\"\\u22c0\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],biguplus:[\"\\u2a04\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcap:[\"\\u22c2\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcup:[\"\\u22c3\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],int:[\"\\u222b\",{texClass:s.TEXCLASS.OP}],intop:[\"\\u222b\",{texClass:s.TEXCLASS.OP,movesupsub:!0,movablelimits:!0}],iint:[\"\\u222c\",{texClass:s.TEXCLASS.OP}],iiint:[\"\\u222d\",{texClass:s.TEXCLASS.OP}],prod:[\"\\u220f\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],sum:[\"\\u2211\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigotimes:[\"\\u2a02\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigoplus:[\"\\u2a01\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigodot:[\"\\u2a00\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],oint:[\"\\u222e\",{texClass:s.TEXCLASS.OP}],bigsqcup:[\"\\u2a06\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],smallint:[\"\\u222b\",{largeop:!1}],triangleleft:\"\\u25c3\",triangleright:\"\\u25b9\",bigtriangleup:\"\\u25b3\",bigtriangledown:\"\\u25bd\",wedge:\"\\u2227\",land:\"\\u2227\",vee:\"\\u2228\",lor:\"\\u2228\",cap:\"\\u2229\",cup:\"\\u222a\",ddagger:\"\\u2021\",dagger:\"\\u2020\",sqcap:\"\\u2293\",sqcup:\"\\u2294\",uplus:\"\\u228e\",amalg:\"\\u2a3f\",diamond:\"\\u22c4\",bullet:\"\\u2219\",wr:\"\\u2240\",div:\"\\xf7\",odot:[\"\\u2299\",{largeop:!1}],oslash:[\"\\u2298\",{largeop:!1}],otimes:[\"\\u2297\",{largeop:!1}],ominus:[\"\\u2296\",{largeop:!1}],oplus:[\"\\u2295\",{largeop:!1}],mp:\"\\u2213\",pm:\"\\xb1\",circ:\"\\u2218\",bigcirc:\"\\u25ef\",setminus:[\"\\u2216\",{variantForm:!0}],cdot:\"\\u22c5\",ast:\"\\u2217\",times:\"\\xd7\",star:\"\\u22c6\",propto:\"\\u221d\",sqsubseteq:\"\\u2291\",sqsupseteq:\"\\u2292\",parallel:\"\\u2225\",mid:\"\\u2223\",dashv:\"\\u22a3\",vdash:\"\\u22a2\",leq:\"\\u2264\",le:\"\\u2264\",geq:\"\\u2265\",ge:\"\\u2265\",lt:\"<\",gt:\">\",succ:\"\\u227b\",prec:\"\\u227a\",approx:\"\\u2248\",succeq:\"\\u2ab0\",preceq:\"\\u2aaf\",supset:\"\\u2283\",subset:\"\\u2282\",supseteq:\"\\u2287\",subseteq:\"\\u2286\",in:\"\\u2208\",ni:\"\\u220b\",notin:\"\\u2209\",owns:\"\\u220b\",gg:\"\\u226b\",ll:\"\\u226a\",sim:\"\\u223c\",simeq:\"\\u2243\",perp:\"\\u22a5\",equiv:\"\\u2261\",asymp:\"\\u224d\",smile:\"\\u2323\",frown:\"\\u2322\",ne:\"\\u2260\",neq:\"\\u2260\",cong:\"\\u2245\",doteq:\"\\u2250\",bowtie:\"\\u22c8\",models:\"\\u22a8\",notChar:\"\\u29f8\",Leftrightarrow:\"\\u21d4\",Leftarrow:\"\\u21d0\",Rightarrow:\"\\u21d2\",leftrightarrow:\"\\u2194\",leftarrow:\"\\u2190\",gets:\"\\u2190\",rightarrow:\"\\u2192\",to:\"\\u2192\",mapsto:\"\\u21a6\",leftharpoonup:\"\\u21bc\",leftharpoondown:\"\\u21bd\",rightharpoonup:\"\\u21c0\",rightharpoondown:\"\\u21c1\",nearrow:\"\\u2197\",searrow:\"\\u2198\",nwarrow:\"\\u2196\",swarrow:\"\\u2199\",rightleftharpoons:\"\\u21cc\",hookrightarrow:\"\\u21aa\",hookleftarrow:\"\\u21a9\",longleftarrow:\"\\u27f5\",Longleftarrow:\"\\u27f8\",longrightarrow:\"\\u27f6\",Longrightarrow:\"\\u27f9\",Longleftrightarrow:\"\\u27fa\",longleftrightarrow:\"\\u27f7\",longmapsto:\"\\u27fc\",ldots:\"\\u2026\",cdots:\"\\u22ef\",vdots:\"\\u22ee\",ddots:\"\\u22f1\",dotsc:\"\\u2026\",dotsb:\"\\u22ef\",dotsm:\"\\u22ef\",dotsi:\"\\u22ef\",dotso:\"\\u2026\",ldotp:[\".\",{texClass:s.TEXCLASS.PUNCT}],cdotp:[\"\\u22c5\",{texClass:s.TEXCLASS.PUNCT}],colon:[\":\",{texClass:s.TEXCLASS.PUNCT}]}),new n.CharacterMap(\"mathchar7\",a.default.mathchar7,{Gamma:\"\\u0393\",Delta:\"\\u0394\",Theta:\"\\u0398\",Lambda:\"\\u039b\",Xi:\"\\u039e\",Pi:\"\\u03a0\",Sigma:\"\\u03a3\",Upsilon:\"\\u03a5\",Phi:\"\\u03a6\",Psi:\"\\u03a8\",Omega:\"\\u03a9\",_:\"_\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",And:\"&\"}),new n.DelimiterMap(\"delimiter\",a.default.delimiter,{\"(\":\"(\",\")\":\")\",\"[\":\"[\",\"]\":\"]\",\"<\":\"\\u27e8\",\">\":\"\\u27e9\",\"\\\\lt\":\"\\u27e8\",\"\\\\gt\":\"\\u27e9\",\"/\":\"/\",\"|\":[\"|\",{texClass:s.TEXCLASS.ORD}],\".\":\"\",\"\\\\\\\\\":\"\\\\\",\"\\\\lmoustache\":\"\\u23b0\",\"\\\\rmoustache\":\"\\u23b1\",\"\\\\lgroup\":\"\\u27ee\",\"\\\\rgroup\":\"\\u27ef\",\"\\\\arrowvert\":\"\\u23d0\",\"\\\\Arrowvert\":\"\\u2016\",\"\\\\bracevert\":\"\\u23aa\",\"\\\\Vert\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\|\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\vert\":[\"|\",{texClass:s.TEXCLASS.ORD}],\"\\\\uparrow\":\"\\u2191\",\"\\\\downarrow\":\"\\u2193\",\"\\\\updownarrow\":\"\\u2195\",\"\\\\Uparrow\":\"\\u21d1\",\"\\\\Downarrow\":\"\\u21d3\",\"\\\\Updownarrow\":\"\\u21d5\",\"\\\\backslash\":\"\\\\\",\"\\\\rangle\":\"\\u27e9\",\"\\\\langle\":\"\\u27e8\",\"\\\\rbrace\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\}\":\"}\",\"\\\\{\":\"{\",\"\\\\rceil\":\"\\u2309\",\"\\\\lceil\":\"\\u2308\",\"\\\\rfloor\":\"\\u230b\",\"\\\\lfloor\":\"\\u230a\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\"}),new n.CommandMap(\"macros\",{displaystyle:[\"SetStyle\",\"D\",!0,0],textstyle:[\"SetStyle\",\"T\",!1,0],scriptstyle:[\"SetStyle\",\"S\",!1,1],scriptscriptstyle:[\"SetStyle\",\"SS\",!1,2],rm:[\"SetFont\",i.TexConstant.Variant.NORMAL],mit:[\"SetFont\",i.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",i.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",i.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",i.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",i.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",i.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",i.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",i.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",i.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],arcsin:[\"NamedFn\"],arccos:[\"NamedFn\"],arctan:[\"NamedFn\"],arg:[\"NamedFn\"],cos:[\"NamedFn\"],cosh:[\"NamedFn\"],cot:[\"NamedFn\"],coth:[\"NamedFn\"],csc:[\"NamedFn\"],deg:[\"NamedFn\"],det:\"NamedOp\",dim:[\"NamedFn\"],exp:[\"NamedFn\"],gcd:\"NamedOp\",hom:[\"NamedFn\"],inf:\"NamedOp\",ker:[\"NamedFn\"],lg:[\"NamedFn\"],lim:\"NamedOp\",liminf:[\"NamedOp\",\"lim&thinsp;inf\"],limsup:[\"NamedOp\",\"lim&thinsp;sup\"],ln:[\"NamedFn\"],log:[\"NamedFn\"],max:\"NamedOp\",min:\"NamedOp\",Pr:\"NamedOp\",sec:[\"NamedFn\"],sin:[\"NamedFn\"],sinh:[\"NamedFn\"],sup:\"NamedOp\",tan:[\"NamedFn\"],tanh:[\"NamedFn\"],limits:[\"Limits\",1],nolimits:[\"Limits\",0],overline:[\"UnderOver\",\"00AF\",null,1],underline:[\"UnderOver\",\"005F\"],overbrace:[\"UnderOver\",\"23DE\",1],underbrace:[\"UnderOver\",\"23DF\",1],overparen:[\"UnderOver\",\"23DC\"],underparen:[\"UnderOver\",\"23DD\"],overrightarrow:[\"UnderOver\",\"2192\"],underrightarrow:[\"UnderOver\",\"2192\"],overleftarrow:[\"UnderOver\",\"2190\"],underleftarrow:[\"UnderOver\",\"2190\"],overleftrightarrow:[\"UnderOver\",\"2194\"],underleftrightarrow:[\"UnderOver\",\"2194\"],overset:\"Overset\",underset:\"Underset\",stackrel:[\"Macro\",\"\\\\mathrel{\\\\mathop{#2}\\\\limits^{#1}}\",2],over:\"Over\",overwithdelims:\"Over\",atop:\"Over\",atopwithdelims:\"Over\",above:\"Over\",abovewithdelims:\"Over\",brace:[\"Over\",\"{\",\"}\"],brack:[\"Over\",\"[\",\"]\"],choose:[\"Over\",\"(\",\")\"],frac:\"Frac\",sqrt:\"Sqrt\",root:\"Root\",uproot:[\"MoveRoot\",\"upRoot\"],leftroot:[\"MoveRoot\",\"leftRoot\"],left:\"LeftRight\",right:\"LeftRight\",middle:\"Middle\",llap:\"Lap\",rlap:\"Lap\",raise:\"RaiseLower\",lower:\"RaiseLower\",moveleft:\"MoveLeftRight\",moveright:\"MoveLeftRight\",\",\":[\"Spacer\",i.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",i.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",i.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",i.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",i.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",i.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",i.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],big:[\"MakeBig\",s.TEXCLASS.ORD,.85],Big:[\"MakeBig\",s.TEXCLASS.ORD,1.15],bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.45],Bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.75],bigl:[\"MakeBig\",s.TEXCLASS.OPEN,.85],Bigl:[\"MakeBig\",s.TEXCLASS.OPEN,1.15],biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.45],Biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.75],bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,.85],Bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.15],biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.45],Biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.75],bigm:[\"MakeBig\",s.TEXCLASS.REL,.85],Bigm:[\"MakeBig\",s.TEXCLASS.REL,1.15],biggm:[\"MakeBig\",s.TEXCLASS.REL,1.45],Biggm:[\"MakeBig\",s.TEXCLASS.REL,1.75],mathord:[\"TeXAtom\",s.TEXCLASS.ORD],mathop:[\"TeXAtom\",s.TEXCLASS.OP],mathopen:[\"TeXAtom\",s.TEXCLASS.OPEN],mathclose:[\"TeXAtom\",s.TEXCLASS.CLOSE],mathbin:[\"TeXAtom\",s.TEXCLASS.BIN],mathrel:[\"TeXAtom\",s.TEXCLASS.REL],mathpunct:[\"TeXAtom\",s.TEXCLASS.PUNCT],mathinner:[\"TeXAtom\",s.TEXCLASS.INNER],vcenter:[\"TeXAtom\",s.TEXCLASS.VCENTER],buildrel:\"BuildRel\",hbox:[\"HBox\",0],text:\"HBox\",mbox:[\"HBox\",0],fbox:\"FBox\",strut:\"Strut\",mathstrut:[\"Macro\",\"\\\\vphantom{(}\"],phantom:\"Phantom\",vphantom:[\"Phantom\",1,0],hphantom:[\"Phantom\",0,1],smash:\"Smash\",acute:[\"Accent\",\"00B4\"],grave:[\"Accent\",\"0060\"],ddot:[\"Accent\",\"00A8\"],tilde:[\"Accent\",\"007E\"],bar:[\"Accent\",\"00AF\"],breve:[\"Accent\",\"02D8\"],check:[\"Accent\",\"02C7\"],hat:[\"Accent\",\"005E\"],vec:[\"Accent\",\"2192\"],dot:[\"Accent\",\"02D9\"],widetilde:[\"Accent\",\"007E\",1],widehat:[\"Accent\",\"005E\",1],matrix:\"Matrix\",array:\"Matrix\",pmatrix:[\"Matrix\",\"(\",\")\"],cases:[\"Matrix\",\"{\",\"\",\"left left\",null,\".1em\",null,!0],eqalign:[\"Matrix\",null,null,\"right left\",i.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\"],displaylines:[\"Matrix\",null,null,\"center\",null,\".5em\",\"D\"],cr:\"Cr\",\"\\\\\":\"CrLaTeX\",newline:\"Cr\",hline:[\"HLine\",\"solid\"],hdashline:[\"HLine\",\"dashed\"],eqalignno:[\"Matrix\",null,null,\"right left\",i.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"right\"],leqalignno:[\"Matrix\",null,null,\"right left\",i.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"left\"],hfill:\"HFill\",hfil:\"HFill\",hfilll:\"HFill\",bmod:[\"Macro\",'\\\\mmlToken{mo}[lspace=\"thickmathspace\" rspace=\"thickmathspace\"]{mod}'],pmod:[\"Macro\",\"\\\\pod{\\\\mmlToken{mi}{mod}\\\\kern 6mu #1}\",1],mod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern12mu}{\\\\kern12mu}{\\\\kern12mu}\\\\mmlToken{mi}{mod}\\\\,\\\\,#1\",1],pod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)\",1],iff:[\"Macro\",\"\\\\;\\\\Longleftrightarrow\\\\;\"],skew:[\"Macro\",\"{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}\",3],mathcal:[\"Macro\",\"{\\\\cal #1}\",1],mathscr:[\"Macro\",\"{\\\\scr #1}\",1],mathrm:[\"Macro\",\"{\\\\rm #1}\",1],mathbf:[\"Macro\",\"{\\\\bf #1}\",1],mathbb:[\"Macro\",\"{\\\\bbFont #1}\",1],Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],mathit:[\"Macro\",\"{\\\\it #1}\",1],mathfrak:[\"Macro\",\"{\\\\frak #1}\",1],mathsf:[\"Macro\",\"{\\\\sf #1}\",1],mathtt:[\"Macro\",\"{\\\\tt #1}\",1],textrm:[\"Macro\",\"\\\\mathord{\\\\rm\\\\text{#1}}\",1],textit:[\"Macro\",\"\\\\mathord{\\\\it\\\\text{#1}}\",1],textbf:[\"Macro\",\"\\\\mathord{\\\\bf\\\\text{#1}}\",1],textsf:[\"Macro\",\"\\\\mathord{\\\\sf\\\\text{#1}}\",1],texttt:[\"Macro\",\"\\\\mathord{\\\\tt\\\\text{#1}}\",1],pmb:[\"Macro\",\"\\\\rlap{#1}\\\\kern1px{#1}\",1],TeX:[\"Macro\",\"T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X\"],LaTeX:[\"Macro\",\"L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX\"],\" \":[\"Macro\",\"\\\\text{ }\"],not:\"Not\",dots:\"Dots\",space:\"Tilde\",\"\\xa0\":\"Tilde\",begin:\"BeginEnd\",end:\"BeginEnd\",label:\"HandleLabel\",ref:\"HandleRef\",nonumber:\"HandleNoTag\",mathchoice:\"MathChoice\",mmlToken:\"MmlToken\"},o.default);new n.EnvironmentMap(\"environment\",a.default.environment,{array:[\"AlignedArray\"],equation:[\"Equation\",null,!0],\"equation*\":[\"Equation\",null,!1],eqnarray:[\"EqnArray\",null,!0,!0,\"rcl\",\"0 \"+i.TexConstant.Length.THICKMATHSPACE,\".5em\"]},o.default);new n.CharacterMap(\"not_remap\",null,{\"\\u2190\":\"\\u219a\",\"\\u2192\":\"\\u219b\",\"\\u2194\":\"\\u21ae\",\"\\u21d0\":\"\\u21cd\",\"\\u21d2\":\"\\u21cf\",\"\\u21d4\":\"\\u21ce\",\"\\u2208\":\"\\u2209\",\"\\u220b\":\"\\u220c\",\"\\u2223\":\"\\u2224\",\"\\u2225\":\"\\u2226\",\"\\u223c\":\"\\u2241\",\"~\":\"\\u2241\",\"\\u2243\":\"\\u2244\",\"\\u2245\":\"\\u2247\",\"\\u2248\":\"\\u2249\",\"\\u224d\":\"\\u226d\",\"=\":\"\\u2260\",\"\\u2261\":\"\\u2262\",\"<\":\"\\u226e\",\">\":\"\\u226f\",\"\\u2264\":\"\\u2270\",\"\\u2265\":\"\\u2271\",\"\\u2272\":\"\\u2274\",\"\\u2273\":\"\\u2275\",\"\\u2276\":\"\\u2278\",\"\\u2277\":\"\\u2279\",\"\\u227a\":\"\\u2280\",\"\\u227b\":\"\\u2281\",\"\\u2282\":\"\\u2284\",\"\\u2283\":\"\\u2285\",\"\\u2286\":\"\\u2288\",\"\\u2287\":\"\\u2289\",\"\\u22a2\":\"\\u22ac\",\"\\u22a8\":\"\\u22ad\",\"\\u22a9\":\"\\u22ae\",\"\\u22ab\":\"\\u22af\",\"\\u227c\":\"\\u22e0\",\"\\u227d\":\"\\u22e1\",\"\\u2291\":\"\\u22e2\",\"\\u2292\":\"\\u22e3\",\"\\u22b2\":\"\\u22ea\",\"\\u22b3\":\"\\u22eb\",\"\\u22b4\":\"\\u22ec\",\"\\u22b5\":\"\\u22ed\",\"\\u2203\":\"\\u2204\"})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(12).add({Pcy:\"\\u041f\",Poincareplane:\"\\u210c\",Pr:\"\\u2abb\",Prime:\"\\u2033\",Proportion:\"\\u2237\",par:\"\\u2225\",para:\"\\xb6\",parallel:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",pcy:\"\\u043f\",percnt:\"%\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",phmmat:\"\\u2133\",phone:\"\\u260e\",pitchfork:\"\\u22d4\",planck:\"\\u210f\",planckh:\"\\u210e\",plankv:\"\\u210f\",plus:\"+\",plusacir:\"\\u2a23\",plusb:\"\\u229e\",pluscir:\"\\u2a22\",plusdo:\"\\u2214\",plusdu:\"\\u2a25\",pluse:\"\\u2a72\",plusmn:\"\\xb1\",plussim:\"\\u2a26\",plustwo:\"\\u2a27\",pm:\"\\xb1\",pointint:\"\\u2a15\",pound:\"\\xa3\",pr:\"\\u227a\",prE:\"\\u2ab3\",prcue:\"\\u227c\",pre:\"\\u2aaf\",prec:\"\\u227a\",precapprox:\"\\u2ab7\",preccurlyeq:\"\\u227c\",preceq:\"\\u2aaf\",precsim:\"\\u227e\",primes:\"\\u2119\",prnE:\"\\u2ab5\",prnap:\"\\u2ab9\",prnsim:\"\\u22e8\",prod:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",puncsp:\"\\u2008\"},\"p\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(12).add({RBarr:\"\\u2910\",REG:\"\\xae\",Racute:\"\\u0154\",Rang:\"\\u27eb\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",ReverseElement:\"\\u220b\",ReverseUpEquilibrium:\"\\u296f\",Rho:\"\\u03a1\",RightArrowBar:\"\\u21e5\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightTeeVector:\"\\u295b\",RightTriangleBar:\"\\u29d0\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightVectorBar:\"\\u2953\",RoundImplies:\"\\u2970\",RuleDelayed:\"\\u29f4\",rAarr:\"\\u21db\",rArr:\"\\u21d2\",rAtail:\"\\u291c\",rBarr:\"\\u290f\",rHar:\"\\u2964\",race:\"\\u223d\\u0331\",racute:\"\\u0155\",radic:\"\\u221a\",raemptyv:\"\\u29b3\",rang:\"\\u27e9\",rangd:\"\\u2992\",range:\"\\u29a5\",rangle:\"\\u27e9\",raquo:\"\\xbb\",rarr:\"\\u2192\",rarrap:\"\\u2975\",rarrb:\"\\u21e5\",rarrbfs:\"\\u2920\",rarrc:\"\\u2933\",rarrfs:\"\\u291e\",rarrhk:\"\\u21aa\",rarrlp:\"\\u21ac\",rarrpl:\"\\u2945\",rarrsim:\"\\u2974\",rarrw:\"\\u219d\",ratail:\"\\u291a\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rbbrk:\"\\u2773\",rbrke:\"\\u298c\",rbrksld:\"\\u298e\",rbrkslu:\"\\u2990\",rcaron:\"\\u0159\",rcedil:\"\\u0157\",rceil:\"\\u2309\",rcub:\"}\",rcy:\"\\u0440\",rdca:\"\\u2937\",rdldhar:\"\\u2969\",rdquo:\"\\u201d\",rdquor:\"\\u201d\",rdsh:\"\\u21b3\",real:\"\\u211c\",realine:\"\\u211b\",realpart:\"\\u211c\",reals:\"\\u211d\",rect:\"\\u25ad\",reg:\"\\xae\",rfisht:\"\\u297d\",rfloor:\"\\u230b\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21a3\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightsquigarrow:\"\\u219d\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",rsaquo:\"\\u203a\",rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",ruluhar:\"\\u2968\",rx:\"\\u211e\"},\"r\")},function(t,e,r){\"use strict\";var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(11),s=r(114),c=r(27);r(243);var l,u=(l=c.AbstractTags,o(h,l),h);function h(){return null!==l&&l.apply(this,arguments)||this}e.AmsTags=u;e.AmsConfiguration=a.Configuration.create(\"ams\",{handler:{delimiter:[\"AMSsymbols-delimiter\",\"AMSmath-delimiter\"],macro:[\"AMSsymbols-mathchar0mi\",\"AMSsymbols-mathchar0m0\",\"AMSsymbols-delimiter\",\"AMSsymbols-macros\",\"AMSmath-mathchar0mo\",\"AMSmath-macros\",\"AMSmath-delimiter\"],environment:[\"AMSmath-environment\"]},items:(i={},i[s.MultlineItem.prototype.kind]=s.MultlineItem,i),tags:{ams:u},init:function(t){t.append(a.Configuration.extension())}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});function n(t){for(var e=[],r=0,n=t.length;r<n;r++)e[r]=c.default.Em(t[r]);return e.join(\" \")}var i=r(115),o=r(9),a=r(15),s=r(33),c=r(7),l=r(0);new o.CharacterMap(\"AMSmath-mathchar0mo\",s.default.mathchar0mo,{iiiint:[\"\\u2a0c\",{texClass:l.TEXCLASS.OP}]}),new o.CommandMap(\"AMSmath-macros\",{mathring:[\"Accent\",\"02DA\"],nobreakspace:\"Tilde\",negmedspace:[\"Spacer\",a.TexConstant.Length.NEGATIVEMEDIUMMATHSPACE],negthickspace:[\"Spacer\",a.TexConstant.Length.NEGATIVETHICKMATHSPACE],idotsint:[\"MultiIntegral\",\"\\\\int\\\\cdots\\\\int\"],dddot:[\"Accent\",\"20DB\"],ddddot:[\"Accent\",\"20DC\"],sideset:[\"Macro\",\"\\\\mathop{\\\\mathop{\\\\rlap{\\\\phantom{#3}}}\\\\nolimits#1\\\\!\\\\mathop{#3}\\\\nolimits#2}\",3],boxed:[\"Macro\",\"\\\\fbox{$\\\\displaystyle{#1}$}\",1],tag:\"HandleTag\",notag:\"HandleNoTag\",eqref:[\"HandleRef\",!0],substack:[\"Macro\",\"\\\\begin{subarray}{c}#1\\\\end{subarray}\",1],injlim:[\"NamedOp\",\"inj&thinsp;lim\"],projlim:[\"NamedOp\",\"proj&thinsp;lim\"],varliminf:[\"Macro\",\"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\"],varlimsup:[\"Macro\",\"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\"],varinjlim:[\"Macro\",\"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\"],varprojlim:[\"Macro\",\"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\"],DeclareMathOperator:\"HandleDeclareOp\",operatorname:\"HandleOperatorName\",SkipLimits:\"SkipLimits\",genfrac:\"Genfrac\",frac:[\"Genfrac\",\"\",\"\",\"\",\"\"],tfrac:[\"Genfrac\",\"\",\"\",\"\",\"1\"],dfrac:[\"Genfrac\",\"\",\"\",\"\",\"0\"],binom:[\"Genfrac\",\"(\",\")\",\"0\",\"\"],tbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"1\"],dbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"0\"],cfrac:\"CFrac\",shoveleft:[\"HandleShove\",a.TexConstant.Align.LEFT],shoveright:[\"HandleShove\",a.TexConstant.Align.RIGHT],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3]},i.default),new o.EnvironmentMap(\"AMSmath-environment\",s.default.environment,{\"eqnarray*\":[\"EqnArray\",null,!1,!0,\"rcl\",\"0 \"+a.TexConstant.Length.THICKMATHSPACE,\".5em\"],align:[\"EqnArray\",null,!0,!0,\"rlrlrlrlrlrl\",n([0,2,0,2,0,2,0,2,0,2,0])],\"align*\":[\"EqnArray\",null,!1,!0,\"rlrlrlrlrlrl\",n([0,2,0,2,0,2,0,2,0,2,0])],multline:[\"Multline\",null,!0],\"multline*\":[\"Multline\",null,!1],split:[\"EqnArray\",null,!1,!1,\"rl\",n([0])],gather:[\"EqnArray\",null,!0,!0,\"c\"],\"gather*\":[\"EqnArray\",null,!1,!0,\"c\"],alignat:[\"AlignAt\",null,!0,!0],\"alignat*\":[\"AlignAt\",null,!1,!0],alignedat:[\"AlignAt\",null,!1,!1],aligned:[\"AmsEqnArray\",null,null,null,\"rlrlrlrlrlrl\",n([0,2,0,2,0,2,0,2,0,2,0]),\".5em\",\"D\"],gathered:[\"AmsEqnArray\",null,null,null,\"c\",null,\".5em\",\"D\"],subarray:[\"Array\",null,null,null,null,n([0]),\"0.1em\",\"S\",1],smallmatrix:[\"Array\",null,null,null,\"c\",n([1/3]),\".2em\",\"S\",1],matrix:[\"Array\",null,null,null,\"c\"],pmatrix:[\"Array\",null,\"(\",\")\",\"c\"],bmatrix:[\"Array\",null,\"[\",\"]\",\"c\"],Bmatrix:[\"Array\",null,\"\\\\{\",\"\\\\}\",\"c\"],vmatrix:[\"Array\",null,\"\\\\vert\",\"\\\\vert\",\"c\"],Vmatrix:[\"Array\",null,\"\\\\Vert\",\"\\\\Vert\",\"c\"],cases:[\"Array\",null,\"\\\\{\",\".\",\"ll\",null,\".2em\",\"T\"]},i.default),new o.DelimiterMap(\"AMSmath-delimiter\",s.default.delimiter,{\"\\\\lvert\":[\"|\",{texClass:l.TEXCLASS.OPEN}],\"\\\\rvert\":[\"|\",{texClass:l.TEXCLASS.CLOSE}],\"\\\\lVert\":[\"\\u2016\",{texClass:l.TEXCLASS.OPEN}],\"\\\\rVert\":[\"\\u2016\",{texClass:l.TEXCLASS.CLOSE}]}),new o.CharacterMap(\"AMSsymbols-mathchar0mi\",s.default.mathchar0mi,{digamma:\"\\u03dd\",varkappa:\"\\u03f0\",varGamma:[\"\\u0393\",{mathvariant:a.TexConstant.Variant.ITALIC}],varDelta:[\"\\u0394\",{mathvariant:a.TexConstant.Variant.ITALIC}],varTheta:[\"\\u0398\",{mathvariant:a.TexConstant.Variant.ITALIC}],varLambda:[\"\\u039b\",{mathvariant:a.TexConstant.Variant.ITALIC}],varXi:[\"\\u039e\",{mathvariant:a.TexConstant.Variant.ITALIC}],varPi:[\"\\u03a0\",{mathvariant:a.TexConstant.Variant.ITALIC}],varSigma:[\"\\u03a3\",{mathvariant:a.TexConstant.Variant.ITALIC}],varUpsilon:[\"\\u03a5\",{mathvariant:a.TexConstant.Variant.ITALIC}],varPhi:[\"\\u03a6\",{mathvariant:a.TexConstant.Variant.ITALIC}],varPsi:[\"\\u03a8\",{mathvariant:a.TexConstant.Variant.ITALIC}],varOmega:[\"\\u03a9\",{mathvariant:a.TexConstant.Variant.ITALIC}],beth:\"\\u2136\",gimel:\"\\u2137\",daleth:\"\\u2138\",backprime:[\"\\u2035\",{variantForm:!0}],hslash:\"\\u210f\",varnothing:[\"\\u2205\",{variantForm:!0}],blacktriangle:\"\\u25b4\",triangledown:[\"\\u25bd\",{variantForm:!0}],blacktriangledown:\"\\u25be\",square:\"\\u25fb\",Box:\"\\u25fb\",blacksquare:\"\\u25fc\",lozenge:\"\\u25ca\",Diamond:\"\\u25ca\",blacklozenge:\"\\u29eb\",circledS:[\"\\u24c8\",{mathvariant:a.TexConstant.Variant.NORMAL}],bigstar:\"\\u2605\",sphericalangle:\"\\u2222\",measuredangle:\"\\u2221\",nexists:\"\\u2204\",complement:\"\\u2201\",mho:\"\\u2127\",eth:[\"\\xf0\",{mathvariant:a.TexConstant.Variant.NORMAL}],Finv:\"\\u2132\",diagup:\"\\u2571\",Game:\"\\u2141\",diagdown:\"\\u2572\",Bbbk:[\"k\",{mathvariant:a.TexConstant.Variant.DOUBLESTRUCK}],yen:\"\\xa5\",circledR:\"\\xae\",checkmark:\"\\u2713\",maltese:\"\\u2720\"}),new o.CharacterMap(\"AMSsymbols-mathchar0m0\",s.default.mathchar0mo,{dotplus:\"\\u2214\",ltimes:\"\\u22c9\",smallsetminus:\"\\u2216\",rtimes:\"\\u22ca\",Cap:\"\\u22d2\",doublecap:\"\\u22d2\",leftthreetimes:\"\\u22cb\",Cup:\"\\u22d3\",doublecup:\"\\u22d3\",rightthreetimes:\"\\u22cc\",barwedge:\"\\u22bc\",curlywedge:\"\\u22cf\",veebar:\"\\u22bb\",curlyvee:\"\\u22ce\",doublebarwedge:\"\\u2a5e\",boxminus:\"\\u229f\",circleddash:\"\\u229d\",boxtimes:\"\\u22a0\",circledast:\"\\u229b\",boxdot:\"\\u22a1\",circledcirc:\"\\u229a\",boxplus:\"\\u229e\",centerdot:[\"\\u22c5\",{variantForm:!0}],divideontimes:\"\\u22c7\",intercal:\"\\u22ba\",leqq:\"\\u2266\",geqq:\"\\u2267\",leqslant:\"\\u2a7d\",geqslant:\"\\u2a7e\",eqslantless:\"\\u2a95\",eqslantgtr:\"\\u2a96\",lesssim:\"\\u2272\",gtrsim:\"\\u2273\",lessapprox:\"\\u2a85\",gtrapprox:\"\\u2a86\",approxeq:\"\\u224a\",lessdot:\"\\u22d6\",gtrdot:\"\\u22d7\",lll:\"\\u22d8\",llless:\"\\u22d8\",ggg:\"\\u22d9\",gggtr:\"\\u22d9\",lessgtr:\"\\u2276\",gtrless:\"\\u2277\",lesseqgtr:\"\\u22da\",gtreqless:\"\\u22db\",lesseqqgtr:\"\\u2a8b\",gtreqqless:\"\\u2a8c\",doteqdot:\"\\u2251\",Doteq:\"\\u2251\",eqcirc:\"\\u2256\",risingdotseq:\"\\u2253\",circeq:\"\\u2257\",fallingdotseq:\"\\u2252\",triangleq:\"\\u225c\",backsim:\"\\u223d\",thicksim:[\"\\u223c\",{variantForm:!0}],backsimeq:\"\\u22cd\",thickapprox:[\"\\u2248\",{variantForm:!0}],subseteqq:\"\\u2ac5\",supseteqq:\"\\u2ac6\",Subset:\"\\u22d0\",Supset:\"\\u22d1\",sqsubset:\"\\u228f\",sqsupset:\"\\u2290\",preccurlyeq:\"\\u227c\",succcurlyeq:\"\\u227d\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",precsim:\"\\u227e\",succsim:\"\\u227f\",precapprox:\"\\u2ab7\",succapprox:\"\\u2ab8\",vartriangleleft:\"\\u22b2\",lhd:\"\\u22b2\",vartriangleright:\"\\u22b3\",rhd:\"\\u22b3\",trianglelefteq:\"\\u22b4\",unlhd:\"\\u22b4\",trianglerighteq:\"\\u22b5\",unrhd:\"\\u22b5\",vDash:\"\\u22a8\",Vdash:\"\\u22a9\",Vvdash:\"\\u22aa\",smallsmile:[\"\\u2323\",{variantForm:!0}],shortmid:[\"\\u2223\",{variantForm:!0}],smallfrown:[\"\\u2322\",{variantForm:!0}],shortparallel:[\"\\u2225\",{variantForm:!0}],bumpeq:\"\\u224f\",between:\"\\u226c\",Bumpeq:\"\\u224e\",pitchfork:\"\\u22d4\",varpropto:\"\\u221d\",backepsilon:\"\\u220d\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",therefore:\"\\u2234\",because:\"\\u2235\",eqsim:\"\\u2242\",vartriangle:[\"\\u25b3\",{variantForm:!0}],Join:\"\\u22c8\",nless:\"\\u226e\",ngtr:\"\\u226f\",nleq:\"\\u2270\",ngeq:\"\\u2271\",nleqslant:[\"\\u2a87\",{variantForm:!0}],ngeqslant:[\"\\u2a88\",{variantForm:!0}],nleqq:[\"\\u2270\",{variantForm:!0}],ngeqq:[\"\\u2271\",{variantForm:!0}],lneq:\"\\u2a87\",gneq:\"\\u2a88\",lneqq:\"\\u2268\",gneqq:\"\\u2269\",lvertneqq:[\"\\u2268\",{variantForm:!0}],gvertneqq:[\"\\u2269\",{variantForm:!0}],lnsim:\"\\u22e6\",gnsim:\"\\u22e7\",lnapprox:\"\\u2a89\",gnapprox:\"\\u2a8a\",nprec:\"\\u2280\",nsucc:\"\\u2281\",npreceq:[\"\\u22e0\",{variantForm:!0}],nsucceq:[\"\\u22e1\",{variantForm:!0}],precneqq:\"\\u2ab5\",succneqq:\"\\u2ab6\",precnsim:\"\\u22e8\",succnsim:\"\\u22e9\",precnapprox:\"\\u2ab9\",succnapprox:\"\\u2aba\",nsim:\"\\u2241\",ncong:\"\\u2246\",nshortmid:[\"\\u2224\",{variantForm:!0}],nshortparallel:[\"\\u2226\",{variantForm:!0}],nmid:\"\\u2224\",nparallel:\"\\u2226\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",ntriangleleft:\"\\u22ea\",ntriangleright:\"\\u22eb\",ntrianglelefteq:\"\\u22ec\",ntrianglerighteq:\"\\u22ed\",nsubseteq:\"\\u2288\",nsupseteq:\"\\u2289\",nsubseteqq:[\"\\u2288\",{variantForm:!0}],nsupseteqq:[\"\\u2289\",{variantForm:!0}],subsetneq:\"\\u228a\",supsetneq:\"\\u228b\",varsubsetneq:[\"\\u228a\",{variantForm:!0}],varsupsetneq:[\"\\u228b\",{variantForm:!0}],subsetneqq:\"\\u2acb\",supsetneqq:\"\\u2acc\",varsubsetneqq:[\"\\u2acb\",{variantForm:!0}],varsupsetneqq:[\"\\u2acc\",{variantForm:!0}],leftleftarrows:\"\\u21c7\",rightrightarrows:\"\\u21c9\",leftrightarrows:\"\\u21c6\",rightleftarrows:\"\\u21c4\",Lleftarrow:\"\\u21da\",Rrightarrow:\"\\u21db\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",leftarrowtail:\"\\u21a2\",rightarrowtail:\"\\u21a3\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",leftrightharpoons:\"\\u21cb\",rightleftharpoons:[\"\\u21cc\",{variantForm:!0}],curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",Lsh:\"\\u21b0\",Rsh:\"\\u21b1\",upuparrows:\"\\u21c8\",downdownarrows:\"\\u21ca\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",downharpoonleft:\"\\u21c3\",restriction:\"\\u21be\",multimap:\"\\u22b8\",downharpoonright:\"\\u21c2\",leftrightsquigarrow:\"\\u21ad\",rightsquigarrow:\"\\u21dd\",leadsto:\"\\u21dd\",dashrightarrow:\"\\u21e2\",dashleftarrow:\"\\u21e0\",nleftarrow:\"\\u219a\",nrightarrow:\"\\u219b\",nLeftarrow:\"\\u21cd\",nRightarrow:\"\\u21cf\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\"}),new o.DelimiterMap(\"AMSsymbols-delimiter\",s.default.delimiter,{\"\\\\ulcorner\":\"\\u231c\",\"\\\\urcorner\":\"\\u231d\",\"\\\\llcorner\":\"\\u231e\",\"\\\\lrcorner\":\"\\u231f\"}),new o.CommandMap(\"AMSsymbols-macros\",{implies:[\"Macro\",\"\\\\;\\\\Longrightarrow\\\\;\"],impliedby:[\"Macro\",\"\\\\;\\\\Longleftarrow\\\\;\"]},i.default)},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),C=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},_=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(11),s=r(9),T=r(22),w=r(116),b=r(18),c=r(3),l=(o=s.CommandMap,i(u,o),u.prototype.remove=function(t){this.map.delete(t)},u);function u(){return null!==o&&o.apply(this,arguments)||this}function A(t,e,r,n){var i,o,a,s;if(b.Package.packages.has(t.options.require.prefix+r)){var c=t.options.autoload[r],l=C(2===c.length&&Array.isArray(c[0])?c:[c,[]],2),u=l[0],h=l[1];try{for(var f=_(u),p=f.next();!p.done;p=f.next()){var d=p.value;k.remove(d)}}catch(t){i={error:t}}finally{try{p&&!p.done&&(o=f.return)&&o.call(f)}finally{if(i)throw i.error}}try{for(var m=_(h),y=m.next();!y.done;y=m.next()){var v=y.value;I.remove(v)}}catch(t){a={error:t}}finally{try{y&&!y.done&&(s=m.return)&&s.call(m)}finally{if(a)throw a.error}}t.i-=e.length+(n?0:7)}w.RequireLoad(t,r)}var k=new(e.AutoloadCommandMap=l)(\"autoload-macros\",{},{}),I=new l(\"autoload-environments\",{},{});e.AutoloadConfiguration=a.Configuration.create(\"autoload\",{handler:{macro:[\"autoload-macros\"],environment:[\"autoload-environments\"]},options:{autoload:c.expandable({action:[\"toggle\",\"mathtip\",\"texttip\"],amsCd:[[],[\"CD\"]],bbox:[\"bbox\"],boldsymbol:[\"boldsymbol\"],braket:[\"bra\",\"ket\",\"braket\",\"set\",\"Bra\",\"Ket\",\"Braket\",\"Set\",\"ketbra\",\"Ketbra\"],cancel:[\"cancel\",\"bcancel\",\"xcancel\",\"cancelto\"],color:[\"color\",\"definecolor\",\"textcolor\",\"colorbox\",\"fcolorbox\"],enclose:[\"enclose\"],extpfeil:[\"xtwoheadrightarrow\",\"xtwoheadleftarrow\",\"xmapsto\",\"xlongequal\",\"xtofrom\",\"Newextarrow\"],html:[\"href\",\"class\",\"style\",\"cssId\"],mhchem:[\"ce\",\"pu\"],newcommand:[\"newcommand\",\"renewcommand\",\"newenvironment\",\"renewenvironment\",\"def\",\"let\"],unicode:[\"unicode\"],verb:[\"verb\"]})},config:function(t,e){var r,n,i,o,a,s,c=e.parseOptions,l=c.handlers.get(\"macro\"),u=c.handlers.get(\"environment\"),h=c.options.autoload;try{for(var f=_(Object.keys(h)),p=f.next();!p.done;p=f.next()){var d=p.value,m=h[d],y=C(2===m.length&&Array.isArray(m[0])?m:[m,[]],2),v=y[0],b=y[1];try{for(var g=(i=void 0,_(v)),M=g.next();!M.done;M=g.next()){var O=M.value;l.lookup(O)&&\"color\"!==O||k.add(O,new T.Macro(O,A,[d,!0]))}}catch(t){i={error:t}}finally{try{M&&!M.done&&(o=g.return)&&o.call(g)}finally{if(i)throw i.error}}try{for(var x=(a=void 0,_(b)),S=x.next();!S.done;S=x.next()){var E=S.value;u.lookup(E)||I.add(E,new T.Macro(E,A,[d,!1]))}}catch(t){a={error:t}}finally{try{S&&!S.done&&(s=x.return)&&s.call(x)}finally{if(a)throw a.error}}}}catch(t){r={error:t}}finally{try{p&&!p.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}c.options.require.jax||w.RequireConfiguration.config(t,e)},configPriority:10,init:function(t){t.options.require||c.defaultOptions(t.options,w.RequireConfiguration.options)},priority:10})},function(t,e,r){\"use strict\";var u=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(11),i=r(3),o=r(9),h=r(22),f=r(72);var p=new o.CommandMap(\"configMacros\",{},{});e.ConfigMacrosConfiguration=n.Configuration.create(\"configMacros\",{handler:{macro:[\"configMacros\"]},config:function(t,e){var r,n,i=t.options.macros;try{for(var o=u(Object.keys(i)),a=o.next();!a.done;a=o.next()){var s=a.value,c=\"string\"==typeof i[s]?[i[s]]:i[s],l=Array.isArray(c[2])?new h.Macro(s,f.default.MacroWithTemplate,c.slice(0,2).concat(c[2])):new h.Macro(s,f.default.Macro,c);p.add(s,l)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},options:{macros:i.expandable({})}})},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(11),o=r(118),a=r(8);r(247);e.NewcommandConfiguration=i.Configuration.create(\"newcommand\",{handler:{macro:[\"Newcommand-macros\"]},items:(n={},n[o.BeginEnvItem.prototype.kind]=o.BeginEnvItem,n),options:{maxMacros:1e3},init:function(t){t.handler.macro.indexOf(a.ExtensionMaps.NEW_COMMAND)<0&&t.append(i.Configuration.extension())}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(72);new(r(9).CommandMap)(\"Newcommand-macros\",{newcommand:\"NewCommand\",renewcommand:\"NewCommand\",newenvironment:\"NewEnvironment\",renewenvironment:\"NewEnvironment\",def:\"MacroDef\",let:\"Let\"},n.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(11);e.NoUndefinedConfiguration=n.Configuration.create(\"noundefined\",{fallback:{macro:function(t,e){var r=t.create(\"text\",\"\\\\\"+e);t.Push(t.create(\"node\",\"mtext\",[],{mathcolor:\"red\"},r))}}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.registerTeX=function(t){if(MathJax.startup){MathJax.startup.registerConstructor(\"tex\",n.TeX),MathJax.startup.useInput(\"tex\"),MathJax.config.tex||(MathJax.config.tex={});var e=MathJax.config.tex.packages;MathJax.config.tex.packages=t,e&&(0,i.insert)(MathJax.config.tex,{packages:e})}};var n=r(105),i=r(3)},function(t,e,r){\"use strict\";r(251);var n=r(119);MathJax.startup&&(MathJax.startup.registerConstructor(\"mml\",n.MathML),MathJax.startup.useInput(\"mml\"))},function(t,e,r){\"use strict\";var n=r(5),i=s(r(119)),o=s(r(120)),a=s(r(121));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{input:{mathml_ts:i,mathml:{FindMathML:o,MathMLCompile:a}}}})},function(t,e,r){\"use strict\";r(253);var n=r(5),i=r(122);MathJax.loader&&(0,n.combineDefaults)(MathJax.config.loader,\"output/chtml\",{checkReady:function(){return MathJax.loader.load(\"output/chtml/fonts/tex\")}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"chtml\",i.CHTML),MathJax.startup.useOutput(\"chtml\"))},function(t,e,r){\"use strict\";var n=r(5),i=mt(r(122)),o=mt(r(1)),a=mt(r(148)),s=mt(r(2)),c=mt(r(125)),l=mt(r(127)),u=mt(r(172)),h=mt(r(174)),f=mt(r(167)),p=mt(r(130)),d=mt(r(146)),m=mt(r(150)),y=mt(r(152)),v=mt(r(168)),b=mt(r(132)),g=mt(r(160)),M=mt(r(136)),O=mt(r(134)),x=mt(r(144)),S=mt(r(155)),E=mt(r(149)),C=mt(r(138)),_=mt(r(142)),T=mt(r(74)),w=mt(r(37)),A=mt(r(162)),k=mt(r(165)),I=mt(r(140)),L=mt(r(164)),N=mt(r(159)),P=mt(r(157)),B=mt(r(170)),R=mt(r(16)),j=mt(r(124)),H=mt(r(23)),D=mt(r(36)),X=mt(r(123)),F=mt(r(128)),W=mt(r(126)),J=mt(r(173)),q=mt(r(175)),V=mt(r(76)),U=mt(r(131)),z=mt(r(147)),G=mt(r(151)),K=mt(r(153)),Z=mt(r(169)),Y=mt(r(133)),$=mt(r(161)),Q=mt(r(137)),tt=mt(r(135)),et=mt(r(145)),rt=mt(r(156)),nt=mt(r(73)),it=mt(r(139)),ot=mt(r(143)),at=mt(r(154)),st=mt(r(38)),ct=mt(r(163)),lt=mt(r(166)),ut=mt(r(141)),ht=mt(r(75)),ft=mt(r(39)),pt=mt(r(158)),dt=mt(r(171));function mt(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{output:{chtml_ts:i,chtml:{FontData:o,Notation:a,Wrapper:s,WrapperFactory:c,Wrappers_ts:l,Wrappers:{TeXAtom:u,TextNode:h,maction:f,math:p,menclose:d,mfenced:m,mfrac:y,mglyph:v,mi:b,mmultiscripts:g,mn:M,mo:O,mpadded:x,mroot:S,mrow:E,ms:C,mspace:_,msqrt:T,msubsup:w,mtable:A,mtd:k,mtext:I,mtr:L,munderover:N,scriptbase:P,semantics:B}},common:{BBox:R,CssStyles:j,FontData:H,Notation:D,OutputJax:X,Wrapper:F,WrapperFactory:W,Wrappers:{TeXAtom:J,TextNode:q,maction:V,math:U,menclose:z,mfenced:G,mfrac:K,mglyph:Z,mi:Y,mmultiscripts:$,mn:Q,mo:tt,mpadded:et,mroot:rt,mrow:nt,ms:it,mspace:ot,msqrt:at,msubsup:st,mtable:ct,mtd:lt,mtext:ut,mtr:ht,munderover:ft,scriptbase:pt,semantics:dt}}}}})},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTeXFontMixin=function(t){var e,r;return i(n,r=t),n.prototype.getDelimiterData=function(t){return this.getChar(\"-smallop\",t)||this.getChar(\"-size4\",t)},(e=n).defaultVariants=s(t.defaultVariants,[[\"-smallop\",\"normal\"],[\"-largeop\",\"normal\"],[\"-size3\",\"normal\"],[\"-size4\",\"normal\"],[\"-tex-calligraphic\",\"italic\"],[\"-tex-bold-calligraphic\",\"bold-italic\"],[\"-tex-oldstyle\",\"normal\"],[\"-tex-bold-oldstyle\",\"bold\"],[\"-tex-mathit\",\"italic\"],[\"-tex-variant\",\"normal\"]]),e.defaultCssFonts=o(o({},t.defaultCssFonts),{\"-smallop\":[\"serif\",!1,!1],\"-largeop\":[\"serif\",!1,!1],\"-size3\":[\"serif\",!1,!1],\"-size4\":[\"serif\",!1,!1],\"-tex-calligraphic\":[\"cursive\",!0,!1],\"-tex-bold-calligraphic\":[\"cursive\",!0,!0],\"-tex-oldstyle\":[\"serif\",!1,!1],\"-tex-bold-oldstyle\":[\"serif\",!1,!0],\"-tex-mathit\":[\"serif\",!0,!1]}),e.defaultSizeVariants=[\"normal\",\"-smallop\",\"-largeop\",\"-size3\",\"-size4\"],e;function n(){return null!==r&&r.apply(this,arguments)||this}}},function(t,e,r){\"use strict\";r(256);var n=r(5),i=r(18),o=r(3),a=r(77);if(MathJax.startup){(0,n.combineDefaults)(MathJax.config,\"chtml\",{fontURL:i.Package.resolvePath(\"output/chtml/fonts/woff-v2\",!1)});var s=(0,o.selectOptionsFromKeys)(MathJax.config.chtml||{},a.TeXFont.OPTIONS);(0,n.combineDefaults)(MathJax.config,\"chtml\",{font:new a.TeXFont(s)})}},function(t,e,r){\"use strict\";var n=r(5),i=tt(r(77)),o=tt(r(176)),a=tt(r(178)),s=tt(r(180)),c=tt(r(182)),l=tt(r(184)),u=tt(r(186)),h=tt(r(188)),f=tt(r(190)),p=tt(r(192)),d=tt(r(194)),m=tt(r(196)),y=tt(r(198)),v=tt(r(200)),b=tt(r(202)),g=tt(r(204)),M=tt(r(206)),O=tt(r(208)),x=tt(r(210)),S=tt(r(212)),E=tt(r(214)),C=tt(r(216)),_=tt(r(218)),T=tt(r(220)),w=tt(r(222)),A=tt(r(177)),k=tt(r(179)),I=tt(r(224)),L=tt(r(181)),N=tt(r(183)),P=tt(r(185)),B=tt(r(187)),R=tt(r(189)),j=tt(r(191)),H=tt(r(193)),D=tt(r(195)),X=tt(r(197)),F=tt(r(199)),W=tt(r(201)),J=tt(r(203)),q=tt(r(205)),V=tt(r(207)),U=tt(r(209)),z=tt(r(211)),G=tt(r(213)),K=tt(r(215)),Z=tt(r(217)),Y=tt(r(219)),$=tt(r(221)),Q=tt(r(223));function tt(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{output:{chtml:{fonts:{tex_ts:i,tex:{\"bold-italic\":o,bold:a,\"double-struck\":s,\"fraktur-bold\":c,fraktur:l,italic:u,largeop:h,monospace:f,normal:p,\"sans-serif-bold-italic\":d,\"sans-serif-bold\":m,\"sans-serif-italic\":y,\"sans-serif\":v,\"script-bold\":b,script:g,smallop:M,\"tex-calligraphic-bold\":O,\"tex-calligraphic\":x,\"tex-mathit\":S,\"tex-oldstyle-bold\":E,\"tex-oldstyle\":C,\"tex-size3\":_,\"tex-size4\":T,\"tex-variant\":w}}},common:{fonts:{tex:{\"bold-italic\":A,bold:k,delimiters:I,\"double-struck\":L,\"fraktur-bold\":N,fraktur:P,italic:B,largeop:R,monospace:j,normal:H,\"sans-serif-bold-italic\":D,\"sans-serif-bold\":X,\"sans-serif-italic\":F,\"sans-serif\":W,\"script-bold\":J,script:q,smallop:V,\"tex-calligraphic-bold\":U,\"tex-calligraphic\":z,\"tex-mathit\":G,\"tex-oldstyle-bold\":K,\"tex-oldstyle\":Z,\"tex-size3\":Y,\"tex-size4\":$,\"tex-variant\":Q}}}}}})},function(t,e,r){\"use strict\";r(258),r(260);var n=r(229);MathJax.startup&&\"undefined\"!=typeof window&&MathJax.startup.extendHandler(function(t){return(0,n.MenuHandler)(t)},20)},function(t,e,r){\"use strict\";(function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}r(259),\"undefined\"==typeof ContextMenu&&(t.ContextMenu={ContextMenu:function t(){e(this,t)},Info:function t(){e(this,t)}})}).call(this,r(28))},function(t,e){var n,r,i,o,a,s,c,l,u,h,f,p,d,m,y,v,b,g,M,O,x,S,E,C,_,T,w,A,k,I,L,N,P,B,R,j,H,D,X,F,W,J,q,V,U,z,G,K,Z,Y,$,Q,tt,et,rt,nt,it,ot,at,st,ct,lt,ut,ht,ft,pt,dt,mt,yt,vt,bt=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});function gt(t,e,r){this.name=t,this.getter=e,this.setter=r,this.items=[]}function Mt(){this.pool={}}function Ot(){this.bubble=!1}function xt(t){return f+\"_\"+t}function St(t){return xt(t)}function Et(t){return xt(t)}function Ct(){return null!==d&&d.apply(this,arguments)||this}function _t(t,e){var r=v.call(this)||this;return r.className=y.HtmlClasses.MENUITEM,r.role=\"menuitem\",r.type=\"entry\",r.hidden=!1,r.menu=t,r.type=e,r}function Tt(){var t=null!==M&&M.apply(this,arguments)||this;return t.posted=!1,t}function wt(){var t=null!==S&&S.apply(this,arguments)||this;return t.className=x.HtmlClasses.CONTEXTMENU,t.role=\"menu\",t.items=[],t}function At(t){this.store=[],this.active=null,this.counter=0,this.attachedClass=C.HtmlClasses.ATTACHED+\"_\"+C.MenuUtil.counter(),this.taborder=!0,this.attrMap={},this.menu=t}function kt(){var t=w.call(this)||this;return t.moving=!1,t.store_=new T.MenuStore(t),t.widgets=[],t.variablePool=new T.VariablePool,t}function It(t){var e=I.call(this)||this;return e.anchor=t,e.variablePool=e.anchor.getMenu().getPool(),e.setBaseMenu(),e}function Lt(t,e,r,n){var i=B.call(this,t,e)||this;return i._content=r,i.disabled=!1,i.callbacks=[],i.id=n||r,i}function Nt(){return null!==H&&H.apply(this,arguments)||this}function Pt(t){var e=W.call(this)||this;return e.className=F.HtmlClasses.MENUCLOSE,e.role=\"button\",e.element=t,e}function Bt(t,e,r){var n=V.call(this)||this;return n.className=q.HtmlClasses.INFO,n.role=\"dialog\",n.title=\"\",n.signature=\"\",n.contentDiv=n.generateContent(),n.close=n.generateClose(),n.title=t,n.content=e||function(){return\"\"},n.signature=r,n}function Rt(t,e,r,n){var i=G.call(this,t,\"checkbox\",e,n)||this;return i.role=\"menuitemcheckbox\",i.variable=t.getPool().lookup(r),i.register(),i}function jt(t,e,r,n){var i=Y.call(this,t,\"radio\",e,n)||this;return i.role=\"combobox\",i.inputEvent=!1,i.variable=t.getPool().lookup(r),i.register(),i}function Ht(t,e,r,n){var i=tt.call(this,t,\"command\",e,n)||this;return i.command=null,i.command=r,i}function Dt(t,e,r){return nt.call(this,t,\"label\",e,r)||this}function Xt(t,e,r,n){var i=at.call(this,t,\"radio\",e,n)||this;return i.role=\"menuitemradio\",i.variable=t.getPool().lookup(r),i.register(),i}function Ft(t){var e=lt.call(this,t,\"rule\")||this;return e.className=ct.HtmlClasses.MENUITEM,e.role=\"separator\",e}function Wt(t,e,r){var n=ft.call(this,t,\"submenu\",e,r)||this;return n.submenu=null,n}function Jt(t,e){var r=mt.call(this)||this;return r.title=\"\",r.window=null,r.localSettings={left:Math.round((screen.width-400)/2),top:Math.round((screen.height-300)/3)},r.windowList=[],r.mobileFlag=!1,r.active=null,r.title=t,r.content=e||function(){return\"\"},r}r=vt=vt||{},gt.prototype.getName=function(){return this.name},gt.prototype.getValue=function(t){try{return this.getter(t)}catch(t){r.MenuUtil.error(t,\"Command of variable \"+this.name+\" failed.\")}},gt.prototype.setValue=function(t,e){try{this.setter(t,e)}catch(t){r.MenuUtil.error(t,\"Command of variable \"+this.name+\" failed.\")}this.update()},gt.prototype.register=function(t){-1===this.items.indexOf(t)&&this.items.push(t)},gt.prototype.unregister=function(t){var e=this.items.indexOf(t);-1!==e&&this.items.splice(e,1)},gt.prototype.update=function(){this.items.forEach(function(t){return t.update()})},gt.prototype.registerCallback=function(e){this.items.forEach(function(t){return t.registerCallback(e)})},gt.prototype.unregisterCallback=function(e){this.items.forEach(function(t){return t.unregisterCallback(e)})},i=gt,r.Variable=i,o=vt=vt||{},Mt.prototype.insert=function(t){this.pool[t.getName()]=t},Mt.prototype.lookup=function(t){return this.pool[t]},Mt.prototype.remove=function(t){delete this.pool[t]},Mt.prototype.update=function(){for(var t in this.pool)this.pool[t].update()},a=Mt,o.VariablePool=a,s=vt=vt||{},(c=s.KEY||(s.KEY={}))[c.RETURN=13]=\"RETURN\",c[c.ESCAPE=27]=\"ESCAPE\",c[c.SPACE=32]=\"SPACE\",c[c.LEFT=37]=\"LEFT\",c[c.UP=38]=\"UP\",c[c.RIGHT=39]=\"RIGHT\",c[c.DOWN=40]=\"DOWN\",(vt=vt||{}).MOUSE={CLICK:\"click\",DBLCLICK:\"dblclick\",DOWN:\"mousedown\",UP:\"mouseup\",OVER:\"mouseover\",OUT:\"mouseout\",MOVE:\"mousemove\",SELECTSTART:\"selectstart\",SELECTEND:\"selectend\"},l=vt=vt||{},Ot.prototype.bubbleKey=function(){this.bubble=!0},Ot.prototype.keydown=function(t){switch(t.keyCode){case l.KEY.ESCAPE:this.escape(t);break;case l.KEY.RIGHT:this.right(t);break;case l.KEY.LEFT:this.left(t);break;case l.KEY.UP:this.up(t);break;case l.KEY.DOWN:this.down(t);break;case l.KEY.RETURN:case l.KEY.SPACE:this.space(t);break;default:return}this.bubble?this.bubble=!1:this.stop(t)},Ot.prototype.escape=function(t){},Ot.prototype.space=function(t){},Ot.prototype.left=function(t){},Ot.prototype.right=function(t){},Ot.prototype.up=function(t){},Ot.prototype.down=function(t){},Ot.prototype.stop=function(t){t&&(t.stopPropagation(),t.preventDefault(),t.cancelBubble=!0)},Ot.prototype.mousedown=function(t){return this.stop(t)},Ot.prototype.mouseup=function(t){return this.stop(t)},Ot.prototype.mouseover=function(t){return this.stop(t)},Ot.prototype.mouseout=function(t){return this.stop(t)},Ot.prototype.click=function(t){return this.stop(t)},Ot.prototype.addEvents=function(t){t.addEventListener(l.MOUSE.DOWN,this.mousedown.bind(this)),t.addEventListener(l.MOUSE.UP,this.mouseup.bind(this)),t.addEventListener(l.MOUSE.OVER,this.mouseover.bind(this)),t.addEventListener(l.MOUSE.OUT,this.mouseout.bind(this)),t.addEventListener(l.MOUSE.CLICK,this.click.bind(this)),t.addEventListener(\"keydown\",this.keydown.bind(this)),t.addEventListener(\"dragstart\",this.stop.bind(this)),t.addEventListener(\"selectstart\",this.stop.bind(this)),t.addEventListener(\"contextmenu\",this.stop.bind(this)),t.addEventListener(\"dblclick\",this.stop.bind(this))},u=Ot,l.AbstractNavigatable=u,h=vt=vt||{},f=\"CtxtMenu\",h.HtmlClasses={ATTACHED:St(\"Attached\"),CONTEXTMENU:St(\"ContextMenu\"),MENU:St(\"Menu\"),MENUARROW:St(\"MenuArrow\"),MENUACTIVE:St(\"MenuActive\"),MENUCHECK:St(\"MenuCheck\"),MENUCLOSE:St(\"MenuClose\"),MENUCOMBOBOX:St(\"MenuComboBox\"),MENUDISABLED:St(\"MenuDisabled\"),MENUFRAME:St(\"MenuFrame\"),MENUITEM:St(\"MenuItem\"),MENULABEL:St(\"MenuLabel\"),MENURADIOCHECK:St(\"MenuRadioCheck\"),MENUINPUTBOX:St(\"MenuInputBox\"),MENURULE:St(\"MenuRule\"),MOUSEPOST:St(\"MousePost\"),RTL:St(\"RTL\"),INFO:St(\"Info\"),INFOCLOSE:St(\"InfoClose\"),INFOCONTENT:St(\"InfoContent\"),INFOSIGNATURE:St(\"InfoSignature\"),INFOTITLE:St(\"InfoTitle\")},h.HtmlAttrs={COUNTER:Et(\"Counter\"),KEYDOWNFUNC:Et(\"keydownFunc\"),CONTEXTMENUFUNC:Et(\"contextmenuFunc\"),OLDTAB:Et(\"Oldtabindex\"),TOUCHFUNC:Et(\"TouchFunc\")},p=vt=vt||{},d=p.AbstractNavigatable,bt(Ct,d),Ct.prototype.addAttributes=function(t){for(var e in t)this.html.setAttribute(e,t[e])},Ct.prototype.getHtml=function(){return this.html||this.generateHtml(),this.html},Ct.prototype.setHtml=function(t){this.html=t,this.addEvents(t)},Ct.prototype.generateHtml=function(){var t=document.createElement(\"div\");t.classList.add(this.className),t.setAttribute(\"role\",this.role),this.setHtml(t)},Ct.prototype.focus=function(){var t=this.getHtml();t.setAttribute(\"tabindex\",\"0\"),t.focus()},Ct.prototype.unfocus=function(){var t=this.getHtml();t.hasAttribute(\"tabindex\")&&t.setAttribute(\"tabindex\",\"-1\"),t.blur()},m=Ct,p.MenuElement=m,y=vt=vt||{},v=y.MenuElement,bt(_t,v),_t.prototype.getMenu=function(){return this.menu},_t.prototype.setMenu=function(t){this.menu=t},_t.prototype.getType=function(){return this.type},_t.prototype.hide=function(){this.hidden=!0,this.menu.generateMenu()},_t.prototype.show=function(){this.hidden=!1,this.menu.generateMenu()},_t.prototype.isHidden=function(){return this.hidden},b=_t,y.AbstractEntry=b,g=vt=vt||{},M=g.MenuElement,bt(Tt,M),Tt.prototype.isPosted=function(){return this.posted},Tt.prototype.post=function(t,e){this.posted||(void 0!==t&&void 0!==e&&this.getHtml().setAttribute(\"style\",\"left: \"+t+\"px; top: \"+e+\"px;\"),this.display(),this.posted=!0)},Tt.prototype.unpost=function(){if(this.posted){var t=this.getHtml();t.parentNode&&t.parentNode.removeChild(t),this.posted=!1}},O=Tt,g.AbstractPostable=O,x=vt=vt||{},S=x.AbstractPostable,bt(wt,S),wt.prototype.getItems=function(){return this.items},wt.prototype.getPool=function(){return this.variablePool},wt.prototype.getFocused=function(){return this.focused},wt.prototype.setFocused=function(t){if(this.focused!==t){this.focused||this.unfocus();var e=this.focused;this.focused=t,e&&e.unfocus()}},wt.prototype.up=function(t){var e=this.getItems().filter(function(t){return t instanceof x.AbstractItem&&!t.isHidden()});if(0!==e.length)if(this.focused){var r=e.indexOf(this.focused);-1!==r&&e[r=r?--r:e.length-1].focus()}else e[e.length-1].focus()},wt.prototype.down=function(t){var e=this.getItems().filter(function(t){return t instanceof x.AbstractItem&&!t.isHidden()});if(0!==e.length)if(this.focused){var r=e.indexOf(this.focused);-1!==r&&e[r=++r===e.length?0:r].focus()}else e[0].focus()},wt.prototype.generateHtml=function(){S.prototype.generateHtml.call(this),this.generateMenu()},wt.prototype.generateMenu=function(){var t=this.getHtml();t.classList.add(x.HtmlClasses.MENU);for(var e=0,r=this.items;e<r.length;e++){var n=r[e];if(n.isHidden()){var i=n.getHtml();i.parentNode&&i.parentNode.removeChild(i)}else t.appendChild(n.getHtml())}},wt.prototype.post=function(t,e){this.variablePool.update(),S.prototype.post.call(this,t,e)},wt.prototype.unpostSubmenus=function(){for(var t=0,e=this.items.filter(function(t){return t instanceof x.Submenu});t<e.length;t++){var r=e[t];r.getSubmenu().unpost(),r!==this.getFocused()&&r.unfocus()}},wt.prototype.unpost=function(){S.prototype.unpost.call(this),this.unpostSubmenus(),this.setFocused(null)},wt.prototype.find=function(t){for(var e=0,r=this.getItems();e<r.length;e++){var n=r[e];if(\"rule\"!==n.getType()){if(n.getId()===t)return n;if(\"submenu\"===n.getType()){var i=n.getSubmenu().find(t);if(i)return i}}}return null},wt.prototype.parseItems=function(t){var e=this;t.map(function(t){return[e.parseItem.bind(e)(t),t.hidden]}).forEach(function(t){return t[1]&&t[0].hide()})},wt.prototype.parseItem=function(t){var e={checkbox:x.Checkbox.parse,combo:x.Combo.parse,command:x.Command.parse,label:x.Label.parse,radio:x.Radio.parse,rule:x.Rule.parse,submenu:x.Submenu.parse}[t.type];if(e){var r=e(t,this);return this.getItems().push(r),t.disabled&&r.disable(),r}},E=wt,x.AbstractMenu=E,C=vt=vt||{},At.prototype.setActive=function(t){do{if(-1!==this.store.indexOf(t)){this.active=t;break}t=t.parentNode}while(t)},At.prototype.getActive=function(){return this.active},At.prototype.next=function(){var t=this.store.length;if(0===t)return this.active=null;var e=this.store.indexOf(this.active);return e=-1===e?0:e<t-1?e+1:0,this.active=this.store[e],this.active},At.prototype.previous=function(){var t=this.store.length;if(0===t)return this.active=null;var e=t-1,r=this.store.indexOf(this.active);return r=-1===r?e:0===r?e:r-1,this.active=this.store[r],this.active},At.prototype.clear=function(){this.remove(this.store)},At.prototype.insert=function(t){for(var e=0,r=t instanceof HTMLElement?[t]:t;e<r.length;e++){var n=r[e];this.insertElement(n)}this.sort()},At.prototype.remove=function(t){for(var e=0,r=t instanceof HTMLElement?[t]:t;e<r.length;e++){var n=r[e];this.removeElement(n)}this.sort()},At.prototype.inTaborder=function(t){this.taborder&&!t&&this.removeTaborder(),!this.taborder&&t&&this.insertTaborder(),this.taborder=t},At.prototype.insertTaborder=function(){this.taborder&&this.insertTaborder_()},At.prototype.removeTaborder=function(){this.taborder&&this.removeTaborder_()},At.prototype.insertElement=function(t){t.classList.contains(this.attachedClass)||(t.classList.add(this.attachedClass),this.taborder&&this.addTabindex(t),this.addEvents(t))},At.prototype.removeElement=function(t){t.classList.contains(this.attachedClass)&&(t.classList.remove(this.attachedClass),this.taborder&&this.removeTabindex(t),this.removeEvents(t))},At.prototype.sort=function(){var t=document.getElementsByClassName(this.attachedClass);this.store=[].slice.call(t)},At.prototype.insertTaborder_=function(){this.store.forEach(function(t){return t.setAttribute(\"tabindex\",\"0\")})},At.prototype.removeTaborder_=function(){this.store.forEach(function(t){return t.setAttribute(\"tabindex\",\"-1\")})},At.prototype.addTabindex=function(t){t.hasAttribute(\"tabindex\")&&t.setAttribute(C.HtmlAttrs.OLDTAB,t.getAttribute(\"tabindex\")),t.setAttribute(\"tabindex\",\"0\")},At.prototype.removeTabindex=function(t){t.hasAttribute(C.HtmlAttrs.OLDTAB)?(t.setAttribute(\"tabindex\",t.getAttribute(C.HtmlAttrs.OLDTAB)),t.removeAttribute(C.HtmlAttrs.OLDTAB)):t.removeAttribute(\"tabindex\")},At.prototype.addEvents=function(t){t.hasAttribute(C.HtmlAttrs.COUNTER)||(this.addEvent(t,\"contextmenu\",this.menu.post.bind(this.menu)),this.addEvent(t,\"keydown\",this.keydown.bind(this)),t.setAttribute(C.HtmlAttrs.COUNTER,this.counter.toString()),this.counter++)},At.prototype.addEvent=function(t,e,r){var n=C.HtmlAttrs[e.toUpperCase()+\"FUNC\"];this.attrMap[n+this.counter]=r,t.addEventListener(e,r)},At.prototype.removeEvents=function(t){if(t.hasAttribute(C.HtmlAttrs.COUNTER)){var e=t.getAttribute(C.HtmlAttrs.COUNTER);this.removeEvent(t,\"contextmenu\",e),this.removeEvent(t,\"keydown\",e),t.removeAttribute(C.HtmlAttrs.COUNTER)}},At.prototype.removeEvent=function(t,e,r){var n=C.HtmlAttrs[e.toUpperCase()+\"FUNC\"],i=this.attrMap[n+r];t.removeEventListener(e,i)},At.prototype.keydown=function(t){t.keyCode===C.KEY.SPACE&&(this.menu.post(t),t.preventDefault(),t.stopImmediatePropagation())},_=At,C.MenuStore=_,T=vt=vt||{},w=T.AbstractMenu,bt(kt,w),kt.parse=function(t){var e=t.menu;if(e){var r=e.pool,n=e.items,i=(e.id,new this);return r.forEach(i.parseVariable.bind(i)),i.parseItems(n),i}T.MenuUtil.error(null,\"Wrong JSON format for menu.\")},kt.prototype.generateHtml=function(){this.isPosted()&&this.unpost(),w.prototype.generateHtml.call(this),this.frame=document.createElement(\"div\"),this.frame.classList.add(T.HtmlClasses.MENUFRAME);var t=\"left: 0px; top: 0px; z-index: 200; width: 100%; height: 100%; border: 0px; padding: 0px; margin: 0px;\";this.frame.setAttribute(\"style\",\"position: absolute; \"+t);var e=document.createElement(\"div\");e.setAttribute(\"style\",\"position: fixed; \"+t),this.frame.appendChild(e),e.addEventListener(\"mousedown\",function(t){this.unpost(),this.unpostWidgets(),this.stop(t)}.bind(this))},kt.prototype.display=function(){document.body.appendChild(this.frame),this.frame.appendChild(this.getHtml()),this.focus()},kt.prototype.escape=function(t){this.unpost(),this.unpostWidgets()},kt.prototype.unpost=function(){if(w.prototype.unpost.call(this),!(0<this.widgets.length)){this.frame.parentNode.removeChild(this.frame);var t=this.getStore();this.moving||t.insertTaborder(),t.getActive().focus()}},kt.prototype.left=function(t){this.move_(this.store_.previous())},kt.prototype.right=function(t){this.move_(this.store_.next())},kt.prototype.getFrame=function(){return this.frame},kt.prototype.getStore=function(){return this.store_},kt.prototype.post=function(t,e){if(void 0!==e)return this.moving||this.getStore().removeTaborder(),void w.prototype.post.call(this,t,e);var r,n,i,o=t;if(o instanceof Event?(r=o.target,this.stop(o)):r=o,o instanceof MouseEvent&&(n=o.pageX,i=o.pageY,n||i||!o.clientX||(n=o.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,i=o.clientY+document.body.scrollTop+document.documentElement.scrollTop)),!n&&!i&&r){var a=window.pageXOffset||document.documentElement.scrollLeft,s=window.pageYOffset||document.documentElement.scrollTop,c=r.getBoundingClientRect();n=(c.right+c.left)/2+a,i=(c.bottom+c.top)/2+s}this.getStore().setActive(r),this.anchor=this.getStore().getActive();var l=this.getHtml();n+l.offsetWidth>document.body.offsetWidth-5&&(n=document.body.offsetWidth-l.offsetWidth-5),this.post(n,i)},kt.prototype.registerWidget=function(t){this.widgets.push(t)},kt.prototype.unregisterWidget=function(t){var e=this.widgets.indexOf(t);-1<e&&this.widgets.splice(e,1),0===this.widgets.length&&this.unpost()},kt.prototype.unpostWidgets=function(){this.widgets.forEach(function(t){return t.unpost()})},kt.prototype.move_=function(t){this.anchor&&t!==this.anchor&&(this.moving=!0,this.unpost(),this.post(t),this.moving=!1)},kt.prototype.parseVariable=function(t){var e=t.name,r=t.getter,n=t.setter;this.getPool().insert(new T.Variable(e,r,n))},A=kt,T.ContextMenu=A,\"undefined\"!=typeof window&&(window.ContextMenu=vt),k=vt=vt||{},I=k.AbstractMenu,bt(It,I),It.parse=function(t,e){var r=t.items,n=(t.id,new It(e));return n.parseItems(r),n},It.prototype.getAnchor=function(){return this.anchor},It.prototype.post=function(){if(this.anchor.getMenu().isPosted()){for(var t=this.anchor.getHtml(),e=this.getHtml(),r=this.baseMenu.getFrame(),n=t.offsetWidth,i=n-2,o=0;t&&t!==r;)i+=t.offsetLeft,o+=t.offsetTop,t=t.parentNode;i+e.offsetWidth>document.body.offsetWidth-5&&(i=Math.max(5,i-n-e.offsetWidth+6)),I.prototype.post.call(this,i,o)}},It.prototype.display=function(){this.baseMenu.getFrame().appendChild(this.getHtml())},It.prototype.setBaseMenu=function(){for(var t=this;(t=t.anchor.getMenu())instanceof It;);this.baseMenu=t},L=It,k.SubMenu=L,function(t){t.close=function(t){var e=t.getMenu();e instanceof N.SubMenu?e.baseMenu.unpost():e.unpost()},t.getActiveElement=function(t){var e=t.getMenu();return(e instanceof N.SubMenu?e.baseMenu:e).getStore().getActive()},t.error=function(t,e){console.log(\"ContextMenu Error: \"+e)},t.counter=function(){return e++};var e=0}((N=vt=vt||{}).MenuUtil||(N.MenuUtil={})),P=vt=vt||{},B=P.AbstractEntry,bt(Lt,B),Object.defineProperty(Lt.prototype,\"content\",{get:function(){return this._content},set:function(t){this._content=t,this.generateHtml(),this.getMenu()&&this.getMenu().generateHtml()},enumerable:!0,configurable:!0}),Lt.prototype.getId=function(){return this.id},Lt.prototype.press=function(){this.disabled||(this.executeAction(),this.executeCallbacks_())},Lt.prototype.executeAction=function(){},Lt.prototype.registerCallback=function(t){-1===this.callbacks.indexOf(t)&&this.callbacks.push(t)},Lt.prototype.unregisterCallback=function(t){var e=this.callbacks.indexOf(t);-1!==e&&this.callbacks.splice(e,1)},Lt.prototype.mousedown=function(t){this.press(),this.stop(t)},Lt.prototype.mouseover=function(t){this.focus(),this.stop(t)},Lt.prototype.mouseout=function(t){this.deactivate(),this.stop(t)},Lt.prototype.generateHtml=function(){B.prototype.generateHtml.call(this);var t=this.getHtml();t.setAttribute(\"aria-disabled\",\"false\"),t.textContent=this.content},Lt.prototype.activate=function(){this.disabled||this.getHtml().classList.add(P.HtmlClasses.MENUACTIVE)},Lt.prototype.deactivate=function(){this.getHtml().classList.remove(P.HtmlClasses.MENUACTIVE)},Lt.prototype.focus=function(){this.getMenu().setFocused(this),B.prototype.focus.call(this),this.activate()},Lt.prototype.unfocus=function(){this.deactivate(),B.prototype.unfocus.call(this)},Lt.prototype.escape=function(t){P.MenuUtil.close(this)},Lt.prototype.up=function(t){this.getMenu().up(t)},Lt.prototype.down=function(t){this.getMenu().down(t)},Lt.prototype.left=function(t){if(this.getMenu()instanceof P.ContextMenu)this.getMenu().left(t);else{var e=this.getMenu();e.setFocused(null),e.getAnchor().focus()}},Lt.prototype.right=function(t){this.getMenu().right(t)},Lt.prototype.space=function(t){this.press()},Lt.prototype.disable=function(){this.disabled=!0;var t=this.getHtml();t.classList.add(P.HtmlClasses.MENUDISABLED),t.setAttribute(\"aria-disabled\",\"true\")},Lt.prototype.enable=function(){this.disabled=!1;var t=this.getHtml();t.classList.remove(P.HtmlClasses.MENUDISABLED),t.removeAttribute(\"aria-disabled\")},Lt.prototype.executeCallbacks_=function(){P.MenuUtil.getActiveElement(this);for(var t=0,e=this.callbacks;t<e.length;t++){var r=e[t];try{r(this)}catch(t){P.MenuUtil.error(t,\"Callback for menu entry \"+this.getId()+\" failed.\")}}},R=Lt,P.AbstractItem=R,j=vt=vt||{},H=j.AbstractItem,bt(Nt,H),Nt.prototype.generateHtml=function(){H.prototype.generateHtml.call(this);var t=this.getHtml();this.span||this.generateSpan(),t.appendChild(this.span),this.update()},Nt.prototype.register=function(){this.variable.register(this)},Nt.prototype.unregister=function(){this.variable.unregister(this)},Nt.prototype.update=function(){this.updateAria(),this.span&&this.updateSpan()},D=Nt,j.AbstractVariableItem=D,function(t){function e(t){return\".\"+(X.HtmlClasses[t]||t)}var r={};r[e(\"INFOCLOSE\")]=\"{  top:.2em; right:.2em;}\",r[e(\"INFOCONTENT\")]=\"{  overflow:auto; text-align:left; font-size:80%;  padding:.4em .6em; border:1px inset; margin:1em 0px;  max-height:20em; max-width:30em; background-color:#EEEEEE;  white-space:normal;}\",r[e(\"INFO\")+e(\"MOUSEPOST\")]=\"{outline:none;}\",r[e(\"INFO\")]='{  position:fixed; left:50%; width:auto; text-align:center;  border:3px outset; padding:1em 2em; background-color:#DDDDDD;  color:black;  cursor:default; font-family:message-box; font-size:120%;  font-style:normal; text-indent:0; text-transform:none;  line-height:normal; letter-spacing:normal; word-spacing:normal;  word-wrap:normal; white-space:nowrap; float:none; z-index:201;  border-radius: 15px;                     /* Opera 10.5 and IE9 */  -webkit-border-radius:15px;               /* Safari and Chrome */  -moz-border-radius:15px;                  /* Firefox */  -khtml-border-radius:15px;                /* Konqueror */  box-shadow:0px 10px 20px #808080;         /* Opera 10.5 and IE9 */  -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */  -moz-box-shadow:0px 10px 20px #808080;    /* Forefox 3.5 */  -khtml-box-shadow:0px 10px 20px #808080;  /* Konqueror */  filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=\"gray\", Positive=\"true\"); /* IE */}';var n={};n[e(\"MENU\")]=\"{  position:absolute;  background-color:white;  color:black;  width:auto; padding:5px 0px;  border:1px solid #CCCCCC; margin:0; cursor:default;  font: menu; text-align:left; text-indent:0; text-transform:none;  line-height:normal; letter-spacing:normal; word-spacing:normal;  word-wrap:normal; white-space:nowrap; float:none; z-index:201;  border-radius: 5px;                     /* Opera 10.5 and IE9 */  -webkit-border-radius: 5px;             /* Safari and Chrome */  -moz-border-radius: 5px;                /* Firefox */  -khtml-border-radius: 5px;              /* Konqueror */  box-shadow:0px 10px 20px #808080;         /* Opera 10.5 and IE9 */  -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */  -moz-box-shadow:0px 10px 20px #808080;    /* Forefox 3.5 */  -khtml-box-shadow:0px 10px 20px #808080;  /* Konqueror */}\",n[e(\"MENUITEM\")]=\"{  padding: 1px 2em;  background:transparent;}\",n[e(\"MENUARROW\")]=\"{  position:absolute; right:.5em; padding-top:.25em; color:#666666;  font-family: null; font-size: .75em}\",n[e(\"MENUACTIVE\")+\" \"+e(\"MENUARROW\")]=\"{color:white}\",n[e(\"MENUARROW\")+e(\"RTL\")]=\"{left:.5em; right:auto}\",n[e(\"MENUCHECK\")]=\"{  position:absolute; left:.7em;  font-family: null}\",n[e(\"MENUCHECK\")+e(\"RTL\")]=\"{ right:.7em; left:auto }\",n[e(\"MENURADIOCHECK\")]=\"{  position:absolute; left: .7em;}\",n[e(\"MENURADIOCHECK\")+e(\"RTL\")]=\"{  right: .7em; left:auto}\",n[e(\"MENUINPUTBOX\")]=\"{  padding-left: 1em; right:.5em; color:#666666;  font-family: null;}\",n[e(\"MENUINPUTBOX\")+e(\"RTL\")]=\"{  left: .1em;}\",n[e(\"MENUCOMBOBOX\")]=\"{  left:.1em; padding-bottom:.5em;}\",n[e(\"MENULABEL\")]=\"{  padding: 1px 2em 3px 1.33em;  font-style:italic}\",n[e(\"MENURULE\")]=\"{  border-top: 1px solid #DDDDDD;  margin: 4px 3px;}\",n[e(\"MENUDISABLED\")]=\"{  color:GrayText}\",n[e(\"MENUACTIVE\")]=\"{  background-color: #606872;  color: white;}\",n[e(\"MENUDISABLED\")+\":focus\"]=\"{  background-color: #E8E8E8}\",n[e(\"MENULABEL\")+\":focus\"]=\"{  background-color: #E8E8E8}\",n[e(\"CONTEXTMENU\")+\":focus\"]=\"{  outline:none}\",n[e(\"CONTEXTMENU\")+\" \"+e(\"MENUITEM\")+\":focus\"]=\"{  outline:none}\",n[e(\"MENU\")+\" \"+e(\"MENUCLOSE\")]=\"{  top:-10px; left:-10px}\";var i={};i[e(\"MENUCLOSE\")]='{  position:absolute;  cursor:pointer;  display:inline-block;  border:2px solid #AAA;  border-radius:18px;  -webkit-border-radius: 18px;             /* Safari and Chrome */  -moz-border-radius: 18px;                /* Firefox */  -khtml-border-radius: 18px;              /* Konqueror */  font-family: \"Courier New\", Courier;  font-size:24px;  color:#F0F0F0}',i[e(\"MENUCLOSE\")+\" span\"]=\"{  display:block; background-color:#AAA; border:1.5px solid;  border-radius:18px;  -webkit-border-radius: 18px;             /* Safari and Chrome */  -moz-border-radius: 18px;                /* Firefox */  -khtml-border-radius: 18px;              /* Konqueror */  line-height:0;  padding:8px 0 6px     /* may need to be browser-specific */}\",i[e(\"MENUCLOSE\")+\":hover\"]=\"{  color:white!important;  border:2px solid #CCC!important}\",i[e(\"MENUCLOSE\")+\":hover span\"]=\"{  background-color:#CCC!important}\";var o=!(i[e(\"MENUCLOSE\")+\":hover:focus\"]=\"{  outline:none}\"),a=!1,s=!1;function c(t){s||(l(i,t),s=!0)}function l(t,e){var r=e||document,n=r.createElement(\"style\");n.type=\"text/css\";var i=\"\";for(var o in t)i+=o,i+=\" \",i+=t[o],i+=\"\\n\";n.innerHTML=i,r.head.appendChild(n)}t.addMenuStyles=function(t){a||(l(n,t),a=!0,c(t))},t.addInfoStyles=function(t){o||(l(r,t),o=!0,c(t))}}((X=vt=vt||{}).CssStyles||(X.CssStyles={})),F=vt=vt||{},W=F.AbstractPostable,bt(Pt,W),Pt.prototype.generateHtml=function(){var t=document.createElement(\"span\");t.classList.add(this.className),t.setAttribute(\"role\",this.role),t.setAttribute(\"tabindex\",\"0\");var e=document.createElement(\"span\");e.textContent=\"\\xd7\",t.appendChild(e),this.setHtml(t)},Pt.prototype.display=function(){},Pt.prototype.unpost=function(){W.prototype.unpost.call(this),this.element.unpost()},Pt.prototype.keydown=function(t){this.bubbleKey(),W.prototype.keydown.call(this,t)},Pt.prototype.space=function(t){this.unpost(),this.stop(t)},Pt.prototype.mousedown=function(t){this.unpost(),this.stop(t)},J=Pt,F.CloseButton=J,q=vt=vt||{},V=q.AbstractPostable,bt(Bt,V),Bt.prototype.attachMenu=function(t){this.menu=t},Bt.prototype.getHtml=function(){return V.prototype.getHtml.call(this)},Bt.prototype.generateHtml=function(){V.prototype.generateHtml.call(this);var t=this.getHtml();t.appendChild(this.generateTitle()),t.appendChild(this.contentDiv),t.appendChild(this.generateSignature()),t.appendChild(this.close.getHtml()),t.setAttribute(\"tabindex\",\"0\")},Bt.prototype.post=function(){V.prototype.post.call(this);var t=document.documentElement,e=this.getHtml(),r=window.innerHeight||t.clientHeight||t.scrollHeight||0,n=Math.floor(-e.offsetWidth/2),i=Math.floor((r-e.offsetHeight)/3);e.setAttribute(\"style\",\"margin-left: \"+n+\"px; top: \"+i+\"px;\"),window.event instanceof MouseEvent&&e.classList.add(q.HtmlClasses.MOUSEPOST),e.focus()},Bt.prototype.display=function(){this.menu.registerWidget(this),this.contentDiv.innerHTML=this.content();var t=this.menu.getHtml();t.parentNode.removeChild(t),this.menu.getFrame().appendChild(this.getHtml())},Bt.prototype.click=function(t){},Bt.prototype.keydown=function(t){this.bubbleKey(),V.prototype.keydown.call(this,t)},Bt.prototype.escape=function(t){this.unpost()},Bt.prototype.unpost=function(){V.prototype.unpost.call(this),this.getHtml().classList.remove(q.HtmlClasses.MOUSEPOST),this.menu.unregisterWidget(this)},Bt.prototype.generateClose=function(){var t=new q.CloseButton(this),e=t.getHtml();return e.classList.add(q.HtmlClasses.INFOCLOSE),e.setAttribute(\"aria-label\",\"Close Dialog Box\"),t},Bt.prototype.generateTitle=function(){var t=document.createElement(\"span\");return t.innerHTML=this.title,t.classList.add(q.HtmlClasses.INFOTITLE),t},Bt.prototype.generateContent=function(){var t=document.createElement(\"div\");return t.classList.add(q.HtmlClasses.INFOCONTENT),t.setAttribute(\"tabindex\",\"0\"),t},Bt.prototype.generateSignature=function(){var t=document.createElement(\"span\");return t.innerHTML=this.signature,t.classList.add(q.HtmlClasses.INFOSIGNATURE),t},U=Bt,q.Info=U,z=vt=vt||{},G=z.AbstractVariableItem,bt(Rt,G),Rt.parse=function(t,e){return new Rt(e,t.content,t.variable,t.id)},Rt.prototype.executeAction=function(){this.variable.setValue(!this.variable.getValue()),z.MenuUtil.close(this)},Rt.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.span.textContent=\"\\u2713\",this.span.classList.add(z.HtmlClasses.MENUCHECK)},Rt.prototype.updateAria=function(){this.getHtml().setAttribute(\"aria-checked\",this.variable.getValue()?\"true\":\"false\")},Rt.prototype.updateSpan=function(){this.span.style.display=this.variable.getValue()?\"\":\"none\"},K=Rt,z.Checkbox=K,Z=vt=vt||{},Y=Z.AbstractVariableItem,bt(jt,Y),jt.parse=function(t,e){return new jt(e,t.content,t.variable,t.id)},jt.prototype.executeAction=function(){this.variable.setValue(this.input.value,Z.MenuUtil.getActiveElement(this))},jt.prototype.space=function(t){Y.prototype.space.call(this,t),this.down(null)},jt.prototype.focus=function(){Y.prototype.focus.call(this),this.input.focus()},jt.prototype.generateHtml=function(){Y.prototype.generateHtml.call(this),this.getHtml().classList.add(Z.HtmlClasses.MENUCOMBOBOX)},jt.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.span.classList.add(Z.HtmlClasses.MENUINPUTBOX),this.input=document.createElement(\"input\"),this.input.addEventListener(\"keydown\",this.inputKey.bind(this)),this.input.setAttribute(\"size\",\"10em\"),this.input.setAttribute(\"type\",\"text\"),this.input.setAttribute(\"tabindex\",\"-1\"),this.span.appendChild(this.input)},jt.prototype.inputKey=function(t){this.bubbleKey(),this.inputEvent=!0},jt.prototype.keydown=function(t){if(this.inputEvent&&t.keyCode!==Z.KEY.ESCAPE&&t.keyCode!==Z.KEY.RETURN)return this.inputEvent=!1,void t.stopPropagation();Y.prototype.keydown.call(this,t),t.stopPropagation()},jt.prototype.updateAria=function(){},jt.prototype.updateSpan=function(){var e;try{e=this.variable.getValue(Z.MenuUtil.getActiveElement(this))}catch(t){e=\"\"}this.input.value=e},$=jt,Z.Combo=$,Q=vt=vt||{},tt=Q.AbstractItem,bt(Ht,tt),Ht.parse=function(t,e){return new Ht(e,t.content,t.action,t.id)},Ht.prototype.executeAction=function(){try{this.command(Q.MenuUtil.getActiveElement(this))}catch(t){Q.MenuUtil.error(t,\"Illegal command callback.\")}Q.MenuUtil.close(this)},et=Ht,Q.Command=et,rt=vt=vt||{},nt=rt.AbstractItem,bt(Dt,nt),Dt.parse=function(t,e){return new Dt(e,t.content,t.id)},Dt.prototype.generateHtml=function(){nt.prototype.generateHtml.call(this),this.getHtml().classList.add(rt.HtmlClasses.MENULABEL)},it=Dt,rt.Label=it,ot=vt=vt||{},at=ot.AbstractVariableItem,bt(Xt,at),Xt.parse=function(t,e){return new Xt(e,t.content,t.variable,t.id)},Xt.prototype.executeAction=function(){this.variable.setValue(this.getId()),ot.MenuUtil.close(this)},Xt.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.span.textContent=\"\\u2713\",this.span.classList.add(ot.HtmlClasses.MENURADIOCHECK)},Xt.prototype.updateAria=function(){this.getHtml().setAttribute(\"aria-checked\",this.variable.getValue()===this.getId()?\"true\":\"false\")},Xt.prototype.updateSpan=function(){this.span.style.display=this.variable.getValue()===this.getId()?\"\":\"none\"},st=Xt,ot.Radio=st,ct=vt=vt||{},lt=ct.AbstractEntry,bt(Ft,lt),Ft.parse=function(t,e){return new Ft(e)},Ft.prototype.generateHtml=function(){lt.prototype.generateHtml.call(this);var t=this.getHtml();t.classList.add(ct.HtmlClasses.MENURULE),t.setAttribute(\"aria-orientation\",\"vertical\")},Ft.prototype.addEvents=function(t){},ut=Ft,ct.Rule=ut,ht=vt=vt||{},ft=ht.AbstractItem,bt(Wt,ft),Wt.parse=function(t,e){var r=t.content,n=t.menu,i=new Wt(e,r,t.id);return i.setSubmenu(ht.SubMenu.parse(n,i)),i},Wt.prototype.setSubmenu=function(t){this.submenu=t},Wt.prototype.getSubmenu=function(){return this.submenu},Wt.prototype.mouseover=function(t){this.focus(),this.stop(t)},Wt.prototype.mouseout=function(t){this.stop(t)},Wt.prototype.unfocus=function(){if(this.submenu.isPosted()){if(this.getMenu().getFocused()!==this)return ft.prototype.unfocus.call(this),void this.getMenu().unpostSubmenus();this.getHtml().setAttribute(\"tabindex\",\"-1\"),this.getHtml().blur()}else ft.prototype.unfocus.call(this)},Wt.prototype.focus=function(){ft.prototype.focus.call(this),this.submenu.isPosted()||this.disabled||this.submenu.post()},Wt.prototype.executeAction=function(){this.submenu.isPosted()?this.submenu.unpost():this.submenu.post()},Wt.prototype.generateHtml=function(){ft.prototype.generateHtml.call(this);var t=this.getHtml();this.span=document.createElement(\"span\"),this.span.textContent=\"\\u25ba\",this.span.classList.add(ht.HtmlClasses.MENUARROW),t.appendChild(this.span),t.setAttribute(\"aria-haspopup\",\"true\")},Wt.prototype.left=function(t){this.getSubmenu().isPosted()?this.getSubmenu().unpost():ft.prototype.left.call(this,t)},Wt.prototype.right=function(t){this.getSubmenu().isPosted()?this.getSubmenu().down(t):this.getSubmenu().post()},pt=Wt,ht.Submenu=pt,dt=vt=vt||{},mt=dt.AbstractPostable,bt(Jt,mt),Jt.prototype.attachMenu=function(t){this.menu=t},Jt.prototype.post=function(){this.display()},Jt.prototype.display=function(){this.active=this.menu.getStore().getActive();var t=[];for(var e in Jt.popupSettings)t.push(e+\"=\"+Jt.popupSettings[e]);for(var e in this.localSettings)t.push(e+\"=\"+this.localSettings[e]);this.window=window.open(\"\",\"_blank\",t.join(\",\")),this.windowList.push(this.window);var r=this.window.document;this.mobileFlag?(r.open(),r.write('<html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><title>'+this.title+'</title></head><body style=\"font-size:85%\">'),r.write(\"<pre>\"+this.generateContent()+\"</pre>\"),r.write('<hr><input type=\"button\" value=\"Close\" onclick=\"window.close()\" />'),r.write(\"</body></html>\"),r.close()):(r.open(),r.write(\"<html><head><title>\"+this.title+'</title></head><body style=\"font-size:85%\">'),r.write(\"<table><tr><td><pre>\"+this.generateContent()+\"</pre></td></tr></table>\"),r.write(\"</body></html>\"),r.close(),setTimeout(this.resize.bind(this),50))},Jt.prototype.unpost=function(){this.windowList.forEach(function(t){return t.close()}),this.window=null},Jt.prototype.generateContent=function(){return this.content(this.active)},Jt.prototype.resize=function(){var t=this.window.document.body.firstChild,e=this.window.outerHeight-this.window.innerHeight||30,r=this.window.outerWidth-this.window.innerWidth||30;r=Math.max(140,Math.min(Math.floor(.5*this.window.screen.width),t.offsetWidth+r+25)),e=Math.max(40,Math.min(Math.floor(.5*this.window.screen.height),t.offsetHeight+e+25)),this.window.resizeTo(r,e);var n=this.active.getBoundingClientRect();if(n){var i=Math.max(0,Math.min(n.right-Math.floor(r/2),this.window.screen.width-r-20)),o=Math.max(0,Math.min(n.bottom-Math.floor(e/2),this.window.screen.height-e-20));this.window.moveTo(i,o)}this.active=null},Jt.popupSettings={status:\"no\",toolbar:\"no\",locationbar:\"no\",menubar:\"no\",directories:\"no\",personalbar:\"no\",resizable:\"yes\",scrollbars:\"yes\",width:400,height:300},yt=Jt,dt.Popup=yt,(vt=vt||{}).TOUCH={START:\"touchstart\",MOVE:\"touchmove\",END:\"touchend\",CANCEL:\"touchcancel\"}},function(t,e,r){\"use strict\";var n=r(5),i=l(r(225)),o=l(r(226)),a=l(r(229)),s=l(r(227)),c=l(r(228));function l(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(0,n.combineWithMathJax)({_:{ui:{menu:{MJContextMenu:i,Menu:o,MenuHandler:a,MmlVisitor:s,SelectableInfo:c}}}})},function(t,e,r){\"use strict\";r(78);var n=r(17),i=r(5),o=r(262);(0,i.combineDefaults)(MathJax.config.loader,\"dependencies\",o.dependencies),(0,i.combineDefaults)(MathJax.config.loader,\"paths\",o.paths),(0,i.combineDefaults)(MathJax.config.loader,\"provides\",o.provides),n.Loader.preLoad(\"loader\"),n.Loader.load.apply(n.Loader,function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)}(n.CONFIG.load)).then(function(){return n.CONFIG.ready()}).catch(function(t){return n.CONFIG.failed(t)})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.dependencies={\"a11y/semantic-enrich\":[\"input/mml\",\"[sre]\",\"input/mml\"],\"a11y/complexity\":[\"a11y/semantic-enrich\"],\"a11y/explorer\":[\"a11y/semantic-enrich\",\"ui/menu\"],\"[tex]/all-packages\":[\"input/tex-base\"],\"[tex]/action\":[\"input/tex-base\",\"[tex]/newcommand\"],\"[tex]/autoload\":[\"input/tex-base\",\"[tex]/require\"],\"[tex]/ams\":[\"input/tex-base\"],\"[tex]/ams_cd\":[\"input/tex-base\"],\"[tex]/bbox\":[\"input/tex-base\",\"[tex]/ams\",\"[tex]/newcommand\"],\"[tex]/boldsymbol\":[\"input/tex-base\"],\"[tex]/braket\":[\"input/tex-base\"],\"[tex]/bussproofs\":[\"input/tex-base\"],\"[tex]/cancel\":[\"input/tex-base\",\"[tex]/enclose\"],\"[tex]/color\":[\"input/tex-base\"],\"[tex]/colorV2\":[\"input/tex-base\"],\"[tex]/configMacros\":[\"input/tex-base\",\"[tex]/newcommand\"],\"[tex]/enclose\":[\"input/tex-base\"],\"[tex]/extpfeil\":[\"input/tex-base\",\"[tex]/newcommand\",\"[tex]/ams\"],\"[tex]/html\":[\"input/tex-base\"],\"[tex]/mhchem\":[\"input/tex-base\",\"[tex]/ams\"],\"[tex]/newcommand\":[\"input/tex-base\"],\"[tex]/noerrors\":[\"input/tex-base\"],\"[tex]/noundefined\":[\"input/tex-base\"],\"[tex]/physics\":[\"input/tex-base\"],\"[tex]/require\":[\"input/tex-base\"],\"[tex]/tagFormat\":[\"input/tex-base\"],\"[tex]/unicode\":[\"input/tex-base\"],\"[tex]/verb\":[\"input/tex-base\"]},e.paths={tex:\"[mathjax]/input/tex/extensions\",sre:\"[mathjax]/sre/sre_browser\"};var n=[\"[tex]/action\",\"[tex]/ams\",\"[tex]/ams_cd\",\"[tex]/bbox\",\"[tex]/boldsymbol\",\"[tex]/braket\",\"[tex]/bussproofs\",\"[tex]/cancel\",\"[tex]/color\",\"[tex]/configMacros\",\"[tex]/enclose\",\"[tex]/extpfeil\",\"[tex]/html\",\"[tex]/mhchem\",\"[tex]/newcommand\",\"[tex]/noerrors\",\"[tex]/noundefined\",\"[tex]/physics\",\"[tex]/require\",\"[tex]/unicode\",\"[tex]/verb\"];e.provides={startup:[\"loader\"],\"input/tex\":[\"input/tex-base\",\"[tex]/ams\",\"[tex]/newcommand\",\"[tex]/noundefined\",\"[tex]/require\",\"[tex]/autoload\",\"[tex]/configMacros\"],\"input/tex-full\":[\"input/tex-base\",\"[tex]/all-packages\"].concat(n),\"[tex]/all-packages\":n}}]);"
  },
  {
    "path": "Resources/MPreview.bundle/main.css",
    "content": "progress,\nsub,\nsup {\n    vertical-align: baseline\n}\nbutton,\nhr,\ninput {\n    overflow: visible\n}\n[type=checkbox],\n[type=radio],\nlegend {\n    box-sizing: border-box;\n    padding: 0\n}\nhtml {\n    font-family: sans-serif;\n    -ms-text-size-adjust: 115%;\n    -webkit-text-size-adjust: 115%\n}\nbody {\n    max-width: 100%;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n    display: block\n}\naudio,\ncanvas,\nprogress,\nvideo {\n    display: inline-block\n}\naudio:not([controls]) {\n    display: none;\n    height: 0\n}\n[hidden],\ntemplate {\n    display: none\n}\na {\n    background-color: transparent;\n    cursor: pointer;\n    -webkit-text-decoration-skip: objects\n}\na:active,\na:hover {\n    outline-width: 0\n}\nabbr[title] {\n    border-bottom: none;\n    text-decoration: underline;\n    text-decoration: underline dotted\n}\nb,\nstrong {\n    font-weight: bolder\n}\ndfn {\n    font-style: italic\n}\nh1 {\n    font-size: 2em;\n    margin: .67em 0\n}\nmark {\n    background-color: #ff0;\n    color: #000\n}\nsmall {\n    font-size: 80%\n}\nsub,\nsup {\n    font-size: 75%;\n    line-height: 0;\n    position: relative\n}\nsub {\n    bottom: -.25em\n}\nsup {\n    top: -.5em\n}\nimg {\n    border-style: none\n}\nsvg:not(:root) {\n    overflow: hidden\n}\ncode,\nkbd,\npre,\nsamp {\n    font-family: monospace, monospace;\n    font-size: 1em\n}\nfigure {\n    margin: 1em 40px\n}\nhr {\n    box-sizing: content-box;\n    height: 0\n}\nbutton,\ninput,\nselect,\ntextarea {\n    font: inherit;\n    margin: 0\n}\noptgroup {\n    font-weight: 700\n}\nbutton,\nselect {\n    text-transform: none\n}\n[type=reset],\n[type=submit],\nbutton,\nhtml [type=button] {\n    -webkit-appearance: button\n}\n[type=button]::-moz-focus-inner,\n[type=reset]::-moz-focus-inner,\n[type=submit]::-moz-focus-inner,\nbutton::-moz-focus-inner {\n    border-style: none;\n    padding: 0\n}\n[type=button]:-moz-focusring,\n[type=reset]:-moz-focusring,\n[type=submit]:-moz-focusring,\nbutton:-moz-focusring {\n    outline: ButtonText dotted 1px\n}\nfieldset {\n    border: 1px solid silver;\n    margin: 0 2px;\n    padding: .35em .625em .75em\n}\nlegend {\n    color: inherit;\n    display: table;\n    max-width: 100%;\n    white-space: normal\n}\ntextarea {\n    overflow: auto\n}\n[type=number]::-webkit-inner-spin-button,\n[type=number]::-webkit-outer-spin-button {\n    height: auto\n}\n[type=search] {\n    -webkit-appearance: textfield;\n    outline-offset: -2px\n}\n[type=search]::-webkit-search-cancel-button,\n[type=search]::-webkit-search-decoration {\n    -webkit-appearance: none\n}\n::-webkit-input-placeholder {\n    color: inherit;\n    opacity: .54\n}\n::-webkit-file-upload-button {\n    -webkit-appearance: button;\n    font: inherit\n}\n/* Modified version of github.com/sindresorhus/github-markdown-css | MIT License */\n/* Unminify it @ unminify.com */\n\nhr,\nimg {\n    box-sizing: content-box\n}\nbody:after,\nbody:before,\nhr::after,\nhr::before {\n    display: table;\n    content: \"\"\n}\na,\na:not([href]) {\n    text-decoration: none\n}\nblockquote,\nh6 {\n    color: #777\n}\nhr,\nsvg:not(:root) {\n    overflow: hidden\n}\ndl,\ndl dt,\nhr,\ntd,\nth {\n    padding: 0\n}\ntable tr {\n    background-color: #fff\n}\npre,\npre code {\n    word-wrap: normal\n}\nbody {\n    -ms-text-size-adjust: 115%;\n    -webkit-text-size-adjust: 115%;\n    color: #333;\n    font-family: \"sans-serif\", \"Helvetica Neue\", Helvetica, \"Segoe UI\", Arial, freesans, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n    line-height: 1.2;\n    word-wrap: break-word;\n    padding: 15px 0;\n}\na {\n    background-color: transparent;\n    -webkit-text-decoration-skip: objects;\n    color: #4078c0\n}\na:active,\na:hover {\n    outline-width: 0;\n    text-decoration: underline\n}\nstrong {\n    font-weight: bolder\n}\nh1 {\n    margin: .67em 0\n}\nimg:not(footer img, .attachment) {\n    background: none;\n    border-radius: 3px;\n    border-style: none;\n    width: auto !important;\n    width: 100%;\n    height: auto !important;\n    max-height: 900px;\n}\n\n@media only screen and (max-width: 600px) {\n    img:not(footer img) {\n        max-width: 100%;\n    }\n}\n\ncanvas {\n    border-radius: 3px;\n    max-width: 100%;\n}\nh1:not(.no-border),\nh2 {\n    padding-bottom: .3em;\n    border-bottom: 1px solid #eee\n}\ninput {\n    margin: 0;\n    overflow: visible;\n    font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"\n}\n[type=button]:-moz-focusring,\n[type=reset]:-moz-focusring,\n[type=submit]:-moz-focusring,\nbutton:-moz-focusring {\n    outline: ButtonText dotted 1px\n}\n[type=checkbox] {\n    box-sizing: border-box;\n    padding: 0\n}\ntable {\n    border-spacing: 0;\n    border-collapse: collapse;\n    display: block;\n    width: 100%;\n    overflow: auto;\n    word-break: normal;\n    word-break: keep-all\n}\n* {\n    box-sizing: border-box\n}\nbody:after,\nhr::after {\n    clear: both\n}\nblockquote {\n    margin: 0;\n    padding: 0 15px;\n    border-left: 4px solid #ddd\n}\nol ol,\nul ol {\n    list-style-type: lower-roman\n}\nol ol ol,\nol ul ol,\nul ol ol,\nul ul ol {\n    list-style-type: lower-alpha\n}\ndd {\n    margin-left: 0\n}\ncode,\npre {\n    font: 13px Courier, monospace, \"Liberation Mono\", Menlo,\n}\ndl dt,\ntable th {\n    font-weight: 700\n}\nbody>:first-child {\n    margin-top: 0!important\n}\ndl dt,\nli>p {\n    margin-top: 16px\n}\nbody>:last-child {\n    margin-bottom: 0!important\n}\na:not([href]) {\n    color: inherit\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n    margin-top: 1em;\n    margin-bottom: 16px;\n    font-weight: 700;\n    line-height: 1.4\n}\nh1 {\n    font-size: 1.8em;\n    line-height: 1.2\n}\nh2 {\n    font-size: 1.6em;\n    line-height: 1.225\n}\nh3 {\n    font-size: 1.4em;\n    line-height: 1.43\n}\nh4 {\n    font-size: 1.2em\n}\ndl dt,\nh5,\nh6 {\n    font-size: 1em\n}\nblockquote,\ndl,\nol,\np,\npre,\ntable,\nul {\n    line-height: 23px;\n    margin-top: 0;\n    margin-bottom: 16px;\n}\nhr {\n    background: #e7e7e7;\n    height: 4px;\n    margin: 16px 0;\n    border: 0\n}\nol,\nul {\n    padding-left: 2em\n}\nol ol,\nol ul,\nul ol,\nul ul {\n    margin-top: 0;\n    margin-bottom: 0\n}\ndl dt {\n    font-style: italic\n}\ndl dd {\n    padding: 0 16px;\n    margin-bottom: 16px\n}\nblockquote>:first-child {\n    margin-top: 0\n}\nblockquote>:last-child {\n    margin-bottom: 0\n}\ntable td,\ntable th {\n    padding: 6px 13px;\n    border: 1px solid #ddd\n}\ntable tr {\n    border-top: 1px solid #ccc\n}\ntable tr:nth-child(2n) {\n    background-color: #f8f8f8\n}\ncode {\n    padding: .2em 0;\n    line-height: 30px;\n    margin: 0;\n    background-color: rgba(0, 0, 0, .04);\n    border: 1px solid rgba(0, 0, 0, .04);\n    border-radius: 3px;\n    transition: background 0.5s ease-out;\n}\n    code:hover {\n        border: 1px solid #9c9c9c;\n        cursor: pointer;\n    }\n\npre code,\npre>code {\n    padding: 0;\n    margin: 0;\n    border: 0\n}\ncode:after,\ncode:before {\n    letter-spacing: -.2em;\n    content: \"\\00a0\"\n}\npre>code {\n    font-size: 100%;\n    word-break: normal;\n    white-space: pre;\n    background: 0 0\n}\npre code {\n    display: inline;\n    max-width: initial;\n    overflow: initial;\n    line-height: inherit;\n    border: 1px solid rgba(0, 0, 0, .04);\n}\npre code:after,\npre code:before {\n    content: normal\n}\nkbd {\n    display: inline-block;\n    padding: 3px 5px;\n    font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    line-height: 10px;\n    color: #555;\n    vertical-align: middle;\n    background-color: #fcfcfc;\n    border: 1px solid #ccc;\n    border-bottom-color: #bbb;\n    border-radius: 3px;\n    box-shadow: inset 0 -1px 0 #bbb\n}\n:checked+.radio-label {\n    position: relative;\n    z-index: 1;\n    border-color: #4078c0\n}\nhr {\n    border-bottom-color: #eee\n}\n/*\n github.com style (c) Vasily Polovnyov <vast@whiteants.net>\n */\n\n.hljs{display:block;overflow-x:auto;padding:0.5em;color:#383a42;background:#fafafa}\n\npre {\n    position: relative;\n}\n\npre > .copyCode {\n    position: absolute;\n    top: 0;\n    right: 0;\n    background: white;\n    border-radius: 3px;\n    margin: 2px;\n    padding: 2px;\n    height: 18px;\n    border: 1px solid #AAAAAA;\n    transition: background 0.5s ease-out;\n}\n\nbody > ul, body > ol {\n    margin-left: 20px;\n    padding: 0;\n\n}\n    .macos ul.cb  {\n        list-style-type: none;\n        margin-left: 25px;\n    }\n\n    .ios ul.cb  {\n        list-style-type: none;\n        margin-left: 0;\n    }\n\nbody.ios > ul, body.ios > ol { margin-left: 25px; }\n.ios ul.cb li { margin: 0 0 7px 27px; }\n.ios ul.cb li input[type=checkbox] { margin: 0 0 0 -28px; }\n\n.macos.darkmode input[type='checkbox'] { border: 1px solid white;}\n.ios.darkmode input[type=checkbox] { background-color: white; }\n.ios.darkmode input[type=checkbox]:checked:after { border-bottom: 1px solid black; border-right: 1px solid black; }\n\n.ios input[type=checkbox] {\n    width: 20px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    height: 20px;\n    border: 1px solid black;\n    border-radius: 3px;\n    vertical-align: -4px;\n    position: relative;\n}\n    .ios input[type=checkbox]:after {\n        position: absolute;\n        left: 6px;\n        top: 2px;\n        transform: rotate(45deg);\n        height: 9px;\n        width: 5px;\n        border-bottom: 2px solid transparent;\n        border-right: 2px solid transparent;\n        content: \"\";\n        display: inline-block;\n    }\n\n.ios input[type=checkbox]:checked {\n    background-color: white;\n}\n    .ios input[type=checkbox]:checked:after {\n        position: absolute;\n        left: 6px;\n        top: 2px;\n        transform: rotate(45deg);\n        height: 9px;\n        width: 5px;\n        border-bottom: 1px solid black;\n        border-right: 1px solid black;\n        content: \"\";\n        display: inline-block;\n    }\n\n.macos input[type='checkbox'] {\n    -webkit-appearance:none;\n    width:16px;\n    height:16px;\n    line-height: 14px;\n    border-radius: 3px;\n    background: white;\n    border:1px solid #555;\n    vertical-align: middle;\n    margin: -2px 5px 0 -28px;\n    transform: scale(1.1);\n}\n    .macos input[type='checkbox']:checked::after,\n    .macos input[type='checkbox'][disabled][checked]:after {\n        content: '';\n        position: absolute;\n        left: 2.5px;\n        top: 2.5px;\n        width: 8px;\n        height: 5px;\n        border-left: 1px solid black;\n        border-bottom: 1px solid black;\n        transform: rotate(-45deg);\n    }\n\nli {\n    list-style-position: outside;\n    line-height: 28px;\n}\n\nul li p {\n    margin: 0;\n    padding: 0;\n}\n\nul li p {\n    display: inline;\n}\n\n.cb > .strike {\n    text-decoration: line-through;\n}\n\n.cb li {\n    margin: 5px 0 5px 3px;\n}\n\ncanvas {\n    display: block;\n    margin: 0 auto;\n}\n\n/* Mermaid center */\n\ncode.language-mermaid {\n    display: block;\n    text-align: center;\n}\n\na[href^=\"fsnotes://open/?tag=\"] {\n    border-radius: 4px;\n    color: white;\n    padding: 2px;\n}\n    a[href^=\"fsnotes://open/?tag=\"]:hover {\n        text-decoration: none;\n    }\n"
  },
  {
    "path": "Resources/Welcome.bundle/1. Introduction.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2,\n    \"flatExtension\" : \"markdown\"\n}"
  },
  {
    "path": "Resources/Welcome.bundle/1. Introduction.textbundle/text.markdown",
    "content": "# 1. Introduction\n\nHi, friends!\n\nA huge amount of work has gone into FSNotes 7. The editor has been sped up, the code highlighting engine has been rewritten, even more attention has been paid to the UI, and many other things you asked for made it into this release: https://github.com/glushchenko/fsnotes/milestone/5\n\nSome features, such as the horizontal notes list, had to be removed — sorry about that. I can’t maintain them at a high level since I don’t use them myself.\n\nAs always, this update is free. The minimum system requirements for FSNotes 7 are macOS 12.4 and iOS 18.\n\nIf you like this app - please support development, buy the application in [Mac App Store](https://apps.apple.com/app/fsnotes/id1277179284) and [AppStore](https://apps.apple.com/app/fsnotes-manager/id1346501102) for mobile FSNotes experience.\n\n-- \nOleksandr\nUkraine, Kharkiv\n18.01.2026 \n\n"
  },
  {
    "path": "Resources/Welcome.bundle/2. Links.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/2. Links.textbundle/text.markdown",
    "content": "# 2. Links\n\n[[1. Introduction]]\n[[2. Links]]\n[[3. Shortcuts]]\n[[4. Sidebar]]\n[[5. Tags and subtags]]\n[[6. Mermaid and MathJax]]\n[[7. Git powered versioning]]\n[[8. Containers]]\n[[9. GFM Markdown]]\n\nOfficial site: https://fsnot.es\nIssues: https://github.com/glushchenko/fsnotes/issues\nWiki: https://github.com/glushchenko/fsnotes/wiki\nAnnounces: https://twitter.com/fsnotesapp"
  },
  {
    "path": "Resources/Welcome.bundle/3. Shortcuts.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/3. Shortcuts.textbundle/text.markdown",
    "content": "# 3. Shortcuts\n\nFSNotes respects mouseless usage, it is shortcuts friendly app. \n\nThe most important combination you must learn:\n\n`cmd - slash` - disable / enable preview mode.\n\nAlternative: you can do same in menu bar `View - Toggle Preview`\n\n## Global\n\n- `cmd + option + shift + L` - open main window and focus search bar\n- `cmd + option + shift + n` - save clipboard\n- `enter` - move focus right (deeper); sidebar > note list > note\n- `cmd + enter` - move focus left (higher); note > note list > sidebar\n\n## Search and create field\n\n- `down arrow` - move focus on notes list\n- `enter` - make note\n\n## Main window\n\n- `esc` - move cursor into search bar and clear edit/search fields\n- `cmd + L` - move cursor into search bar\n- `tab` - go to next field\n- `cmd + slash` - preview mode (markdown only)\n- `up, down arrows` - select note\n- `cmd + j` - next note\n- `cmd + k` - previous note\n\n## Notes list\n\n- `cmd + delete` - remove note\n- `cmd + r` - rename note\n- `cmd + 8` - pin note\n- `cmd + 7` - remove encryption (un encrypt previously encrypted note)\n- `cmd + n` - make note\n- `cmd + shift + n` - make RTF\n- `ctrl + cmd + e` – open selected in external editor\n- `ctrl + cmd + o` – show selected in finder\n- `shift + cmd + m` – move selected note in storage\n- `shift + cmd + b` – hide sidebar\n- `cmd + s` – save revision in git\n- `cmd + d` – duplicate note\n- `cmd + alt + l` - encrypt/decrypt note (AES 256)\n\n## Editor\n\n- `fn + f5` - autocomplete note name\n- ``cmd + ` ``, or click `View - Toggle preview` - for enable or disable preview rendered markdown\n\n\n"
  },
  {
    "path": "Resources/Welcome.bundle/4. Sidebar.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/4. Sidebar.textbundle/text.markdown",
    "content": "# 4. Sidebar\n\nTo toggle projects and tags sidebar press `control + cmd + s`\n\nYou can select and filter unlimited projects and tags.\n\n## Each subfolder is a project\n\nMake unlimited folders inside your storage: File -> New Folder or `option + cmd + n`.\n\nEach project has its own settings, right click on the project -> Show Options.\n\n![](assets/E0136C95-4331-4CC8-B510-20B638D5E6A1.png)\n\nYou can configure sorting, direction, visibility settings.\n\n![](assets/B2A19BC7-7E42-4611-9808-51EDEE846BDF.png)\n\nOr add an external folder: File -> Add External Fodler...\n"
  },
  {
    "path": "Resources/Welcome.bundle/5. Tags and subtags.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/5. Tags and subtags.textbundle/text.markdown",
    "content": "# 5. Tags and subtags\n\nFSNotes version 4 brings an amazing inline tags system. Tag notes simply by prepending a word with a hash (#). Like this: #hello. Or, subtag them like this: #hello/world. How deep can you sub-tag your notes? Well, #unlimited/sub/tags. Tags auto-complete, too. Type a hash and the first character for your tag and:\n\n![](assets/1E0E8278-8C5B-469E-B773-E6773BAEBD39.png)\n\nNice! And, there is more. Each project has its own tag namespace. For example, when Archive is selected only tags from archive notes are shown.\n\nYou can select multiple projects and multiple tags by holding `cmd` while selecting in sidebar.\n\n![](assets/D0B6078F-EBC7-47C1-B43A-3106C19B287F.png)\n\n"
  },
  {
    "path": "Resources/Welcome.bundle/6. Mermaid and MathJax.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/6. Mermaid and MathJax.textbundle/text.markdown",
    "content": "# 6. Mermaid and MathJax\n\n## Mermaid example\n\nDocumentation: https://mermaidjs.github.io\n\n```mermaid\nsequenceDiagram\n    participant Alice\n    participant Bob\n    Alice->>John: Hello John, how are you?\n    loop Healthcheck\n        John->>John: Fight against hypochondria\n    end\n    Note right of John: Rational thoughts <br/>prevail!\n    John-->>Alice: Great!\n    John->>Bob: How about you?\n    Bob-->>John: Jolly good!\n```\n\n## MathJax example\n\nDocumentation: https://www.mathjax.org\n\n> Please choose: View > Preview MathJax\n\nWhen (($a \\ne 0$)), there are two solutions to $$ax^2 + bx + c = 0$$ and they are\n$$x = \\{-b \\pm \\sqrt{b^2-4ac} \\over 2a\\}.$$"
  },
  {
    "path": "Resources/Welcome.bundle/7. Git powered versioning.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/7. Git powered versioning.textbundle/text.markdown",
    "content": "# 7. Git powered versioning\n\nSave note revisions with File -> Commt & Push or `cmd + s` shortcut.\n\nAnd restore them by right click on a note:\n\n![](assets/eedc77b8-dc1b-4924-856d-37c9247b4093.jpg)\n\n## Backup all notes automatically\n\nConfigure it in preferences:\n\n![](assets/A5C1CDAC-E8EC-4EDD-B3EE-AF3F367A9939.png)\n\nFor example, make a backup each hour.\n\n## You can also backup backups\n\nWell, you cannot be too safe.\n\n![](assets/e8a5ef3d-6a9a-44d6-b9ed-1fdc7d35117a.jpg)\n"
  },
  {
    "path": "Resources/Welcome.bundle/8. Containers.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/8. Containers.textbundle/text.markdown",
    "content": "# 8. Containers\n\nWhat are containers? A 'container' is a holder for your files. A container holds text and other assets used in one note. Of course, you can choose to store notes without containers at all. Open Preferences -> General -> Containers and select \"None\". Notes will be stored in plain text, Markdown or RTF.\n\nI recommend to use Text Bundle and Encrypted Text Bundles for sensitive data. Read on.\n\n## Text Bundle container\n\nFile extension – `.textbundle`\n\nTextBundle – file format aims to provide a more seamless user experience when exchanging plain text files, like Markdown or RTF, between applications. http://textbundle.org\n\nFor example, a Markdown file may contain references to external images. When sending such a file from a Markdown editor to a previewer, users will have to explicitly permit access to every single image file. This is where TextBundle comes handy. TextBundle brings the convenience back - by bundling the Markdown text and all referenced images into a single file.\n\n## Encrypted Text Bundle container\n\nFile extension – `.etp`.\n\nEncrypted Text Bundle is used for notes encryption. It is encrypted Text Pack (a zipped Text Bundle) and encrypted with RNCryptor. RNCryptor is cross-platform data format and there are many implementations. Under the hood, we have:\n\nAES-256 encryption\nCBC mode\nPassword stretching with PBKDF2\nPassword salting\nRandom IV\nEncrypt-then-hash HMAC\nOpen and cross platform\n\nYou can decrypt any FSNotes note with Python or Ruby, JS, etc. (full list you can find here)\nUnzip and have fun with usual Text Bundle.\n"
  },
  {
    "path": "Resources/Welcome.bundle/9. GFM Markdown.textbundle/info.json",
    "content": "{\n    \"transient\" : true,\n    \"type\" : \"net.daringfireball.markdown\",\n    \"creatorIdentifier\" : \"co.fluder.fsnotes\",\n    \"version\" : 2\n}"
  },
  {
    "path": "Resources/Welcome.bundle/9. GFM Markdown.textbundle/text.markdown",
    "content": "# 9. GFM Markdown\n\n## Headers h1-h6\n\nShortcut: `cmd + 1-6`\n\n## Links\n\n[Test](/Users/oleksandr/Downloads/) \n[Test](</Users/oleksandr/Downloads/test test.jpg>) \n\n## Images\n\n![](assets/802AA00C-DF96-4EE3-B884-E0929BD066EC.png)\n\n## Bold, Italic, Strikethrough\n\n**Bold text**\n\nShortcut: `cmd + b`\n\n_Italic text_\n\nShortcut: `cmd + i`\n\n~~Strike text~~\n\nShortcut: `cmd + y`\n\n## Quotes \n\n> You can quote\n> Multiple lines\n\nShortcut: `cmd + shift + u`\n\n## Code blocks\n\nSwift example:\n\n```swift\npublic static func getHighlighter() -> Highlightr? {\n    if let instance = self.hl {\n        return instance\n    }\n    \n    guard let highlightr = Highlightr() else {\n        return nil\n    }\n    \n    highlightr.setTheme(to: \"vs\")\n    self.hl = highlightr\n    \n    return self.hl\n}\n```\n\nSQL example: \n\n```sql\nCREATE TABLE \"topic\" (\n    \"id\" serial NOT NULL PRIMARY KEY,\n    \"forum_id\" integer NOT NULL,\n    \"subject\" varchar(255) NOT NULL\n);\nALTER TABLE \"topic\"\nADD CONSTRAINT forum_id FOREIGN KEY (\"forum_id\")\nREFERENCES \"forum\" (\"id\");\n\n-- Initials\ninsert into \"topic\" (\"forum_id\", \"subject\")\nvalues (2, 'D''artagnian');\n```\n\nShortcut: `cmd + control + c`\n\n## Code span\n\n`One line code span`\n\nShortcut: `cmd + shift + c`\n\n## Lists, numbered lists and todo\n\n- Lists item\n\nShortcut: `control + L`\n\n1. First Item\n2. Second Item\n\nShortcut: `control + shift + L`\n\n- [x] Pay bills\n- [ ] Buy water\n\nShortcut: `cmd + t`\n\n## Wikilinks\n\nAnd WikiLinks [[WikiLinks with emoji 😎]]"
  }
]