From 4f9d80c4c28c042daeda583353edf692158e9e7c Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 09:40:58 +0100 Subject: [PATCH 01/30] =?UTF-8?q?first=20public=20commit=20of=20Sora-JS=20?= =?UTF-8?q?=F0=9F=8E=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora-JS.xcodeproj/project.pbxproj | 362 ++++++++++ .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../AccentColor.colorset/Contents.json | 4 - .../AppIcon.appiconset/Contents.json | 18 - .../Assets.xcassets/Contents.json | 0 Sora-JS/ContentView.swift | 178 +++++ Sora/Sora.entitlements => Sora-JS/Info.plist | 9 +- Sora-JS/JSController.swift | 74 ++ Sora-JS/Modules.swift | 118 +++ .../Preview Assets.xcassets/Contents.json | 0 Sora-JS/Settings.swift | 133 ++++ Sora-JS/Sora_JSApp.swift | 20 + Sora.xcodeproj/project.pbxproj | 671 ------------------ .../xcshareddata/swiftpm/Package.resolved | 52 -- .../UserInterfaceState.xcuserstate | Bin 115413 -> 0 bytes .../xcschemes/xcschememanagement.plist | 35 - .../AccentColor.colorset/.DS_Store | Bin 6148 -> 0 bytes .../AppIcon.appiconset/120-1.png | Bin 3920 -> 0 bytes .../AppIcon.appiconset/120.png | Bin 3920 -> 0 bytes .../AppIcon.appiconset/152.png | Bin 5475 -> 0 bytes .../AppIcon.appiconset/167.png | Bin 6305 -> 0 bytes .../AppIcon.appiconset/180.png | Bin 7104 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 384 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 565 -> 0 bytes .../AppIcon.appiconset/40-1.png | Bin 832 -> 0 bytes .../AppIcon.appiconset/40-2.png | Bin 832 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 832 -> 0 bytes .../AppIcon.appiconset/58-1.png | Bin 1384 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 1384 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 1473 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 2050 -> 0 bytes .../AppIcon.appiconset/80-1.png | Bin 2197 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 2197 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 2475 -> 0 bytes Sora/ContentView.swift | 118 --- Sora/Info.plist | 23 - Sora/SoraApp.swift | 48 -- .../Components/Double+Extension.swift | 30 - .../Components/MusicProgressSlider.swift | 102 --- Sora/Utils/CustomPlayer/CustomPlayer.swift | 271 ------- Sora/Utils/Extensions/Notification.swift | 13 - Sora/Utils/Extensions/URLSession.swift | 18 - Sora/Utils/GitHub/GitHubAPI.swift | 38 - Sora/Utils/GitHub/GitHubRelease.swift | 124 ---- Sora/Utils/History/HistoryManager.swift | 37 - Sora/Utils/Miru/MiruDataStruct.swift | 26 - Sora/Utils/Modules/ModuleStruct.swift | 80 --- Sora/Utils/Modules/ModulesManager.swift | 155 ---- Sora/Utils/Player/NormalPlayer.swift | 77 -- Sora/Utils/Player/VideoPlayerView.swift | 98 --- Sora/Views/HomeView.swift | 146 ---- Sora/Views/LibraryViews/LibraryManager.swift | 70 -- Sora/Views/LibraryViews/LibraryView.swift | 95 --- .../EpisodesCell/CircularProgressBar.swift | 36 - .../MediaViews/EpisodesCell/EpisodeCell.swift | 118 --- Sora/Views/MediaViews/MediaExtraction.swift | 403 ----------- Sora/Views/MediaViews/MediaView.swift | 376 ---------- .../Views/SearchViews/SearchResultsView.swift | 236 ------ Sora/Views/SearchViews/SearchView.swift | 149 ---- Sora/Views/SettingsViews/SettingView.swift | 303 -------- .../SubPages/SettingsAboutView.swift | 293 -------- .../SubPages/SettingsEditorView.swift | 34 - .../SubPages/SettingsIUView.swift | 22 - .../SubPages/SettingsLogsView.swift | 72 -- .../SubPages/SettingsModuleView.swift | 139 ---- .../SubPages/SettingsPlayerView.swift | 71 -- .../SubPages/SettingsReleasesView.swift | 42 -- .../SubPages/SettingsStorageView.swift | 269 ------- assets/Sora_banner.png | Bin 191704 -> 0 bytes assets/banner2.png | Bin 227786 -> 0 bytes ipabuild.sh | 42 -- macbuild.sh | 39 - 73 files changed, 890 insertions(+), 4997 deletions(-) create mode 100644 Sora-JS.xcodeproj/project.pbxproj rename {Sora.xcodeproj => Sora-JS.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {Sora.xcodeproj => Sora-JS.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {Sora => Sora-JS}/Assets.xcassets/AccentColor.colorset/Contents.json (54%) rename {Sora => Sora-JS}/Assets.xcassets/AppIcon.appiconset/Contents.json (74%) rename {Sora => Sora-JS}/Assets.xcassets/Contents.json (100%) create mode 100644 Sora-JS/ContentView.swift rename Sora/Sora.entitlements => Sora-JS/Info.plist (61%) create mode 100644 Sora-JS/JSController.swift create mode 100644 Sora-JS/Modules.swift rename {Sora => Sora-JS}/Preview Content/Preview Assets.xcassets/Contents.json (100%) create mode 100644 Sora-JS/Settings.swift create mode 100644 Sora-JS/Sora_JSApp.swift delete mode 100644 Sora.xcodeproj/project.pbxproj delete mode 100644 Sora.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 Sora.xcodeproj/xcuserdata/Francesco.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 Sora/Assets.xcassets/AccentColor.colorset/.DS_Store delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/120-1.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/120.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/152.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/167.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/180.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/20.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/29.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/40-1.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/40-2.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/40.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/58-1.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/58.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/60.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/76.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/80-1.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/80.png delete mode 100644 Sora/Assets.xcassets/AppIcon.appiconset/87.png delete mode 100644 Sora/ContentView.swift delete mode 100644 Sora/Info.plist delete mode 100644 Sora/SoraApp.swift delete mode 100644 Sora/Utils/CustomPlayer/Components/Double+Extension.swift delete mode 100644 Sora/Utils/CustomPlayer/Components/MusicProgressSlider.swift delete mode 100644 Sora/Utils/CustomPlayer/CustomPlayer.swift delete mode 100644 Sora/Utils/Extensions/Notification.swift delete mode 100644 Sora/Utils/Extensions/URLSession.swift delete mode 100644 Sora/Utils/GitHub/GitHubAPI.swift delete mode 100644 Sora/Utils/GitHub/GitHubRelease.swift delete mode 100644 Sora/Utils/History/HistoryManager.swift delete mode 100644 Sora/Utils/Miru/MiruDataStruct.swift delete mode 100644 Sora/Utils/Modules/ModuleStruct.swift delete mode 100644 Sora/Utils/Modules/ModulesManager.swift delete mode 100644 Sora/Utils/Player/NormalPlayer.swift delete mode 100644 Sora/Utils/Player/VideoPlayerView.swift delete mode 100644 Sora/Views/HomeView.swift delete mode 100644 Sora/Views/LibraryViews/LibraryManager.swift delete mode 100644 Sora/Views/LibraryViews/LibraryView.swift delete mode 100644 Sora/Views/MediaViews/EpisodesCell/CircularProgressBar.swift delete mode 100644 Sora/Views/MediaViews/EpisodesCell/EpisodeCell.swift delete mode 100644 Sora/Views/MediaViews/MediaExtraction.swift delete mode 100644 Sora/Views/MediaViews/MediaView.swift delete mode 100644 Sora/Views/SearchViews/SearchResultsView.swift delete mode 100644 Sora/Views/SearchViews/SearchView.swift delete mode 100644 Sora/Views/SettingsViews/SettingView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsAboutView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsIUView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsLogsView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsModuleView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsPlayerView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsReleasesView.swift delete mode 100644 Sora/Views/SettingsViews/SubPages/SettingsStorageView.swift delete mode 100644 assets/Sora_banner.png delete mode 100644 assets/banner2.png delete mode 100755 ipabuild.sh delete mode 100755 macbuild.sh diff --git a/Sora-JS.xcodeproj/project.pbxproj b/Sora-JS.xcodeproj/project.pbxproj new file mode 100644 index 0000000..766ee9e --- /dev/null +++ b/Sora-JS.xcodeproj/project.pbxproj @@ -0,0 +1,362 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 1329D5C72D298198008AEDA2 /* Sora_JSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */; }; + 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1329D5C82D298198008AEDA2 /* ContentView.swift */; }; + 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CA2D298199008AEDA2 /* Assets.xcassets */; }; + 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */; }; + 13AEE6192D2A75110096D953 /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6182D2A75110096D953 /* Modules.swift */; }; + 13AEE61B2D2A78050096D953 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61A2D2A78050096D953 /* Settings.swift */; }; + 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61C2D2A78160096D953 /* JSController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1329D5C32D298198008AEDA2 /* Sora-JS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Sora-JS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sora_JSApp.swift; sourceTree = ""; }; + 1329D5C82D298198008AEDA2 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 1329D5CA2D298199008AEDA2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 1329D5DA2D29821B008AEDA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 13AEE6182D2A75110096D953 /* Modules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; + 13AEE61A2D2A78050096D953 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; + 13AEE61C2D2A78160096D953 /* JSController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1329D5C02D298198008AEDA2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1329D5BA2D298198008AEDA2 = { + isa = PBXGroup; + children = ( + 1329D5C52D298198008AEDA2 /* Sora-JS */, + 1329D5C42D298198008AEDA2 /* Products */, + ); + sourceTree = ""; + }; + 1329D5C42D298198008AEDA2 /* Products */ = { + isa = PBXGroup; + children = ( + 1329D5C32D298198008AEDA2 /* Sora-JS.app */, + ); + name = Products; + sourceTree = ""; + }; + 1329D5C52D298198008AEDA2 /* Sora-JS */ = { + isa = PBXGroup; + children = ( + 1329D5DA2D29821B008AEDA2 /* Info.plist */, + 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */, + 1329D5C82D298198008AEDA2 /* ContentView.swift */, + 13AEE6182D2A75110096D953 /* Modules.swift */, + 1329D5CA2D298199008AEDA2 /* Assets.xcassets */, + 1329D5CC2D298199008AEDA2 /* Preview Content */, + 13AEE61A2D2A78050096D953 /* Settings.swift */, + 13AEE61C2D2A78160096D953 /* JSController.swift */, + ); + path = "Sora-JS"; + sourceTree = ""; + }; + 1329D5CC2D298199008AEDA2 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1329D5C22D298198008AEDA2 /* Sora-JS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1329D5D12D298199008AEDA2 /* Build configuration list for PBXNativeTarget "Sora-JS" */; + buildPhases = ( + 1329D5BF2D298198008AEDA2 /* Sources */, + 1329D5C02D298198008AEDA2 /* Frameworks */, + 1329D5C12D298198008AEDA2 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Sora-JS"; + productName = "Sora-JS"; + productReference = 1329D5C32D298198008AEDA2 /* Sora-JS.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 1329D5BB2D298198008AEDA2 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1320; + LastUpgradeCheck = 1320; + TargetAttributes = { + 1329D5C22D298198008AEDA2 = { + CreatedOnToolsVersion = 13.2.1; + }; + }; + }; + buildConfigurationList = 1329D5BE2D298198008AEDA2 /* Build configuration list for PBXProject "Sora-JS" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 1329D5BA2D298198008AEDA2; + productRefGroup = 1329D5C42D298198008AEDA2 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1329D5C22D298198008AEDA2 /* Sora-JS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1329D5C12D298198008AEDA2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */, + 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1329D5BF2D298198008AEDA2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */, + 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */, + 13AEE6192D2A75110096D953 /* Modules.swift in Sources */, + 13AEE61B2D2A78050096D953 /* Settings.swift in Sources */, + 1329D5C72D298198008AEDA2 /* Sora_JSApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1329D5CF2D298199008AEDA2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 1329D5D02D298199008AEDA2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1329D5D22D298199008AEDA2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Sora-JS/Preview Content\""; + DEVELOPMENT_TEAM = 399LMK6Q2Y; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Sora-JS/Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "me.cranci.Sora-JS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 1329D5D32D298199008AEDA2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"Sora-JS/Preview Content\""; + DEVELOPMENT_TEAM = 399LMK6Q2Y; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Sora-JS/Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "me.cranci.Sora-JS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1329D5BE2D298198008AEDA2 /* Build configuration list for PBXProject "Sora-JS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1329D5CF2D298199008AEDA2 /* Debug */, + 1329D5D02D298199008AEDA2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1329D5D12D298199008AEDA2 /* Build configuration list for PBXNativeTarget "Sora-JS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1329D5D22D298199008AEDA2 /* Debug */, + 1329D5D32D298199008AEDA2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 1329D5BB2D298198008AEDA2 /* Project object */; +} diff --git a/Sora.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sora-JS.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Sora.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Sora-JS.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Sora.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Sora.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Sora/Assets.xcassets/AccentColor.colorset/Contents.json b/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 54% rename from Sora/Assets.xcassets/AccentColor.colorset/Contents.json rename to Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json index bb57667..eb87897 100644 --- a/Sora/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,10 +1,6 @@ { "colors" : [ { - "color" : { - "platform" : "universal", - "reference" : "systemMintColor" - }, "idiom" : "universal" } ], diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 74% rename from Sora/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json index 1fa06d6..9221b9b 100644 --- a/Sora/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,109 +1,91 @@ { "images" : [ { - "filename" : "40-2.png", "idiom" : "iphone", "scale" : "2x", "size" : "20x20" }, { - "filename" : "60.png", "idiom" : "iphone", "scale" : "3x", "size" : "20x20" }, { - "filename" : "58.png", "idiom" : "iphone", "scale" : "2x", "size" : "29x29" }, { - "filename" : "87.png", "idiom" : "iphone", "scale" : "3x", "size" : "29x29" }, { - "filename" : "80.png", "idiom" : "iphone", "scale" : "2x", "size" : "40x40" }, { - "filename" : "120-1.png", "idiom" : "iphone", "scale" : "3x", "size" : "40x40" }, { - "filename" : "120.png", "idiom" : "iphone", "scale" : "2x", "size" : "60x60" }, { - "filename" : "180.png", "idiom" : "iphone", "scale" : "3x", "size" : "60x60" }, { - "filename" : "20.png", "idiom" : "ipad", "scale" : "1x", "size" : "20x20" }, { - "filename" : "40-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "20x20" }, { - "filename" : "29.png", "idiom" : "ipad", "scale" : "1x", "size" : "29x29" }, { - "filename" : "58-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" }, { - "filename" : "40.png", "idiom" : "ipad", "scale" : "1x", "size" : "40x40" }, { - "filename" : "80-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "40x40" }, { - "filename" : "76.png", "idiom" : "ipad", "scale" : "1x", "size" : "76x76" }, { - "filename" : "152.png", "idiom" : "ipad", "scale" : "2x", "size" : "76x76" }, { - "filename" : "167.png", "idiom" : "ipad", "scale" : "2x", "size" : "83.5x83.5" }, { - "filename" : "1024.jpg", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" diff --git a/Sora/Assets.xcassets/Contents.json b/Sora-JS/Assets.xcassets/Contents.json similarity index 100% rename from Sora/Assets.xcassets/Contents.json rename to Sora-JS/Assets.xcassets/Contents.json diff --git a/Sora-JS/ContentView.swift b/Sora-JS/ContentView.swift new file mode 100644 index 0000000..ea663bd --- /dev/null +++ b/Sora-JS/ContentView.swift @@ -0,0 +1,178 @@ +// +// ContentView.swift +// Sora-JS +// +// Created by Francesco on 04/01/25. +// + +import SwiftUI + +struct AnimeItem: Identifiable { + let id = UUID() + let title: String + let imageUrl: String +} + +struct ContentView: View { + @StateObject private var jsController = JSController() + @EnvironmentObject var moduleManager: ModuleManager + @State private var searchText = "" + @State private var animeItems: [AnimeItem] = [] + @State private var isSearching = false + @AppStorage("selectedModuleId") private var selectedModuleId: String? + + private var selectedModule: ScrapingModule? { + guard let id = selectedModuleId else { return nil } + return moduleManager.modules.first { $0.id.uuidString == id } + } + + var body: some View { + NavigationView { + VStack(spacing: 0) { + if let selectedModule = selectedModule { + HStack { + AsyncImage(url: URL(string: selectedModule.metadata.iconUrl)) { image in + image + .resizable() + .aspectRatio(contentMode: .fit) + } placeholder: { + Color.gray + } + .frame(width: 30, height: 30) + .cornerRadius(6) + + VStack(alignment: .leading) { + Text(selectedModule.metadata.mediaType) + .font(.headline) + Text(selectedModule.metadata.language) + .font(.caption) + .foregroundColor(.gray) + } + + Spacer() + + Menu { + ForEach(moduleManager.modules) { module in + Button { + selectedModuleId = module.id.uuidString + } label: { + HStack { + AsyncImage(url: URL(string: module.metadata.iconUrl)) { image in + image + .resizable() + .aspectRatio(contentMode: .fit) + } placeholder: { + Color.gray + } + .frame(width: 20, height: 20) + .cornerRadius(4) + + Text(module.metadata.mediaType) + Spacer() + if module.id.uuidString == selectedModuleId { + Image(systemName: "checkmark") + } + } + } + } + } label: { + Image(systemName: "chevron.up.chevron.down") + .foregroundColor(.gray) + } + } + .padding() + .background(Color(.systemBackground)) + .shadow(color: Color.black.opacity(0.1), radius: 2, y: 1) + } else { + VStack(spacing: 8) { + Text("No Module Selected") + .font(.headline) + Text("Please select a module from settings") + .font(.caption) + .foregroundColor(.gray) + } + .padding() + .frame(maxWidth: .infinity) + .background(Color(.systemBackground)) + .shadow(color: Color.black.opacity(0.1), radius: 2, y: 1) + } + + TextField("Search...", text: $searchText) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .padding() + .onChange(of: searchText) { newValue in + guard !newValue.isEmpty, let module = selectedModule else { + animeItems = [] + return + } + + isSearching = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + Task { + do { + let jsContent = try moduleManager.getModuleContent(module) + jsController.loadScript(jsContent) + jsController.scrapeAnime(keyword: newValue, module: module) { items in + animeItems = items + isSearching = false + } + } catch { + print("Error loading module: \(error)") + isSearching = false + } + } + } + } + + if isSearching { + ProgressView() + .padding() + } + + ScrollView { + LazyVGrid(columns: [ + GridItem(.flexible(), spacing: 16), + GridItem(.flexible(), spacing: 16) + ], spacing: 16) { + ForEach(animeItems) { item in + VStack(alignment: .leading) { + if let url = URL(string: item.imageUrl) { + AsyncImage(url: url) { image in + image + .resizable() + .aspectRatio(contentMode: .fill) + } placeholder: { + Rectangle() + .fill(Color.gray.opacity(0.2)) + .overlay( + ProgressView() + ) + } + .frame(height: 200) + .clipped() + .cornerRadius(8) + } + + Text(item.title) + .font(.headline) + .lineLimit(2) + .padding(.vertical, 4) + } + .frame(maxWidth: .infinity) + .background(Color(.secondarySystemBackground)) + .cornerRadius(12) + } + } + .padding() + } + } + .navigationTitle("Search") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + NavigationLink(destination: SettingsView()) { + Image(systemName: "gear") + } + } + } + } +} diff --git a/Sora/Sora.entitlements b/Sora-JS/Info.plist similarity index 61% rename from Sora/Sora.entitlements rename to Sora-JS/Info.plist index ee95ab7..cf5e9dd 100644 --- a/Sora/Sora.entitlements +++ b/Sora-JS/Info.plist @@ -2,9 +2,10 @@ - com.apple.security.app-sandbox - - com.apple.security.network.client - + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + diff --git a/Sora-JS/JSController.swift b/Sora-JS/JSController.swift new file mode 100644 index 0000000..7c21259 --- /dev/null +++ b/Sora-JS/JSController.swift @@ -0,0 +1,74 @@ +// +// JSController.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import JavaScriptCore + +class JSController: ObservableObject { + private var context: JSContext + + init() { + self.context = JSContext() + setupContext() + } + + private func setupContext() { + let logFunction: @convention(block) (String) -> Void = { message in + print("JavaScript log: \(message)") + } + context.setObject(logFunction, forKeyedSubscript: "log" as NSString) + } + + func loadScript(_ script: String) { + context = JSContext() + setupContext() + context.evaluateScript(script) + } + + func scrapeAnime(keyword: String, module: ScrapingModule, completion: @escaping ([AnimeItem]) -> Void) { + let searchUrl = module.metadata.searchBaseUrl.replacingOccurrences(of: "%s", with: keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") + + guard let url = URL(string: searchUrl) else { + completion([]) + return + } + + var request = URLRequest(url: url) + request.setValue("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", forHTTPHeaderField: "User-Agent") + + URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + guard let self = self else { return } + + if let error = error { + print("Network error: \(error)") + DispatchQueue.main.async { completion([]) } + return + } + + guard let data = data, let html = String(data: data, encoding: .utf8) else { + print("Failed to decode HTML") + DispatchQueue.main.async { completion([]) } + return + } + + if let parseFunction = self.context.objectForKeyedSubscript("parseHTML"), + let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { + let animeItems = results.map { item in + AnimeItem( + title: item["title"] ?? "", + imageUrl: item["image"] ?? "" + ) + } + DispatchQueue.main.async { + completion(animeItems) + } + } else { + print("Failed to parse results") + DispatchQueue.main.async { completion([]) } + } + }.resume() + } +} diff --git a/Sora-JS/Modules.swift b/Sora-JS/Modules.swift new file mode 100644 index 0000000..67938e2 --- /dev/null +++ b/Sora-JS/Modules.swift @@ -0,0 +1,118 @@ +// +// Modules.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import Foundation + +struct ModuleMetadata: Codable, Hashable { + let author: String + let iconUrl: String + let language: String + let mediaType: String + let searchBaseUrl: String + let scriptUrl: String + let version: String + let description: String +} + +struct ScrapingModule: Codable, Identifiable, Hashable { + let id: UUID + let metadata: ModuleMetadata + let localPath: String + var isActive: Bool + + init(id: UUID = UUID(), metadata: ModuleMetadata, localPath: String, isActive: Bool = false) { + self.id = id + self.metadata = metadata + self.localPath = localPath + self.isActive = isActive + } + + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + + static func == (lhs: ScrapingModule, rhs: ScrapingModule) -> Bool { + lhs.id == rhs.id + } +} + +class ModuleManager: ObservableObject { + @Published var modules: [ScrapingModule] = [] + private let fileManager = FileManager.default + private let modulesFileName = "modules.json" + + init() { + loadModules() + } + + private func getDocumentsDirectory() -> URL { + fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + } + + private func getModulesFilePath() -> URL { + getDocumentsDirectory().appendingPathComponent(modulesFileName) + } + + func loadModules() { + let url = getModulesFilePath() + guard let data = try? Data(contentsOf: url) else { return } + modules = (try? JSONDecoder().decode([ScrapingModule].self, from: data)) ?? [] + } + + private func saveModules() { + let url = getModulesFilePath() + guard let data = try? JSONEncoder().encode(modules) else { return } + try? data.write(to: url) + } + + func addModule(metadataUrl: String) async throws -> ScrapingModule { + guard let url = URL(string: metadataUrl) else { + throw NSError(domain: "Invalid metadata URL", code: -1) + } + + let (metadataData, _) = try await URLSession.shared.data(from: url) + let metadata = try JSONDecoder().decode(ModuleMetadata.self, from: metadataData) + + guard let scriptUrl = URL(string: metadata.scriptUrl) else { + throw NSError(domain: "Invalid script URL", code: -1) + } + + let (scriptData, _) = try await URLSession.shared.data(from: scriptUrl) + guard let jsContent = String(data: scriptData, encoding: .utf8) else { + throw NSError(domain: "Invalid script encoding", code: -1) + } + + let fileName = "\(UUID().uuidString).js" + let localUrl = getDocumentsDirectory().appendingPathComponent(fileName) + try jsContent.write(to: localUrl, atomically: true, encoding: .utf8) + + let module = ScrapingModule( + metadata: metadata, + localPath: fileName + ) + + DispatchQueue.main.async { + self.modules.append(module) + self.saveModules() + } + + return module + } + + func deleteModule(_ module: ScrapingModule) { + let localUrl = getDocumentsDirectory().appendingPathComponent(module.localPath) + try? fileManager.removeItem(at: localUrl) + + modules.removeAll { $0.id == module.id } + saveModules() + } + + func getModuleContent(_ module: ScrapingModule) throws -> String { + let localUrl = getDocumentsDirectory().appendingPathComponent(module.localPath) + return try String(contentsOf: localUrl, encoding: .utf8) + } +} diff --git a/Sora/Preview Content/Preview Assets.xcassets/Contents.json b/Sora-JS/Preview Content/Preview Assets.xcassets/Contents.json similarity index 100% rename from Sora/Preview Content/Preview Assets.xcassets/Contents.json rename to Sora-JS/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/Sora-JS/Settings.swift b/Sora-JS/Settings.swift new file mode 100644 index 0000000..4e4022c --- /dev/null +++ b/Sora-JS/Settings.swift @@ -0,0 +1,133 @@ +// +// Settings.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI + +struct SettingsView: View { + @EnvironmentObject var moduleManager: ModuleManager + @AppStorage("selectedModuleId") private var selectedModuleId: String? + @State private var showingAddModule = false + @State private var newModuleUrl = "" + @State private var isLoading = false + @State private var errorMessage: String? + + var body: some View { + List { + ForEach(moduleManager.modules) { module in + ModuleRow(module: module, isSelected: module.id.uuidString == selectedModuleId) + .contentShape(Rectangle()) + .onTapGesture { + selectedModuleId = module.id.uuidString + } + .swipeActions { + Button(role: .destructive) { + if selectedModuleId == module.id.uuidString { + selectedModuleId = nil + } + moduleManager.deleteModule(module) + } label: { + Label("Delete", systemImage: "trash") + } + } + } + } + .navigationTitle("Scraping Modules") + .toolbar { + Button { + showingAddModule = true + } label: { + Label("Add Module", systemImage: "plus") + } + } + .sheet(isPresented: $showingAddModule) { + NavigationView { + Form { + Section(header: Text("New Module")) { + TextField("Module JSON URL", text: $newModuleUrl) + .autocapitalization(.none) + .keyboardType(.URL) + } + + if let error = errorMessage { + Section { + Text(error) + .foregroundColor(.red) + } + } + } + .navigationTitle("Add Module") + .navigationBarItems( + leading: Button("Cancel") { + showingAddModule = false + }, + trailing: Button("Add") { + addModule() + } + .disabled(newModuleUrl.isEmpty || isLoading) + ) + } + } + } + + private func addModule() { + isLoading = true + errorMessage = nil + + Task { + do { + _ = try await moduleManager.addModule(metadataUrl: newModuleUrl) + DispatchQueue.main.async { + isLoading = false + showingAddModule = false + newModuleUrl = "" + } + } catch { + DispatchQueue.main.async { + isLoading = false + errorMessage = error.localizedDescription + } + } + } + } +} + +struct ModuleRow: View { + let module: ScrapingModule + let isSelected: Bool + + var body: some View { + HStack { + AsyncImage(url: URL(string: module.metadata.iconUrl)) { image in + image + .resizable() + .aspectRatio(contentMode: .fit) + } placeholder: { + Color.gray + } + .frame(width: 40, height: 40) + .cornerRadius(8) + + VStack(alignment: .leading) { + Text(module.metadata.mediaType) + .font(.headline) + Text("by \(module.metadata.author)") + .font(.caption) + .foregroundColor(.gray) + Text("\(module.metadata.language) • v\(module.metadata.version)") + .font(.caption2) + .foregroundColor(.gray) + } + + Spacer() + + if isSelected { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.blue) + } + } + } +} diff --git a/Sora-JS/Sora_JSApp.swift b/Sora-JS/Sora_JSApp.swift new file mode 100644 index 0000000..9d33576 --- /dev/null +++ b/Sora-JS/Sora_JSApp.swift @@ -0,0 +1,20 @@ +// +// Sora_JSApp.swift +// Sora-JS +// +// Created by Francesco on 04/01/25. +// + +import SwiftUI + +@main +struct Sora_JSApp: App { + @StateObject private var moduleManager = ModuleManager() + + var body: some Scene { + WindowGroup { + ContentView() + .environmentObject(moduleManager) + } + } +} diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj deleted file mode 100644 index f1a25fa..0000000 --- a/Sora.xcodeproj/project.pbxproj +++ /dev/null @@ -1,671 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 55; - objects = { - -/* Begin PBXBuildFile section */ - 1308CFBC2D19844A004CD38C /* Double+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1308CFBB2D19844A004CD38C /* Double+Extension.swift */; }; - 1308CFBE2D19844D004CD38C /* MusicProgressSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1308CFBD2D19844D004CD38C /* MusicProgressSlider.swift */; }; - 1308CFC12D198466004CD38C /* CustomPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1308CFC02D198466004CD38C /* CustomPlayer.swift */; }; - 132417842D13198000B4F2D2 /* SoraApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417832D13198000B4F2D2 /* SoraApp.swift */; }; - 132417862D13198000B4F2D2 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417852D13198000B4F2D2 /* ContentView.swift */; }; - 132417882D13198200B4F2D2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 132417872D13198200B4F2D2 /* Assets.xcassets */; }; - 1324178B2D13198200B4F2D2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1324178A2D13198200B4F2D2 /* Preview Assets.xcassets */; }; - 1324179E2D1319E800B4F2D2 /* MiruDataStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417932D1319E800B4F2D2 /* MiruDataStruct.swift */; }; - 1324179F2D1319E800B4F2D2 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417952D1319E800B4F2D2 /* Notification.swift */; }; - 132417A02D1319E800B4F2D2 /* HistoryManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417972D1319E800B4F2D2 /* HistoryManager.swift */; }; - 132417A12D1319E800B4F2D2 /* ModuleStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417992D1319E800B4F2D2 /* ModuleStruct.swift */; }; - 132417A22D1319E800B4F2D2 /* ModulesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1324179A2D1319E800B4F2D2 /* ModulesManager.swift */; }; - 132417A32D1319E800B4F2D2 /* NormalPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1324179C2D1319E800B4F2D2 /* NormalPlayer.swift */; }; - 132417B82D131A0600B4F2D2 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417A72D131A0600B4F2D2 /* SearchView.swift */; }; - 132417B92D131A0600B4F2D2 /* SearchResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417A82D131A0600B4F2D2 /* SearchResultsView.swift */; }; - 132417BA2D131A0600B4F2D2 /* SettingsAboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417AB2D131A0600B4F2D2 /* SettingsAboutView.swift */; }; - 132417BB2D131A0600B4F2D2 /* SettingsIUView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417AC2D131A0600B4F2D2 /* SettingsIUView.swift */; }; - 132417BC2D131A0600B4F2D2 /* SettingsLogsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417AD2D131A0600B4F2D2 /* SettingsLogsView.swift */; }; - 132417BD2D131A0600B4F2D2 /* SettingsModuleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417AE2D131A0600B4F2D2 /* SettingsModuleView.swift */; }; - 132417BE2D131A0600B4F2D2 /* SettingsPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417AF2D131A0600B4F2D2 /* SettingsPlayerView.swift */; }; - 132417BF2D131A0600B4F2D2 /* SettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417B02D131A0600B4F2D2 /* SettingView.swift */; }; - 132417C02D131A0600B4F2D2 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417B12D131A0600B4F2D2 /* HomeView.swift */; }; - 132417C12D131A0600B4F2D2 /* LibraryManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417B32D131A0600B4F2D2 /* LibraryManager.swift */; }; - 132417C22D131A0600B4F2D2 /* LibraryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417B42D131A0600B4F2D2 /* LibraryView.swift */; }; - 132417C32D131A0600B4F2D2 /* MediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417B62D131A0600B4F2D2 /* MediaView.swift */; }; - 132417C42D131A0600B4F2D2 /* MediaExtraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417B72D131A0600B4F2D2 /* MediaExtraction.swift */; }; - 132417CF2D131B7400B4F2D2 /* SwiftSoup in Frameworks */ = {isa = PBXBuildFile; productRef = 132417CE2D131B7400B4F2D2 /* SwiftSoup */; }; - 132417D22D131C5300B4F2D2 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 132417D12D131C5300B4F2D2 /* Kingfisher */; }; - 132417D52D13240200B4F2D2 /* EpisodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417D42D13240200B4F2D2 /* EpisodeCell.swift */; }; - 132417D72D13242400B4F2D2 /* CircularProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417D62D13242400B4F2D2 /* CircularProgressBar.swift */; }; - 132417D92D1328B900B4F2D2 /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132417D82D1328B900B4F2D2 /* VideoPlayerView.swift */; }; - 1352BA712D1ABC30000A9AF9 /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1352BA702D1ABC30000A9AF9 /* URLSession.swift */; }; - 13AEE7BA2D2451F200CA634A /* GitHubAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE7B92D2451F200CA634A /* GitHubAPI.swift */; }; - 13AEE7BC2D24521200CA634A /* SettingsReleasesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE7BB2D24521200CA634A /* SettingsReleasesView.swift */; }; - 13B3A4B22D1477F100BCC0D5 /* SettingsStorageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B3A4B12D1477F100BCC0D5 /* SettingsStorageView.swift */; }; - 13B544B02D26D8E900CC6C59 /* OpenCastSwift iOS in Frameworks */ = {isa = PBXBuildFile; productRef = 13B544AF2D26D8E900CC6C59 /* OpenCastSwift iOS */; }; - 13C9821F2D2152B1007A0132 /* GitHubRelease.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C9821E2D2152B1007A0132 /* GitHubRelease.swift */; }; - 13ED65752D284045008F4C23 /* SettingsEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13ED65742D284045008F4C23 /* SettingsEditorView.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 1308CFBB2D19844A004CD38C /* Double+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Double+Extension.swift"; sourceTree = ""; }; - 1308CFBD2D19844D004CD38C /* MusicProgressSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MusicProgressSlider.swift; sourceTree = ""; }; - 1308CFC02D198466004CD38C /* CustomPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomPlayer.swift; sourceTree = ""; }; - 132417802D13198000B4F2D2 /* Sora.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sora.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 132417832D13198000B4F2D2 /* SoraApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraApp.swift; sourceTree = ""; }; - 132417852D13198000B4F2D2 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 132417872D13198200B4F2D2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 1324178A2D13198200B4F2D2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 132417932D1319E800B4F2D2 /* MiruDataStruct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MiruDataStruct.swift; sourceTree = ""; }; - 132417952D1319E800B4F2D2 /* Notification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; - 132417972D1319E800B4F2D2 /* HistoryManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryManager.swift; sourceTree = ""; }; - 132417992D1319E800B4F2D2 /* ModuleStruct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModuleStruct.swift; sourceTree = ""; }; - 1324179A2D1319E800B4F2D2 /* ModulesManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModulesManager.swift; sourceTree = ""; }; - 1324179C2D1319E800B4F2D2 /* NormalPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NormalPlayer.swift; sourceTree = ""; }; - 132417A72D131A0600B4F2D2 /* SearchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; - 132417A82D131A0600B4F2D2 /* SearchResultsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchResultsView.swift; sourceTree = ""; }; - 132417AB2D131A0600B4F2D2 /* SettingsAboutView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsAboutView.swift; sourceTree = ""; }; - 132417AC2D131A0600B4F2D2 /* SettingsIUView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsIUView.swift; sourceTree = ""; }; - 132417AD2D131A0600B4F2D2 /* SettingsLogsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsLogsView.swift; sourceTree = ""; }; - 132417AE2D131A0600B4F2D2 /* SettingsModuleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsModuleView.swift; sourceTree = ""; }; - 132417AF2D131A0600B4F2D2 /* SettingsPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsPlayerView.swift; sourceTree = ""; }; - 132417B02D131A0600B4F2D2 /* SettingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingView.swift; sourceTree = ""; }; - 132417B12D131A0600B4F2D2 /* HomeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; - 132417B32D131A0600B4F2D2 /* LibraryManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibraryManager.swift; sourceTree = ""; }; - 132417B42D131A0600B4F2D2 /* LibraryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibraryView.swift; sourceTree = ""; }; - 132417B62D131A0600B4F2D2 /* MediaView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaView.swift; sourceTree = ""; }; - 132417B72D131A0600B4F2D2 /* MediaExtraction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaExtraction.swift; sourceTree = ""; }; - 132417C52D131AA500B4F2D2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 132417D42D13240200B4F2D2 /* EpisodeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EpisodeCell.swift; sourceTree = ""; }; - 132417D62D13242400B4F2D2 /* CircularProgressBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularProgressBar.swift; sourceTree = ""; }; - 132417D82D1328B900B4F2D2 /* VideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = ""; }; - 1352BA6F2D1AB113000A9AF9 /* Sora.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Sora.entitlements; sourceTree = ""; }; - 1352BA702D1ABC30000A9AF9 /* URLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; - 13AEE7B92D2451F200CA634A /* GitHubAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubAPI.swift; sourceTree = ""; }; - 13AEE7BB2D24521200CA634A /* SettingsReleasesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsReleasesView.swift; sourceTree = ""; }; - 13B3A4B12D1477F100BCC0D5 /* SettingsStorageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsStorageView.swift; sourceTree = ""; }; - 13C9821E2D2152B1007A0132 /* GitHubRelease.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubRelease.swift; sourceTree = ""; }; - 13ED65742D284045008F4C23 /* SettingsEditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEditorView.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1324177D2D13198000B4F2D2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 132417D22D131C5300B4F2D2 /* Kingfisher in Frameworks */, - 132417CF2D131B7400B4F2D2 /* SwiftSoup in Frameworks */, - 13B544B02D26D8E900CC6C59 /* OpenCastSwift iOS in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1308CFBA2D19843E004CD38C /* CustomPlayer */ = { - isa = PBXGroup; - children = ( - 1308CFC02D198466004CD38C /* CustomPlayer.swift */, - 1308CFBF2D198450004CD38C /* Components */, - ); - path = CustomPlayer; - sourceTree = ""; - }; - 1308CFBF2D198450004CD38C /* Components */ = { - isa = PBXGroup; - children = ( - 1308CFBD2D19844D004CD38C /* MusicProgressSlider.swift */, - 1308CFBB2D19844A004CD38C /* Double+Extension.swift */, - ); - path = Components; - sourceTree = ""; - }; - 132417772D13198000B4F2D2 = { - isa = PBXGroup; - children = ( - 132417822D13198000B4F2D2 /* Sora */, - 132417812D13198000B4F2D2 /* Products */, - ); - sourceTree = ""; - }; - 132417812D13198000B4F2D2 /* Products */ = { - isa = PBXGroup; - children = ( - 132417802D13198000B4F2D2 /* Sora.app */, - ); - name = Products; - sourceTree = ""; - }; - 132417822D13198000B4F2D2 /* Sora */ = { - isa = PBXGroup; - children = ( - 1352BA6F2D1AB113000A9AF9 /* Sora.entitlements */, - 132417C52D131AA500B4F2D2 /* Info.plist */, - 132417912D1319E800B4F2D2 /* Utils */, - 132417A52D131A0600B4F2D2 /* Views */, - 132417832D13198000B4F2D2 /* SoraApp.swift */, - 132417852D13198000B4F2D2 /* ContentView.swift */, - 132417872D13198200B4F2D2 /* Assets.xcassets */, - 132417892D13198200B4F2D2 /* Preview Content */, - ); - path = Sora; - sourceTree = ""; - }; - 132417892D13198200B4F2D2 /* Preview Content */ = { - isa = PBXGroup; - children = ( - 1324178A2D13198200B4F2D2 /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = ""; - }; - 132417912D1319E800B4F2D2 /* Utils */ = { - isa = PBXGroup; - children = ( - 13C9821D2D2152A0007A0132 /* GitHub */, - 1308CFBA2D19843E004CD38C /* CustomPlayer */, - 132417922D1319E800B4F2D2 /* Miru */, - 132417942D1319E800B4F2D2 /* Extensions */, - 132417962D1319E800B4F2D2 /* History */, - 132417982D1319E800B4F2D2 /* Modules */, - 1324179B2D1319E800B4F2D2 /* Player */, - ); - path = Utils; - sourceTree = ""; - }; - 132417922D1319E800B4F2D2 /* Miru */ = { - isa = PBXGroup; - children = ( - 132417932D1319E800B4F2D2 /* MiruDataStruct.swift */, - ); - path = Miru; - sourceTree = ""; - }; - 132417942D1319E800B4F2D2 /* Extensions */ = { - isa = PBXGroup; - children = ( - 132417952D1319E800B4F2D2 /* Notification.swift */, - 1352BA702D1ABC30000A9AF9 /* URLSession.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 132417962D1319E800B4F2D2 /* History */ = { - isa = PBXGroup; - children = ( - 132417972D1319E800B4F2D2 /* HistoryManager.swift */, - ); - path = History; - sourceTree = ""; - }; - 132417982D1319E800B4F2D2 /* Modules */ = { - isa = PBXGroup; - children = ( - 132417992D1319E800B4F2D2 /* ModuleStruct.swift */, - 1324179A2D1319E800B4F2D2 /* ModulesManager.swift */, - ); - path = Modules; - sourceTree = ""; - }; - 1324179B2D1319E800B4F2D2 /* Player */ = { - isa = PBXGroup; - children = ( - 132417D82D1328B900B4F2D2 /* VideoPlayerView.swift */, - 1324179C2D1319E800B4F2D2 /* NormalPlayer.swift */, - ); - path = Player; - sourceTree = ""; - }; - 132417A52D131A0600B4F2D2 /* Views */ = { - isa = PBXGroup; - children = ( - 132417B12D131A0600B4F2D2 /* HomeView.swift */, - 132417B22D131A0600B4F2D2 /* LibraryViews */, - 132417A62D131A0600B4F2D2 /* SearchViews */, - 132417A92D131A0600B4F2D2 /* SettingsViews */, - 132417B52D131A0600B4F2D2 /* MediaViews */, - ); - path = Views; - sourceTree = ""; - }; - 132417A62D131A0600B4F2D2 /* SearchViews */ = { - isa = PBXGroup; - children = ( - 132417A72D131A0600B4F2D2 /* SearchView.swift */, - 132417A82D131A0600B4F2D2 /* SearchResultsView.swift */, - ); - path = SearchViews; - sourceTree = ""; - }; - 132417A92D131A0600B4F2D2 /* SettingsViews */ = { - isa = PBXGroup; - children = ( - 132417AA2D131A0600B4F2D2 /* SubPages */, - 132417B02D131A0600B4F2D2 /* SettingView.swift */, - ); - path = SettingsViews; - sourceTree = ""; - }; - 132417AA2D131A0600B4F2D2 /* SubPages */ = { - isa = PBXGroup; - children = ( - 132417AB2D131A0600B4F2D2 /* SettingsAboutView.swift */, - 132417AC2D131A0600B4F2D2 /* SettingsIUView.swift */, - 132417AD2D131A0600B4F2D2 /* SettingsLogsView.swift */, - 132417AE2D131A0600B4F2D2 /* SettingsModuleView.swift */, - 132417AF2D131A0600B4F2D2 /* SettingsPlayerView.swift */, - 13B3A4B12D1477F100BCC0D5 /* SettingsStorageView.swift */, - 13AEE7BB2D24521200CA634A /* SettingsReleasesView.swift */, - 13ED65742D284045008F4C23 /* SettingsEditorView.swift */, - ); - path = SubPages; - sourceTree = ""; - }; - 132417B22D131A0600B4F2D2 /* LibraryViews */ = { - isa = PBXGroup; - children = ( - 132417B42D131A0600B4F2D2 /* LibraryView.swift */, - 132417B32D131A0600B4F2D2 /* LibraryManager.swift */, - ); - path = LibraryViews; - sourceTree = ""; - }; - 132417B52D131A0600B4F2D2 /* MediaViews */ = { - isa = PBXGroup; - children = ( - 132417D32D1323F500B4F2D2 /* EpisodesCell */, - 132417B62D131A0600B4F2D2 /* MediaView.swift */, - 132417B72D131A0600B4F2D2 /* MediaExtraction.swift */, - ); - path = MediaViews; - sourceTree = ""; - }; - 132417D32D1323F500B4F2D2 /* EpisodesCell */ = { - isa = PBXGroup; - children = ( - 132417D42D13240200B4F2D2 /* EpisodeCell.swift */, - 132417D62D13242400B4F2D2 /* CircularProgressBar.swift */, - ); - path = EpisodesCell; - sourceTree = ""; - }; - 13C9821D2D2152A0007A0132 /* GitHub */ = { - isa = PBXGroup; - children = ( - 13C9821E2D2152B1007A0132 /* GitHubRelease.swift */, - 13AEE7B92D2451F200CA634A /* GitHubAPI.swift */, - ); - path = GitHub; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1324177F2D13198000B4F2D2 /* Sora */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1324178E2D13198200B4F2D2 /* Build configuration list for PBXNativeTarget "Sora" */; - buildPhases = ( - 1324177C2D13198000B4F2D2 /* Sources */, - 1324177D2D13198000B4F2D2 /* Frameworks */, - 1324177E2D13198000B4F2D2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Sora; - packageProductDependencies = ( - 132417CE2D131B7400B4F2D2 /* SwiftSoup */, - 132417D12D131C5300B4F2D2 /* Kingfisher */, - 13B544AF2D26D8E900CC6C59 /* OpenCastSwift iOS */, - ); - productName = Sora; - productReference = 132417802D13198000B4F2D2 /* Sora.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 132417782D13198000B4F2D2 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1320; - LastUpgradeCheck = 1320; - TargetAttributes = { - 1324177F2D13198000B4F2D2 = { - CreatedOnToolsVersion = 13.2.1; - }; - }; - }; - buildConfigurationList = 1324177B2D13198000B4F2D2 /* Build configuration list for PBXProject "Sora" */; - compatibilityVersion = "Xcode 13.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 132417772D13198000B4F2D2; - packageReferences = ( - 132417CD2D131B7400B4F2D2 /* XCRemoteSwiftPackageReference "SwiftSoup" */, - 132417D02D131C5300B4F2D2 /* XCRemoteSwiftPackageReference "Kingfisher" */, - 13B544AE2D26D8E900CC6C59 /* XCRemoteSwiftPackageReference "OpenCastSwift" */, - ); - productRefGroup = 132417812D13198000B4F2D2 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 1324177F2D13198000B4F2D2 /* Sora */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1324177E2D13198000B4F2D2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1324178B2D13198200B4F2D2 /* Preview Assets.xcassets in Resources */, - 132417882D13198200B4F2D2 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1324177C2D13198000B4F2D2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 13B3A4B22D1477F100BCC0D5 /* SettingsStorageView.swift in Sources */, - 132417BB2D131A0600B4F2D2 /* SettingsIUView.swift in Sources */, - 132417C42D131A0600B4F2D2 /* MediaExtraction.swift in Sources */, - 132417B82D131A0600B4F2D2 /* SearchView.swift in Sources */, - 1308CFBC2D19844A004CD38C /* Double+Extension.swift in Sources */, - 132417D92D1328B900B4F2D2 /* VideoPlayerView.swift in Sources */, - 1324179F2D1319E800B4F2D2 /* Notification.swift in Sources */, - 132417BD2D131A0600B4F2D2 /* SettingsModuleView.swift in Sources */, - 132417BC2D131A0600B4F2D2 /* SettingsLogsView.swift in Sources */, - 1308CFC12D198466004CD38C /* CustomPlayer.swift in Sources */, - 132417A22D1319E800B4F2D2 /* ModulesManager.swift in Sources */, - 132417862D13198000B4F2D2 /* ContentView.swift in Sources */, - 13AEE7BA2D2451F200CA634A /* GitHubAPI.swift in Sources */, - 132417C22D131A0600B4F2D2 /* LibraryView.swift in Sources */, - 132417A32D1319E800B4F2D2 /* NormalPlayer.swift in Sources */, - 132417D72D13242400B4F2D2 /* CircularProgressBar.swift in Sources */, - 132417C02D131A0600B4F2D2 /* HomeView.swift in Sources */, - 132417BF2D131A0600B4F2D2 /* SettingView.swift in Sources */, - 132417C32D131A0600B4F2D2 /* MediaView.swift in Sources */, - 132417A12D1319E800B4F2D2 /* ModuleStruct.swift in Sources */, - 132417B92D131A0600B4F2D2 /* SearchResultsView.swift in Sources */, - 13AEE7BC2D24521200CA634A /* SettingsReleasesView.swift in Sources */, - 132417842D13198000B4F2D2 /* SoraApp.swift in Sources */, - 132417BE2D131A0600B4F2D2 /* SettingsPlayerView.swift in Sources */, - 132417C12D131A0600B4F2D2 /* LibraryManager.swift in Sources */, - 132417BA2D131A0600B4F2D2 /* SettingsAboutView.swift in Sources */, - 1324179E2D1319E800B4F2D2 /* MiruDataStruct.swift in Sources */, - 13ED65752D284045008F4C23 /* SettingsEditorView.swift in Sources */, - 1308CFBE2D19844D004CD38C /* MusicProgressSlider.swift in Sources */, - 132417D52D13240200B4F2D2 /* EpisodeCell.swift in Sources */, - 13C9821F2D2152B1007A0132 /* GitHubRelease.swift in Sources */, - 1352BA712D1ABC30000A9AF9 /* URLSession.swift in Sources */, - 132417A02D1319E800B4F2D2 /* HistoryManager.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1324178C2D13198200B4F2D2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1324178D2D13198200B4F2D2 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 1324178F2D13198200B4F2D2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = Sora/Sora.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Sora/Preview Content\""; - DEVELOPMENT_TEAM = 399LMK6Q2Y; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Sora/Info.plist; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 0.1.1; - PRODUCT_BUNDLE_IDENTIFIER = me.cranci.Sora; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTS_MACCATALYST = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 132417902D13198200B4F2D2 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = Sora/Sora.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Sora/Preview Content\""; - DEVELOPMENT_TEAM = 399LMK6Q2Y; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Sora/Info.plist; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 0.1.1; - PRODUCT_BUNDLE_IDENTIFIER = me.cranci.Sora; - PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTS_MACCATALYST = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1324177B2D13198000B4F2D2 /* Build configuration list for PBXProject "Sora" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1324178C2D13198200B4F2D2 /* Debug */, - 1324178D2D13198200B4F2D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1324178E2D13198200B4F2D2 /* Build configuration list for PBXNativeTarget "Sora" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1324178F2D13198200B4F2D2 /* Debug */, - 132417902D13198200B4F2D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 132417CD2D131B7400B4F2D2 /* XCRemoteSwiftPackageReference "SwiftSoup" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/scinfu/SwiftSoup.git"; - requirement = { - kind = exactVersion; - version = 2.4.0; - }; - }; - 132417D02D131C5300B4F2D2 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/onevcat/Kingfisher.git"; - requirement = { - kind = exactVersion; - version = 7.9.1; - }; - }; - 13B544AE2D26D8E900CC6C59 /* XCRemoteSwiftPackageReference "OpenCastSwift" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/danwilliams64/OpenCastSwift.git"; - requirement = { - branch = master; - kind = branch; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 132417CE2D131B7400B4F2D2 /* SwiftSoup */ = { - isa = XCSwiftPackageProductDependency; - package = 132417CD2D131B7400B4F2D2 /* XCRemoteSwiftPackageReference "SwiftSoup" */; - productName = SwiftSoup; - }; - 132417D12D131C5300B4F2D2 /* Kingfisher */ = { - isa = XCSwiftPackageProductDependency; - package = 132417D02D131C5300B4F2D2 /* XCRemoteSwiftPackageReference "Kingfisher" */; - productName = Kingfisher; - }; - 13B544AF2D26D8E900CC6C59 /* OpenCastSwift iOS */ = { - isa = XCSwiftPackageProductDependency; - package = 13B544AE2D26D8E900CC6C59 /* XCRemoteSwiftPackageReference "OpenCastSwift" */; - productName = "OpenCastSwift iOS"; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 132417782D13198000B4F2D2 /* Project object */; -} diff --git a/Sora.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Sora.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index e6975d3..0000000 --- a/Sora.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,52 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "Kingfisher", - "repositoryURL": "https://github.com/onevcat/Kingfisher.git", - "state": { - "branch": null, - "revision": "b6f62758f21a8c03cd64f4009c037cfa580a256e", - "version": "7.9.1" - } - }, - { - "package": "OpenCastSwift", - "repositoryURL": "https://github.com/danwilliams64/OpenCastSwift.git", - "state": { - "branch": "master", - "revision": "f96bf1ed9c1dcad34a1fcccb50d79a6cf612def4", - "version": null - } - }, - { - "package": "SwiftProtobuf", - "repositoryURL": "https://github.com/apple/swift-protobuf", - "state": { - "branch": null, - "revision": "9f0c76544701845ad98716f3f6a774a892152bcb", - "version": "1.26.0" - } - }, - { - "package": "SwiftSoup", - "repositoryURL": "https://github.com/scinfu/SwiftSoup.git", - "state": { - "branch": null, - "revision": "5386dab25134eec11fc35fc5e43caf422fad0270", - "version": "2.4.0" - } - }, - { - "package": "SwiftyJSON", - "repositoryURL": "https://github.com/SwiftyJSON/SwiftyJSON", - "state": { - "branch": null, - "revision": "af76cf3ef710b6ca5f8c05f3a31307d44a3c5828", - "version": "5.0.2" - } - } - ] - }, - "version": 1 -} diff --git a/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate b/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 32d15d5f4d6652c309e3ff05a9ee0a05e78e6023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115413 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 - - - - SchemeUserState - - Playground (Playground) 1.xcscheme - - isShown - - orderHint - 2 - - Playground (Playground) 2.xcscheme - - isShown - - orderHint - 3 - - Playground (Playground).xcscheme - - isShown - - orderHint - 0 - - Sora.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/Sora/Assets.xcassets/AccentColor.colorset/.DS_Store b/Sora/Assets.xcassets/AccentColor.colorset/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 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 D4;&WA diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/40-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/40-1.png deleted file mode 100644 index 1e9c473ca5c40c690f0709c4bd8add833710aa45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%x&8e(qjo>xxABmEnq1h0U3fUb zE=qxBb3bWx}Y13GH%@9ZDjM?F8WR2P-H2b$+>>B}rjf1sRg!@pxJ*TUKn~>$sT4 z@G%emf9I}OG{DS2Fg*~_5u#lyYDP#VBT?JVRm^{mxA?-_pL^_)M4=`6lT)Kke%-0( zo&D=q53T&~?q$#I{qEuBK{O3|r3^U+5ONr$U1(h59nnyAN<#ows@l(ogLVI&v!3%; zUU;jywf)NLF8%S7yVm`43;+1|Z_X?paY@eNrVJ+`me4+`eh%Yj zkp(*h?+&HvN<_zq^+>EXFg6Lno$=3!heI(DCax3gi|RREdFOO#r!>j&%2EuPn^(Ki zs_EuhJ0*}{86gEBabSy!efC>qg6~|YI|6ZG7j|J6cHxbqIsgFH;Ow{vU?NEX0000< KMNUMnLSTZ_GnTLb diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/40-2.png b/Sora/Assets.xcassets/AppIcon.appiconset/40-2.png deleted file mode 100644 index 1e9c473ca5c40c690f0709c4bd8add833710aa45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%x&8e(qjo>xxABmEnq1h0U3fUb zE=qxBb3bWx}Y13GH%@9ZDjM?F8WR2P-H2b$+>>B}rjf1sRg!@pxJ*TUKn~>$sT4 z@G%emf9I}OG{DS2Fg*~_5u#lyYDP#VBT?JVRm^{mxA?-_pL^_)M4=`6lT)Kke%-0( zo&D=q53T&~?q$#I{qEuBK{O3|r3^U+5ONr$U1(h59nnyAN<#ows@l(ogLVI&v!3%; zUU;jywf)NLF8%S7yVm`43;+1|Z_X?paY@eNrVJ+`me4+`eh%Yj zkp(*h?+&HvN<_zq^+>EXFg6Lno$=3!heI(DCax3gi|RREdFOO#r!>j&%2EuPn^(Ki zs_EuhJ0*}{86gEBabSy!efC>qg6~|YI|6ZG7j|J6cHxbqIsgFH;Ow{vU?NEX0000< KMNUMnLSTZ_GnTLb diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/40.png b/Sora/Assets.xcassets/AppIcon.appiconset/40.png deleted file mode 100644 index 1e9c473ca5c40c690f0709c4bd8add833710aa45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%x&8e(qjo>xxABmEnq1h0U3fUb zE=qxBb3bWx}Y13GH%@9ZDjM?F8WR2P-H2b$+>>B}rjf1sRg!@pxJ*TUKn~>$sT4 z@G%emf9I}OG{DS2Fg*~_5u#lyYDP#VBT?JVRm^{mxA?-_pL^_)M4=`6lT)Kke%-0( zo&D=q53T&~?q$#I{qEuBK{O3|r3^U+5ONr$U1(h59nnyAN<#ows@l(ogLVI&v!3%; zUU;jywf)NLF8%S7yVm`43;+1|Z_X?paY@eNrVJ+`me4+`eh%Yj zkp(*h?+&HvN<_zq^+>EXFg6Lno$=3!heI(DCax3gi|RREdFOO#r!>j&%2EuPn^(Ki zs_EuhJ0*}{86gEBabSy!efC>qg6~|YI|6ZG7j|J6cHxbqIsgFH;Ow{vU?NEX0000< KMNUMnLSTZ_GnTLb diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/58-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/58-1.png deleted file mode 100644 index 25a3decb48135e81a452448b490555ff12cb9e06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmV-u1(*7XP)Xd?fXPs}Qv;B)w%j&TwTIISsq{PcV2-`J1}@@~I_a0FOMk)ft0uxH2tfe-2}SSmcaRNBR+q0}pltJY)) zf}|CnkFi=k7K_bprwbLUK63czhYwGOleeW`>lIpC?OHo!WD##k!s~PfTnzWu&;)RG zW78o4^d)}UJvcgv)I4vH#i;axD-8Xq_qqIpy zj(yII&F`s6lB|uk*f|R!GJdLhe)++gV63NdnzC}Nkk~l`f`HRtBV9cHbKcnIdiZYh z*!!vY?J9hI5Z)0?o>=(!ukx-^M5w$qeQe1Uy=&wWIlqSt5EM@Ybf2$QLG|R^CK>Ze z;!>adzoCA_JA`qG-OCzrX_Ezi~)X(CW%Jmp7f#zI?}~g}O8^GPh@y$LoTbbBg0y_607dhvR^%CNOs)05X83W${}; zHj{}OjJJTt!#lh#Cu#N44w@rHQC4JLl?9Sn?X|}%*>GPCFD{$Crh0gFH9Ws0?!-rn zeKOPO^i#B`$S}bZ$lr=NMRl=)i{`zo5D-N{k$>L@Ax(q7o0A|77!N%(`?b@%o3cL1 z{c&n3Yf1_0qoj{F`)rLJUI)X7k_0skB%1qsF#_7}H)w4C@EZ-NisBLl56R?qlNFpq zIj1klO*#X#TQG882AcLCx0*2WTUBI6mVA<6Y>X@#P^hZ^(Q7sMJGZexb7^UEO|Ho` qxhB`-np~4>a!szuHM##6+}{8UiYE-XJo^*?0000`< diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/58.png b/Sora/Assets.xcassets/AppIcon.appiconset/58.png deleted file mode 100644 index 25a3decb48135e81a452448b490555ff12cb9e06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmV-u1(*7XP)Xd?fXPs}Qv;B)w%j&TwTIISsq{PcV2-`J1}@@~I_a0FOMk)ft0uxH2tfe-2}SSmcaRNBR+q0}pltJY)) zf}|CnkFi=k7K_bprwbLUK63czhYwGOleeW`>lIpC?OHo!WD##k!s~PfTnzWu&;)RG zW78o4^d)}UJvcgv)I4vH#i;axD-8Xq_qqIpy zj(yII&F`s6lB|uk*f|R!GJdLhe)++gV63NdnzC}Nkk~l`f`HRtBV9cHbKcnIdiZYh z*!!vY?J9hI5Z)0?o>=(!ukx-^M5w$qeQe1Uy=&wWIlqSt5EM@Ybf2$QLG|R^CK>Ze z;!>adzoCA_JA`qG-OCzrX_Ezi~)X(CW%Jmp7f#zI?}~g}O8^GPh@y$LoTbbBg0y_607dhvR^%CNOs)05X83W${}; zHj{}OjJJTt!#lh#Cu#N44w@rHQC4JLl?9Sn?X|}%*>GPCFD{$Crh0gFH9Ws0?!-rn zeKOPO^i#B`$S}bZ$lr=NMRl=)i{`zo5D-N{k$>L@Ax(q7o0A|77!N%(`?b@%o3cL1 z{c&n3Yf1_0qoj{F`)rLJUI)X7k_0skB%1qsF#_7}H)w4C@EZ-NisBLl56R?qlNFpq zIj1klO*#X#TQG882AcLCx0*2WTUBI6mVA<6Y>X@#P^hZ^(Q7sMJGZexb7^UEO|Ho` qxhB`-np~4>a!szuHM##6+}{8UiYE-XJo^*?0000`< diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/60.png b/Sora/Assets.xcassets/AppIcon.appiconset/60.png deleted file mode 100644 index d007118d0a98c07f614ed002bb323e8c59564e78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1473 zcmV;y1wQ(TP)H2!jX$j0}wJ2r;so_&*knY%zio!h!~a zlKz;aJSwSBGI#??IEZXL{3m+!r+$`1d?(QuLJK2NN1rNz(N6`oe+`e7%RgEsZ}Vr? zfJelS{5Skc4#T@=HA8GP%dd3H2 z^Vek0w`BLXWZh?}@vq)$^2nNZtVSsClBigcDQJM#k)T3dvL2B2Hw^WMJhk$}TD`}$ zZ$p|1Aj&iv*$E?4vF1G|l2LC&w|#qk`=`rBzdF3#)1x~*w|VwgiDT8m+rNx0d4mjn z=5mdK^&eVepH=%jAq{^`T=9#3tl2}?2fY}b^fsCQIqC6m??O6YAdE7M4k5^ys7C=u zhP@uy`PJs>Z+`g-Dw0Ht<^dx-YG_qT|8)NJhWLdkH;%Rm@2`~H{4H7e30eIE+24v> zo|L#gDtYt=viPH2H6Hpg$TI;IK#>Y)3R%u6ig^K#jOq!=Y!kil~r z6|Z9}gjp5z#DVm{=dNu3k)$qe*ti4v?{VFg?Q(fp9=`a>$IV){TeEIj`uYrVu|1jh z;iWbOi64cTvPbkVZc3nJ)i4bNtiNzGfkwr*fQd0@;*e+zdr(UCd+f%p-;y^EkTlu1 z@6ac&zFDeFjX}eP?AkSpT%SPBHYW=|I@2U?%IjSFN2OD}-z492J-yy6T@P6%`WtHo z&?Q{m=4$XENv;2YxaW5*J?r&b$2+FuH`9a^$4jZm8WI^v4%Hx&UprD0jeLpwRb{Y8 zWbb2s`{a?xoDWlPdusU^27*wguW?%p5aM+BgsgOZ);QkqVY1}M)Wxxp#PKAFrV@L| zm9dHa^{>tR=vtSD*M1}Re3W@#;54^*ms@sGT0oE(ew00L&cP7F!tQYu2XcX)@*|vfzvOl(%jS zeDO%5q9xx+y`H5@S^j4!iuJM&-AkVhy5kM>@T?D4^!c#iw~u}QO5RVe6}0^Q>Fpyv z3r~1G`3t>A$by`xm?nZS!)OEx46{y%um6ZpDUbV7r=Ml~z)MjcHp?$$^Ae+~x}j5s z_L7f1q}@lp_NRM17@z#sm8lGK}N_eNiIlaGAl{haXASqF@J+jw#mhG#Vu zS=OCZr2alA*gL3HiB?JXAT4uZ+j{u7}nsE=!VRO|!-Si9Z(v05VOR z?$eZPMYf|~Rb*X*=ASOS%%gAP3j+YQEIXoqusXkS2koF8w1alg4%$IGXb0_}9khdX b&<^?!mHCyHyg}+O00000NkvXXu0mjfzS872 diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/76.png b/Sora/Assets.xcassets/AppIcon.appiconset/76.png deleted file mode 100644 index 6648094d7ce1330eea5e056d2badb1a70bbfa5d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2050 zcmV+d2>thoP)A~8&8Pq>^epPji zYuB!Y$9o9=ZwZkhGDL>R5E&vvWQYurAu>dU$PgJKLu7~yks&ffhDh!IxjFHV9!dc9 zctSD&L0|&~3S~t`2qvnClBg=$$25`vBtc%Wn9YwA<&Aof(4|zc5YPZOM|9ISS)8OH zl~SPoh87<>1aSH0kG4zokqp2lVy=9l$~|inY(BCf-cgS+6O@#eV~rOc=*wR;Mc0Yg zY}8~rMwQen)<4EcKn}w!S35_paqFUb zoOA<}0^gCMEaH}<56n&8Id@&3bH$S0$s##J7a9^GfRX}`%ZQK-iYJ+9HdMldC`w>TA*I zlHa{J-ka~5at{?@UJxg0is8l-ZfM1hj+#VUL$uz&cvO!e-f-``e-Gbe^^GV+wU7wF z8AeL{cblvYZ#r|Su_n2~y{*gs;m>9U`>k>*AVv+z`cuz4^%XDQ)mAfCTI`lVUIo5k zb2H~s){(Zabjg}y(AElx^#OBTF(#d@=%LY zd;^Og2~^L$QCR$KbZVe?Kk47n67CWVwI2@K#s8k`P?^N(vshGY_h}s z#m$KizVjk2g5$QPq(V>tAORyfTaB4$%j%z9b<4`Or25nSB81ILx3ly$+R)wE+vYC5 zHuJ6C@?FA=*BW&iL(+&5RHfn}08gW2-o5B#-t?w(sVVQIp8ND?d?!7A|BzP~C9zz0 zA_5~)fD);(Fm=JRpa0Dt{6I=z1d11ZryHzW&AGc(&&bd%ncv)2{MlsChk7J#HfTh| zfDWfR?IZ#yhJh_Vl_<8q;Os&yo7nuKD{fqw9=>CNr3@4bkQgB%=YdtU0^f_(B~RM@ z%x6CR*-E7!*9*xvDvUVawI?Su2Iz1i)UxJiBaPCn@Y$Tlx!~757#$LO7&YcwC@TR_*i*Awc zZK!LAn~fT2%eD%yYTY^nAOxQ%&!M^KeXP!T?khJJ&r3vGjx*Q2M<@-HTEFF}Gtb|) z?$m8(oO<-}$F{6!DFg3^`5(Z|hrHf}vCi_neeO+@?(^Pq`pK&tH9h0R&AJ++37Pm8 zcHRG`;#uZ7NRF>o`re*;@xo)Z4g1P{UAo0A@O2Xspzm z9qG1j>G!Uk5jT}cuff&r(O-V@%(|hj`kxNIvoH45RDBDQK&)m5oguhLwkMAW%FpV6 z{inxPot5;DJjP3%Q`@*5%@(Dk@TY}41m$j#?F+_+qO+O&K&hw4xqZ~Xeo=M#l+`rF z^wuP{@bbYkH>@;yZfdbKk9Qb)1W{Fl)j?wAlH;_|vtPbO9=xD6aaOCp=~%aUw-!5^ z5CV4y3cq94pq3e9Q}c!49L@x2)_(G``8($9yJaj3CTbXss|HX_hKvX9y3MIqJ#~G4 zps#+ocy)$#Ht9_YBtmtN2p|x>0A3v}zV4}spk8&hEt3&IiV{ z&n9Zym;oAtY9RpuxOxRyYumslw&ckMQHCZWSIQ0em#p%0 zjuzHQ5x!}4!@89sTH^>Lgcu1?C=`aq;)8RsTlr_E*oPZy5}M9*9TBUC1dvK)eId%8 z6kH$zL&nI^$Yf|BY7f@<2#8R*=Luf)gI6!vZ*2-%HYsnF;V0uNW`a^^Igv$MALnBO z_z}6)%D_t&b4R7#-~LdxaN^s-4U!yXjEAMXbxCFeXX_*&b4h8J8I;cMeE zZYoe8jxa)fu<4Bqi7=QUn(<5q!4Q*)e;Msv`m?M=vNyNH6&ncx#RZOo{~HaU`!F| z0J>7k^D?TU!b%=Llgkfc9wK45Ob{YNWQYurAu>dU$PgJKLu7~yks&ffhR6^ZB12?| g43Qx+L{>k40JS%_3M};7`v3p{07*qoM6N<$f^)Fwod5s; diff --git a/Sora/Assets.xcassets/AppIcon.appiconset/80-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/80-1.png deleted file mode 100644 index b0483790844c1d85fe48210db44109d8ff146bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2197 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 diff --git a/Sora/ContentView.swift b/Sora/ContentView.swift deleted file mode 100644 index 58a8a13..0000000 --- a/Sora/ContentView.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// ContentView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -struct ContentView: View { - @EnvironmentObject var modulesManager: ModulesManager - - var body: some View { - TabView { - HomeView() - .tabItem { - Label("Home", systemImage: "house") - } - LibraryView() - .tabItem { - Label("Library", systemImage: "books.vertical") - } - SearchView() - .tabItem { - Label("Search", systemImage: "magnifyingglass") - } - SettingsView() - .tabItem { - Label("Settings", systemImage: "gearshape") - } - } - .onAppear { - checkForUpdate() - Logger.shared.log("Started Sora") - } - } - - func checkForUpdate() { - fetchLatestRelease { release in - guard let release = release else { return } - - let latestVersion = release.tagName - let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.1.1" - - if latestVersion.compare(currentVersion, options: .numeric) == .orderedDescending { - DispatchQueue.main.async { - showUpdateAlert(release: release) - } - } - } - } - - func fetchLatestRelease(completion: @escaping (GitHubRelease?) -> Void) { - let url = URL(string: "https://api.github.com/repos/cranci1/Sora/releases/latest")! - - URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { - completion(nil) - return - } - - let release = try? JSONDecoder().decode(GitHubRelease.self, from: data) - completion(release) - }.resume() - } - - func showUpdateAlert(release: GitHubRelease) { - let alert = UIAlertController(title: "Update Available", message: "A new version (\(release.tagName)) is available. Would you like to update Sora?", preferredStyle: .alert) - - alert.addAction(UIAlertAction(title: "Update", style: .default, handler: { _ in - self.showInstallOptionsAlert(release: release) - })) - - alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) - - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootViewController = windowScene.windows.first?.rootViewController { - rootViewController.present(alert, animated: true, completion: nil) - } - } - - func showInstallOptionsAlert(release: GitHubRelease) { - let installAlert = UIAlertController(title: "Install Update", message: "Choose an installation method:", preferredStyle: .alert) - - let downloadUrl = release.assets.first?.browserDownloadUrl ?? "" - - installAlert.addAction(UIAlertAction(title: "Install in AltStore", style: .default, handler: { _ in - if let url = URL(string: "altstore://install?url=\(downloadUrl)") { - UIApplication.shared.open(url) - } - })) - - installAlert.addAction(UIAlertAction(title: "Install in Sidestore", style: .default, handler: { _ in - if let url = URL(string: "sidestore://install?url=\(downloadUrl)") { - UIApplication.shared.open(url) - } - })) - - installAlert.addAction(UIAlertAction(title: "Open in Safari", style: .default, handler: { _ in - if let url = URL(string: downloadUrl) { - UIApplication.shared.open(url) - } - })) - - installAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) - - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootViewController = windowScene.windows.first?.rootViewController { - rootViewController.present(installAlert, animated: true, completion: nil) - } - } -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} diff --git a/Sora/Info.plist b/Sora/Info.plist deleted file mode 100644 index 305d2ec..0000000 --- a/Sora/Info.plist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLName - me.cranci.scheme - CFBundleURLSchemes - - ryu - - - - UIBackgroundModes - - audio - - - diff --git a/Sora/SoraApp.swift b/Sora/SoraApp.swift deleted file mode 100644 index bc0e9e6..0000000 --- a/Sora/SoraApp.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// SoraApp.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -@main -struct SoraApp: App { - @StateObject private var settings = Settings() - @StateObject private var modulesManager = ModulesManager() - - var body: some Scene { - WindowGroup { - ContentView() - .environmentObject(settings) - .environmentObject(modulesManager) - .accentColor(settings.accentColor) - .onAppear { - settings.updateAppearance() - } - .onOpenURL { url in - handleURL(url) - } - } - } - - private func handleURL(_ url: URL) { - guard url.scheme == "sora", - url.host == "module", - let components = URLComponents(url: url, resolvingAgainstBaseURL: true), - let moduleURL = components.queryItems?.first(where: { $0.name == "url" })?.value else { - return - } - - modulesManager.addModule(from: moduleURL) { result in - switch result { - case .success: - NotificationCenter.default.post(name: .moduleAdded, object: nil) - Logger.shared.log("Successfully added module from URL scheme: \(moduleURL)") - case .failure(let error): - Logger.shared.log("Failed to add module from URL scheme: \(error.localizedDescription)") - } - } - } -} diff --git a/Sora/Utils/CustomPlayer/Components/Double+Extension.swift b/Sora/Utils/CustomPlayer/Components/Double+Extension.swift deleted file mode 100644 index 801cc7b..0000000 --- a/Sora/Utils/CustomPlayer/Components/Double+Extension.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// Double+Extension.swift -// AppleMusicSlider -// -// Created by Pratik on 14/01/23. -// -// Thanks to pratikg29 for this code inside his open source project "https://github.com/pratikg29/Custom-Slider-Control?ref=iosexample.com" -// - -import Foundation - -extension Double { - func asTimeString(style: DateComponentsFormatter.UnitsStyle) -> String { - let formatter = DateComponentsFormatter() - formatter.allowedUnits = [.minute, .second] - formatter.unitsStyle = style - formatter.zeroFormattingBehavior = .pad - return formatter.string(from: self) ?? "" - } -} - -extension BinaryFloatingPoint { - func asTimeString(style: DateComponentsFormatter.UnitsStyle) -> String { - let formatter = DateComponentsFormatter() - formatter.allowedUnits = [.minute, .second] - formatter.unitsStyle = style - formatter.zeroFormattingBehavior = .pad - return formatter.string(from: TimeInterval(self)) ?? "" - } -} diff --git a/Sora/Utils/CustomPlayer/Components/MusicProgressSlider.swift b/Sora/Utils/CustomPlayer/Components/MusicProgressSlider.swift deleted file mode 100644 index 8bbb950..0000000 --- a/Sora/Utils/CustomPlayer/Components/MusicProgressSlider.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// MusicProgressSlider.swift -// Custom Seekbar -// -// Created by Pratik on 08/01/23. -// -// Thanks to pratikg29 for this code inside his open source project "https://github.com/pratikg29/Custom-Slider-Control?ref=iosexample.com" -// I did edit just a little bit the code for my liking -// - -import SwiftUI - -struct MusicProgressSlider: View { - @Binding var value: T - let inRange: ClosedRange - let activeFillColor: Color - let fillColor: Color - let emptyColor: Color - let height: CGFloat - let onEditingChanged: (Bool) -> Void - - @State private var localRealProgress: T = 0 - @State private var localTempProgress: T = 0 - @GestureState private var isActive: Bool = false - - var body: some View { - GeometryReader { bounds in - ZStack { - VStack { - ZStack(alignment: .center) { - Capsule() - .fill(emptyColor) - Capsule() - .fill(isActive ? activeFillColor : fillColor) - .mask({ - HStack { - Rectangle() - .frame(width: max(bounds.size.width * CGFloat((localRealProgress + localTempProgress)), 0), alignment: .leading) - Spacer(minLength: 0) - } - }) - } - - HStack { - Text(value.asTimeString(style: .positional)) - Spacer(minLength: 0) - Text("-" + (inRange.upperBound - value).asTimeString(style: .positional)) - } - .font(.system(size: 12)) - .foregroundColor(isActive ? fillColor : emptyColor) - } - .frame(width: isActive ? bounds.size.width * 1.04 : bounds.size.width, alignment: .center) - .animation(animation, value: isActive) - } - .frame(width: bounds.size.width, height: bounds.size.height, alignment: .center) - .contentShape(Rectangle()) - .gesture(DragGesture(minimumDistance: 0, coordinateSpace: .local) - .updating($isActive) { _, state, _ in - state = true - } - .onChanged { gesture in - localTempProgress = T(gesture.translation.width / bounds.size.width) - value = max(min(getPrgValue(), inRange.upperBound), inRange.lowerBound) - }.onEnded { _ in - localRealProgress = max(min(localRealProgress + localTempProgress, 1), 0) - localTempProgress = 0 - }) - .onChange(of: isActive) { newValue in - value = max(min(getPrgValue(), inRange.upperBound), inRange.lowerBound) - onEditingChanged(newValue) - } - .onAppear { - localRealProgress = getPrgPercentage(value) - } - .onChange(of: value) { newValue in - if !isActive { - localRealProgress = getPrgPercentage(newValue) - } - } - } - .frame(height: isActive ? height * 1.25 : height, alignment: .center) - } - - private var animation: Animation { - if isActive { - return .spring() - } else { - return .spring(response: 0.5, dampingFraction: 0.5, blendDuration: 0.6) - } - } - - private func getPrgPercentage(_ value: T) -> T { - let range = inRange.upperBound - inRange.lowerBound - let correctedStartValue = value - inRange.lowerBound - let percentage = correctedStartValue / range - return percentage - } - - private func getPrgValue() -> T { - return ((localRealProgress + localTempProgress) * (inRange.upperBound - inRange.lowerBound)) + inRange.lowerBound - } -} diff --git a/Sora/Utils/CustomPlayer/CustomPlayer.swift b/Sora/Utils/CustomPlayer/CustomPlayer.swift deleted file mode 100644 index 8748230..0000000 --- a/Sora/Utils/CustomPlayer/CustomPlayer.swift +++ /dev/null @@ -1,271 +0,0 @@ -// -// ContentView.swift -// test2 -// -// Created by Francesco on 20/12/24. -// - -import SwiftUI -import AVKit - -struct CustomVideoPlayer: UIViewControllerRepresentable { - let player: AVPlayer - - func makeUIViewController(context: Context) -> AVPlayerViewController { - let controller = NormalPlayer() - controller.player = player - controller.showsPlaybackControls = false - player.play() - return controller - } - - func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) { - // yes? Like the plural of the famous american rapper ye? -IBHRAD - } -} - -struct CustomMediaPlayer: View { - @State private var player: AVPlayer - @State private var isPlaying = true - @State private var currentTime: Double = 0.0 - @State private var duration: Double = 0.0 - @State private var showControls = false - @State private var inactivityTimer: Timer? - @State private var timeObserverToken: Any? - @Environment(\.presentationMode) var presentationMode - - let module: ModuleStruct - let fullUrl: String - let title: String - let episodeNumber: Int - let onWatchNext: () -> Void - - init(module: ModuleStruct, urlString: String, fullUrl: String, title: String, episodeNumber: Int, onWatchNext: @escaping () -> Void) { - guard let url = URL(string: urlString) else { - fatalError("Invalid URL string") - } - - var request = URLRequest(url: url) - if urlString.contains("ascdn") { - request.addValue("\(module.module[0].details.baseURL)", forHTTPHeaderField: "Referer") - } - - let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": request.allHTTPHeaderFields ?? [:]]) - _player = State(initialValue: AVPlayer(playerItem: AVPlayerItem(asset: asset))) - - self.module = module - self.fullUrl = fullUrl - self.title = title - self.episodeNumber = episodeNumber - self.onWatchNext = onWatchNext - - let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(fullUrl)") - if lastPlayedTime > 0 { - let seekTime = CMTime(seconds: lastPlayedTime, preferredTimescale: 1) - self._player.wrappedValue.seek(to: seekTime) - } - } - - var body: some View { - ZStack { - VStack { - ZStack { - CustomVideoPlayer(player: player) - .onAppear { - player.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: 600), queue: .main) { time in - currentTime = time.seconds - if let itemDuration = player.currentItem?.duration.seconds, itemDuration.isFinite && !itemDuration.isNaN { - duration = itemDuration - } - } - startUpdatingCurrentTime() - addPeriodicTimeObserver(fullURL: fullUrl) - } - .edgesIgnoringSafeArea(.all) - .overlay( - Group { - if showControls { - Color.black.opacity(0.5) - .edgesIgnoringSafeArea(.all) - HStack(spacing: 20) { - Button(action: { - currentTime = max(currentTime - 10, 0) - player.seek(to: CMTime(seconds: currentTime, preferredTimescale: 600)) - }) { - Image(systemName: "gobackward.10") - } - .foregroundColor(.white) - .font(.system(size: 25)) - .contentShape(Rectangle()) - .frame(width: 60, height: 60) - - Button(action: { - if isPlaying { - player.pause() - } else { - player.play() - } - isPlaying.toggle() - }) { - Image(systemName: isPlaying ? "pause.fill" : "play.fill") - } - .foregroundColor(.white) - .font(.system(size: 45)) - .contentShape(Rectangle()) - .frame(width: 80, height: 80) - - Button(action: { - currentTime = min(currentTime + 10, duration) - player.seek(to: CMTime(seconds: currentTime, preferredTimescale: 600)) - }) { - Image(systemName: "goforward.10") - } - .foregroundColor(.white) - .font(.system(size: 25)) - .contentShape(Rectangle()) - .frame(width: 60, height: 60) - } - } - } - .animation(.easeInOut(duration: 0.2), value: showControls), - alignment: .center - ) - .onTapGesture { - withAnimation { - showControls.toggle() - } - } - - VStack { - Spacer() - VStack { - HStack(alignment: .bottom) { - if showControls { - VStack(alignment: .leading) { - Text("Episode \(episodeNumber)") - .font(.subheadline) - .foregroundColor(.gray) - Text(title) - .font(.headline) - .foregroundColor(.white) - } - .padding(.horizontal, 32) - } - Spacer() - if duration - currentTime <= duration * 0.10 && currentTime != duration { - Button(action: { - player.pause() - presentationMode.wrappedValue.dismiss() - onWatchNext() - }) { - HStack { - Image(systemName: "forward.fill") - .foregroundColor(Color.black) - Text("Watch Next") - .font(.headline) - .foregroundColor(Color.black) - } - .padding() - .background(Color.white) - .cornerRadius(32) - } - .padding(.trailing, 10) - } - if showControls { - Menu { - Menu("Playback Speed") { - ForEach([0.5, 1.0, 1.25, 1.5, 1.75, 2.0], id: \.self) { speed in - Button(action: { - player.rate = Float(speed) - if player.timeControlStatus != .playing { - player.pause() - } - }) { - Text("\(speed, specifier: "%.2f")") - } - } - } - } label: { - Image(systemName: "ellipsis.circle") - .foregroundColor(.white) - .font(.system(size: 15)) - } - } - } - .padding(.trailing, 32) - - if showControls { - MusicProgressSlider( - value: $currentTime, - inRange: 0...duration, - activeFillColor: .white, - fillColor: .white.opacity(0.5), - emptyColor: .white.opacity(0.3), - height: 28, - onEditingChanged: { editing in - if !editing { - player.seek(to: CMTime(seconds: currentTime, preferredTimescale: 600)) - } - } - ) - .padding(.horizontal, 32) - .padding(.bottom, 10) - } - } - } - .onAppear { - startUpdatingCurrentTime() - } - .onDisappear { - player.pause() - inactivityTimer?.invalidate() - if let timeObserverToken = timeObserverToken { - player.removeTimeObserver(timeObserverToken) - self.timeObserverToken = nil - } - } - } - } - VStack { - if showControls { - HStack { - Button(action: { - presentationMode.wrappedValue.dismiss() - }) { - Image(systemName: "xmark") - .foregroundColor(.white) - .font(.system(size: 20)) - } - .frame(width: 60, height: 60) - .contentShape(Rectangle()) - .padding() - Spacer() - } - Spacer() - } - } - } - } - - private func startUpdatingCurrentTime() { - Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in - currentTime = player.currentTime().seconds - } - } - - private func addPeriodicTimeObserver(fullURL: String) { - let interval = CMTime(seconds: 1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) - timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in - guard let currentItem = player.currentItem, - currentItem.duration.seconds.isFinite else { - return - } - - let currentTime = time.seconds - let duration = currentItem.duration.seconds - - UserDefaults.standard.set(currentTime, forKey: "lastPlayedTime_\(fullURL)") - UserDefaults.standard.set(duration, forKey: "totalTime_\(fullURL)") - } - } -} diff --git a/Sora/Utils/Extensions/Notification.swift b/Sora/Utils/Extensions/Notification.swift deleted file mode 100644 index 44863ae..0000000 --- a/Sora/Utils/Extensions/Notification.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Notification.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import Foundation - -extension Notification.Name { - static let moduleAdded = Notification.Name("moduleAdded") - static let moduleRemoved = Notification.Name("moduleRemoved") -} diff --git a/Sora/Utils/Extensions/URLSession.swift b/Sora/Utils/Extensions/URLSession.swift deleted file mode 100644 index 0ec1021..0000000 --- a/Sora/Utils/Extensions/URLSession.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// URLSession.swift -// Sora -// -// Created by Francesco on 24/12/24. -// - -import Foundation - -extension URLSession { - static let custom: URLSession = { - let configuration = URLSessionConfiguration.default - configuration.httpAdditionalHeaders = [ - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" - ] - return URLSession(configuration: configuration) - }() -} diff --git a/Sora/Utils/GitHub/GitHubAPI.swift b/Sora/Utils/GitHub/GitHubAPI.swift deleted file mode 100644 index 5dac7b5..0000000 --- a/Sora/Utils/GitHub/GitHubAPI.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// GitHubAPI.swift -// Sora -// -// Created by Francesco on 31/12/24. -// - -import Foundation - -struct GitHubReleases: Codable { - let tagName: String - let body: String - let htmlUrl: String - - enum CodingKeys: String, CodingKey { - case tagName = "tag_name" - case body - case htmlUrl = "html_url" - } -} - -class GitHubAPI { - static let shared = GitHubAPI() - - func fetchReleases(completion: @escaping ([GitHubReleases]?) -> Void) { - let url = URL(string: "https://api.github.com/repos/cranci1/Sora/releases")! - - URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { - completion(nil) - return - } - - let releases = try? JSONDecoder().decode([GitHubReleases].self, from: data) - completion(releases) - }.resume() - } -} diff --git a/Sora/Utils/GitHub/GitHubRelease.swift b/Sora/Utils/GitHub/GitHubRelease.swift deleted file mode 100644 index 4803aa3..0000000 --- a/Sora/Utils/GitHub/GitHubRelease.swift +++ /dev/null @@ -1,124 +0,0 @@ -// -// GitHubRelease.swift -// Sora -// -// Created by Francesco on 29/12/24. -// - -import Foundation - -struct GitHubRelease: Codable { - let url: String - let assetsUrl: String - let uploadUrl: String - let htmlUrl: String - let id: Int - let author: Author - let nodeId: String - let tagName: String - let targetCommitish: String - let name: String - let draft: Bool - let prerelease: Bool - let createdAt: String - let publishedAt: String - let assets: [Asset] - let tarballUrl: String - let zipballUrl: String - let body: String - - enum CodingKeys: String, CodingKey { - case url - case assetsUrl = "assets_url" - case uploadUrl = "upload_url" - case htmlUrl = "html_url" - case id - case author - case nodeId = "node_id" - case tagName = "tag_name" - case targetCommitish = "target_commitish" - case name - case draft - case prerelease - case createdAt = "created_at" - case publishedAt = "published_at" - case assets - case tarballUrl = "tarball_url" - case zipballUrl = "zipball_url" - case body - } - - struct Author: Codable { - let login: String - let id: Int - let nodeId: String - let avatarUrl: String - let gravatarId: String - let url: String - let htmlUrl: String - let followersUrl: String - let followingUrl: String - let gistsUrl: String - let starredUrl: String - let subscriptionsUrl: String - let organizationsUrl: String - let reposUrl: String - let eventsUrl: String - let receivedEventsUrl: String - let type: String - let siteAdmin: Bool - - enum CodingKeys: String, CodingKey { - case login - case id - case nodeId = "node_id" - case avatarUrl = "avatar_url" - case gravatarId = "gravatar_id" - case url - case htmlUrl = "html_url" - case followersUrl = "followers_url" - case followingUrl = "following_url" - case gistsUrl = "gists_url" - case starredUrl = "starred_url" - case subscriptionsUrl = "subscriptions_url" - case organizationsUrl = "organizations_url" - case reposUrl = "repos_url" - case eventsUrl = "events_url" - case receivedEventsUrl = "received_events_url" - case type - case siteAdmin = "site_admin" - } - } - - struct Asset: Codable { - let url: String - let id: Int - let nodeId: String - let name: String - let label: String? - let uploader: Author - let contentType: String - let state: String - let size: Int - let downloadCount: Int - let createdAt: String - let updatedAt: String - let browserDownloadUrl: String - - enum CodingKeys: String, CodingKey { - case url - case id - case nodeId = "node_id" - case name - case label - case uploader - case contentType = "content_type" - case state - case size - case downloadCount = "download_count" - case createdAt = "created_at" - case updatedAt = "updated_at" - case browserDownloadUrl = "browser_download_url" - } - } -} diff --git a/Sora/Utils/History/HistoryManager.swift b/Sora/Utils/History/HistoryManager.swift deleted file mode 100644 index cbc7fe2..0000000 --- a/Sora/Utils/History/HistoryManager.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// HistoryManager.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import Foundation -import Combine - -class HistoryManager: ObservableObject { - @Published var searchHistory: [String] = UserDefaults.standard.stringArray(forKey: "SearchHistory") ?? [] - - private var cancellables = Set() - - init() { - NotificationCenter.default.publisher(for: UserDefaults.didChangeNotification) - .sink { [weak self] _ in - DispatchQueue.main.async { - self?.searchHistory = UserDefaults.standard.stringArray(forKey: "SearchHistory") ?? [] - } - } - .store(in: &cancellables) - } - - func addSearchHistory(_ item: String) { - if !searchHistory.contains(item) { - searchHistory.insert(item, at: 0) - UserDefaults.standard.set(searchHistory, forKey: "SearchHistory") - } - } - - func deleteHistoryItem(at offsets: IndexSet) { - searchHistory.remove(atOffsets: offsets) - UserDefaults.standard.set(searchHistory, forKey: "SearchHistory") - } -} diff --git a/Sora/Utils/Miru/MiruDataStruct.swift b/Sora/Utils/Miru/MiruDataStruct.swift deleted file mode 100644 index c50e75d..0000000 --- a/Sora/Utils/Miru/MiruDataStruct.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// MiruDataStruct.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import Foundation - -struct MiruDataStruct: Codable { - var likes: [Like] - - struct Like: Codable { - let anilistID: Int - var gogoSlug: String - let title: String - let cover: String - - enum CodingKeys: String, CodingKey { - case anilistID = "anilist_id" - case gogoSlug = "gogo_slug" - case title - case cover - } - } -} diff --git a/Sora/Utils/Modules/ModuleStruct.swift b/Sora/Utils/Modules/ModuleStruct.swift deleted file mode 100644 index c8725cc..0000000 --- a/Sora/Utils/Modules/ModuleStruct.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// ModuleStruct.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import Foundation - -struct ModuleStruct: Codable { - let name: String - let version: String - let author: Author - let iconURL: String - let stream: String - let language: String - let extractor: String - let module: [Module] - - struct Author: Codable { - let name: String - let website: String - } - - struct Module: Codable, Hashable { - let search: Search - let featured: Featured - let details: Details - let episodes: Episodes - - struct Search: Codable, Hashable { - let url: String - let parameter: String - let documentSelector: String - let title: String - let image: Image - let href: String - let searchable: Bool? - - struct Image: Codable, Hashable { - let url: String - let attribute: String - } - } - - struct Featured: Codable, Hashable { - let url: String - let documentSelector: String - let title: String - let image: Image - let href: String - - struct Image: Codable, Hashable { - let url: String - let attribute: String - } - } - - struct Details: Codable, Hashable { - let baseURL: String - let pageRedirects: Bool? - let aliases: Aliases - let synopsis: String - let airdate: String - let stars: String - - struct Aliases: Codable, Hashable { - let selector: String - let attribute: String - } - } - - struct Episodes: Codable, Hashable { - let selector: String - let order: String - let pattern: String - let pattern2: String? - } - } -} diff --git a/Sora/Utils/Modules/ModulesManager.swift b/Sora/Utils/Modules/ModulesManager.swift deleted file mode 100644 index 99f9b3e..0000000 --- a/Sora/Utils/Modules/ModulesManager.swift +++ /dev/null @@ -1,155 +0,0 @@ -// -// ModulesManager.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import Foundation - -class ModulesManager: ObservableObject { - @Published var modules: [ModuleStruct] = [] - @Published var isLoading = true - var moduleURLs: [String: String] = [:] - private let modulesFileName = "modules.json" - private let moduleURLsFileName = "moduleURLs.json" - - init() { - loadModules() - } - - func loadModules() { - isLoading = true - loadModuleURLs() - loadModuleData() - isLoading = false - } - - func addModule(from urlString: String, completion: @escaping (Result) -> Void) { - guard let url = URL(string: urlString) else { - completion(.failure(ModuleError.invalidURL)) - return - } - let task = URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { - completion(.failure(error ?? ModuleError.unknown)) - return - } - do { - let module = try JSONDecoder().decode(ModuleStruct.self, from: data) - DispatchQueue.main.async { - if !self.modules.contains(where: { $0.name == module.name }) { - self.modules.append(module) - self.moduleURLs[module.name] = urlString - self.saveModuleData() - self.saveModuleURLs() - NotificationCenter.default.post(name: .moduleAdded, object: nil) - completion(.success(())) - } else { - completion(.failure(ModuleError.duplicateModule)) - } - } - } catch { - completion(.failure(error)) - } - } - task.resume() - } - - func deleteModule(named name: String) { - if let index = modules.firstIndex(where: { $0.name == name }) { - modules.remove(at: index) - moduleURLs.removeValue(forKey: name) - saveModuleData() - saveModuleURLs() - NotificationCenter.default.post(name: .moduleRemoved, object: nil) - } - } - - func refreshModules() { - for (name, urlString) in moduleURLs { - guard let url = URL(string: urlString) else { continue } - let task = URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { return } - do { - let updatedModule = try JSONDecoder().decode(ModuleStruct.self, from: data) - DispatchQueue.main.async { - if let index = self.modules.firstIndex(where: { $0.name == name }) { - self.modules[index] = updatedModule - self.saveModuleData() - } - } - } catch { - print("Failed to decode module during refresh: \(error.localizedDescription)") - Logger.shared.log("Failed to decode module during refresh: \(error.localizedDescription)") - } - } - task.resume() - } - } - - private func loadModuleURLs() { - let fileURL = getDocumentsDirectory().appendingPathComponent(moduleURLsFileName) - do { - let data = try Data(contentsOf: fileURL) - moduleURLs = try JSONDecoder().decode([String: String].self, from: data) - } catch { - print("Failed to load module URLs: \(error.localizedDescription)") - Logger.shared.log("Failed to load module URLs: \(error.localizedDescription)") - } - } - - private func loadModuleData() { - let fileURL = getDocumentsDirectory().appendingPathComponent(modulesFileName) - do { - let data = try Data(contentsOf: fileURL) - modules = try JSONDecoder().decode([ModuleStruct].self, from: data) - } catch { - print("Failed to load modules: \(error.localizedDescription)") - Logger.shared.log("Failed to load modules: \(error.localizedDescription)") - } - } - - func saveModuleData() { - let fileURL = getDocumentsDirectory().appendingPathComponent(modulesFileName) - do { - let data = try JSONEncoder().encode(modules) - try data.write(to: fileURL) - } catch { - print("Failed to save modules: \(error.localizedDescription)") - Logger.shared.log("Failed to save modules: \(error.localizedDescription)") - } - } - - private func saveModuleURLs() { - let fileURL = getDocumentsDirectory().appendingPathComponent(moduleURLsFileName) - do { - let data = try JSONEncoder().encode(moduleURLs) - try data.write(to: fileURL) - } catch { - print("Failed to save module URLs: \(error.localizedDescription)") - Logger.shared.log("Failed to save module URLs: \(error.localizedDescription)") - } - } - - private func getDocumentsDirectory() -> URL { - FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] - } - - enum ModuleError: LocalizedError { - case invalidURL - case duplicateModule - case unknown - - var errorDescription: String? { - switch self { - case .invalidURL: - return "The provided URL is invalid." - case .duplicateModule: - return "This module already exists." - case .unknown: - return "An unknown error occurred." - } - } - } -} diff --git a/Sora/Utils/Player/NormalPlayer.swift b/Sora/Utils/Player/NormalPlayer.swift deleted file mode 100644 index 2c92496..0000000 --- a/Sora/Utils/Player/NormalPlayer.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// NormalPlayer.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import AVKit - -class NormalPlayer: AVPlayerViewController { - private var originalRate: Float = 1.0 - private var holdGesture: UILongPressGestureRecognizer? - - override func viewDidLoad() { - super.viewDidLoad() - setupHoldGesture() - setupAudioSession() - } - - override var supportedInterfaceOrientations: UIInterfaceOrientationMask { - if UserDefaults.standard.bool(forKey: "AlwaysLandscape") { - return .landscape - } else { - return .all - } - } - - override var prefersHomeIndicatorAutoHidden: Bool { - return true - } - - override var prefersStatusBarHidden: Bool { - return true - } - - private func setupHoldGesture() { - holdGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleHoldGesture(_:))) - holdGesture?.minimumPressDuration = 0.5 - if let holdGesture = holdGesture { - view.addGestureRecognizer(holdGesture) - } - } - - @objc private func handleHoldGesture(_ gesture: UILongPressGestureRecognizer) { - switch gesture.state { - case .began: - beginHoldSpeed() - case .ended, .cancelled: - endHoldSpeed() - default: - break - } - } - - private func beginHoldSpeed() { - guard let player = player else { return } - originalRate = player.rate - let holdSpeed = UserDefaults.standard.float(forKey: "holdSpeedPlayer") - player.rate = holdSpeed - } - - private func endHoldSpeed() { - player?.rate = originalRate - } - - func setupAudioSession() { - do { - let audioSession = AVAudioSession.sharedInstance() - try audioSession.setCategory(.playback, mode: .moviePlayback, options: .mixWithOthers) - try audioSession.setActive(true) - - try audioSession.overrideOutputAudioPort(.speaker) - } catch { - print("Failed to set up AVAudioSession: \(error)") - } - } -} diff --git a/Sora/Utils/Player/VideoPlayerView.swift b/Sora/Utils/Player/VideoPlayerView.swift deleted file mode 100644 index 98b388a..0000000 --- a/Sora/Utils/Player/VideoPlayerView.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// VideoPlayerView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import UIKit -import AVKit - -class VideoPlayerViewController: UIViewController { - let module: ModuleStruct - - var player: AVPlayer? - var playerViewController: AVPlayerViewController? - var timeObserverToken: Any? - var streamUrl: String? - var fullUrl: String = "" - - init(module: ModuleStruct) { - self.module = module - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - guard let streamUrl = streamUrl, let url = URL(string: streamUrl) else { - return - } - - var request = URLRequest(url: url) - if streamUrl.contains("ascdn") { - request.addValue("\(module.module[0].details.baseURL)", forHTTPHeaderField: "Referer") - } - - let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": request.allHTTPHeaderFields ?? [:]]) - let playerItem = AVPlayerItem(asset: asset) - - player = AVPlayer(playerItem: playerItem) - playerViewController = NormalPlayer() - playerViewController?.player = player - addPeriodicTimeObserver(fullURL: fullUrl) - - if let playerViewController = playerViewController { - playerViewController.view.frame = self.view.frame - self.view.addSubview(playerViewController.view) - self.addChild(playerViewController) - playerViewController.didMove(toParent: self) - } - - let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(fullUrl)") - if lastPlayedTime > 0 { - let seekTime = CMTime(seconds: lastPlayedTime, preferredTimescale: 1) - self.player?.seek(to: seekTime) { _ in - self.player?.play() - } - } else { - self.player?.play() - } - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - player?.play() - } - - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - player?.pause() - if let timeObserverToken = timeObserverToken { - player?.removeTimeObserver(timeObserverToken) - self.timeObserverToken = nil - } - } - - func addPeriodicTimeObserver(fullURL: String) { - guard let player = self.player else { return } - - let interval = CMTime(seconds: 1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) - timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in - guard let currentItem = player.currentItem, - currentItem.duration.seconds.isFinite else { - return - } - - let currentTime = time.seconds - let duration = currentItem.duration.seconds - - UserDefaults.standard.set(currentTime, forKey: "lastPlayedTime_\(fullURL)") - UserDefaults.standard.set(duration, forKey: "totalTime_\(fullURL)") - } - } -} diff --git a/Sora/Views/HomeView.swift b/Sora/Views/HomeView.swift deleted file mode 100644 index 3af0df8..0000000 --- a/Sora/Views/HomeView.swift +++ /dev/null @@ -1,146 +0,0 @@ -// -// HomeView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import Kingfisher -import SwiftSoup - -struct HomeView: View { - @StateObject private var modulesManager = ModulesManager() - @State private var featuredItems: [String: [ItemResult]] = [:] - @State private var isLoading = true - - var body: some View { - NavigationView { - ScrollView { - VStack(alignment: .leading) { - if isLoading { - ProgressView("Loading Featured Items...") - .padding() - } else { - ForEach(modulesManager.modules, id: \.name) { module in - if let items = featuredItems[module.name], !items.isEmpty { - VStack(alignment: .leading) { - HStack(alignment: .bottom) { - Text("Featured") - .font(.title2) - .bold() - .padding(.leading) - - Text("on \(module.name)") - .font(.system(size: 15)) - .foregroundColor(.secondary) - .bold() - } - - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 20) { - ForEach(items) { item in - NavigationLink(destination: MediaView(module: module, item: item)) { - VStack { - KFImage(URL(string: item.imageUrl)) - .resizable() - .scaledToFill() - .frame(width: 120, height: 180) - .clipped() - .cornerRadius(8) - - Text(item.name) - .font(.caption) - .lineLimit(1) - .foregroundColor(.primary) - } - .frame(width: 120) - .padding(.leading, 5) - } - } - } - .padding(.horizontal) - } - } - .padding(.bottom) - } - } - } - } - .navigationTitle("Home") - } - .onAppear { - if featuredItems.isEmpty { - fetchFeaturedItems() - } - } - } - .navigationViewStyle(StackNavigationViewStyle()) - } - - private func fetchFeaturedItems() { - isLoading = true - let group = DispatchGroup() - - for module in modulesManager.modules { - group.enter() - fetchFeaturedItems(for: module) { items in - DispatchQueue.main.async { - featuredItems[module.name] = items - group.leave() - } - } - } - - group.notify(queue: .main) { - isLoading = false - } - } - - private func fetchFeaturedItems(for module: ModuleStruct, completion: @escaping ([ItemResult]) -> Void) { - let urlString = module.module[0].featured.url - guard let url = URL(string: urlString) else { - completion([]) - return - } - - URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { - completion([]) - return - } - - do { - let html = String(data: data, encoding: .utf8) ?? "" - let document = try SwiftSoup.parse(html) - let elements = try document.select(module.module[0].featured.documentSelector) - - var results: [ItemResult] = [] - for element in elements { - let title = try element.select(module.module[0].featured.title).text() - let href = try element.select(module.module[0].featured.href).attr("href") - var imageURL = try element.select(module.module[0].featured.image.url).attr(module.module[0].featured.image.attribute) - - if imageURL.contains(",") { - imageURL = imageURL.split(separator: ",").map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }.first ?? imageURL - } - - if !imageURL.starts(with: "http") { - imageURL = "\(module.module[0].details.baseURL.hasSuffix("/") ? module.module[0].details.baseURL : "\(module.module[0].details.baseURL)/")\(imageURL.hasPrefix("/") ? String(imageURL.dropFirst()) : imageURL)" - } - - imageURL = imageURL.replacingOccurrences(of: " ", with: "%20") - - let result = ItemResult(name: title, imageUrl: imageURL, href: href) - results.append(result) - } - - completion(results) - } catch { - print("Error parsing HTML: \(error)") - Logger.shared.log("Error parsing HTML: \(error)") - completion([]) - } - }.resume() - } -} diff --git a/Sora/Views/LibraryViews/LibraryManager.swift b/Sora/Views/LibraryViews/LibraryManager.swift deleted file mode 100644 index 4833d69..0000000 --- a/Sora/Views/LibraryViews/LibraryManager.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// LibraryManager.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import Foundation - -class LibraryManager: ObservableObject { - static let shared = LibraryManager() - - @Published var libraryItems: [LibraryItem] = [] - private let userDefaults = UserDefaults.standard - private let libraryKey = "LibraryItems" - - private init() { - loadLibrary() - } - - func loadLibrary() { - if let data = userDefaults.data(forKey: libraryKey), - let decoded = try? JSONDecoder().decode([LibraryItem].self, from: data) { - libraryItems = decoded - } - } - - func saveLibrary() { - if let encoded = try? JSONEncoder().encode(libraryItems) { - userDefaults.set(encoded, forKey: libraryKey) - } - } - - func addToLibrary(_ item: LibraryItem) { - if !libraryItems.contains(where: { $0.id == item.id }) { - libraryItems.append(item) - saveLibrary() - Logger.shared.log("Added to library: \(item.title)") - } - } - - func removeFromLibrary(_ item: LibraryItem) { - libraryItems.removeAll(where: { $0.id == item.id }) - saveLibrary() - Logger.shared.log("Removed from library: \(item.title)") - } - - func importFromMiruData(_ miruData: MiruDataStruct, module: ModuleStruct) { - var newLibraryItems: [LibraryItem] = [] - - for like in miruData.likes { - let libraryItem = LibraryItem( - anilistID: like.anilistID, - title: like.title, - image: like.cover, - url: like.gogoSlug, - module: module, - dateAdded: Date() - ) - newLibraryItems.append(libraryItem) - Logger.shared.log("Importing item: \(libraryItem.title)") - } - - DispatchQueue.main.async { - self.libraryItems.append(contentsOf: newLibraryItems) - self.saveLibrary() - Logger.shared.log("Completed importing \(newLibraryItems.count) items") - } - } -} diff --git a/Sora/Views/LibraryViews/LibraryView.swift b/Sora/Views/LibraryViews/LibraryView.swift deleted file mode 100644 index 168eaff..0000000 --- a/Sora/Views/LibraryViews/LibraryView.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// LibraryView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import Kingfisher -import Foundation - -struct LibraryItem: Identifiable, Codable { - var id = UUID() - let anilistID: Int - let title: String - let image: String - let url: String - let module: ModuleStruct - var dateAdded: Date -} - -struct LibraryView: View { - @StateObject private var libraryManager = LibraryManager.shared - - var body: some View { - NavigationView { - ScrollView { - if libraryManager.libraryItems.isEmpty { - emptyLibraryView - } else { - LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 20) { - ForEach(libraryManager.libraryItems.sorted(by: { $0.dateAdded > $1.dateAdded })) { item in - NavigationLink(destination: MediaView(module: item.module, item: ItemResult(name: item.title, imageUrl: item.image, href: item.url))) { - itemView(item) - } - } - } - .padding() - } - } - .navigationTitle("Library") - } - .navigationViewStyle(StackNavigationViewStyle()) - } - - var emptyLibraryView: some View { - VStack(spacing: 8) { - Image(systemName: "books.vertical") - .font(.system(size: 75)) - .foregroundColor(.secondary) - Text("Your library is empty") - .font(.headline) - .multilineTextAlignment(.center) - Text("Start by adding items you find in the search results or by importing Miru bookmarks from settings!") - .font(.subheadline) - .foregroundColor(.secondary) - .multilineTextAlignment(.center) - } - .frame(maxWidth: .infinity, maxHeight: .infinity) - .position(x: UIScreen.main.bounds.width / 2, y: UIScreen.main.bounds.height / 3) - } - - func itemView(_ item: LibraryItem) -> some View { - VStack() { - ZStack(alignment: .bottomTrailing) { - KFImage(URL(string: item.image)) - .resizable() - .aspectRatio(2/3, contentMode: .fill) - .cornerRadius(10) - .frame(width: 150, height: 225) - - KFImage(URL(string: item.module.iconURL)) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 30, height: 30) - .background(Color.white) - .clipShape(Circle()) - .padding(5) - } - - Text(item.title) - .font(.subheadline) - .foregroundColor(Color.primary) - .padding([.leading, .bottom], 8) - .lineLimit(1) - } - .contextMenu { - Button(role: .destructive) { - libraryManager.removeFromLibrary(item) - } label: { - Label("Remove from Library", systemImage: "trash") - } - } - } -} diff --git a/Sora/Views/MediaViews/EpisodesCell/CircularProgressBar.swift b/Sora/Views/MediaViews/EpisodesCell/CircularProgressBar.swift deleted file mode 100644 index 57cb55b..0000000 --- a/Sora/Views/MediaViews/EpisodesCell/CircularProgressBar.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// CircularProgressBar.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -struct CircularProgressBar: View { - var progress: Double - - var body: some View { - ZStack { - Circle() - .stroke(lineWidth: 5.0) - .opacity(0.3) - .foregroundColor(Color.accentColor) - - Circle() - .trim(from: 0.0, to: CGFloat(min(progress, 1.0))) - .stroke(style: StrokeStyle(lineWidth: 5.0, lineCap: .round, lineJoin: .round)) - .foregroundColor(Color.accentColor) - .rotationEffect(Angle(degrees: 270.0)) - .animation(.linear, value: progress) - - if progress >= 0.90 { - Image(systemName: "checkmark") - .font(.system(size: 12)) - } else { - Text(String(format: "%.0f%%", min(progress, 1.0) * 100.0)) - .font(.system(size: 12)) - } - } - } -} diff --git a/Sora/Views/MediaViews/EpisodesCell/EpisodeCell.swift b/Sora/Views/MediaViews/EpisodesCell/EpisodeCell.swift deleted file mode 100644 index c384f49..0000000 --- a/Sora/Views/MediaViews/EpisodesCell/EpisodeCell.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// EpisodeCell.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import Kingfisher -import SwiftyJSON - -struct EpisodeCell: View { - let episode: String - let episodeID: Int - let imageUrl: String - let progress: Double - let itemID: Int - - @State private var episodeTitle: String = "" - @State private var episodeImageUrl: String = "" - @State private var isLoading: Bool = true - - var body: some View { - HStack { - ZStack { - KFImage(URL(string: episodeImageUrl.isEmpty ? "https://raw.githubusercontent.com/cranci1/Sora/refs/heads/main/assets/banner2.png" : episodeImageUrl)) - .resizable() - .aspectRatio(16/9, contentMode: .fill) - .frame(width: 100, height: 56) - .cornerRadius(8) - - if isLoading { - ProgressView() - .progressViewStyle(CircularProgressViewStyle()) - } - } - - VStack(alignment: .leading) { - Text("Episode \(episodeID + 1)") - .font(.system(size: 15)) - if !episodeTitle.isEmpty { - Text(episodeTitle) - .font(.system(size: 13)) - .foregroundColor(.secondary) - } - } - - Spacer() - - CircularProgressBar(progress: progress) - .frame(width: 40, height: 40) - } - .onAppear { - fetchEpisodeDetails() - } - } - - func fetchEpisodeDetails() { - let cacheKey = "episodeDetails_\(itemID)_\(episodeID)" - - if let cachedData = UserDefaults.standard.data(forKey: cacheKey) { - parseEpisodeDetails(data: cachedData) - return - } - - guard let url = URL(string: "https://api.ani.zip/mappings?anilist_id=\(itemID)") else { - isLoading = false - return - } - - URLSession.custom.dataTask(with: url) { data, _, error in - if let error = error { - print("Failed to fetch episode details: \(error)") - DispatchQueue.main.async { - self.isLoading = false - } - return - } - - guard let data = data else { - print("No data received") - DispatchQueue.main.async { - self.isLoading = false - } - return - } - - UserDefaults.standard.set(data, forKey: cacheKey) - self.parseEpisodeDetails(data: data) - }.resume() - } - - func parseEpisodeDetails(data: Data) { - do { - let json = try JSON(data: data) - guard let episodeDetails = json["episodes"]["\(episodeID + 1)"].dictionary, - let title = episodeDetails["title"]?.dictionary, - let image = episodeDetails["image"]?.string else { - print("Invalid response format") - DispatchQueue.main.async { - self.isLoading = false - } - return - } - - DispatchQueue.main.async { - self.episodeTitle = title["en"]?.string ?? "" - self.episodeImageUrl = image - self.isLoading = false - } - } catch { - print("Failed to parse JSON: \(error)") - DispatchQueue.main.async { - self.isLoading = false - } - } - } -} diff --git a/Sora/Views/MediaViews/MediaExtraction.swift b/Sora/Views/MediaViews/MediaExtraction.swift deleted file mode 100644 index accb81f..0000000 --- a/Sora/Views/MediaViews/MediaExtraction.swift +++ /dev/null @@ -1,403 +0,0 @@ -// -// MediaExtraction.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import SwiftSoup - -extension MediaView { - func fetchItemDetails() { - guard let url = URL(string: item.href.hasPrefix("https") ? item.href : "\(module.module[0].details.baseURL.hasSuffix("/") ? module.module[0].details.baseURL : "\(module.module[0].details.baseURL)/")\(item.href.hasPrefix("/") ? String(item.href.dropFirst()) : item.href)") else { return } - - URLSession.custom.dataTask(with: url) { data, _, error in - defer { isLoading = false } - guard let data = data, error == nil else { return } - - do { - let html = String(data: data, encoding: .utf8) ?? "" - let document = try SwiftSoup.parse(html) - - let details = module.module[0].details - let episodes = module.module[0].episodes - - let aliases = (try? document.select(details.aliases.selector).attr(details.aliases.attribute)) ?? "" - let synopsis = (try? document.select(details.synopsis).text()) ?? "" - let airdate = (try? document.select(details.airdate).text()) ?? "" - let stars = (try? document.select(details.stars).text()) ?? "" - - let episodeElements = try document.select(episodes.selector) - var episodeList = (try? episodeElements.map { try $0.attr("href") }) ?? [] - - if module.module[0].episodes.order == "reversed" { - episodeList.reverse() - } - - DispatchQueue.main.async { - self.aliases = aliases - self.synopsis = synopsis - self.airdate = airdate - self.stars = stars - self.episodes = episodeList - } - } catch { - print("Error parsing HTML: \(error)") - Logger.shared.log("Error parsing HTML: \(error)") - } - }.resume() - } - - func fetchEpisodeStream(urlString: String) { - guard var url = URL(string: urlString.hasPrefix("https") ? urlString : "\(module.module[0].details.baseURL)\(urlString)") else { return } - - Logger.shared.log("Pressed episode button") - - let dispatchGroup = DispatchGroup() - - let pageRedirects = module.module[0].details.pageRedirects ?? false - - - if pageRedirects { - dispatchGroup.enter() // Start tracking the redirect task - URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { - dispatchGroup.leave() // End tracking if there's an error - return - } - - let html = String(data: data, encoding: .utf8) ?? "" - let redirectedUrl = extractFromRedirectURL(from: html) - if let redirect = redirectedUrl, let newURL = URL(string: redirect) { - url = newURL - } - dispatchGroup.leave() // End tracking after successful execution - }.resume() - } - - dispatchGroup.notify(queue: .main) { // This block executes after all tasks - URLSession.custom.dataTask(with: url) { data, _, error in - guard let data = data, error == nil else { return } - - let html = String(data: data, encoding: .utf8) ?? "" - - - let streamType = module.stream - let streamURLs = extractStreamURLs(from: html, streamType: streamType) - - if module.extractor == "dub-sub" { - Logger.shared.log("extracting for dub-sub") - let dubSubURLs = extractDubSubURLs(from: html) - let subURLs = dubSubURLs.filter { $0.type == "SUB" }.map { $0.url } - let dubURLs = dubSubURLs.filter { $0.type == "DUB" }.map { $0.url } - - if !subURLs.isEmpty || !dubURLs.isEmpty { - DispatchQueue.main.async { - self.presentStreamSelection(subURLs: subURLs, dubURLs: dubURLs, fullURL: urlString) - } - } else { - DispatchQueue.main.async { - self.playStream(urlString: streamURLs.first, fullURL: urlString) - } - } - } else if module.extractor == "pattern-mp4" || module.extractor == "pattern-HLS" { - Logger.shared.log("extracting for pattern-mp4/hls") - let patternURL = extractPatternURL(from: html) - guard let patternURL = patternURL else { return } - - URLSession.custom.dataTask(with: patternURL) { data, _, error in - guard let data = data, error == nil else { return } - - let patternHTML = String(data: data, encoding: .utf8) ?? "" - let mp4URLs = extractStreamURLs(from: patternHTML, streamType: streamType).map { $0.replacingOccurrences(of: "amp;", with: "") } - - DispatchQueue.main.async { - self.playStream(urlString: mp4URLs.first, fullURL: urlString) - } - }.resume() - } else if module.extractor == "pattern" { - Logger.shared.log("extracting for pattern") - let patternURL = extractPatternURL(from: html) - - DispatchQueue.main.async { - self.playStream(urlString: patternURL?.absoluteString, fullURL: urlString) - } - } else if module.extractor == "voe" { - Logger.shared.log("extracting for voe") - - let voeUrl = extractVoeStream(from: html) - - DispatchQueue.main.async { - self.playStream(urlString: voeUrl?.absoluteString, fullURL: urlString) - } - - } else { - DispatchQueue.main.async { - self.playStream(urlString: streamURLs.first, fullURL: urlString) - } - } - }.resume() - } - } - - func extractStreamURLs(from html: String, streamType: String) -> [String] { - let pattern: String - switch streamType { - case "HLS": - pattern = #"https:\/\/[^"\s<>]+\.m3u8(?:\?[^\s"'<>]+)?"# - case "MP4": - pattern = #"https:\/\/[^"\s<>]+\.mp4(?:\?[^\s"'<>]+)?"# - default: - return [] - } - - do { - Logger.shared.log(streamType) - let regex = try NSRegularExpression(pattern: pattern, options: []) - let matches = regex.matches(in: html, options: [], range: NSRange(html.startIndex..., in: html)) - return matches.compactMap { - Range($0.range, in: html).map { String(html[$0]) } - } - } catch { - print("Invalid regex: \(error)") - Logger.shared.log("Invalid regex: \(error)") - return [] - } - } - - func extractPatternURL(from html: String) -> URL? { - var pattern = module.module[0].episodes.pattern - - if module.extractor == "pattern" { - if let data = Data(base64Encoded: pattern), let decodedPattern = String(data: data, encoding: .utf8) { - pattern = decodedPattern - } else { - print("Failed to decode base64 pattern") - Logger.shared.log("Failed to decode base64 pattern") - return nil - } - } - - do { - let regex = try NSRegularExpression(pattern: pattern, options: []) - let range = NSRange(html.startIndex.. [(type: String, url: String)] { - let pattern = #""type":"(SUB|DUB)","url":"(.*?\.m3u8)""# - - guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else { - return [] - } - - let range = NSRange(htmlContent.startIndex..., in: htmlContent) - let matches = regex.matches(in: htmlContent, range: range) - - return matches.compactMap { match in - if match.numberOfRanges == 3, - let typeRange = Range(match.range(at: 1), in: htmlContent), - let urlRange = Range(match.range(at: 2), in: htmlContent) { - let type = String(htmlContent[typeRange]) - let urlString = String(htmlContent[urlRange]).replacingOccurrences(of: "\\/", with: "/") - Logger.shared.log(urlString) - return (type, urlString) - } - return nil - } - } - - /// Grabs hls stream from voe sites - func extractVoeStream(from html: String) -> URL? { - - let hlsPattern = "'hls': '(.*?)'" - guard let regex = try? NSRegularExpression(pattern: hlsPattern, options: []) else { return nil } - let range = NSRange(html.startIndex..., in: html) - if let match = regex.firstMatch(in: html, options: [], range: range), - let matchRange = Range(match.range(at: 1), in: html) { - let base64Hls = String(html[matchRange]) - guard let data = Data(base64Encoded: base64Hls), - let decodedURLString = String(data: data, encoding: .utf8) - else { return nil } - return URL(string: decodedURLString) - } - return nil - } - - - func presentStreamSelection(subURLs: [String], dubURLs: [String], fullURL: String) { - let uniqueSubURLs = Array(Set(subURLs)) - let uniqueDubURLs = Array(Set(dubURLs)) - - if uniqueSubURLs.count == 1 && uniqueDubURLs.isEmpty { - self.playStream(urlString: uniqueSubURLs.first, fullURL: fullURL) - return - } - - if uniqueDubURLs.count == 1 && uniqueSubURLs.isEmpty { - self.playStream(urlString: uniqueDubURLs.first, fullURL: fullURL) - return - } - - let alert = UIAlertController(title: "Select Stream", message: "Choose the audio type", preferredStyle: .actionSheet) - - if !uniqueDubURLs.isEmpty { - for dubURL in uniqueDubURLs { - alert.addAction(UIAlertAction(title: "DUB", style: .default) { _ in - self.playStream(urlString: dubURL, fullURL: fullURL) - }) - } - } - - if !uniqueSubURLs.isEmpty { - for subURL in uniqueSubURLs { - alert.addAction(UIAlertAction(title: "SUB", style: .default) { _ in - self.playStream(urlString: subURL, fullURL: fullURL) - }) - } - } - - alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) - - DispatchQueue.main.async { - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootVC = windowScene.windows.first?.rootViewController { - if let popoverController = alert.popoverPresentationController { - popoverController.sourceView = rootVC.view - popoverController.sourceRect = CGRect(x: rootVC.view.bounds.midX, y: rootVC.view.bounds.midY, width: 0, height: 0) - popoverController.permittedArrowDirections = [] - } - rootVC.present(alert, animated: true, completion: nil) - } - } - } - - - /// Extracts the URL from a redirect page - /// Example: href="/redirect/1234567" -> https://baseUrl.com/redirect/1234567 - func extractFromRedirectURL(from html: String) -> String? { - - let pattern = #"href="\/redirect\/\d+""# - - do { - let regex = try NSRegularExpression(pattern: pattern, options: []) - let range = NSRange(html.startIndex.. String? { - let semaphore = DispatchSemaphore(value: 0) // To block the thread until the task completes - var redirectedURLString: String? - - var request = URLRequest(url: url) - request.httpMethod = "HEAD" // Use HEAD to get only headers - - let delegate = RedirectHandler() - let sessionConfig = URLSessionConfiguration.default - let session = URLSession(configuration: sessionConfig, delegate: delegate, delegateQueue: nil) - - session.dataTask(with: request) { _, response, error in - // Extract httpResponse as a standalone variable - guard let httpResponse = response as? HTTPURLResponse else { - Logger.shared.log("Invalid response for URL: \(url)") - semaphore.signal() - return - } - - // Process the httpResponse for redirection logic - if (httpResponse.statusCode == 301 || httpResponse.statusCode == 302), - let location = httpResponse.value(forHTTPHeaderField: "Location"), - let redirectedURL = URL(string: location) { - redirectedURLString = redirectedURL.absoluteString - Logger.shared.log("Redirected URL: \(redirectedURLString ?? "nil")") - } else { - if let error = error { - Logger.shared.log("Error fetching redirected URL: \(error.localizedDescription)") - } else { - Logger.shared.log("No redirection for URL: \(url)") - } - } - semaphore.signal() // Signal the semaphore to resume execution - }.resume() - - semaphore.wait() // Wait for the network task to complete - - if redirectedURLString?.contains("voe.sx") == true { - return voeUrlHandler(url: URL(string: redirectedURLString!)!) - } - else { - return redirectedURLString - } - - } - - /// Voe uses a custom handler to extract the video URL from the page - /// The site uses windows.location.href to redirect to the video page, usally another domain but with the same path - /// The replacement URL is hardcoded right now TODO: Make it dynamic - func voeUrlHandler(url: URL) -> String? { - - let urlString = url.absoluteString - - // Check if the URL is a voe.sx URL - guard urlString.contains("voe.sx") else { - Logger.shared.log("Not a voe.sx URL") - return nil - } - - // Extract the path from the URL and append it to the hardcoded replacement URL - // Example: https://voe.sx/e/1234567 -> /e/1234567 - let hardcodedURL = "https://sandratableother.com" - let finishedUrl = urlString.replacingOccurrences(of: "https://voe.sx", with: hardcodedURL) - - return finishedUrl - } - -} - -/// Custom handler to handle HTTP redirections and prevent them -class RedirectHandler: NSObject, URLSessionDelegate, URLSessionTaskDelegate { - func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping @Sendable (URLRequest?) -> Void - ) { - completionHandler(nil) - } -} diff --git a/Sora/Views/MediaViews/MediaView.swift b/Sora/Views/MediaViews/MediaView.swift deleted file mode 100644 index b53d50f..0000000 --- a/Sora/Views/MediaViews/MediaView.swift +++ /dev/null @@ -1,376 +0,0 @@ -// -// MediaView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import AVKit -import SwiftUI -import Kingfisher -import SwiftyJSON -import SafariServices - -struct MediaView: View { - let module: ModuleStruct - let item: ItemResult - - @State var aliases: String = "" - @State var synopsis: String = "" - @State var airdate: String = "" - @State var stars: String = "" - @State var episodes: [String] = [] - @State var isLoading: Bool = true - @State var showFullSynopsis: Bool = false - @State var itemID: Int? - @State private var selectedEpisode: String = "" - @State private var selectedEpisodeNumber: Int = 0 - @State private var episodeRange: ClosedRange = 0...99 - @State private var selectedRange: String = "1-100" - - @AppStorage("externalPlayer") private var externalPlayer: String = "Default" - @StateObject private var libraryManager = LibraryManager.shared - - var body: some View { - Group { - if isLoading { - ProgressView() - .padding() - } else { - ScrollView { - VStack(alignment: .leading, spacing: 16) { - HStack(alignment: .top, spacing: 10) { - KFImage(URL(string: item.imageUrl)) - .resizable() - .aspectRatio(2/3, contentMode: .fill) - .cornerRadius(10) - .frame(width: 150, height: 225) - - VStack(alignment: .leading, spacing: 4) { - Text(item.name) - .font(.system(size: 17)) - .fontWeight(.bold) - - if !aliases.isEmpty && aliases != item.name { - Text(aliases) - .font(.system(size: 13)) - .foregroundColor(.secondary) - } - - Spacer() - - HStack(alignment: .center, spacing: 12) { - Text(module.name) - .font(.system(size: 13)) - .padding(4) - .background(Capsule().fill(Color.accentColor.opacity(0.4))) - - Button(action: { - }) { - Image(systemName: "ellipsis.circle") - .resizable() - .frame(width: 20, height: 20) - } - - Button(action: { - openSafariViewController(with: "\(module.module[0].details.baseURL)") - }) { - Image(systemName: "safari") - .resizable() - .frame(width: 20, height: 20) - } - } - } - } - - if !synopsis.isEmpty { - VStack(alignment: .leading, spacing: 2) { - HStack(alignment: .center) { - Text("Synopsis") - .font(.system(size: 18)) - .fontWeight(.bold) - - Spacer() - - Button(action: { - showFullSynopsis.toggle() - }) { - Text(showFullSynopsis ? "Less" : "More") - .font(.system(size: 14)) - } - } - - Text(synopsis) - .lineLimit(showFullSynopsis ? nil : 4) - .font(.system(size: 14)) - } - } - - HStack { - Button(action: { - startWatchingFirstUnfinishedEpisode() - }) { - HStack { - Image(systemName: "play.fill") - .foregroundColor(.primary) - Text("Start Watching") - .font(.headline) - .foregroundColor(.primary) - } - .padding() - .frame(maxWidth: .infinity) - .background(Color.accentColor) - .cornerRadius(10) - } - - Button(action: { - if isItemInLibrary() { - removeFromLibrary() - } else { - addToLibrary() - } - }) { - Image(systemName: isItemInLibrary() ? "bookmark.fill" : "bookmark") - .resizable() - .frame(width: 20, height: 27) - } - } - - if !episodes.isEmpty { - VStack(alignment: .leading, spacing: 10) { - HStack { - Text("Episodes") - .font(.system(size: 18)) - .fontWeight(.bold) - - Spacer() - - if episodes.count > 100 { - Menu { - ForEach(0..<(episodes.count / 100) + 1, id: \.self) { index in - let start = index * 100 + 1 - let end = min((index + 1) * 100, episodes.count) - Button(action: { - episodeRange = (start - 1)...(end - 1) - selectedRange = "\(start)-\(end)" - }) { - Text("\(start)-\(end)") - } - } - } label: { - Text(selectedRange) - .font(.system(size: 14)) - } - } - } - - ForEach(episodeRange, id: \.self) { index in - if index < episodes.count { - let episodeURL = episodes[index].hasPrefix("https") ? episodes[index] : "\(module.module[0].details.baseURL)\(episodes[index])" - let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(episodeURL)") - let totalTime = UserDefaults.standard.double(forKey: "totalTime_\(episodeURL)") - let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0 - - EpisodeCell(episode: episodes[index], episodeID: index, imageUrl: item.imageUrl, progress: progress, itemID: itemID ?? 0) - .onTapGesture { - selectedEpisode = episodes[index] - selectedEpisodeNumber = index + 1 - fetchEpisodeStream(urlString: episodeURL) - } - } - } - } - } - } - .padding() - .navigationBarTitleDisplayMode(.inline) - .navigationBarTitle(item.name) - .navigationViewStyle(StackNavigationViewStyle()) - } - } - } - .onAppear { - fetchItemDetails() - fetchItemID(byTitle: item.name) { result in - switch result { - case .success(let id): - itemID = id - Logger.shared.log("Fetched Item ID: \(id)") - case .failure(let error): - print("Failed to fetch Item ID: \(error)") - Logger.shared.log("Failed to fetch Item ID: \(error)") - } - } - } - } - - func isItemInLibrary() -> Bool { - return libraryManager.libraryItems.contains(where: { $0.url == item.href }) - } - - func addToLibrary() { - let libraryItem = LibraryItem( - anilistID: itemID ?? 0, - title: item.name, - image: item.imageUrl, - url: item.href, - module: module, - dateAdded: Date() - ) - libraryManager.addToLibrary(libraryItem) - } - - func removeFromLibrary() { - if let libraryItem = libraryManager.libraryItems.first(where: { $0.url == item.href }) { - libraryManager.removeFromLibrary(libraryItem) - } - } - - private func startWatchingFirstUnfinishedEpisode() { - for (index, episode) in episodes.enumerated() { - let episodeURL = episode.hasPrefix("https") ? episode : "\(module.module[0].details.baseURL)\(episode)" - let totalTime = UserDefaults.standard.double(forKey: "totalTime_\(episodeURL)") - let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(episodeURL)") - let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0 - - if progress < 0.90 { - selectedEpisode = episode - selectedEpisodeNumber = index + 1 - fetchEpisodeStream(urlString: episodeURL) - break - } - } - } - - func playStream(urlString: String?, fullURL: String) { - guard let streamUrl = urlString else { return } - - if externalPlayer == "Infuse" || externalPlayer == "VLC" || externalPlayer == "OutPlayer" || externalPlayer == "nPlayer" { - var scheme: String - switch externalPlayer { - case "Infuse": - scheme = "infuse://x-callback-url/play?url=" - case "VLC": - scheme = "vlc://" - case "OutPlayer": - scheme = "outplayer://" - case "nPlayer": - scheme = "nplayer-" - default: - scheme = "" - } - openInExternalPlayer(scheme: scheme, url: streamUrl) - Logger.shared.log("Opening external app with scheme: \(scheme)") - return - } else if externalPlayer == "Sora" { - DispatchQueue.main.async { - let customMediaPlayer = CustomMediaPlayer( - module: module, - urlString: streamUrl, - fullUrl: fullURL, - title: item.name, - episodeNumber: selectedEpisodeNumber, - onWatchNext: { - selectNextEpisode() - } - ) - let hostingController = UIHostingController(rootView: customMediaPlayer) - hostingController.modalPresentationStyle = .fullScreen - Logger.shared.log("Opening custom media player with url: \(streamUrl)") - - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootVC = windowScene.windows.first?.rootViewController { - rootVC.present(hostingController, animated: true, completion: nil) - } - } - return - } - - DispatchQueue.main.async { - let videoPlayerViewController = VideoPlayerViewController(module: module) - videoPlayerViewController.streamUrl = streamUrl - videoPlayerViewController.fullUrl = fullURL - videoPlayerViewController.modalPresentationStyle = .fullScreen - Logger.shared.log("Opening video player with url: \(streamUrl)") - - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootVC = windowScene.windows.first?.rootViewController { - rootVC.present(videoPlayerViewController, animated: true, completion: nil) - } - } - } - - private func selectNextEpisode() { - guard let currentEpisodeIndex = episodes.firstIndex(of: selectedEpisode) else { return } - let nextEpisodeIndex = currentEpisodeIndex + 1 - if nextEpisodeIndex < episodes.count { - selectedEpisode = episodes[nextEpisodeIndex] - selectedEpisodeNumber = nextEpisodeIndex + 1 - let nextEpisodeURL = "\(module.module[0].details.baseURL)\(episodes[nextEpisodeIndex])" - fetchEpisodeStream(urlString: nextEpisodeURL) - } - } - - private func openSafariViewController(with urlString: String) { - guard let url = URL(string: item.href.hasPrefix("https") ? item.href : "\(module.module[0].details.baseURL.hasSuffix("/") ? module.module[0].details.baseURL : "\(module.module[0].details.baseURL)/")\(item.href.hasPrefix("/") ? String(item.href.dropFirst()) : item.href)") else { - Logger.shared.log("Unable to open the webpage") - return - } - let safariViewController = SFSafariViewController(url: url) - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootVC = windowScene.windows.first?.rootViewController { - rootVC.present(safariViewController, animated: true, completion: nil) - } - } - - private func openInExternalPlayer(scheme: String, url: String) { - guard let streamUrl = URL(string: "\(scheme)\(url)") else { - Logger.shared.log("Unable to open the stream: '\(scheme)\(url)'") - return - } - UIApplication.shared.open(streamUrl, options: [:], completionHandler: nil) - Logger.shared.log("Unable to open the stream: 'streamUrl'") - } - - func fetchItemID(byTitle title: String, completion: @escaping (Result) -> Void) { - let query = """ - query { - Media(search: "\(title)", type: ANIME) { - id - } - } - """ - - guard let url = URL(string: "https://graphql.anilist.co") else { - completion(.failure(NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Invalid URL"]))) - return - } - - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - - let parameters: [String: Any] = ["query": query] - request.httpBody = try? JSONSerialization.data(withJSONObject: parameters) - - URLSession.custom.dataTask(with: request) { data, _, error in - if let error = error { - completion(.failure(error)) - return - } - - guard let data = data else { - completion(.failure(NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "No data received"]))) - return - } - - let json = JSON(data) - if let id = json["data"]["Media"]["id"].int { - completion(.success(id)) - } else { - let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Invalid response"]) - completion(.failure(error)) - } - }.resume() - } -} diff --git a/Sora/Views/SearchViews/SearchResultsView.swift b/Sora/Views/SearchViews/SearchResultsView.swift deleted file mode 100644 index 0ce4eef..0000000 --- a/Sora/Views/SearchViews/SearchResultsView.swift +++ /dev/null @@ -1,236 +0,0 @@ -// -// SearchResultsView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import SwiftSoup -import Kingfisher - -struct SearchResultsView: View { - let module: ModuleStruct? - let searchText: String - @State private var searchResults: [ItemResult] = [] - @State private var isLoading: Bool = true - @State private var filter: FilterType = .all - @AppStorage("listSearch") private var isListSearchEnabled: Bool = false - - enum FilterType: String, CaseIterable { - case all = "All" - case dub = "Dub" - case sub = "Sub" - case ova = "OVA" - case ona = "ONA" - case movie = "Movie" - } - - var body: some View { - if isListSearchEnabled { - oldUI - } else { - modernUI - } - } - - var modernUI: some View { - VStack { - if isLoading { - ProgressView() - .padding() - } else if searchResults.isEmpty { - Text("No results found") - .foregroundColor(.secondary) - .padding() - } else { - ScrollView { - LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 20) { - ForEach(filteredResults) { result in - NavigationLink(destination: MediaView(module: module!, item: result)) { - VStack { - KFImage(URL(string: result.imageUrl)) - .resizable() - .aspectRatio(2/3, contentMode: .fill) - .cornerRadius(10) - .frame(width: 150, height: 225) - - Text(result.name) - .font(.subheadline) - .foregroundColor(Color.primary) - .padding([.leading, .bottom], 8) - .lineLimit(1) - } - } - } - } - .padding() - } - .navigationViewStyle(StackNavigationViewStyle()) - .navigationTitle("Results") - .toolbar { - filterMenu - } - } - } - .onAppear { - performSearch() - } - } - - var oldUI: some View { - VStack { - if isLoading { - ProgressView() - .padding() - } else if searchResults.isEmpty { - Text("No results found") - .foregroundColor(.secondary) - .padding() - } else { - List { - ForEach(filteredResults) { result in - NavigationLink(destination: MediaView(module: module!, item: result)) { - HStack { - KFImage(URL(string: result.imageUrl)) - .resizable() - .scaledToFill() - .frame(width: 100, height: 150) - .clipped() - - VStack(alignment: .leading) { - Text(result.name) - .font(.system(size: 16)) - .padding(.leading, 10) - } - } - .padding(.vertical, 5) - } - } - } - .navigationTitle("Results") - .toolbar { - filterMenu - } - } - } - .navigationViewStyle(StackNavigationViewStyle()) - .onAppear { - performSearch() - } - } - - var filterMenu: some View { - Menu { - ForEach([FilterType.all], id: \.self) { filter in - Button(action: { - self.filter = filter - performSearch() - }) { - Label(filter.rawValue, systemImage: self.filter == filter ? "checkmark" : "") - } - } - Menu("Audio") { - ForEach([FilterType.dub, FilterType.sub], id: \.self) { filter in - Button(action: { - self.filter = filter - performSearch() - }) { - Label(filter.rawValue, systemImage: self.filter == filter ? "checkmark" : "") - } - } - } - Menu("Format") { - ForEach([FilterType.ova, FilterType.ona, FilterType.movie], id: \.self) { filter in - Button(action: { - self.filter = filter - performSearch() - }) { - Label(filter.rawValue, systemImage: self.filter == filter ? "checkmark" : "") - } - } - } - } label: { - Label("Filter", systemImage: filter == .all ? "line.horizontal.3.decrease.circle" : "line.horizontal.3.decrease.circle.fill") - } - } - - var filteredResults: [ItemResult] { - switch filter { - case .all: - return searchResults - case .dub: - return searchResults.filter { $0.name.contains("Dub") || $0.name.contains("ITA") } - case .sub: - return searchResults.filter { !$0.name.contains("Dub") && !$0.name.contains("ITA") } - case .ova, .ona: - return searchResults.filter { $0.name.contains(filter.rawValue) } - case .movie: - return searchResults.filter { $0.name.contains("Movie") || $0.name.contains("Film") } - } - } - - func performSearch() { - guard let module = module, !searchText.isEmpty else { return } - - let encodedSearchText = searchText.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? searchText - let parameter = module.module[0].search.parameter - let urlString: String - - if parameter == "blank" { - urlString = "\(module.module[0].search.url)\(encodedSearchText)" - } else { - urlString = "\(module.module[0].search.url)?\(parameter)=\(encodedSearchText)" - } - - guard let url = URL(string: urlString) else { return } - - URLSession.custom.dataTask(with: url) { data, _, error in - defer { isLoading = false } - guard let data = data, error == nil else { return } - - do { - let html = String(data: data, encoding: .utf8) ?? "" - let document = try SwiftSoup.parse(html) - let elements = try document.select(module.module[0].search.documentSelector) - - var results: [ItemResult] = [] - for element in elements { - let title = try element.select(module.module[0].search.title).text() - let href = try element.select(module.module[0].search.href).attr("href") - var imageURL = try element.select(module.module[0].search.image.url).attr(module.module[0].search.image.attribute) - - if imageURL.contains(",") { - imageURL = imageURL.split(separator: ",").map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }.first ?? imageURL - } - - if !imageURL.starts(with: "http") { - imageURL = "\(module.module[0].details.baseURL.hasSuffix("/") ? module.module[0].details.baseURL : "\(module.module[0].details.baseURL)/")\(imageURL.hasPrefix("/") ? String(imageURL.dropFirst()) : imageURL)" - } - - imageURL = imageURL.replacingOccurrences(of: " ", with: "%20") - - // If imageURL is not available or is the same as the baseURL, use a default image - if imageURL.isEmpty || imageURL == module.module[0].details.baseURL + "/" { - imageURL = "https://s4.anilist.co/file/anilistcdn/character/large/default.jpg" - } - - let result = ItemResult(name: title, imageUrl: imageURL, href: href) - results.append(result) - } - - // Filter out non-searchable modules - if module.module[0].search.searchable == false { - results = results.filter { $0.name.lowercased().contains(searchText.lowercased()) } - } - - DispatchQueue.main.async { - self.searchResults = results - } - } catch { - print("Error parsing HTML: \(error)") - Logger.shared.log("Error parsing HTML: \(error)") - } - }.resume() - } -} diff --git a/Sora/Views/SearchViews/SearchView.swift b/Sora/Views/SearchViews/SearchView.swift deleted file mode 100644 index 441e655..0000000 --- a/Sora/Views/SearchViews/SearchView.swift +++ /dev/null @@ -1,149 +0,0 @@ -// -// SearchView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -struct ItemResult: Identifiable { - let id = UUID() - let name: String - let imageUrl: String - let href: String -} - -struct SearchView: View { - @State private var searchText: String = "" - @State private var searchResults: [ItemResult] = [] - @State private var navigateToResults: Bool = false - @State private var selectedModule: ModuleStruct? - @State private var showAlert = false - @StateObject private var modulesManager = ModulesManager() - @ObservedObject private var searchHistoryManager = HistoryManager() - - var body: some View { - NavigationView { - VStack { - HStack { - Menu { - ForEach(modulesManager.modules, id: \.name) { module in - Button(action: { - selectedModule = module - }) { - Text(module.name) - } - } - } label: { - Label(selectedModule?.name ?? "Select Module", systemImage: "chevron.down") - } - - Spacer() - - SearchBar(text: $searchText, onSearchButtonClicked: { - if let _ = selectedModule, !searchText.isEmpty { - searchHistoryManager.addSearchHistory(searchText) - navigateToResults = true - } else { - showAlert = true - Logger.shared.log("No Module is selected for the search") - } - }) - } - .padding(.horizontal) - - List { - if !searchHistoryManager.searchHistory.isEmpty { - Section(header: Text("Search History")) { - ForEach(searchHistoryManager.searchHistory, id: \.self) { historyItem in - Button(action: { - searchText = historyItem - if let _ = selectedModule, !searchText.isEmpty { - navigateToResults = true - } else { - showAlert = true - Logger.shared.log("No Module is selected for the search") - } - }) { - Text(historyItem) - .foregroundColor(.primary) - } - } - .onDelete(perform: searchHistoryManager.deleteHistoryItem) - } - } - } - .navigationTitle("Search") - .onSubmit(of: .search) { - if let _ = selectedModule, !searchText.isEmpty { - navigateToResults = true - } else { - showAlert = true - Logger.shared.log("No Module is selected for the search") - } - } - - NavigationLink( - destination: SearchResultsView(module: selectedModule, searchText: searchText), - isActive: $navigateToResults, - label: { - EmptyView() - } - ) - .hidden() - } - .onAppear { - modulesManager.loadModules() - NotificationCenter.default.addObserver(forName: .moduleAdded, object: nil, queue: .main) { _ in - modulesManager.loadModules() - } - NotificationCenter.default.addObserver(forName: .moduleRemoved, object: nil, queue: .main) { _ in - modulesManager.loadModules() - } - } - .alert(isPresented: $showAlert) { - Alert( - title: Text("No module selected"), - message: Text("Please select a module before searching."), - dismissButton: .default(Text("OK")) - ) - } - } - .navigationViewStyle(StackNavigationViewStyle()) - } -} - -struct SearchBar: View { - @Binding var text: String - var onSearchButtonClicked: () -> Void - - var body: some View { - HStack { - TextField("Search...", text: $text, onCommit: onSearchButtonClicked) - .padding(7) - .padding(.horizontal, 25) - .background(Color(.systemGray6)) - .cornerRadius(8) - .overlay( - HStack { - Image(systemName: "magnifyingglass") - .foregroundColor(.gray) - .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading) - .padding(.leading, 8) - - if !text.isEmpty { - Button(action: { - self.text = "" - }) { - Image(systemName: "multiply.circle.fill") - .foregroundColor(.gray) - .padding(.trailing, 8) - } - } - } - ) - .padding(.horizontal, 10) - } - } -} diff --git a/Sora/Views/SettingsViews/SettingView.swift b/Sora/Views/SettingsViews/SettingView.swift deleted file mode 100644 index de3c813..0000000 --- a/Sora/Views/SettingsViews/SettingView.swift +++ /dev/null @@ -1,303 +0,0 @@ -// -// SettingView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import Kingfisher -import UniformTypeIdentifiers - -struct SettingsView: View { - @EnvironmentObject var settings: Settings - @State private var isDocumentPickerPresented = false - @State private var showImportSuccessAlert = false - @State private var showImportFailAlert = false - @State private var importErrorMessage = "" - @State private var miruDataToImport: MiruDataStruct? - @State private var selectedModule: ModuleStruct? - @StateObject private var libraryManager = LibraryManager.shared - @StateObject private var modulesManager = ModulesManager() - - var body: some View { - NavigationView { - Form { - Section(header: Text("Interface")) { - ColorPicker("Accent Color", selection: $settings.accentColor) - HStack() { - Text("Appearance") - Picker("Appearance", selection: $settings.selectedAppearance) { - Text("System").tag(Appearance.system) - Text("Light").tag(Appearance.light) - Text("Dark").tag(Appearance.dark) - } - .pickerStyle(SegmentedPickerStyle()) - } - NavigationLink(destination: SettingsIUView()) { - Text("Interface Settings") - } - NavigationLink(destination: SettingsPlayerView()) { - Text("Media Player") - } - } - - Section(header: Text("External Features")) { - NavigationLink(destination: SettingsModuleView()) { - HStack { - Image(systemName: "puzzlepiece.fill") - Text("Modules") - } - } - NavigationLink(destination: SettingsStorageView()) { - HStack { - Image(systemName: "externaldrive.fill") - Text("Storage") - } - } - ForEach(modulesManager.modules.filter { $0.extractor == "dub-sub" }, id: \.name) { module in - Button(action: { - isDocumentPickerPresented = true - selectedModule = module - }) { - HStack { - Image(systemName: "tray.and.arrow.down.fill") - Text("Import Miru Bookmarks into \(module.name)") - } - } - } - } - - Section(header: Text("Debug")) { - NavigationLink(destination: SettingsLogsView()) { - HStack { - Image(systemName: "doc.text.fill") - Text("Logs") - } - } - NavigationLink(destination: SettingsEditorView(modulesManager: ModulesManager())) { - HStack { - Image(systemName: "pencil.and.outline") - Text("Modules Editor") - } - } - } - - Section(header: Text("Info")) { - NavigationLink(destination: AboutView()) { - Text("About") - } - NavigationLink(destination: SettingsReleasesView()) { - Text("Releases") - } - Button(action: { - if let url = URL(string: "https://github.com/cranci1/Sora") { - UIApplication.shared.open(url) - } - }) { - HStack { - Text("Sora github repo") - .foregroundColor(.primary) - Spacer() - Image(systemName: "safari") - .foregroundColor(.secondary) - } - } - Button(action: { - if let url = URL(string: "https://github.com/cranci1/Sora/issues") { - UIApplication.shared.open(url) - } - }) { - HStack { - Text("Report an issue") - .foregroundColor(.primary) - Spacer() - Image(systemName: "safari") - .foregroundColor(.secondary) - } - } - Button(action: { - if let url = URL(string: "https://discord.gg/x7hppDWFDZ") { - UIApplication.shared.open(url) - } - }) { - HStack { - Text("Join the Discord") - .foregroundColor(.primary) - Spacer() - Image(systemName: "safari") - .foregroundColor(.secondary) - } - } - } - } - .navigationTitle("Settings") - .sheet(isPresented: $isDocumentPickerPresented) { - DocumentPicker( - libraryManager: libraryManager, - onSuccess: { miruData in - miruDataToImport = miruData - if let selectedModule = selectedModule { - libraryManager.importFromMiruData(miruData, module: selectedModule) - showImportSuccessAlert = true - } - }, - onFailure: { errorMessage in - importErrorMessage = errorMessage - showImportFailAlert = true - } - ) - } - .alert("Data Imported!", isPresented: $showImportSuccessAlert) { - Button("OK", role: .cancel) { } - } message: { - Text("Miru bookmarks are now imported in Sora, enjoy!") - } - .alert("Import Failed", isPresented: $showImportFailAlert) { - Button("OK", role: .cancel) { } - } message: { - Text(importErrorMessage) - } - } - .navigationViewStyle(StackNavigationViewStyle()) - } -} - -struct DocumentPicker: UIViewControllerRepresentable { - var libraryManager: LibraryManager - var onSuccess: (MiruDataStruct) -> Void - var onFailure: (String) -> Void - - func makeCoordinator() -> Coordinator { - Coordinator(self, libraryManager: libraryManager, onSuccess: onSuccess, onFailure: onFailure) - } - - func makeUIViewController(context: Context) -> UIDocumentPickerViewController { - let picker = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.json]) - picker.delegate = context.coordinator - return picker - } - - func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {} - - class Coordinator: NSObject, UIDocumentPickerDelegate { - var parent: DocumentPicker - var libraryManager: LibraryManager - var onSuccess: (MiruDataStruct) -> Void - var onFailure: (String) -> Void - - init(_ parent: DocumentPicker, libraryManager: LibraryManager, onSuccess: @escaping (MiruDataStruct) -> Void, onFailure: @escaping (String) -> Void) { - self.parent = parent - self.libraryManager = libraryManager - self.onSuccess = onSuccess - self.onFailure = onFailure - } - - func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { - guard let selectedFileURL = urls.first else { - let errorMessage = "No file URL selected" - print(errorMessage) - Logger.shared.log(errorMessage) - onFailure(errorMessage) - return - } - - guard selectedFileURL.startAccessingSecurityScopedResource() else { - let errorMessage = "Could not access the file" - print(errorMessage) - Logger.shared.log("Could not access the Miru Backup File") - onFailure(errorMessage) - return - } - - defer { - selectedFileURL.stopAccessingSecurityScopedResource() - } - - do { - let data = try Data(contentsOf: selectedFileURL) - var miruData = try JSONDecoder().decode(MiruDataStruct.self, from: data) - - miruData.likes = miruData.likes.map { like in - var updatedLike = like - updatedLike.gogoSlug = "/series/" + like.gogoSlug - return updatedLike - } - - Logger.shared.log("Imported Miru data from \(selectedFileURL)") - onSuccess(miruData) - } catch { - let errorMessage = "Failed to import Miru data: \(error.localizedDescription)" - print(errorMessage) - Logger.shared.log(errorMessage) - onFailure(errorMessage) - } - } - - func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { - let errorMessage = "Document picker was closed" - print(errorMessage) - Logger.shared.log(errorMessage) - onFailure(errorMessage) - } - } -} - -enum Appearance: String, CaseIterable, Identifiable { - case system, light, dark - - var id: String { self.rawValue } -} - -class Settings: ObservableObject { - @Published var accentColor: Color { - didSet { - saveAccentColor(accentColor) - } - } - @Published var selectedAppearance: Appearance { - didSet { - UserDefaults.standard.set(selectedAppearance.rawValue, forKey: "selectedAppearance") - updateAppearance() - } - } - - init() { - if let colorData = UserDefaults.standard.data(forKey: "accentColor"), - let uiColor = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(colorData) as? UIColor { - self.accentColor = Color(uiColor) - } else { - self.accentColor = .accentColor - } - if let appearanceRawValue = UserDefaults.standard.string(forKey: "selectedAppearance"), - let appearance = Appearance(rawValue: appearanceRawValue) { - self.selectedAppearance = appearance - } else { - self.selectedAppearance = .system - } - updateAppearance() - } - - private func saveAccentColor(_ color: Color) { - let uiColor = UIColor(color) - do { - let colorData = try NSKeyedArchiver.archivedData(withRootObject: uiColor, requiringSecureCoding: false) - UserDefaults.standard.set(colorData, forKey: "accentColor") - } catch { - print("Failed to save accent color: \(error.localizedDescription)") - Logger.shared.log("Failed to save accent color: \(error.localizedDescription)") - } - } - - func updateAppearance() { - guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return } - switch selectedAppearance { - case .system: - windowScene.windows.first?.overrideUserInterfaceStyle = .unspecified - case .light: - windowScene.windows.first?.overrideUserInterfaceStyle = .light - case .dark: - windowScene.windows.first?.overrideUserInterfaceStyle = .dark - } - } -} diff --git a/Sora/Views/SettingsViews/SubPages/SettingsAboutView.swift b/Sora/Views/SettingsViews/SubPages/SettingsAboutView.swift deleted file mode 100644 index c9f1b02..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsAboutView.swift +++ /dev/null @@ -1,293 +0,0 @@ -// -// SettingsAboutView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import Kingfisher - -struct AboutView: View { - var body: some View { - Form { - Section(footer: Text("Sora is a free open source app, under the GPLv3.0 License. You can find the entire Sora code in the github repo.")) { - HStack(alignment: .center, spacing: 10) { - KFImage(URL(string: "https://raw.githubusercontent.com/cranci1/Sora/main/Sora/Assets.xcassets/AppIcon.appiconset/180.png")) - .resizable() - .frame(width: 80, height: 80) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("Sora") - .font(.largeTitle) - .fontWeight(.bold) - - Text("Public beta 0.1.1") - .font(.subheadline) - .foregroundColor(.secondary) - } - } - .padding(.vertical) - } - - Section(header: Text("Developer")) { - Button(action: { - if let url = URL(string: "https://github.com/cranci1") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/100066266?v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("cranci1") - .font(.headline) - .foregroundColor(.pink) - Text("YAY it's me") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.pink) - } - } - } - - Section(header: Text("Huge thanks"), footer: Text("A huge thanks to the Miru Development team for their support and contributions to Sora. I wont ever be able to thank them enough. Thanks a lot to them and all my discord helper.")) { - HStack { - KFImage(URL(string: "https://storage.ko-fi.com/cdn/useruploads/e68c31f0-7e66-4d63-934a-0508ce443bc0_e71506-30ce-4a01-9ac3-892ffcd18b77.png")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - Text("Miru Development Team") - .font(.headline) - .foregroundColor(.green) - } - Button(action: { - if let url = URL(string: "https://github.com/bshar1865") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/98615778?v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("MA.") - .font(.headline) - .foregroundColor(.orange) - Text("Discord Helper") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.orange) - } - } - Button(action: { - if let url = URL(string: "https://github.com/50n50") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/80717571?v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("50/50") - .font(.headline) - .foregroundColor(.mint) - Text("Discord Helper & Designer") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.mint) - } - } - Button(action: { - if let url = URL(string: "https://github.com/IBH-RAD") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/116025932?u=393be7ee3f476362b9e09d4f195ac035c5060236&v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("IBH") - .font(.headline) - .foregroundColor(.purple) - Text("Discord Helper & Bug Hunter") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.purple) - } - } - Button(action: { - if let url = URL(string: "https://github.com/Seeike") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/122684677?v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("Seiike") - .font(.headline) - .foregroundColor(.yellow) - Text("Discord Helper") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.yellow) - } - } - } - - Section(header: Text("Acknowledgements"), footer: Text("Thanks to the creators of this frameworks, that made Sora creation much simplier.")) { - Button(action: { - if let url = URL(string: "https://github.com/scinfu/SwiftSoup") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://raw.githubusercontent.com/scinfu/SwiftSoup/master/swiftsoup.png")) - .resizable() - .frame(width: 40, height: 40) - - VStack(alignment: .leading) { - Text("SwiftSoup") - .font(.headline) - .foregroundColor(.red) - Text("Web scraping") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.red) - } - } - Button(action: { - if let url = URL(string: "https://github.com/onevcat/Kingfisher") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://products.fileformat.com/image/swift/kingfisher/header-image.png")) - .resizable() - .frame(width: 40, height: 40) - - VStack(alignment: .leading) { - Text("Kingfisher") - .font(.headline) - .foregroundColor(.blue) - Text("Images caching and loading") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.blue) - } - } - Button(action: { - if let url = URL(string: "https://github.com/ipavlidakis/OpenCastSwift") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/575802?v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("OpenCastSwift") - .font(.headline) - .foregroundColor(.green) - Text("Casting support") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.green) - } - } - Button(action: { - if let url = URL(string: "https://github.com/SwiftyJSON/SwiftyJSON") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/8858017?s=200&v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("SwiftyJSON") - .font(.headline) - .foregroundColor(.orange) - Text("Opencast dependency") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.orange) - } - } - Button(action: { - if let url = URL(string: "https://github.com/apple/swift-protobuf") { - UIApplication.shared.open(url) - } - }) { - HStack { - KFImage(URL(string: "https://avatars.githubusercontent.com/u/10639145?s=200&v=4")) - .resizable() - .frame(width: 40, height: 40) - .clipShape(Circle()) - - VStack(alignment: .leading) { - Text("Swift Protobuf") - .font(.headline) - .foregroundColor(.purple) - Text("Opencast dependency") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Image(systemName: "safari") - .foregroundColor(.purple) - } - } - } - } - .navigationTitle("About") - } -} diff --git a/Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift b/Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift deleted file mode 100644 index c41a9a2..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// SettingsEditorView.swift -// Sora -// -// Created by Francesco on 03/01/25. -// - -import SwiftUI - -struct SettingsEditorView: View { - @ObservedObject var modulesManager: ModulesManager - @State private var jsonText: String = "" - - var body: some View { - VStack { - TextEditor(text: $jsonText) - .padding() - .onAppear { - if let data = try? JSONEncoder().encode(modulesManager.modules), - let jsonString = String(data: data, encoding: .utf8) { - jsonText = jsonString - } - } - } - .navigationTitle("Editor") - .navigationBarItems(trailing: Button("Save") { - if let data = jsonText.data(using: .utf8), - let modules = try? JSONDecoder().decode([ModuleStruct].self, from: data) { - modulesManager.modules = modules - modulesManager.saveModuleData() - } - }) - } -} \ No newline at end of file diff --git a/Sora/Views/SettingsViews/SubPages/SettingsIUView.swift b/Sora/Views/SettingsViews/SubPages/SettingsIUView.swift deleted file mode 100644 index 24953b8..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsIUView.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// SettingsIUView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -struct SettingsIUView: View { - @AppStorage("listSearch") private var isListSearchEnabled: Bool = false - - var body: some View { - Form { - Section(header: Text("Search")) { - Toggle("List Search Style", isOn: $isListSearchEnabled) - .tint(.accentColor) - } - } - .navigationTitle("Interface Preference") - } -} diff --git a/Sora/Views/SettingsViews/SubPages/SettingsLogsView.swift b/Sora/Views/SettingsViews/SubPages/SettingsLogsView.swift deleted file mode 100644 index 07bbeae..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsLogsView.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SettingsLogsView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -struct SettingsLogsView: View { - @State private var logs: String = "" - - var body: some View { - VStack { - ScrollView { - Text(logs) - .font(.footnote) - .foregroundColor(.secondary) - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .textSelection(.enabled) - } - .navigationTitle("Logs") - .onAppear { - logs = Logger.shared.getLogs() - } - } - .toolbar { - ToolbarItem(placement: .navigationBarTrailing) { - Menu { - Button(action: { - UIPasteboard.general.string = logs - }) { - Label("Copy to Clipboard", systemImage: "doc.on.doc") - } - Button(role: .destructive, action: { - Logger.shared.clearLogs() - logs = Logger.shared.getLogs() - }) { - Label("Clear Logs", systemImage: "trash") - } - } label: { - Image(systemName: "ellipsis.circle") - .resizable() - .frame(width: 20, height: 20) - } - } - } - } -} - -class Logger { - static let shared = Logger() - private var logs: [(message: String, timestamp: Date)] = [] - - private init() {} - - func log(_ message: String) { - logs.append((message: message, timestamp: Date())) - } - - func getLogs() -> String { - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" - return logs.map { "[\(dateFormatter.string(from: $0.timestamp))] \($0.message)" } - .joined(separator: "\n---\n") - } - - func clearLogs() { - logs.removeAll() - } -} diff --git a/Sora/Views/SettingsViews/SubPages/SettingsModuleView.swift b/Sora/Views/SettingsViews/SubPages/SettingsModuleView.swift deleted file mode 100644 index 77faa47..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsModuleView.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// SettingsModuleView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI -import Kingfisher - -struct ErrorMessage: Identifiable { - var id: String { message } - let message: String -} - -struct SettingsModuleView: View { - @StateObject private var modulesManager = ModulesManager() - @State private var showingAddModuleAlert = false - @State private var moduleURL = "" - @State private var errorMessage: ErrorMessage? - @State private var previusImageURLs: [String: String] = [:] - - var body: some View { - VStack { - if modulesManager.isLoading { - ProgressView("Loading Modules...") - } else { - List { - ForEach(modulesManager.modules, id: \.name) { module in - HStack { - if let url = URL(string: module.iconURL) { - if previusImageURLs[module.name] != module.iconURL { - KFImage(url) - .resizable() - .frame(width: 50, height: 50) - .clipShape(Circle()) - .padding(.trailing, 10) - .onAppear { - previusImageURLs[module.name] = module.iconURL - } - } else { - KFImage(url) - .resizable() - .frame(width: 50, height: 50) - .clipShape(Circle()) - .padding(.trailing, 10) - } - } - VStack(alignment: .leading) { - Text(module.name) - .font(.headline) - .foregroundColor(.primary) - Text("Version: \(module.version)") - .font(.subheadline) - .foregroundColor(.secondary) - Text("Author: \(module.author.name)") - .font(.subheadline) - .foregroundColor(.secondary) - Text("Language: \(module.language)") - .font(.subheadline) - .foregroundColor(.secondary) - } - Spacer() - Text(module.stream) - .font(.caption) - .padding(5) - .background(Color.accentColor) - .foregroundColor(Color.primary) - .clipShape(Capsule()) - } - .contextMenu { - Button(action: { - UIPasteboard.general.string = modulesManager.moduleURLs[module.name] - }) { - Label("Copy URL", systemImage: "doc.on.doc") - } - Button(role: .destructive, action: { - modulesManager.deleteModule(named: module.name) - }) { - Label("Delete", systemImage: "trash") - } - } - } - .onDelete(perform: deleteModule) - } - .navigationBarTitle("Modules") - .navigationBarItems(trailing: Button(action: { - showAddModuleAlert() - }) { - Image(systemName: "plus") - .resizable() - .frame(width: 20, height: 20) - }) - .refreshable { - modulesManager.refreshModules() - } - } - } - .onAppear { - modulesManager.loadModules() - } - .alert(item: $errorMessage) { error in - Alert(title: Text("Error"), message: Text(error.message), dismissButton: .default(Text("OK"))) - } - } - - func showAddModuleAlert() { - let alert = UIAlertController(title: "Add Module", message: "Enter the URL of the module file", preferredStyle: .alert) - alert.addTextField { textField in - textField.placeholder = "https://real.url/module.json" - } - alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) - alert.addAction(UIAlertAction(title: "Add", style: .default, handler: { _ in - if let url = alert.textFields?.first?.text { - modulesManager.addModule(from: url) { result in - switch result { - case .success: - break - case .failure(let error): - errorMessage = ErrorMessage(message: error.localizedDescription) - Logger.shared.log(error.localizedDescription.capitalized) - } - } - } - })) - - if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, - let rootViewController = windowScene.windows.first?.rootViewController { - rootViewController.present(alert, animated: true, completion: nil) - } - } - - func deleteModule(at offsets: IndexSet) { - offsets.forEach { index in - let module = modulesManager.modules[index] - modulesManager.deleteModule(named: module.name) - } - } -} diff --git a/Sora/Views/SettingsViews/SubPages/SettingsPlayerView.swift b/Sora/Views/SettingsViews/SubPages/SettingsPlayerView.swift deleted file mode 100644 index 429c001..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsPlayerView.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// SettingsPlayerView.swift -// Sora -// -// Created by Francesco on 18/12/24. -// - -import SwiftUI - -struct SettingsPlayerView: View { - @AppStorage("externalPlayer") private var externalPlayer: String = "Default" - @AppStorage("AlwaysLandscape") private var isAlwaysLandscape = false - @AppStorage("holdSpeedPlayer") private var holdSpeedPlayer: Double = 2.0 - - var body: some View { - Form { - Section(header: Text("Media Player"), footer: Text("The Force Landscape and HoldSpeed only work inside the default iOS player and Sora player.")) { - HStack { - Text("Media Player") - Spacer() - Menu(externalPlayer) { - Button(action: { - externalPlayer = "Default" - }) { - Label("Default", systemImage: externalPlayer == "Default" ? "checkmark" : "") - } - Button(action: { - externalPlayer = "VLC" - }) { - Label("VLC", systemImage: externalPlayer == "VLC" ? "checkmark" : "") - } - Button(action: { - externalPlayer = "OutPlayer" - }) { - Label("OutPlayer", systemImage: externalPlayer == "OutPlayer" ? "checkmark" : "") - } - Button(action: { - externalPlayer = "Infuse" - }) { - Label("Infuse", systemImage: externalPlayer == "Infuse" ? "checkmark" : "") - } - Button(action: { - externalPlayer = "nPlayer" - }) { - Label("nPlayer", systemImage: externalPlayer == "nPlayer" ? "checkmark" : "") - } - Button(action: { - externalPlayer = "Sora" - }) { - Label("Sora", systemImage: externalPlayer == "Sora" ? "checkmark" : "") - } - } - } - - HStack { - Text("Hold Speed:") - Spacer() - Stepper( - value: $holdSpeedPlayer, - in: 0.25...2.0, - step: 0.25 - ) { - Text(String(format: "%.2f", holdSpeedPlayer)) - } - } - } - } - .navigationTitle("Player") - } -} - diff --git a/Sora/Views/SettingsViews/SubPages/SettingsReleasesView.swift b/Sora/Views/SettingsViews/SubPages/SettingsReleasesView.swift deleted file mode 100644 index bcc6c79..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsReleasesView.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// SettingsReleasesView.swift -// Sora -// -// Created by Francesco on 31/12/24. -// - -import SwiftUI - -struct SettingsReleasesView: View { - @State private var releases: [GitHubReleases] = [] - - var body: some View { - List(releases, id: \.tagName) { release in - VStack(alignment: .leading) { - Text(release.tagName) - .font(.system(size: 17)) - .bold() - Text(release.body) - .font(.system(size: 14)) - } - .contextMenu { - Button(action: { - if let url = URL(string: release.htmlUrl) { - UIApplication.shared.open(url) - } - }) { - Text("View on GitHub") - Image(systemName: "safari") - } - } - } - .navigationTitle("Releases") - .onAppear { - GitHubAPI.shared.fetchReleases { fetchedReleases in - if let fetchedReleases = fetchedReleases { - self.releases = fetchedReleases - } - } - } - } -} diff --git a/Sora/Views/SettingsViews/SubPages/SettingsStorageView.swift b/Sora/Views/SettingsViews/SubPages/SettingsStorageView.swift deleted file mode 100644 index 991218d..0000000 --- a/Sora/Views/SettingsViews/SubPages/SettingsStorageView.swift +++ /dev/null @@ -1,269 +0,0 @@ -// -// SettingsStorageView.swift -// Sora -// -// Created by Francesco on 19/12/24. -// - -import SwiftUI - -struct SettingsStorageView: View { - @State private var appSize: String = "Calculating..." - @State private var storageDetails: [(String, Double, Color)] = [] - @State private var deviceStorage: (total: Int64, used: Int64) = (0, 0) - @State private var showingClearCacheAlert = false - @State private var showingClearDocumentsAlert = false - - var body: some View { - List { - Section { - VStack(alignment: .leading, spacing: 8) { - HStack(alignment: .center) { - Text(appSize) - .font(.system(size: 28, weight: .bold)) - Text("of \(ByteCountFormatter.string(fromByteCount: deviceStorage.total, countStyle: .file))") - .foregroundColor(.secondary) - } - - VStack(alignment: .leading, spacing: 4) { - GeometryReader { geometry in - ZStack(alignment: .leading) { - RoundedRectangle(cornerRadius: 8) - .fill(Color.gray.opacity(0.2)) - .frame(height: 24) - - RoundedRectangle(cornerRadius: 8) - .fill(Color.gray.opacity(0.3)) - .frame(width: geometry.size.width * CGFloat(deviceStorage.used) / CGFloat(deviceStorage.total)) - .frame(height: 24) - - HStack(spacing: 0) { - ForEach(storageDetails, id: \.0) { detail in - RoundedRectangle(cornerRadius: 0) - .fill(detail.2) - .frame(width: geometry.size.width * CGFloat(detail.1 * 1024 * 1024) / CGFloat(deviceStorage.total)) - .frame(height: 24) - } - } - .clipShape(RoundedRectangle(cornerRadius: 8)) - } - } - .frame(height: 24) - - HStack(spacing: 16) { - ForEach(storageDetails, id: \.0) { detail in - HStack(spacing: 4) { - Circle() - .fill(detail.2) - .frame(width: 8, height: 8) - Text(detail.0) - .font(.caption) - .foregroundColor(.secondary) - } - } - HStack(spacing: 4) { - Circle() - .fill(Color.gray.opacity(0.3)) - .frame(width: 8, height: 8) - Text("System") - .font(.caption) - .foregroundColor(.secondary) - } - } - } - } - .padding(.vertical, 8) - } - - Section { - ForEach(storageDetails, id: \.0) { detail in - HStack { - Image(systemName: categoryIcon(for: detail.0)) - .foregroundColor(.white) - .frame(width: 28, height: 28) - .background(detail.2) - .clipShape(RoundedRectangle(cornerRadius: 6)) - - VStack(alignment: .leading, spacing: 2) { - Text(detail.0) - Text("\(detail.1, specifier: "%.2f") MB") - .font(.caption) - .foregroundColor(.secondary) - } - } - } - } - - Section(header: Text("Actions")) { - Button(action: { showingClearCacheAlert = true }) { - actionRow( - icon: "clock.fill", - title: "Clear Cache", - subtitle: "Free up space used by cached items", - iconColor: .accentColor - ) - } - - Button(action: { showingClearDocumentsAlert = true }) { - actionRow( - icon: "doc.fill", - title: "Clear Documents", - subtitle: "Check and remove unnecessary files", - iconColor: .accentColor - ) - } - } - } - .navigationTitle("Storage") - .onAppear { - calculateAppSize() - getDeviceStorage() - } - .alert("Clear Cache", isPresented: $showingClearCacheAlert) { - Button("Cancel", role: .cancel) { } - Button("Clear", role: .destructive) { - clearCache() - } - } message: { - Text("Are you sure you want to clear the cache? This action cannot be undone.") - } - .alert("Clear Documents", isPresented: $showingClearDocumentsAlert) { - Button("Cancel", role: .cancel) { } - Button("Clear", role: .destructive) { - clearDocuments() - } - } message: { - Text("Are you sure you want to clear all documents? This action cannot be undone.") - } - } - - private func clearCache() { - if let cacheURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first { - do { - let fileURLs = try FileManager.default.contentsOfDirectory( - at: cacheURL, - includingPropertiesForKeys: nil, - options: .skipsHiddenFiles - ) - - for fileURL in fileURLs { - try FileManager.default.removeItem(at: fileURL) - } - - calculateAppSize() - getDeviceStorage() - Logger.shared.log("Cleared Cache") - } catch { - print("Error clearing cache: \(error)") - Logger.shared.log("Error clearing cache: \(error)") - } - } - } - - private func clearDocuments() { - if let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { - do { - let fileURLs = try FileManager.default.contentsOfDirectory( - at: documentsURL, - includingPropertiesForKeys: nil, - options: .skipsHiddenFiles - ) - - for fileURL in fileURLs { - try FileManager.default.removeItem(at: fileURL) - } - - calculateAppSize() - getDeviceStorage() - Logger.shared.log("Cleared Documents") - } catch { - print("Error clearing documents: \(error)") - Logger.shared.log("Error clearing documents: \(error)") - } - } - } - - private func getDeviceStorage() { - do { - let fileURL = URL(fileURLWithPath: NSHomeDirectory() as String) - let values = try fileURL.resourceValues(forKeys: [.volumeTotalCapacityKey, .volumeAvailableCapacityKey]) - - if let total = values.volumeTotalCapacity, - let available = values.volumeAvailableCapacity { - deviceStorage.total = Int64(total) - deviceStorage.used = Int64(total - available) - } - } catch { - print("Error getting device storage: \(error)") - Logger.shared.log("Error getting device storage: \(error)") - } - } - - private func getTotalAppBytes() -> Int64 { - return Int64(totalSize() * 1024 * 1024) - } - - private func actionRow(icon: String, title: String, subtitle: String, iconColor: Color) -> some View { - HStack { - Image(systemName: icon) - .foregroundColor(.white) - .frame(width: 28, height: 28) - .background(iconColor) - .clipShape(RoundedRectangle(cornerRadius: 6)) - - VStack(alignment: .leading, spacing: 2) { - Text(title) - Text(subtitle) - .font(.caption) - .foregroundColor(.secondary) - } - } - } - - private func categoryIcon(for category: String) -> String { - switch category { - case "Documents": - return "doc.fill" - case "Cache": - return "clock.fill" - case "Temporary": - return "trash.fill" - default: - return "questionmark" - } - } - - private func calculateAppSize() { - let cacheSize = getDirectorySize(url: FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!) - let documentsSize = getDirectorySize(url: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!) - let tmpSize = getDirectorySize(url: FileManager.default.temporaryDirectory) - - let totalSize = cacheSize + documentsSize + tmpSize - self.appSize = ByteCountFormatter.string(fromByteCount: Int64(totalSize), countStyle: .file) - self.storageDetails = [ - ("Documents", documentsSize / 1024 / 1024, .green), - ("Cache", cacheSize / 1024 / 1024, .orange), - ("Temporary", tmpSize / 1024 / 1024, .red) - ] - } - - private func getDirectorySize(url: URL) -> Double { - var size: Double = 0 - if let enumerator = FileManager.default.enumerator(at: url, includingPropertiesForKeys: [.fileSizeKey], options: [], errorHandler: nil) { - for case let fileURL as URL in enumerator { - do { - let resourceValues = try fileURL.resourceValues(forKeys: [.fileSizeKey]) - size += Double(resourceValues.fileSize ?? 0) - } catch { - print("Error calculating size for file \(fileURL): \(error)") - Logger.shared.log("Error calculating size for file \(fileURL): \(error)") - } - } - } - return size - } - - private func totalSize() -> Double { - return storageDetails.reduce(0) { $0 + $1.1 } - } -} diff --git a/assets/Sora_banner.png b/assets/Sora_banner.png deleted file mode 100644 index d99b8e7b9055c8a97cb5a5d019b6196f961c9d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191704 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]x6AU~hqxo?hQ4~|FMOazx zuwohI;ox@-DSs1`05uL2xU-@#FrSFTjGwxcBz(lDqmU?3<-DF7+oZmBlOAQ`EcLAb z^kMsTkD0GSgXo>Y@9QeQ!i*1_5!b?WNHIsjRuKIk8`QzYYMc|tMFS+^*)!Sqif9u| zy+@s05}joG4a&XL1{-P;Y07!uZA+uSuUZf~eBZs2IQ3Rw>8h8`=SN(t|Hx-SUL7V{ zR-crPVVV9)+Xdudy7A7y*w*%Lrfrz!_}E)8XQk0&19Hp)2wl*YFkaWo1>$h*>D3o& zO$8FS<)Lo1`R5UFi#};-`I8WcQebn=jTzUo7V7~Uug!x<9|t2(JZvi~4wm7I{IRD! zeS;@uubS0L0Y^ttoB#Jws)D9`*#1}Y82-Oi=OnV9l$qwFcqHyyN(RC?!O`(p@h*i7 z*^+~-c$jTj9^3cGPgt4jMI2dd>V6WGkr!+g#A#uyHW-sk4FpqRN@8l(qr*BHBBy(L zojK#~g`SqVk2Xl1B*e9&&Yfo)0|H)yzg-K7kbsr=f?hQKBW1UxN2Hr#t#trd4(#1Ye#ss_zuF|Ge6(oKg(raCrUF8hq~E zDqnZp7jQNDKUBMxGN}+8e}(3obqShkX0$@wMS9mTbws@8)-P-`$`0 z=l8k4|HAdSuIrrhIIR2y5sm))(ch0p=`c{oHuDsHw#5Tmi|uzt_ko97dx;P@;q8{m>@3)NXwy}(2N2PJN zemaPDJuVmsT&0b+YlSeZ#cgxexa)h8!jA=Fi;IcC6)j24Jug&JFCgU+oS@3YB+!O; z*pFuSOKc;O`*B-^Ycly3<|Zf}_o3=ZAFY}9R|I#rH84PYAuT2 zd*Vx~F1oR+VXlr62~>F|hBWA+i|ZFWun)&R48(`u$@(ulHgSGQx}bPcOnj~W+^ zDK%SD%Y5}y`&g0eW{nOm5FO#;H0#ZpFNFr@qQWk`o-Wx#ia{d1cS00;*D@H-b8^tw z3nZplj@;gD&q-A5_p`R%OvWCpU{9p5hDmVHJhv|dXboUijz{Sq=q|O}D{`+H+ncPKoW0P6kwOg)HcG=aEuhWXmw08#Os|k-jfm-D-k@fWz z?#*Tmh(wQ#rPq)14$-i*_wP@Cmz=I%3Yr%3?$4xDzw=@HEVs>Vt6c2bMm;ZQvH+6R zNN1B*YSOSP$~!LHFNT|#gnp1AXR<#3a*6YHK06;BtHuT(n>1QZRJ)tuMUtK|?16$; zc9vrOw$i4y155noA}_wRHSWkPT`z6OL7+f9z+d#&N=aTxU%X}Skd)$8YMNfgkCDUV zsHRS6F)$!y3jO+NLc~XbN}FEayYeu&5+$9bRn=20_q{AF@Tg3pdYch;MJ#L{HxW|V zS1(azxcuIHz}2|iSsgT0*0}0c8>L0Z|4ZQ4 z`>yTuG04w4K&u}N2ms_OP_ywL-PiY+z`#sP>AkYmKmB0{hXYYSTSYs-9E0jEm=8Bn zco(MyXrn|N?zz9lllF`FM}sk;4g0ymjnkhey?TnO@*aYob956y;50phqvV?9#JqFyQ<8Khgkfw%H>vZ63O4!8{3#p|0V6S)D_pGQM-?*no{- z|IQb-o?a;wW%~>F+;M~pUlmhIv-AC{^P?Z>0d62HxYmwb?XzNqi6XJoYoH>e!KYKE zNx>&6GL9|3<)bC`g_Rx`U@%$C* z{wYe-NXh&22^MRk9lMramVjEP1Okh&N%8`9$x-eHIo~A;?lE6&vjxBOo}_5a`HKTP6BzfL(8 z_DyWu&+S0R!a|f@-f$20sXHNlHai%_o-E{N1*JOoaffkZIgkXvE6munI!7AYoK0Rz zSsI^MbcEv2jDmLt%jxk^qLfko@9p(6wT4j$(8*b96}Xr>0S*vJOq{he%l(0MNJ{2) zI70T(o{gtM$OYJ=l#`UAoj`1d7#nY2mb~eg5L3Owf%1)z^6^aFzEE5nBd^{dPRjJu z9H}z?Ew0i1ze2%x;WnJ{TO7Q+4cX?gWlM3O2i;Dqikl^>e44$_w;S4NX!wjuG+3Oho>4HEJonF)U9PgRJli$B( z1I=BggraX;0OqzP{FQMa)RzRAXHs6#+C&j zE*}4g%`F2_LFiDwUe%}6@vpvLB+}r=6%zPRoV9uCfFalNCLk?+d|o0NUVRqPlhsLQ zI(V6)0?knO7xBpbk2P1P3sjyp>R9g`@WBCz;x27hdiruc=_VZa%H~T`*g2SGfIM&3 z7hz|ZC^N?nXZRZWkz)r}h;w3LWc1Vs@mP153O1J>QdoRA8(TlECF8T) z-LHI7I`5Xp47$Ico4-(Hu2bYfq!!%oKHav-au}B@0yBEH0Uk5eav`*mu;)(=^5NS; z`%I%tP*&pT*N_MEYp%kKAJ0I9ip6DiiCV7MBjLtvxUh?4+J)}R#gD(@E7zHl@aA=y z?h*#ESjkvyd1k$i!?WSLUHvFT>lI@tK?z0malF-e?tb^gUDaTghc^eW9kBvEJSZX| zz3=qod;Rl?qgN?#d&TnsFZRUkGC_b>wy37gx@DEM5X(RhX%1Sf%?6C=#~2dvTdZZW zZ;x(P&NSI^f6%rw?TQ3P@_%(n55>9~UXRK==t}>#glGYU_P|8aaX`?KUR0Zfl}hqe z{Qd2F3p&jB!!({GJ1x3DO}xtob@kr3=&INlz6wIm^MqyzREZiiG!YUbPNdx6&(M}99Bmo%ln`)@ifg4MnZyH z-Qby}tu?s@Us8Dbg=)qzdv6rQkQ#w^Al6Iy&L>M5zTDbk;l|^^sgsPU>YtH4@b>lz zx5q+n=sO@h5eZwE%zb6KgBn@SmrHzcN*%W;@!|e8i`W|?KLmYelRN~ZX_1?Xo_Y5; zwK`unn|0(3ech&$@vU$=AFr1H=dOD~C9{uZoRxh28R<+VICd&`(@xt!?{Og2ve2_K(Kyxz`Iw&7I~~_5K11_v5LN zVMb*Tn9iE-8H$mZB%$)G^9dYTzNmD%c6L4rya%D}o1rD(5GMZs3}_6EXUl~sZmT$-Hh$i-@OUDm zj_}r!IvOn&BL5};))a=lRTb8soPj(Wz=lHs>)=|63$ub9yuWgm5G>(a#YZJro>;K- zyLv{FyqIwvbLX(21gZ!@}GW&{JagwSdzl0K@862K| zEfhq_I<2vK!xt~(q0Nd2J#R3`cox{f(|Ksjrk2sHOn#mW?Ct%s!tLO80gpT5IeUgS z3(72FOBe=v&rF9gmb13;?iA(@b%SR)=8p8-J$1YQP|wtBb0nU{mlC1Y1kQVhjU2` z$LE{xEU*?5_ynrk5sja6_Y<8sK05OQg}h{Zm;>pI;UEnlrK+tuD`-Hr2c6Rr0NqNh&S`dx!yY!$=U1e*Ec)IobW2e%9q>8`u?# zLz^cl3t762hs%!lC{W|-pL~&rTc+LJ5N;cx&mFmpR45!^AnEFxtG!x}6xoK< zE?G+%QJ6CJ5(mPnvUg87vl1e;gMJTT50bGbc~U3)wcbt?GP)w!GYL3nx?r~sb6>(p zyk#-3{Mw|;0?TSd7!{-^nDKc#m(2%hR(srq7VoOg3O;RKvEVQvO30^bEi1wq2n=K@ ziTBJKv)Q}4LhK{nmbSTpq)%tQGH7^>PErwiM$^t^$sIUBdVNOu78UB1UaNfW7=F?) zDeGppzb zzHpf43>)646G|{F`T5Cn7!xUd)$s!4?0FZ(j-0RQBj3Ug+=anygI|wR`9c86?osA? zy+H)qWe!R+-xGT5CNFl<#TUj9q&ui08wMK_Yrwq4&f^_ts39|A?h~imF-z>GcJR)v z{0Fk*%B55tuM%Dr?6-3Cc#g~g`;UqXfUyb?oobx`!cu1UQ_SKz)6KDr`)kU7bporp8O#bNjn310 zN>x!>_j58bBPBwUo(4H=6nutw6fbWiIcb_Cm1C{(n*wz;3^owwl@pC)3##oEk>c1) zQjy=tE%}dH@*kANA3wwe)~i!4AJLp=e8eh1#!DgS`I{fpaT zPrp7LSQ$BwwL|yZ>Qk2NP7ew65S-#FW}v8U zvsbIeJ8jIjF7u-Dnc(OsC6nc+aFFTv0JWo8{&<{yqCJ!H)6lBrJ)yy$`JKIuiSL~3 zOrxSJe6u>PJM=xpQ9*!9B$QR#^zx|hcG&s;$Rddf!d+1}&vZ>>t=1ybJ$HRTFj2Qr zd3Z?;1s6Z&eSZ9Xnv=X9?{Mwrf0ZmiPx(B&GuH9BA$NjBqnz6qMH>)!IxG|i4`o5$8nk9&du3^f z=9xbFvRLk&=Cf+$n3}%u@+_!L35cByD4|%T_I9fa?OKZIwp|@cg&w^zA0#{90{#Y7 z`E8fCyamb3DR53$MfyZ9W0nHguIq2Kpzv?QO3i&2J``-&uW3nIq}FZhV`QZZp4Oqi z&zBx|=pFSeOo{lxw1Ly?3Qzf7s#L45F`-@!J#86kn>qyj1X=zj?8HG_MCx!_}i z&1ucEv$N#W!bZ7u$y`{Mxb1&e@riq!RNRO|*kHnoJiYi^Ft&atSrWimHpDdaAL$HSyyHEzFKfl3nd$>t11x^Ht?3Pq- z$ukOcpUD|@n!O7XGOLaAT-|*_Uc#P`N=|>f?mqdJUA&YgZC|n>b9JiDOGOnGEWCnH z*j()BC*XnnO`_(0hZuy$FeMRAo?@yMzAer3Ew4>V>$i}lV}OhH(|fAs`0p#bX;a5c z3P<7!AD`^JR~t|Kfohtk5LN{p!ot*#K*_=YY1y|Jwo( zMR|PBY$1LgV@jt-sh+}+v%MIk&CF!YQIqNSD=-SYUupdlN$L=a_}5Pj?6l`IQ&)hG zTtt}~LrWz`Eb!7B)VH1SwDq&sAj-3|2nj8KuOph`#ML1<=D+p-e~HXStL|b=UHUsC zWo5{^3<#GM?pbMErw@~yZP<`T6g&h_%kUUV`I(27ZkZxnr8(0AoMD)^Pp$QYqhCFD z$m~59VU|0FJC8b#MkAQc-WFGbT*6YURoYo*Od4Z z6=(rzxu|O5?Oh7z z5JCpozndcflolS){8ay0iNWlwt9XdQ2k{JsF`q|EK6!bFhy*GE=do?Co!h6VCcDO( z{GYqsLY)Au;MPM(f2v_5Q}& zqNm3O0!r5Ru{3d1c^wOhvc(9MV5%fhuC7;fX;O#TTgGL|CaDN9JY+JT_#juGEtEIzm56~)111_<99kCCoNLjd!*{KgShVA1Wm04QkD;XvxDUNkd{ zSZ2}w$x;v5+cTmRt_Zo%B9&U!l;o~*+$8;Nz|163`C5ce`#{heca$YjUDQZL_Ev|H zuEt>q=i@%%iy2XKHpaAHn$D8w&{UbP=O*1@ZIqA^QID> zMT2_YkMUIjYdIDGM}opRbB9*Gl2-+no*|yC67(k3YXd_lHvRr{>2iuzN(-@1Kd|vP zP}eI8?T~%_y$R+6+A`vj)X>T=ANc}52`X47ndS!Km43YSjO=BM>*i4aCZ=|e+JArN z|13I7sVdOyyIc15SPu_t^L{YH6{5A+Wz+S_3nS;kqMp%})3X+mwl5}^yUU3j-)0kk zychh^yT-_rM-hdq+#X_pk)(@c^Zhns9oyMh6$gLl^9|JOelPj-TfbzY*7+#=rWspk zz@g*mGGbyY*4@?$zyF0miA?VHNm8_qxvd-agr#{Yu0sJ(NC2ZUkLNn!C7UAHKXT99W&5?t!_SX4^Vwrm{xl4OrnM^~%Ao8fRqYK5M zzWH8P!5^_Eu`o=6vQCK?Nd*x$a_b8;DGj4zZ*%igQ%&^3Igb5fm&~gtNobw}V5GCG zBaDwF#i4(cnxrHQ_HJ)iWbX7f9u_Ld0m75o*N@XE4jc#rLij}c*VIYHVr$uts%7>R z-wXr$;H#$`vemgxr}EJPfOcoP+9^i?4TQYmj=4caXbQgD@8z#K02spS_QWLM4naU6 z8>*y$XeTM*UNg=B5T9`!@f7oEWic^=kgX{WrTYY{19|KxOEtk59 z4}R-`>(!)OaAD{!Nj>&r3Q+`eSRqju&lWpNFZsSa zSa{~1H4hs)^h0=$R-y*2F^VT5*G|*G#&f1^O?X6(R(Q70W3r)p*i98QJm? zZgze0aBfrEm5+j(0s9U(S1Djvd^|CA5N+77IakxKafkgTRE_g(C?_ii98ptInAt$c z-2XJTryH$u9!;6l=7vF?ej!lMDduJJ0eBtwyowqdtzzqCXjiZt*{VO)xx&80XVvaW z`1@-M&C`cPtl>3@R#ijq=Vu13)Sy7HX6A#O!_bx9-t{a(pW*Qyc3k z?VGVU>6W}sI`^45R#*kP;^Y5A!lOSr%FhdW^hAsefrvV6xmvVQi0;ixC3s`NxlHR%zbRfT`4<%g$_U zM2wQxIVO)L&okSGNPlt{10@9>p9@-}spoa>mmore$Rj`P8;xRoLxM_SF^b&VZ(01E zLoNNi)-KwQh+o93;$1VoI4OLscE1+Qyf4x!Ii}dZ^T!FUupc@lb5g07OKlqyE}ut! zGdnpsUR#&hAUZJqW7oVmFM<6A1>~y~<^#A~%hJGwZ-99fwM1e5RH^lHIl0Z&^xDNr zlkW=i^+&hlyOsqfu4-t2>3$ptx4sIcf~Y@G`n=pVu3z>s&z4t55whOI^XQF#4*3QL zr%=zB9(1dBF#jU{m(0^kLKOHUzx+X+PcHutoj!hM>vx-|rgZA{rc(0!4T3>g%MWq`2EYjwE<@LSuycE_EtRi^lhsAucSnrxshrBO= z0CY_7GH<+R(3<}g`K`k4R9;>l16eGGf?~acwouCaAq6-s@XE;#UJgrQe0Lkl$qP*z z*InIjMrdx_Ag;nWFti|YyU?6#K<lwO}d}* z)XSrz8I?U;v8&77MKZq^oi>Lhit}?W9n8@q zNkdgJc=qKcIblxX-q$4l!UVa~{c>sLZW_ohzC;!y)N7-Rm-LBBTxFFRnhKtx z24%(L$K@U~6*?+-de2I?bj^N04CeS^$$o=2cD};a_^RCv8$opM#k5Ts&M6t^j}$5; z^RX`cSaLWNLj?}K{qz}%GNEfF(lA}0++zDJ{6c8cnB9(mVKOJt0Btn>@TEnG?})Me zr==(!TV+RP!J(@&0 zo;a3qm8T5jX@i&aHm1uz72nuZZ(TFIW1ZhgmsLcE?XlHDCt)Z4+bQBMMq@C4%oNWw zB_VFZ2N=?E7#Jovo;Fjg<(*<|F!+$2tbh_|gv4!>aza#>leJ3P&Zl zA$cvd=|yFE*+K4H$0dAfXwTiprS4*!$6wTf_Mc+|0s?-nm)NlNRI7j5a<2!%V1|%~ zotESAL9;`B8A4R5Ki+|3pciH-9s<13#=ZT?m-maJ%Ypsz8|Ov)Mj}zNFsD7tlAxxR z*0{0MxJjw7o?2V1r}4ErfG1fX#CessvwC5?e@JSUGO%~s@Lhh!Sb1D%zyx&K$r^P9f zbz-IhK4@Sb0?9rouzQ8~;SYQ#DF0BhAr;EC4*WOSve}JK?;%^YlZ`XYk)p`Ii7@I4m6rd+b`J+B6`?E6QiObCE%DSkKL50TR;;RVg#d1YGO5| zkNo(N9YVDWt>PglK?-h2%9qIQ=Jv+jdhEB4TS3Oh$2XFXu$5S{kq$E}>cR}#!p-Ak zc*avWK5XMO=5#yB!@uW@ayE9I$CMf>`C2!#=s>|YKR@F^$xWfJ656si6z4@~qN+CZH~)MXDL;q$kzY$bRM(KeqSufDZ^zn`?LZy5OdaLH9LvPF^$ z7V*4^D?~c4t8k!rH1>9A(X|7cu_1jKT?*j>4o$R-D`p~%xnmpCjms$IB=RpY@p3| zLa3bo;x}qoWLWgc#};}K2#_o+>m{Vti8Dz!$Cus0-lmaJqMg7GUV6EGko_t51|cuZ z8Fk<*M2}6Ib2J9rk`Z)Vi|UB~$a4S0cQIyQs?W0lukkgnM|*N$7y#UNLe0w}`@W5~ z7CHu!Y}!bZKA^(n9F*XVU?g<{MWlqcNd^TD{i!XHjy1IK=POgq}uobIhERiaMcK;9oncCMsAZf58m7LG-d*uN?;K-H2N!>-pJpIn)n zOABbvOE0pR7fss~=>GuxR?Ee9ttBfyeqRCZ8>>uh$qA2DyHi@F03;bUI$Zz-oH?Oe z1yF#c7DiT9F=r5n0ve)mzdBdjHK0CHm=ZvkQt{$hm+qBWLMI5XPV7*rJR^xx1R`r^ z!&9TR9gpr4F!{f&KyY^)T<%9PP6UN#^b*r6{b-GBUtOldpS8Re{lGRBITrbor(plF z4uExq?5u53zq-cbuz%O?!0DBht1K0w)!;c4De!-xpkZKzMu{V#6`wN*w5fWq)>L>~ zB0W2p0#yn`Y$caQ4qH4OZc(uScSl+i1fZbnMV$^>NuW2mpD;iW4MM7~oR92qpL!cN z1L7lfsP0(>!v<=8Gi4oaCYK<9`+k7cdXyIv*2h=4pIPz#YYQ7&@=xq*f3fA*{eR+JR$sWeUxtNob5MNgU+x~aaQ7d8 z((v+8P}_F;P|)lm4KGHYPni2?D^1}nLcJ-*E2gq7s&@aHcw1S+Mkt!$iuIoQrGIsz zPy27r063|C{}96F*m-$GWE&<l~^J`4inEUi!wh1iQ+6c34dq4H<%JfG|EuSFF1mc-{S5W%y5icDDo z{0t|}li-jIMy9Ja+@z+oo9~0RpT1{CfGkN_LB|!*{`t10xu=0wZIuBtzQu~3;nDdl zqJQ^>-}`)J7uf0P?oX{Or&~~J9(Pt4>EK`h+wXcZUy}9sCk=qLhgty!5MY5rr=0Cl zli9ga*QRFU!Ofr4d1VWf^La|YcjccYzXa3FEA7|dZqn_cmw`?F$x ztLDoS8(>F&G6Uqq56_;t8W2Q>D!l;HY02yz0XCl<6*8(V9U|Bu#AB1i@Pr23U^3w3 zU15DJb~U^8HWbQ+X!;5`9~uMrNB&B8Zf*a>=oslff7@}&%fJ6Y08o!HRFdGR>0Z2A zBASt_v?&SA1Ir44@@6Pnr2a8{hy|-VIZ4oOb8U8xD;vjkn0*V2rKekjG6)@DR7yaYRkVc%lG(uVb7DSMa^LJAeTKu$9r8 z+56T3s=U*A8Q*wuu88c?=r~5&9nKhfoTByjC_`X5Z{n|gU46QrbsEtX0SL-H%+!iWN+)KJ z7=)~Mm{!EW04<1vG?EwHu&k`A3JRlpdESBN!v+PpH9x7u4^meoMBf+hQn1i2h4TrcgMe9kAM|_cSogbdS)+u z2O}VgVQvWnH~5%b8?*N|#XX@U=1uIl>8F+79pUDk=veE64OknmTY2gv95*3%7^4vJW=hlDvZ zK5oD}w6xPpUKgW_N(ZX`$gdXz@)=)sFffwJLop&=kOcYCZT6w)0;pWjiN?N*8dO+T z;NG%#sZiKwceMVTK-b=M?NSLj*0=F&X~k-*%JruC?QgPcIfA%^6^r?)wVS)XjNm3N zV4bZ_yl-7w*jQ8ac(v=G`l3(LbbJ0cvY+DAd6hfTyuU6ijGJfB{1jHUD0K31%fIE zE3vYLe=n!%>>z}p?XTw%rHW6EQqrvnXYh*308{G=CCgn3R*&mf0?OU8F4YZE_9vm-Kt3x<2wB0>E6KBGuv{xHZacbugAx02J0i;Y??4~% zKX{0iR=NB0<1TwEHb z1@d5Mu0w;K5QEIe*+)cp9sj|{=w3bECa!`Y4L^`;PuaD)YcRKL$P=Jww zsenf<_}nGn&lw#DT!l~m{iFzn$^Y8X;VK|0OL?o>cyVc7V$63rV6To`_?}mLdDbHqnM!^W{==~)2*ClMLX znz+ro|I^Kj6}o32Ne!`VL6N;Yj$a4k8l4c( zzqQ;p?Vn_pbce&2z?ubj}hxT=GXXR0}Hw(UO(Sw4&a^dDNnKX^zEc5M;i>6d>$CTMS1c))7qvA`7=JoR^~mN0 zyeYD1=>^J&UYVdh?5E>7VM<+%u(P*sQB9OU7)DP`WizsQw*wj+8U_%7w&Wl{6Hs)i4jZfa?SJT&`s8CHrvoAk}p&T@0Py(n+(fBaE;*(D_MtAUwp?|=- z;;YI*2d%!#U1!hNJ7?e`b~^C zU|b{9Q}^cG@H<0YpO!Lj>BWJlf?!$+G)myG@uJ6TNk8x9kEE$$_@?dCjmR@s+U@t= zrHHKK{AI>$jR_`2e+JDgfKQ&~^S!|Rn_ubK%D&6=W_aI^jaQHEO6(!c@LZj0c?Y8k}+$x-FW71MOJ8*UcUs$_!j4^$@A_hAPLH&zzV(r8wja ziH1}Orclv15_Nz8S8;FDB5Nrc;kLfcQkipQuulUJ=LRmdCndx*$wP3rG&wyhg-qB_ zWrYKQ4SVQ+Dack0vp<}WZuhH>-s<6j5x8^LIKTA3 zhz&suHj=fW84FImIRXS&!pcCRuuxE!?7 z;X+|93cvN@yMx*9op#3j3^aYI%o^srLCy5kd04%{TRCge+fpF3>yi1;fUGFi z(UAY#UU}0`?te7_&F6#mQ`b&1hqM*?B)_U@sMD%dcV=AK0bIyk1J(6?JIt%fc&dn8 z&-MMFAE--v38r1*e19XT>PE zvA&89qu^10(0bQS+s+BdZ6bJZf^5TU>Tg(_D~bda@PlfRn}h_roI`bDqxfA;rk6>; z*Zuby3U2+*{g3tmC?BQQ7qZwmu|ZCfh;k)x<@(@^#z7a)9Z_!XzBK_b1|!M2gcQyp z;Yy*U#CoJ;3w4_GvmSbHlQ;@SBWj_!-3wer4Ilglmxg62KnUV5?x^@K=~3?!nZ~0d z*TAKctHcA3+y2RP;B#|KhMSEIx&G5nC`r8rhwZ}2>9)r6JJ)p4*nzxK|p*7qvBEv zizTxo6JEf%nMA0`=IxHxXEDa*=s#qwD!jjk5FMAO8d9dZg8+il+S!w8ReuKRoF%WhrNBK_mg`1A731QBFF_HY1r{Sk= zk>zuDFi*riG0;|lrn{#3hXUilTq;WX*wT-i%fPfV*oi=K=R6N`ah~!VNE)qQRcl;t z7tT$%y7|lx02KA@W$B&F+dQdAgk9X%s~gg`-K>$2KX^(oqi}>*+6V$}Rx8Pwku4KaNke=cM#GZ8(6DZEm%Ayg_PUGBv+s zprR@s;Ag>;l0+%}p9_N6+~B@*G2=R`a4~#!mJ;&IygG=0Y2xGlx?1WK>$8k@jJzKk zAQDI6*?4x%2E?HPe(khcR8wKCmM7T(M$g05cVBrW4;tzoqK$(-0_tXPGW->A4==En z@k(!8S|{Dc_S;zL!+-k|jOzccgQ>ZxgFk!SDM?Ln5K}mNFIcWLp8CE}pbsAfm=Z5S z9jw~Akl9CW#HWyHLvLf`AEQe}9lU`L`!b9k+vR^61nOj$u92OV*fSKw$Oqm z`i&rVET=4%oeNVi4B8c>PpgMZ3MY#L7LTXT5I8piqvk;k+7NCxABpM7Q`tZpxt;bW zzfG(PaOZSeC4tpnAS@NDrs@MXbhsI(;{uOTgo5dU6-%j1lYn)R8FQtKW>lGL<8HL5 z^t~!1R3j%$?#mN~@c7I%n{vbh#WVimV@^Q5E=g&pfdRDw%{?Y^b3&JytS>2Vl;nT7 zCm#U+qr|n23aRN|WBQLNQS?8@7#Lf=0{vsJ#oDFMpG$uElqXPhARd^4gZy0(a*7YeWNk=d_a5y|-EPqVJ%dEwN) zd7icI%1g(NrSz;}VgAK=W?GX{vUbI>%^x4WM%P*1xp~5x)~wAs+MNM#5U<3=rA#%3 zUEpHrV$D&x8Vs+M`|b=h>Gf*4G42Kj=Vdc7WnnA^8U{wRemVuLbiYEFl zr!m$OOkKu!`0<0aFzN7(jjq^$SsT**miafhCNXM&ZMrmT#@1vo5Hyu!U2f0ar1~>X zkjhH$g@69GtMA3+4+DL7!@adEo~WLDU1>MEL;;b@;p}xOsmfN54eYhy44k`IWKc-L z?9w)>4KuTq(yJ=BBrXw_7G=G?#E$)Abtu*tlYGN~eEy_f`5}@x=1DRuvSY&i=}Tr%jeaQMrZE7`oaJesHn~^$^1Ory2i2>sm@e|h z^6DcB)UA=}dz_Awa=FT^Axh9#6p(-W^)0=$n|#{4YV0)8gCA!UK5^T6pW#r6qyMQy zREO%mf1=MnSdgE&3A~}dWGpsUE}1>H&|wA^USEK)V$=l?o8jt8QGNqHzr_0}(=1wV zAQ%>ciczBLf+z+*!-O`0QUFh9&y|`aCn4DtNosly2z{6|iU-rdORV2(P*{n1B8LIw z06{Nx|3^(*RcR6c&njcd#!hp9MV+;Ym67`UBeBIhxqHcTpa0yW?7IJe^8~OWW4)=g z<06#)PK*G?{y$}1sWxZG?_hiTI|jjO!!7!t3&hJ(TS-A(Ixiff!78DV6?kW9)M@}5 z(UwgOh?Pn=4Hhc-Lz_f6%jg_V8Q+cXr+dt7ebC{CF*M@K%=POBu+uM3Sd<^tFSIK33zLv`DWj{>{$aqpiS=wYI0=3T6Ef zw1@Jo`v$}YwVwehooROc#Sj+Yu98U>CP z`PZ3iz1G!u2MT3qI72`2c^hDOim~}7%JBI@&CO_bINvvc9(_H4K|?8fF|>>bP0b3| zC;-2Z`4#iBHYqF&&3L{Wa20@+pyDZkzzA6<<}WTJ6G4Rt=IW6ItDJY?i;QKSd*0*m z{1$vi(I@=LB2UDd)w_e6uEy+nE^(Ez5(DepIfKmT(R+Y)tllNb#rWKfOwXzWEa9F7 zN|^E!Mtj-A-1wrJaL!yxG`<3X1?pLX-5f8ioir*=a2I+<#qZ|B9rihd1AWDgx0B!6 zMfQFb{cOaA6YN^aY5Wp`Hf@(3_LaoIHY9Hof7`8`(L%p;n4k^fc_X|V_#D46_;E0Ba?1Jm+YIL(F)l7H`v$`SqEcw_#L~?Ao@HX zlmEpPf)Btqw&>_6+i6nc6YW&}()cEYleVH{ezHcvSudna1X9`rrYJ?$sx78o3nbhq zxfzL|QAdFSVDvn3RCFn^m$_fY!-U8~W~UQ>(@6h|ekrI2A8MKsl{+~sDDalvTVkbn z)PSex=l2_=rU8Xe^q$CywZJdAjbATE;6to@oO%_|@JmZemHg-F;wflFFWU%O-^riHw?xl?Hjc`8-*Gc608{tuIem9T1-IE2%x`8oX(DMFe}) z1qclz#3+(pI|)>S9oN(^`_ro0Vbaq%Z-2fgImn$s553xHdk#m8CmED|v=b9|5@RXl zLi9>LXb$u8{&B&s`f13>fg+xDu5kouy-K?X}A?*QoYa z`Rae#^a+Wl+N|;_?_am#us!OP_|sh7{EiA~i!rX>sE8g|HsF>}QynQXJ<7fmxYX0I zBy;tMsOHb`T3T)9n6)qY1w@hB<8yu4_ypkk1Y*W>BhDW5DHP%G--~pzrLl2QZie24 zoke$_ImIcdSChYUDI$kxcE-A3wHJ>*SNgjIX%^lq$y6|G0llC&pV|Xc7l|XqlPoG^ z#O)m8(G)0_USueH@y$r>i*xyr*8Uncy1x6$KVMwt{#VB;J2Yom35)n!t^RqIF-`7b z_ItGeLMRB4pT-4bcbXu$Qnm})SEq-;iYP%V9xEHqWA}z_Fgtw+-0!Q>ONz9HO8(>} zCwvM(!_5w&wvvby);>P9o|q|BYSm1z>i3`83o&dw^!7G)H=+}pZxT$YvLtZ`f!MGp zr^BuRseJ#bPliCcgKySl9$?>0x>=d4f0RglPxe!J^0~-~lMK9tAc)&N`hsx^bvX?DfZoE{a1$ z%M^h=YRG46&=BjOtViM#f9>27Z71G7>R`=65rC71G>n!+llx?4tpu5jegM@je6nLnHrJqe{NhpM z-0%L_%sRPWvuW;|eD60W63QLmSqA^;lo{}e{JX12zu@;HnDcFiu|uSb+(~<~<-xCt z0r??MMLq{Nhp%5N%xK285wkH%Np=34+uwGEB~~$>6D@!p5&0gA{zJdG5DXlN^quwT z&iFHC`oCjx0Ra;f?j8Tf@4!aWQws1Xj%5o171B<&w5zfv3w3JDO^GS2d25Z-`iy2& zJxT56!kM>LR{{x6ouChbK(LvO74YU?82&6sCcNcdwSQ4}2MkT&dGPNA=09USAlW^= zaP&=2uOuVW@dp)`h~4W;qHOnp{)PIjaxgA>{=6QunR|q!Yq^$2YtCg!)Z&k$Gk;E1 z^m0+{;y*Bns-hI<=GSgWHQqG|!NbO&uiGg}Fa%v+5?w|7+or-Y7G6efz6gR#}$#cBjgS}gu+HumGs=x+6$vEZ1V|w+ZV6r|AC0vA zM$DCj)~(%9OWlUUU5P{J zSw{smjpH5f<6XbNg_JJcxZz)gVf*hA|EG2oNzP11&M@<`}J>h@_YW zu<%k0EExhOkd4Qor1}tZ))I0dFl9KW?y}{R2vRVsh48KtM=|enr~WFD$TN+&H4tDl zrFI&UT+YjLXk3YxvNcbQI=n|EG%YdDaXX<*9&}CG`L>JF6jiC5=X~R@KBt zxzXAf^UjwXnIk(*@877~E**f0#^rRoYwpCH^%iePzd17rVSF5MCpy;FA=lR7ldVH< zTEXUev-BTPWKAuJ{;;3zwqJ;`#k+#~?f)fS0KU zV!e{Yupjk58(E3z@AB?y`wox!E5F`1e;xpn4~n#Fi@$yFW&I-&Jk+YVAUunQO^0Ao z&X#2qI`87*d!-)5^y?Rb+R7=VCw0)+2C>4j`+|z?w8*ln}hh>2Z^TgSL>IM zMWa6%V4S@53bJ1mlhz9B=KdHv3nnTRJb%ssRMgXCm%J)7t#Lf<>6X!`QK19io_=W@ zLm9QpDZ~}}e$);q9s%=a<8BuJc_n@0?4%2`=*Z1nmx4g~2`xccrID5>Dlkh;`pY%I zXDmE484K_dPfWFSxU?+#@%w@#$Ph`ZKK$EG>6#R0<;~tWY+!C?&;|-F{XCWG(UU)L z^rvID_t!t<$&tgygBz@KsexhIxAoj4F^mzGhZG!6#PiWYX+?+A8(kPR&N`rig)w{B z1!iV#q2lj(0OZ62+0z)4bBw{?)A#S?c(bI;3Y*a1f7-pU5M)fREvx-`*7`}C;dZ!| z7(2)cSIjH$h%VJ7en^5ECqOKs*mkFwj9ts&(@3aP@qpaOFAhaKI_E}?xW@5Z`Kobv z=J^cK16?8f`Hu9~S>x8pyVM;EX^&z>$kr?4t*o4}xHxtGol&!=rx|rRNgy;b;1^;Y zg{|RLO&jdtNc;7gUTQ0g|7_o7P}1v1X9U0kC{>@)5|#quBjB>&KguOj1@1X3tYM*(o&$GPjJ+QzxqvyXA-+eBU?Vs9SQIE3UBtZ(w7!1X zn?3jfrDOpUf_Lwelim`JA5RhG@*g{8=X0;EA|G^%b3m+i~yf#k0}?^naJ~ zLVVU-e)M7npYZ7!4HFfwdGxy#Za8o5w$9B?oL=+Jg4TcUmHXjKALugUWGWNm)>skZcg{a$hM#qvU0oR2g-2k4 z;lBF4(p74D-84qh$tt%M05p@*6B*_@7me>GfVEYu4bpwjJ@`F(!c6x~_@~P4P#-=c zILBpH`BW#s&E`C$3sT%SWAu6*E#)Nr2m{GiMetid6vG?D{m;IV` z8aNaAQbO)$XD7fC?~O`MG`9i6SJrM-_+DutsVcCLDyx{EPG%VO`woT+bf3vw zf>>4G&x(p&eDcsKXT)6vL!0PPVoiZ_CCwCmkQ$nJ=fBR}y!P%`uGPAphPwAw|Cd!X z3uz_xh@A|(2LL3CWp0(aBJWb(=vkHt9o0)L}K7 zDuPEY*}JenN!=qeRrzXuG7PzY-$_3KG&|`%xjVu_Bjp1M_{eM-Fp_w+hyTeRtl5~3 zdUbLD&y9}~?k@Zp`xvK}(s7$54V62sqC zi9-#^Hj_exP)TV?8=@z|I@zUcAymYEC-QLe%Ddhrhz#CdBkfx8EGJ~YuvrXzLU}fx z4Old-w_b^se#p-F^?%F2NI8Jc@%P-lnqq%|Tj!`SEJ{r>O}dl}4QN&}7x<)M{LS3^ z4ij55u@Sxmtsxl~qe%*9;0Xw-9^@vKd#`U~pUDpJQbQ~VAUsB1BcIRi=85+0N|nx+ zgGaSRrm~`?g#uR-PqKUPT~g;9cfGwfFi=m-^3_%j{`&9H2&(@dS%(;P!5@G zrvwwvo^jiZhG$<@m|Y(q2o@T79M?WuWgMDb+SJfP;W8C+NhdlD4v5-^fu<4;Kny@u z&z!}N8fBgJ3Q5V~EHt}{!wY!^@4&o6`N2-ASoLNVB4W?dBS@8eGklHVEy|`pGMQKO;2Zg6 zmi2S3j+^5_g(75T8XaDJKt7QqUs5Bh!~7fggz7lZ1jlEwTq*gaV`Ulemu>R@(*iH= z*8)lIK2B9(wC1$Gn=d6&*(OLeBCo;WOhm16V)?qqBb55S;n>*Y;M+_1d_ll14eW^r zUJ_#P4{9=W{8Qj{_Q)nHX||D!aV8j=i~$Q006{a%q4p>q&`s^P@C)BhC$qjX@qI*7 z1s<;OivT9w_c&T}CVh`9 z&`kT<7QhAZh2f|uU8@+~ z|KK>^Q39Z{gZKy_BZ0D3TUrt9r08J4IPVzz(=ezhWA5VRN8y`c@qZnC|JwNbfwU2{ z$;Co@yNh8Nf})fc2T=J0ppoiQ9szqH{yY>^3u;`|y9yc4ZzB7n%SA{S86D7hUqmiZ zyqhbUq#W)>4#dphbkoA*X~rZNn)kbkju*I1x05w;Qe1rAbOESo)6rkD(hXjpJ#FFj zby@V@A8RnW#IA6SSc(=UOY^Ta5X&W!ru4v8xt$?o{Znen~gz`G~ zVrP+4(-aoWIzxr43rIc$O#UH79_CE9izzteA$KjXg8wIl;po_A#8RlK;g_7}N_ zR$4ygJX>mZ#(A>{2hQUv<4V9_3NT=Ht|viR{=OA=|5{c8epNgK416o6w?;>Y&=sI{ zD!bWIE{IsrjrmaaE^?5cwEGz6QL3XUJz?n6Kur6%{pA?{g+dB719hW=r$MJViWJuz}*gxT_t>E<`yzv%n_GrkTGdQHlooOB+Yo2&jJ4em!Y zJjM48Fif%mrM#y_3k@v}knOx2JsWz+5#kr|B|-t(=OKakxA|p&RP*XftzC!y)YQ7_q8QH*AjWC#skR>B|EMS*yC! z4ayTQi@j*9ky@~xP8oM$TF=?!k1a#wqz3&qox(=;m1FBYaD)P(+E z|NNnU_VHAB5~~G}ZptT<@r0Xf)3+v~oY2KB@Lpese(f263;P+Hl~Dkyahl`?h{9G8 zDhlSCu%I491gx!1?)^tzC@4jWZwqlXg{m)U?BF@Pwj zni!ViD(ztt!p7TE*0$~BC zkF_F^(zMY2v8u<`nSeq)RSLH|%K1#?>;G_C;vahBzsVM~as9|AdzB?6eRa3w@x`Kq zuH7`#-|g%lh~?;jKw|T+DrO!G_Ijf;Nu`Hbs+AytH|2NenVzwckn@CeFx7uau3HRR z1~P$E76oC*Gww4Q9l1wOzJB@g#U*_Q1B6=H|LHz$yIaBYgr*dHePK!~^Z7ch_M~fAeSYq zJbh;m?1(*nm3w!SE7U}r`euvK9|xboxuVS*xn;x(>Q3Z;IU=w2q6_mfl2hH4@}EH2 zEQBSff+T}b*EDZgn7r2n0v$d-Jv?=hSX4w4jTEl|UK93+!6!ml^7!C-FD42Um3GN~ zNyIfDY^M#9<{(fI*wj86%{X80Gu!qqD=U*+4tAGA`3(TU%0)vz(;LBZhqWcUrBPxw zT{tD=%z?p&45e}OVoM(ZL7|;GzR4j(?{Ag;@3H(vu4V=KGTN4`_QAC)=aj1&enYE^YYus$OptDe?2?t4mb-g34dw z*(PX?o8`>w?i@I;?Mt1-k@y-%)Fi{JHN zFZduR05F-M;i{R6IUkY?*mLS_Gxj%aZIrB6-VcwRr{Avq-DA#*z?pwvA6oBO|2Upt z$3$U~*rbXCrx^S9waUN_sXKFgLZ#p;P*89{gDO=v>+^O(ooL{B@ zn1sH>u=KVw&*(RvC6`_YsyszG z!NDEmF0#BEcn(#BtC#CNU>0Rtw7>3B#|mRZ%T>yc_@`Sh@wj7O$0rG$2pQSG{N@@F z`0ErC5g3jfrn@%s?eQzFEKRzOjoidIPjg!LL(n`Tjak@Ax=iX;zmQtA!TFI~RR8~T zyeB{E)3Uyv!T|(=Ohy?2aRBf^KgdYKAlUTq+R$6zfn z-m^3mM3#wb>)?SXYnF)gNr@HZkvz&P<5j=GQ`bCm=X@>H5Rf@`;VX{@xqh8M_NPQa@HS>i`_cihXjScrpiIkV!}o>+(}a5{T4M0M8zs1i=H^!0$MO?EIb>K? zkbSA5M_(cF#ADX$OWdaRpH1aYJX;!e+G?ys%FmcbIaaQUDcBt40OynKn)iQoHtqp> zLRn|!FV}L|*~P{xdW?c^x8=l44JyfU&e$3sC;EDv6>mldy{yIMJ7vHD%d~ zAn-R=2PU{hie+BIMOPSRi-h)fZ<*t+V$yPk@7yKdpKj7e3-q&hxPX?bQt-lY>(*q+ z)HvMznUd`9d{ozom1^i?_D?Q4cF z%@98*1Hrj^oD;{EuaiJ#TcRhAdM)q#*c@}-lBCgin;9zy(Bs>WORr)Zq>!;CzhN~+ z!pdwkqzD)lJ}nSVW$2an6(=Pj7hqz*lIN zyKWBfSk?9&L**n`QJ;u8+~rp&Ii=G_Y(wXJ-X}(b{PbiWvL7c>zv=~RL>rv=qeA~4 z{eS7%Zxn4pX1~{-AC2ZPuN?>>fcV1K(JGy4Y`2+EzCY>M~~H z*0?Mk)p$~(yuUu47A(h!9Jw*l1(j=czUY|rX6Nq|OyjRRxglPr?H3v+tQG(1AfC;L z08%L387oWtvfBYf4@8J@;Mb|xda>bwx^86O5Sb`egZB=JNndkEWu)_KB$wzxaJ;}_ zgsK96Lkmt$K!9T)da2)Oq~8Vt@F}4JLgtF#wD`!o-dtH1+VRYMp_>S1)GWX!P4K?M zN>Pob7wEYD&usQz=L%oZBO5P=^XB#SDmOY69Ym=xV&tio<31hR@(V$Ehjs!x} zSk;VLJ{h7_$uf?rlt`y~ayl~va0~6{dC~a`0N}Zi{h7({Cv99+SiWs4x(V#Y#V_WI z(F32YsPKpglV7$~^21h}6G<0a2YS{Duv7jF?(=44LnPK*oy1#VR}haDS7){Bi|4I- z3FPH9Y`I^YG_82g>}~=s%XsUf@5~Iy1i(oJnEq$)9hkk`suA|?ZygN_q1vQ;Cz4!J zY(-MVW6+%MtyUQ0WvkpBZu}bLFVIP@_PX9xp&&0x9-0!H+Wywk!PI3ZRcc@*$;F%M z4GRjCDgF~h3PWVSHgI_+p|JG4ZAA?NX$9;o#8SUkcP&c7kA@1q1#3%k)M|tM#C`5` zFG?xc+z9MlRqi(42b8-K!~cj){}x~$trClUXV&}OUf$D@R5kaDE`LP?q1fcC$yc8T zbdpl)Vy~R7>bMXmBKvA1JEM`GZ1hGc40F-~Rr+o1<@q}kKE{((G)mH8=6&b}2jY|qn<9Gf1Wf92@C2c+vLR3Bzr zA?v25%k7R!x^5peU-B9Cn%N!s9O z9873t<$Oa#3&yxIlL*NL85Z_5#CkcWS%FBq-$qlG$g^yoM8?Wk_jHEF9*Kfqb<&*EUShd%e!8Uw5UxSwIZG@0;hGsEhILv>8^fhUd zX>5}=9W&5Hj@adb`Fxu28&y4ka-85JINI4I$iz^gc=K=P`Y)#tpu3iDFsEl+Ozo7# zjFTydsfdk~mR#YOxnB*Y#Omu)8 zXWm?sSX=gDU?{JGi6<*-$8;WueLi221z@a)QKuoXBZ0miofMwbvd#~7s&0Q`BuVBv z3zjiG-^uCIZKW#?ExfD9Ty{PAG=Apy#>{yEv-_;c0q7>j)?;41+ z@K%c;P2@r#$IdA|aCbgc1edhK1fD)Ph8m?>lQM`q1G{@(Az)UeI}iadktMKwXnVK$ zjd=2uH7>#mH-KYZSnD4s zsmecke7y;U$_dHTAPrx?rY$Ks4+T63fUXttRu?@~)hAct=z*$-pL~1pT||A*o}tGQ zh|`@+Uo_ z1bgNfB6zIvQ0={y^SSz8iozF}mx31=$B5yyA4sv^a-yPnhzN`nvd`(_FZE6>q<0fq zv2fgWjn4D)V=@DC6i>*`aHyc6oQd#93F!|g4hbK8?fahac1;by`-_ub=En*Ikp_(> zB`}(Pl*D*u6ZHsoG zVF-J%0Hz$_C zn>Xl!3vExtk~@KwAYD-nrB2v581bWqV5kaweI^#&u1Yuwj-96B%IRaqCc1c;nJgPG zP8ogupCXdnY<#g)6bT^(yp*IbvS*4P`N_{5E;+uD0SrU0f{GfCn^~izcGb7M4|uC4 zU+sO>+n8?XD)SX;hBw<<(GtH+>e~zV8d^LW65Y{!G$cVYxF-lXGWpde( z@zitl1v;MmvR3m-e@Re+uriZ|4Hx204>40nR`Mk*_})nPE_3K_`rh9?v0R)kx=VP* zv`|+`xDcLic|}NX^F13lvL7OqO%(^qqwNvqyGy4W zOO**Sc1^N}lh-nq=k+@u^@?K#s46aN@c-%`4-u-2rXp52g}7swM}eb$l%3*Ge{p_t zyZWMW!m(+ulgW`#VQ)L=Vdt)9$jEocB&cQx!OS{Yos?tHO=;G<6D7VA72`GNZR`(c zDY00$)+q{a5r_pY&yyaKnyb`(Cs3XMTKaB~*sOI6mATP}+z$(I2Il+kfOF{-YMS7~ z%oH%F|5=(imh1^Nn3lkU#F0Mda><)>UqZCa1uSaN>i*Mtvb21Cx%TB~mVpG|(%2lW*r( zoIh1c3T2&~_33R`@G}kr%W+rTr(oerXB#IbfyxmWH&A)sIW$%Y6dCDHa#X8=aaMMV z>q*vIZ`fG@uPq5VzS~C3<@-$scMn1r{O-fo@!jkbSXwJe9<4;Z%qaSfqVyG1XxoTg zNEpY8^BT%Bp#Rxz+J83D=7in?KAuS0)`|c1u)R?MSHH_U&mT`xK9PQ)0KgNJxT%E7 zXIsR?6Rc>-nLrdwDYqtG4c$^x<1r$?;}ng?1;!WF5=`lJ7>Hhf)l?ERr!<&VV|3g& z@^fCUdRIwnPJxTqwJ9*Y=ebL`B=gHC-DAHd?3p!a4ud(LnfcP>RK~ZcD?i;tO z?^Qs%L|ihQwj`JN)Gy(%)XcX@5H{U(SgPvyleQ0xwl^|5`H(7DT`Vz-q5~j%{Ri6b2}%m4yLsufS_C90e`K2AHX=gsDX3 z0HNRRwRas_16K zd}=f&aaC1yBbj{Udd00B;a{T8h8^*Sz_otXMv0#mLqE#-4gq_`R3~xU~1ZJw~=@p!IH_ zcmx+x?TcHjHBF^+*%=6SXgtd9I8!;8xfrb5YP?q5V7c1AINn80ij5X5>?Wa!6e-IX z+{x%Y`!IMbnGAs+PWjT+UDys=^gG>SRfWLDd9JRtz-Xa376Z#iCBqgkgMi<%s7qlK z=VhnCwIT9SudGnA)~0I8;F(yu&!k-s+{tAS`< zlvP*~8ZUJnAIu!DR#bwlEi1fk`a3iKcZ~E>$l_vmeckK0p_Q&%0SH!9bwoT@4ZCl6 z9mY~zAY6>8_qYbMkny~wX^=|YloWCzC3BeilBGQ>5jncRA+`VaL`$dXP59{dqmApM zR6UjLDFgci{kppVc4<2TDO9bd7H@SQDTi`ngfsdF@PM`}uX?MgaN3T&FnO|_bywlxABeVO3EP`w4NgY+I3P2kKqOFs}^%MOFHJubFD zH^X|cya2dy-LMdU$=R$XLjWsBT;F&jorskO#KY1oA}Z`se;68h^TU`jC^Peh#gzTU zyNzi22`dnUoUT7ilwUNpw?Cy2i3@-Vfl0Fs?uGD@QYUvdXC~xVX%G*@%Bhtcs;wCYKi*i=UjbM2`!x`!O&&y7aMBVs1b! zR9j7_Zat-7MZ?soxRb1K0RxQMG(_f1kFOgsbGrG`cf^u*i{agOvSOE(=}lj)SR?7n zI22mXf-sn^j9mrZkeBmElDuEkVhLcDX|eZFJx`u|eNpCn(P&@T_^c$#1K?+#5l}S1 zutb&(Ni5}h#IHvj4*LNf^O(!EIS-li==Hx=s2P2tZGp@!7T-;V8xR*OFLgo3oMR?+ zHaQN+`VN@=1VDxf5?~f1P-@-VY>Sts{7tQt{G%d(ErQe>FldiOp@6xYIV)?lIZ>qe zO^ka-D*9&yMhiV@WHc;~nK*=U<-wY6GEyRII#{2nIw-8$a^LcrZUB;^#!DrsP2|19 zhxP=MvPWIhdtEdarpKftR#zoN-UApMvQGD1x1oDNV7P^mIW6=#E90UmP#(4buQf{$ zng>+S#m!0tMS=WEBwrXRN0qtn9zVVzsj5IsMpLWo{vB=13RgqLnOZjKlc%KH}@8o(V^Shsm^y7r&? znu|gHH8LaD%IB$t4;K@{@b)_>DYSjMy>0@n0@x#?2lqrC&OI1&I;$}Btkg>>BhcA0 z#PL;)F^a~&MLpo@GHBt!4-9Qao%*X78~Z7Z22w&zv7=C zXriK`DhzGKJxUgw*HOAk^ybC+I>2G9{}njt)#=~1$t)lE_$?`xh=7$?st^nj#0o;i z7c`>ldg4I!^K7CZ!y;)-1aZ{)%L+-+4>25)9?3^!_e|EKWtMmvJ|~DkD&U}6o9Wcv zdJ#1%Pj-Hq1OW)NeN8}4l`1@dTE7>!E-NFp-&ECAJirv~S_3RDUlr2p|BpcNf85UK z9Z&X+EmM7c-@FT+kI)HsA-0wdZZehc2qJ~GzOkJOy47+=-FTM^(67xNC*Hy z6VoN*Jxb=Xf*2W5?wCe6(c2yNhsY1SktLXr+mG*#dweZu13zYD+D=rx(EHp)Sfc)i za`ms;^Zl2f#l4N5B!^TmV!`h?XoAk^%i_*0t6+$pxB zht@`1{!CEd)dFHM0=Vm=dL+dkOjKefN>CF|^h|)tL~8$MoA|VQo279@VmAVG8(+R_ zD>t$@+V$yh1n0a}^GAJTj;R}}J@}L&nH#He<431hHw3G1D^|q3Nx)v}O?$rrr~39= zrju!;3yVf;JF9#V-PuVtn9| z*&^0QfhC>!wsN{Kx&HM@+^9B}B@#>|1{qfib*rdpY=^PL2NeOEO6$`d1;GRnYAmfG z3jP{{x?z;uK|%!U0l)j2L6CD0sVo9i-O=n5IThfMToF3eJE`+MU_Q^4JzLgMp|98K zgoXr$Ha#~x6RsLNQ!?*&yKp{1b!l@Nn8RD+2wjL{Pi9uTiEqLH`(^2%ez~MW(dJ-t zD(sqdb~ZaEO2%hpCBcFjbu#%va(Po&ec8U|ByRG|dDBPz_S^W!uOnJuB`j#{4v$Z( zv}nVE>H8LjPh&iK#O;g(x(9gq4>f8kR9v3Yysi?S#>!EGP3CNPTrm+5q-Y3AdfO!Q z(rcM|shhW5>ffO}RlTW-%4CMvA3&fhr%ka`tu|C#-5^A#ey4B2)Oil-2f=jAU121y z$#SLiF#mH?L+UjKWVFxUeDi;`v*+?m38c*@wNn{MX*Jn}(Rd6FuEfxmSY0&m4&o>0 z?h2P5oURP4bFkfE2k|m7H+SfJCKE9sbku7qSo}!o6u&hZRqfFY*YlWVz(2 zOw!}jo;>kAE4tWd+7`cv^nT|?Ox>zLanW&-$6QmATL6!Id6d@l?ff+Nv(B66f$f6L z+RUTRDk^!wLPnL1KW@44b_zyG{T`0zH4<~21|F}MM+br<-S@$1b2cn)89UDd)JBgi zH(w#SkeJ*6v=FR4=s*xWUf-KIskzzXy{IJ8is0e+)?cY~$(0&es`x|@DljwmQ!w(T zUQw95OB%lutoD=g{jbPu*2=eC}Hv`q`Bs7(CXuF2i@eZ@;Qj4BqiMO{>%=}1Um zOaU82r!g;qfU+*nwa>r}%y%KfUde+|`^Tk9UgG%|2~OKeMtl9aW7ENjjcrk(y&nk4 zt!qbsskk_XFWA>?;0hV zQfTqpw`pc+ot{Up^|_w%$x1HAYUh7_w#t4ZP+kn;h#=_V?MF4pNhRylh#7V6SkWfr z7MD8oJoxeB$3zuoqTYJvLzK+vA7$eHw9`ShdJ6Cvzc^H#aRHthcf^B)9{M{JwoGU^ zXN^qU3ID=0CGZRhD{pyZRen)fWS_vP^TNw5#@Krxe=5mDwcDAKnpAl18e$f?@Y5h+ z@_t6%ibpaea`+AQy28Y?<)7QaUFL7ITTDH9@U-`4wzOGs0#>ZF@SlmOqz_3b>Kq|T zC0KNMeUyQW0(*){h`q{{>uL$FDs3u>nqj7WFu$u07`=Zj(&{lj=Z*&& z#8u6T_qVA3tEXwHgir8rJpJLe=jr?W0HHTX*HK2}3Ft3!_%0R-0$N zKzUwxtCZKz8dvSUuWdtu>vXC4@J;|0vFUHPSK!I=7>(IDnzlR<|A1%lV{;lWNpk_8 zA7&g1`<^(So%PHK-Qok-NmduY-gncH+^Bu*LffsgO0%0@PJVC@(zx?|R7qMeogOFe zmGJR8+bvX-bbVs?bgH@$isdShMO(;l8Y0#l`o-YK-GASQ58QK!4{@<~Vk2r*x+DAEM5G1a<`;6BXRL z+riLdA-yLRk070}V%iTRs^6b0hut^2j#c6i098s$wqV4|Y{w7|rN{9PAq1sF!QPDu z!=SA1z_?g543i5}kM;6-JGnjZk&ID#Z*g35F|}@LGvj>J_dMfb=Yr)1=khC-glFMw zQd9Ge_4&t@`N`n{8EIq8hlrDq7-Ar>*Vx9gX+#?)DlOe$H@dqwW>!V$sy}GhYFush zD+qhhA3u>*MkL$^w~D2g}av#&KWHKBw@fLKm|c89u4h+m|B zWLW$Gf~Q2DT!5kUDq4M=i(pioW9~-$QH_K+L^DNmNCyC#?r_|cZS+?#YX1*b>y3&M2<~1zb5WC&l)uVI1f2l>&#=K~ zEgQU>&!U@CPclfMP^KSCOygC-sYI&9@w*Dkd>;KBm7gjF0TP^@XimHp6NOb=L0VJR zmmeRC=eL>q8bteZ}iaDWiWUPxr zayCz2$B|$dWgMVt40hd?7M8W?itNCsPSAxh&@861Meym>o*qL<%xNJt+p~zxrb*Xy zpi{SBVx}jvQ+uYRb~NeCh7&u#Oja5lzOGcLb9>gIcPb!S?yd!8(N9#lj0+lwc@;1Z z$(skNtkn74@TL2%bucy-mhmNO-KR;P1;ADYazRQr#mv@rDnk1Wh(*4y!J-w#B9N9U zXf8rVb)J=*pIT6QG~zud1w8ra%}$Ad_5nK648HmSIc@ptgpybIpMP(RxV6 zHhNDS9#)%?h3^aE`F_Z-*BJbo?VfjHk4!pI1Ku{^+vZr7_2AUm;2_NDA_Xa;Q-WLE zS$1(SiG+p4uQ)Ke-qagN%S|Kdw&{j6$OsFkCR^BOxVQjh7(C>m#l$bLcmLBxV)Aez z7V-JOprXh1k7HO!xP5|8CY8~pL@I)8g}gP{=6dgGkpw6$+46b#Q|nMgx{xsr3lz!q zM?^3-RIwEH3fDWstrxO*z62SYAD4#e1FLu<&V!5x?EX4NS#klss9~iESlX`3d*Z1~V=weHSy%$}R@?$%gy{$)!ww+in#! zF4ro(@4Y8I>vrL}CfubHecg?DCUX%$hc3VCaFP%EUa}xnDOlR-!{;1nGrLT4M`v@JFJz~^jBuS!TpsjtZcX!s9d9*ueQWfw?T!ZLO}SQchMr`mrKW{aX1N(e zq>Sne%Fan_*XEO7+pAV`bSiREiSf|fO-Q%?Ovj8l+?6VrXDTv%7UCCOOpO;ZzX;Pk zDT;^?&1XIW~ zpgfTlT+GHmS{gC%;*$5TXQ9Lb3f*A2{MyI7CNAGoN3Fof_+p~WuMOmQ+UgbhiN@T? zv#Dnrq?xW+B6lj;)Ya4~drR~3N_qGX+24a&N^bukD`@BU#<{g!uJ21NDvuS6MGdF^uI`9>F2KFkGT7gjSbaX4QDN*%07op1tk z_z=U~ijKi-q5!#sPf^iSl`P!iy;By zcFv4@1$p>D7@KdKVl(zCLde_};T#P`aCB_9bCX2UNJztw6!>D`i8p{?fq#uwS?90G zGp|d8{J0}572ZD5Mh*EuN)jV%ecXBW0W{oe;@%30fd5iLKdPm=lNfPq%+zGfN%v3g zox*=ssJY`oh>`oNt5Iq9yiH7q@Bmt>&!(5$%7Mp2IgC^A-Xjo*K~={6hWO3Qua*cy z^?o3Dh{dWIMsJjC`CaMW0n}+54PYbRmLHveYh=!Dpmb%M4$aS#HxYjrjSWk>>tE2* z+6sP4n{(27-ELRJg5(EucFh||60$bnrqwP9Fmwy%Pb8MTF1df%f)u*8+H~$7Ip;HwYIF>H&W% ziDGD=D&I{ft)9sl{o4O2GGjMHX93I#GH^Ux888qc_9u#Y4)JzUN!9So{mt#2R*1NR zEU;o~rt7YJt{@iCQ_NOUXYOdJY-wa^Y$fmoOKUzTuCLr`F06~Y%&3#T{5vbIAY8r_ z1A6wjC15H>?CE|;W<-%KUqXwp-tNB&!@t>~-zrhvHUV#`Y4&P;pDyj5*UEP*5aKhf zO(@{iB^@M~?>H8_l}s!fd~2o;BR=|!g4J&fUxpxnX&2*_Mh$vka)u_oCA&Nm3J<@# zI(l7fX?tD7l{(plV4Ab-R-4Y;&d<%xRejqCO7jW?xWTWn%_5)Kplo@`6GdOAJ?#@= z4sA|aSZn95VDobyHDN))Mvu?g12i&+%^#wqUu`uU0Lqt#)2sgW_JCj@|4%o4&Upis z>Q!iK45-wa3pGPaf&2=rAio+#baNjNRT2@wO?{I1+R&j{0RifK%|f&`)rGYR$$lqm zE->7qb5pt{cXT0qpnFTizxgfTfq<5R@SJZcclJ5mOXfO4Ym@>JLdB;lJkg4SBH7WE z-4ih{+4kwy)xs(KC6^VH+{a;9D&_+BJmsWfdBo!n9yNgPD1VY1p@& zJn4zlZ0P^Hj)Rb2c6Sp!TuB-YJ|+nZ2v1;xfEnJ>j?qhf$-YkafR4BsyFhYMy{Odr z9SSe77Q_b(;15Ul6=OcylQCKTu2cNeUTU}qK2XL9(_K~5%@Ut4(i-hxevr~Iu zLx=vRHZ(@DY0gYa?6A<@rAiC0xp#zVlGxu3@4O7W{{a;SC7ihohH9uv%v7z{L3)S8 z(z{DrO^fkHmB5I~{m-rZZFppqzi&;&#jsu*@Bwsc$fLG_$um?%hqMC z&%zx2WjBVtP^|}Co{Q6aZ6zs;?8~C7F1`^CJ1^Zy_(2X7bYoq{20(*SZSePM{`U#gA4-{wpPpDb z-JM*I@RyG-4!`=Eg@l||NStnRBAZQ!99;xmbv7?@Y%;LsWa`PE2@kkh*(~Rr+-s+* z1RBZDQO@7IQT&!Kd&_R)f}+CB5^iA@!ulGUm)G_EhmMX8{S7!&2>s0Coo*9R@z>mO z(M{VWD^;O4#Y-|ab~X5oTlXvZYtN6@Zu|T+iIO=U2E?BiHi`X91C*DqBGEpqj}+l$7D&EF7!tf;+|oJJe^%saIoLUy4D9 zKV->d_m)G9x(G5YnES7`OgB_t9hVJ)i(5eRPv+l4N#*Fq;R1+y8J*W}1u1YXuxR)B|->yVIK?S@r=Wvi?Yg<&1&z?ovsss{)kdxpBHrU*% zl4uz+vqq7n81o@M=305{o|^E7pBl@HaXoU$#>s4~6ar6q$_>^`Ibg<1b92`oUx)F6^So==W%efk}*{VX}Va81`> z^LvHM=Z&hFV_-M~d2I}sEHl*6`dEOa0X|3PUGxC zYf}HfSZFQx{?aU26z{Nt*w+vCy<{bYU0ys@&l!fD3|7)!sW`Yk zwP8dfD9t+ov9BF)1X(e~WV@79Xc4&&h%Zr<`mw9uqoG~pW`h3{r>(GqB0TV^7Xww1fhMBuy#pNKy>S0hH9ttRL!axgX zJG41f=QiawbD!CJ;oTo?y}kX=^5&>R6((v>RbPu>+z5EmCj09Eqk!h}QP)mu%tB!b zUtt^sUQDfzEq|B5VYf&{KVC7Z=>a>q7B@-$E=wXP0(!d)k3nk;tu7!V|39|QJRHit z5Bpv&0`rma`{ z)ik)c*&D~w@r7sG<(v#ps4Dz+gvKxfQ++tGxM`dcOLObXbt>9aOGzy7ek>*a9;?Yt zS~5%@+@f&MS>)GM25$D`=9#}z0)HfW3lv&?Ry{sE{-t;rp}6Y67 zvp9ZreZffiF)#!DMIAie8USOtw9Y^JV5CY)UyxkuPQSjjGU4~FvHlkD^kbe*_yDY2 z0->U{wbekg5s-6-?FH!7k+TY$k5j4NJ#z#{54kA|qn}JQ=PY>X=V06765qJDV*}db z*Oa96CGH*WCkbqoDyk zed~JQNn4^x6NHZ_^r?|4N&rc_dN5G3di-h(QdNuL)JXhP`i8*E#~ayVFw4tJu~w`>#(~HHZzKVPH?i{Xg&cmBASkQ@b5?6{wEJA;Lr<^+yE@#7bqG3x z6DZ5NW2;0We01gt#m2Q1xt`mRcUm)2YCN0TCIT!w?#D~PJFA&H^J(c`Gb&tPvBCQT zUBTPS&b@7GH`+6gwHJyMtZ>e@33Y2F77=_JfQO-_r3DZfM_dXid&@P;{&TPVME@dk z>Atvg=M2Ol^lEwOZk0B01YF8p$o+8?X`RWd8rat*M~OTs6oLz-(@31TS}CJ-;fE%L z^xK^z81`}Q0PghR;kia4DHaa(b`FpIpkVL&V)rkhJ17)2YVjrbqXb%b)}P7&(-pg- z`|9-8cgHIO14($+v4EwtSU0Sc^cULs{-!o6&K( z_eVtile|*_h-UpV$IH8v3374q)maqKJ)oXu$8Q_^tsA`^7uT#}L$CEi6SP9@DtMZd z@-d-&5y}a8zrl?kG;@sr)y2d{%gj!Uq0}p-Ht)AJY~viBokW?`Vh8NX(T_GTiiiD* z>ywdJEVcJA#3jF#uHcnd&inAT?gKV!p`&I8vv}JFUhIKUOZJW)l)hK0PYWB4ssonm z*DY77k23<6HHDno_)mmc1!Q!TN1rMj^B(o~n(Y9jK&u_OuE*3v;^3TegvXM@#SwxR{_! zWEabn6V%1>7FPIgAQ0_HsMhi6d)d)KA2Wn_lV)<4M#-V6mHn5nm|lH)rx1ZUU2Uhp z`Hn~Pra27cimgkhQr#vwtJB`bh&_wPu}eHwxvOTw#mA1ao{&JeKIuJk|=RWSW-XAHOSSx7Q zY>VL+I?H+BWBT@U{ln+hhg;)!HC$btcN>oNSIc-^qtB9KKy|K(!lF)qBKv4;b7(w> zRshUW`Yrv&cVGC8dM#B9)%u!2i#K9AJpG|IAm$r|Y5P-dlE1I~{>wp6YQNd@I0(H0 z*Oo?8cZNnGN)U^V3X8gt)~{K{e4%O`2|g4Uvw5v%Y1oZ79}d8hUa}q}gEw4v)w9Dy z8-sq_b(p6E;}C!W!22}Iq)8SaDdt(E;&5TT3$-_7YQ&eC&0DEg0YVmapzI#7x5jGbwPr^2L0q>-2nsMF-Ndx8~$?&k+RJ?)^k zB3%+Bv_i~-)F|LEWbpb=`9at}wU3FjT}Q^zh=rfWetR2rhe0Yp^}9ytsbM4*hmNQL zZ2NtaA{`QHuy60~9a~L2%F4ZvUWN)axk^upYR`_az&U-DNGK=wDZz#z`E~igr_i^t z1kCc=$;vSIvpNRu26W3=Sct`6Xyv~}hVk8Q;BjwT zR$f6%RE|GtJy+>IQQyVG%#$D}k@cq9Vn6A|a?N~=Z2WAd<4orL;}b(~@@8Xh@SVL# zZ6S1n%D)s*4myhn*4&45O;(up2lW6k^` z+sldG_M3XOYn38&q^dX_=RX7Te_$NXlqK-rww!AJFqGl(x30iuP@Ze7OiCXZ85lpV>7QY| z0~SX`R5H*=DHnJZ9__RSExzI46gzvpBV7sH7>ydZ=(10*uB186pFP z2#^{mIb@Yk{t<(`QF`Jm_b|)M^kO1+diUL2G!pyj?3I`j9rRN3j}rkGDDGEQMtTfW z;~0>pNDq&O=d3m%OYimMyTAX?1Q)6LpklgecXD{%q^=iENw%4sK^laDxDd8}Ic(Z` z4e!gJ|FYZUt$nZ7hC2Y_0QvbQ_tO5HJ>x9w|7-_LpeFjdqv)=l@rea<6f=UszMND- zM;7F9^eWDl0P(OoL$jw217y7AV^0H705Hnv1D+jzoA!yUCK`%b99Yp8XW~msl?w8q ztoUW?Y`>l?c(~9_{y1J209>Zty}Nk%(I$x@DUkzPb0#o9{!v%lyTz7EPn2s1MCufT z1lU9a5557*%svpUc(BtH$_N;*f94lbW}MkHN&}}i#ZhTXmnn(Ytz`h^;`{nn$wG&A zOMr#qG^*OG4t90qAY%I3>8&$_{sm8e zNo;3#AJ(%)UB&ESbz(-)kphI>1l{|L+x~qb0{A8q^Il4*FaZTnfOllLC09MJoe{nI zqOR79E#Sh{vDbz+<|-u7Mm3d5m3Fme>hKh#cB836f@vf|w*|7g2gPeN^CzdoAtMuW zm_sjL_KIP!P?+zWt_6@=$a&4K|J{6<$Xt9oI%CT#8L9Gjhd7wAB6KPsICCmA0Jehj z@=>0SdGtwz10=NjlYaCOeF5x43S&D6aBDirahfA4SYb9=!)8kl#9JIEM+QSOH4Q3N zfKmqX1D6`%Qj-Lc3x1~%XG zo9|P(JPXPKJCl0a@Y$?Zh2^+OW{J`=$Em#mgS9OAa7#QX1w#X!NKr+tv^eAfFXtg4Sq-$pg6r9Evd zsub5#GLJK9JP{|1koTN92>^0SWFoWUx$gaU?fDnhWvfbfQN!-wTG|j0bo7*C#t%*4 z)4;p(;mS8S@Gd9EzuYrcX4Sy6nvm#HORXTi+QT9gFtasPPRY8=sM>mn=dlArm~h z;u`!%MCx8X6HX4tu|W(ihf<~WR)*^X?m16>0iuN4HN17(;{kxOU+c3lSW>dJrf?x7 zu^VK;9H>2QLCNT1(UV%&tJ+S>H~9L72upmy!;X4kUWDb% zOLk2v$`ff)5YkK5tU94^i!eZ3bIii(5F77d%U;JKD9A9E*x0jf{#XA;q7Golk{ zucAMsD?sO!5LgxbJ^n)75sV5BM7>2bRo%!e+kp&zr~^-0yu@Qk_h6L|13;d zfl;V&p8qaK%0Te%+$-J1; zAQOBsU13d&v_-24Ldk6X8W##j?{q$q=Ay}f7Y!48#v)y+bRsNY>cQL5_0UfXoB-#r@f%wXa{#a5g;-`p`3W=QtwZXHdd@OwbXg;CS8TlYfLHQ}5YI zBW87nw}lHqMH9SG;G*#Jka5e}XW)o&xnbq|Q{LL;Y8OF4L21{Ngektd&s*`pMed@p z?{w4mPuDK=D3jU1qaM&AU)^rbHb%MrD;(R5;vl6ns) zGJpzD({(erflPniCCF6@UrxNi88s4x4Ki1WATH<>m z4$_cgX}G2b-e@@%q{G}+hO~pwpSOV6D4ULMT@uMuqc7Y~()frenUML959Z$?oxg#5 zW+dOdjp5csvQNg1TaZ7m0)GA?)_cFjm20%Kl+SfV)4P)En74Wq*_&l}%^X;9V8kAr zPilmy&hy;(C@r ze_(qWe*|IC9;AUFwOQ-}Uk#Eh@<*KgM+*OSA-W5mE)e@I_uXDQg~}Lk=;5FQBi~f9 z0fjZ$$5v&1S`r0?hL!ZTy?HsdB`RGST=cvdA6776B!SE{e|$qcCQ_6zqELAX%wKYe ztXy>`zseGXfWMf%s0A88q{XgNcS>c2~u<@e&B4T(8UogQX_ohi1_ZCtJO-|_F# zz7T>6;j$BJL)Ek`S48%oF8F{cuzt1KaY-@Nz+n1y_mj4^h;iics}=d3^@%`sda%~L zb6oT)WW9`DK_25VI5U3<2Sn92LyC6^`CVG>O;^<%A{2{gx7j~-sW|GK`U;W&agLX3 zm>nXMJ8)s0ee~m_qFSWa(SKmC?3$Mg{yPt0626qo&>j?Aw2krd8ZwT@p_oInvFu4@ zrO6!IWJ)2ZIAII|p+}$oQ9n&&Ta0yOPfL|9JISFUq3R?790KBj`j8W9W`mu-mttTrJHF7Rv=}SDAV4u=Bs@_*pA4S)mMt@WzkJ3d7sDbziG$+BIpADa zY$A2QUq;cYUT%EPt|I7aMMmLOX~&15xwmzjHO{uRq&U7&Wz7AYU0w3AS`y^xd&jZY z;Wp(WsCVyCBr(bTtz^N5T67$-4Irz{jZXOHumF3HFI|62S2T6*l*EF0`*6^DNAv$@ zJjDWSe38~r(7#(kp^D1TGxM1^gK;PjJ&>0>Lf5b`a8s)oN=0K3X!k9`kk^2MCkL`% zuYq5hiKY%0`-F`pOKUdvJ<&9q7RF;k<8qfBm-a24CS{d0wKxyZ)H=I;ugrk8?ZbM- zohixteN|p8QDuu$i3YE~YWdL-E!iHL95;8GVV0w|1=zs<2qZ zjPwlry);c#z8w1*m?%L254n^~!qJzW(LEhMcS(d)Upta!6S$lIXg7J&w8Wm@R_sys zOr-or#L)sm6>-Uix~#a^Ag-{g*V4jJUp#fQ&zwI7I88(T$)oUD=>9{LVW3UEuhUsS zTwkBKuBhn5FJRk<3=>zkVLxGE`Ku7!f1VyG1_03$-Xh4Zt2)xf4xEi<(wA+aKz&^Q z*JM+G7{&(xS=Bk~oHQhu(!53oz#AS6WY9!xzoGc)tn8HFF)H-`*=qp!rJ0<`KjYx@~Po$6+MMd#+k-2NXcI~{icRx&+ONr4K+hnd+iMY4Ytx^; z@6|pg+HwQ0};~K;>V@puH)u!P1=%Hc-g==CzhU!j?FU30E5u7^SwKgtMOo zxDu1%+SoQO=7=~3yldvlrUd>8gAIQ;wiJG5S+LGxbrS#Ks!pyrJdB|k0&vW6wg_ko zAq80#eDK!MtgdzQ>Ny02%`Unt{i zdGZs(Y?_A8*wh_4xh4Q@@6hHpdzfD~H-iO9Q>}00R-47%S*@71|4A$SBEQALQ1D9L z1)t#A(a~4$V0Zx24pBlvlc2E?esQC>`^?^9r@W#;sjqE@{+f9Bti3%)6B7E-*@Ve9 z_0>Hu1Dvxu;6j&BpL;EQQVBhrT|S>)5UBWi)x{&Bk47c|xda*O;KNOW{#c(e3vHoE z9N}z`lX4mT$rw`p`|Fj{)R2P;!aZFCHAure74eeJ`40!f69n6ePjq&Y8SK(oP`p#QtH;>LQX&cZsH%itLUz`z= zOc+(677|dXx;wew(&S}~vXmGpQJy8ZoDnufC{dkR7tbuGJ;u=-( z4mq6qD$Vxo(^YsUdRTJOAMW=56R-O<_wr0}d7V=|#`e45tUV2Vn<hwUMjQmNMTbL|o zvAk8Q@Z?CkF z(Z;m;E+<~Yz##VK9UeLV%^D!Ko#8hcxM|4vJF)09WVvvP1UEa?Y9Rwm#3=I_GJ8+g z4^BTg@?d)*+tV-d5_R$`n8qayn83szy7B_TNP|DhnG&MLqyZG7Spw8MJ}nRl7iLg; zqe1UY7Ucvm8T;xq!vSJOY2h2U9;_VF)PV(D%?7Fza(aD-V%Fo628J< z0;rO1k#;p0^URDbwqcx`YV-5sqfiikdL@bOq$4yOmFA(s_3%7Ph=5vM9!nBP!?-aa zhoETt-!+W^_<8#L`I@Rw(qku#hc?-IdVEq1zm@x{&wI)p$B{n-C4VLHpksW+njYc~cUi)O^YOdVSXLq2;CAkjhz+ zWC0$q!rqsOofq!M-BBoySI~E5+qydwkJi7X2n`t}A57(Kq&Ixc$dCJFrb3WTa{V2z ze<1#XTH!J@)0OJhuteVH^#{(?4^}3T$(Gms+^D6Wy0!Fp1Ft`v5zdSD;Mo#C=a=ak z9tiDvpL)WRO&|}1`_K|3NGrN72N6>Ws)(M?8RaC5K7*=s@IGUBAIyvC0Dy(4FH2wM zB^q7=q1*=~H{Ra4AKz7mK2W3dOG&!JJwtNFU)ncHA*?q&`{uZXG?XATi5$m{){%lD z-52um<3}d(3e>sea77=#&C}9@5~j|-0RQ*GM8jdd1T`RKRy z#dKQ3jx$oc`%s@y(SrVQfz%I^#bR5Qj{d&7#yVWZS2G?h#VH1xk#JfIx7&vy z0GFrCZzUsi$g0eJrT+K1yWX$q|MLJWhyqf`n7wwH8+r^?hs zZmpSf{b1H>Hd1QcjpM$+S^e`B3H4SQ2zfcRS@S~dDDP!s?lxApuoxnePS)=-of!~Y zCwr=SYKDJ5Na88;lJ!l)2)+eYX@O82^%rCvSGy7B70jW2CL+-}qsYJHHRfUR$eHsI zMz&Ev(R~bIiNSUB@rT$YPC=Spr8#e5|E+}$&09K{6uCQVz1?ce=FGfHKQXrqgt+-F zHSOoUe*Y9PZLsS~@dsii;;FUqAakPhLe~l>2NW8#+=+%j% z-cB4AJyVp{)ZNyxfNsjIW&BOj$*-kdIY0liOA+_m4~w?NJt6GsNRw56W~acJWc6Y2 zw6>-$bE@*qhSmrJS=mL5QqjEAxW5KbT(uP1Y{Q@d?}kR_$)wCD722uaRu_FB^cAF< zQ0nyELrGTFh=<2LupSrK_UWmY$HQ^M-1Y9o6k)BXprbNw?9O5FS><^UA?66}SC3=we z!e8b1-O{MOmmnOHdSZx$=Wo+R%-X?^!WY%^q?(HnVX&ybqUna`6zr!x1ww&p4*g}p zq24xD$9YnxrrGhdCX6JIqJ7oow#P=*3!WcSPB^ZO6u_sx!3r+O@dMcPAS-l_gRWGk zv~)~tEL*tc4G4L!Jrbq>7!>6Yb|MCf9Rx+Yi*ztAbo+jcyLp=Zd| zK5(}dJ?d>WhoL#ED4l3hnY*0WYVbixjjy|_)|&p=@*rp_L45DC@$OpLW1pQHXc!t5 zlr_U*+3lx7k96z|gTot38zIo+TLFtby1Fwtt(xw8;9LO``n6xo#+GINpKQ>-c<9F{ z8n~${P_O7Xl%0BvS^0S2XNgyP8Vne){uplG7zAQh{DIYVN`7+sSnY4c~-Mlc& zBa07>uk)mkxR|Xa;Kl$7CCHPW04V4BVCalU$WTqRGL=c|GR!b=X3n=~OMIQhSptr| z4}0k@_w6$%A*OLy3H<8BH95H##+`qiP6oru?GUPDCH_Ed+e)wH3+FWEllqD(M|ed> zGPCB;8#?4zDY?dOfDzDtxysL>o2aD!X7z_)EL?^2)QJ&7U~7}kb#z7Iq}pJ*GHEGJ zN^vDEorD_H3QvyWV@4?5Agseoa4c`M*?Na5!yJ@lmC;OqoaXe zhPnLQtMugv@~W(PQy2ql!zaGu6k|fzXpYh*!#PgCQ6RwP07{dzn^zt3>M|@hk0P_> zYhn{FGvZWVCjmCI_svXDK!r4n7Hqtoy-Ghl4v<0W8Bxp_;tdmp#OW;F!{P0~3AUcj z?wq))-|aaL=Z~|VzGL*A#Zl!Xd!mDj52v{VG~j@@=H{Kdp-nH};Q$9P6qk|_wDINX zG9YOH6aovs!wSC%A3>u2rRU9C3oi&U<*W1|=;CM(fb{*!v~ArQH^bYLeue1b$u`v2 z_X}>b;ZlnQPMa7p_;&n$d*~FmbhEk&G`Z|!wST&u2B401121b`_Tl3!K-Y+qq^bjT ziFoP1?`6kx;uxBl?LT_#7JGX(wm)}E&^CL>4)DBeG%iq|j0yEw#8_Q=ZY^xqKr*xb zocHvhx`{qGbZI&du3j3_aD0E$yvRw3Dzz1TWVWw*OFx9D%&9=iZ{KwY-oL7NY{?jz zP1qrqBp#V|zAVxUO6d1`ucZqFkLH?-wqz{QgPDkQ>=L41w$&q^=3tKxroJ|~R?>xL z`(z4~?cK2FS8MzDuYLYsdsKWB0E``51}I{R!wbwHI`Yj@G2lo{)qa+L(oK|l2Pp;u zXlA#VeTjB*&$Q%YWj9p?o zSM9N#F*als@ax?6=w>7RHjvn@v+EdKqE!|=vq_lg0`c?_mxP`Dqm+StualDD;Un7< z=vxx)v2t_tn}P|Gz}?~dZVjZ%KyX?NqIv;vAA1T&d-6vq!N5@bU}ba(;OR&pUzBmk9)F!DYDM z*c@o79clfg$V0o;3ZsP~gN32UL9gU~Q?KMOmWw4#z7W=egK0(rRc4vd*DmxW5eS_0 zWZV`iZBn;jN<|6IH_^y1Dhv!|1PbUa8j4mx{|e+KVv#`WEFwJsIe zupToyepQpNoOS+=Y4EhcllcrfWb$4%zG{+)Of{Wm^uL;qu^<=tKhm9o!Rmxoh=CB>ZM1wDp_yRa-fmlPqReZ{l3^PlQZegibf zgn6OqD28ER6ztmyv7vvN5ZR@Z(xwLM>!TP4SP@+M}n*tcZ{ljc))z&v`p>EZFyxj4PvR@C@l;BYWhEi6Z zhz}nhmi07PFt^$K_Gd}GZUUgWjn7-@9r^d*TIy1)KB~cuC8vRV0_DNLSs!{h5oG!6 zk~jzx#iy(iFK6vo|1JKx@!sEgps69Np1xaYgaVbg_JWP}(!(!C`~7*3>IWk$uCp?~ z$!Wb(5>tOCy#={`Yx!O9@|LVQiDmVT;@F;pwTM2Lg?M=*vTG}SNcWI8c(G6?HYco3 zIX{uXH$2h0Z?;}NR-nK@LI7KTvSCnWTX|lNEnMHmnOH1Z9F=+b`KQ}6CYrS#tYxR- zJ0W2b!0o|!YK8V^e*aIoN;53P)+@GwLfdWHr7Zm94gsc#x-d8cgkAf&s(^Gw5;yfD z%7(gRIJ;;R3G9PFUz#gUA8cYS5GvXZPrCqI`0jGsWY5M7N}1pKge}<|1F{4+#97sa zmYJ+Ru^igDqT21|KQ>HJ_3R*!#`@Ab=`gm3TIvY>*)s<5u}=8JzV*PKCtT20ThYjY|yA zV9^X5AI0HO`$F5(O>Le6bVamQ$H3XvIg18L(j8> z!2vYT&>L@T6y`tGTmL=hE&os+d~6PPU&>RwBuddx7_2Vc{5UE--UV43j?6pfPZFP z-z9FBUix!I#|g5Rf7^SvH@^Gi*525d4u&1pO)N%DxjoS z=gcXa_GDbbRLsq5B%>Nr)n;|FMz#)RbQB5V3j^%Ha8wxJ05e_Q8T1@-SH^&WeqChu z74_1>{C=l5)$8o&fqW zj-8)j4v0@eFk-*EA2Kc438Nr&CiW-=9;F2d#oudVg2H1b37rp%qf`a^+j;MRBMVH3 z+50=;giWlgGB_dwj?(?WLT@!Emf7S#wTdiO?$}F`$P?)=G1{Fk-E22n$g_Av`JS9X zI>muv20EMr^Ke=)vaN_m>sC~l^77Y5-^+0<9!;v@I8++NcjZQm)ZPz~2-a`aeJaK< zJa$kGT%7kZQ|N@d$w_9Y+3GoAWK*rTzSG&9wrR`u8~?nde`WsS(@0Cpp@s*x-)S}J zhdKtsrYKM;FqtDZV&R;X@uS1{BHQrn!;laZ(8w3}WP5pL29ccfk&E4=IiY;y$vHR! z`P8SG+~KdtaI7g3APKR=xBypyrK9nCw3<8SNs$!uzi|@*EArB#{&W1iM}*R=;cp>6 zcd~)m{Q0F3%6czh$emj4GjUY6UAI17vs|0iKfees1-PH+?rU%2aQp%huZs^k<}e_d z)d(zswEuMd+x_K+q}dF|8HFEv<$YE9TAw~TdR|a-#qnY`Mig3rU{g#5LIAdkL{P5>TK_q^?hvcW}Zz7PAnT5Y$d(~eL#NU1j1$XR&U=%5l)$q#2{V? zQLYRHHpN1mH$B&i1~P>?rz$g zumG;{CCk_oELr>Pg!eX@Vf>|Bv-&U|zk33~;BtJz1q8)RdS3_~zaJN)L#IT~Ohblg zpU^v#LpKlRL>0XDh$%l+lYnv^W#Xd!=^O;e+ll`*&3xDN8+v(seRgJ?wsex+1jZjJ z2F178Yg<^}_lit^eI`7IQ5_OOhe$0!51rc>VC+6iQJOV2Ke7fIsQ{DGyH*^2P@z%uAe&9Zvh;AgcByhiQtj3Kp zox4yde+`W$2W&3`IaVp1SbgpX3E4vpL;FTQF=9-77Sl&sJb$;3Ii&0Y;}F5AaH-s{ zWJ#=t(D1BvAp=~ZuztK1CEeS`6^4Sdo`Sx|@P=Z0=dN)f9XxXjWrFlu^(3yp3CcVI z1(@pbTQ&}ffaqHQ6yPfu{efrJtaHO%OdDY816du#b4$eadS3oAYc}oBG5Eu7!Ksfk zUDr(Fo;o;maQqZioqP%uyn6K0Z*&+djGzT?#Qw+O^XY6v3wR&U#E<8LeQ5RPmdeFb zfmG8eNcy$!dXJ0<6xF)(O${c7li08wgBnP$9~ZbrjPtraReRAqF8CXNQn zTzOPt>MwCcE=TGD;Z-wM44$p!@q`5ZHXRt%WV5Dpv=@{Ug@}m(@PM<9mW(5gH@WSQ z4k_VQdO(Ed0L5}{bAMw`U3j)j-MyFU1h|(^F~Ow7!~*?uXP$)rpmO23P+=iM8{*-8 zmtTeV#256$O`kqvtv$_YxS^KHPY1>*J=?TtY$*=zJ06l|Eu>=kenql8Ixc!qcTKT6 zO!pBzIp(eN@zztn!?B3~Elrd_F$$22L@@Y7tG*w4bpG-RF|0OTufHjF8*qgv%dUjR zUex}?4q0Xi7x)SXEY|r)>+k%;=tzL|e&o+=@x9fbE3*whpX=w{7^`i@nOXOO zcL}aUEKOxD>Wj=NR}Y=0a{>V@(5tBQ>#1F^RHKd|t52IlUoP1pqKMeCl&OzsSwC>B zdMa?mdIe&6AnFo>!toUw;x1Ln4+6aQGY0;jL<3G;PC|YA=~9@`M)l>0vvWf9_BwK4 zQu%1y_uAuS~Z#&b4rG~mu}AcSXX`vp}|sS#U8)ysEmG{D#Z zVBRFLyU-DTiE@en3PJUKHo-38T&4udy7brVF*Qy}sY9!$|5m(N1biaOPp}cMi3Ks% zF0~2bc!99ubOP}u{-kqKhn(@c#RuF4RR~`gmJUF_?!yBL)id2I8+zS>N9LK|2nv;) zkN|ItSl7N!%t`Fp+Dxsbbdid>bCVSye73zOE~|oDX!A#@l_()*2K%x0Gy(DJTCqYf zAc%7*J)l(mzFdDt9GKX>@1NR?1)&fu$&j9$xKmk14c<;Z@tq^5ljku1U90#m0F8+M z_y6M4@R2Pb15w!B98f)0rvnjTz%QX}`IWH!u$t4AaTbQXFs_e|e`7SDyU+_Qfpd_; zalM#0S0%F!GeS%_Bj}D>e*axHJSsHG^wT_GPgop%JF35YRCsUS-Kd0FM8L$ZkR5>C zp{P8EW!aUToWi2}&rr9QM|Can)4M@wd2U0F5M7p|H+y zOP5K+sqO;IZZ$bv@SzQ~?}71^=}!OG5?sBMsn19HcOD(*cAX;_$&WnyB7rb$|JU>S z@9s`?%_}b|T5w+$sV$<_y>mKgu7boUfm!H=k-6V;NeE4{fJD-rgyPMgypEN1fvJTJ z;RWU*%(a6BH_2bxrX4#!C0wYGWa3*i93Me2`{8QtxEQ+}uV|*O7^E<0IT2WI71y1Q ze30Lw1a7R=JkRF2?cy+*)NMSrZ`Qv{vWOkgXDJmodB$o_pO7$qu1+5lC}70JjY zO?=Y(x%mUgF+EYZsWj7uCSx#^cFkudDc!J0ujpyua>}CnFY`~JHas1Wpon^P>gwO^ zwY_t@;X%3LR1}|8Wpq37WwF+NoBzTm-vwbzK{R?kOJ`Nzh>W;m8BJGpV>giywj_W0 zpzIdo_F|jLw-1&qy7$DPI zVao3#N{TfitpEOH5sd_UF^84RNeg(&ql=C9ANBFp7$N(89B-6P}y#-e)@ zZk##AfNI`sf*0qC*EOIF_aT*Rh%p~8!BI*rZw<9444021q=K#@f9;L^e4#m0F!F!V zyYTz+u{G9Qe?{-6^wb`{3-{30bamW~G9!V?n~X0q197NWaTBa3K*XbDI^O3{Q+X`) z&=t)TGFTSPWm$-laY$)7JSvWsX+LPDDyYF!R7zPnRA5E6-K0~X1m)7$_9_m7ztH{@ zwWkP(X=oH7>?M&7$O4tHsNcU=yZPCFA@b&~GAHl5{=5wC8gZL+Iy4&Z?ev%)!~9Y_ zKyaNkRTQL^wm46DK-a8pA!Zw?YOHfMC$8K>u>p)=Xw{>*p{NTIcOVQ(j5FM%;>J0- z2|_pnL8b#J)rkA0eMz?Oou8=X%K<|P()mc4qCXeGe+Ow;1bNtRd!KjCmuGIfQkqru z3091WUImVmurR+L5Sh;cP2o~^e+%F{9@X-jdr-(6 zwDnTxa#}$|=TBS#>gR>sY)cDdz=4#oA#U1S5P*W)a`B=OG|j&fv_&${ zWB9*I5q-S<)5|L& zU3*4Ox8Z{m=oN*=hRh!?#XJ$ugHJBsr z!V!(`y{&L5?vExQ2?-7vaThCzEA}(ovK0?mHAojp;#z{B&{N3k)I%c==huPGwTDd? z4xJ4im1>4+$B%tOft+@Sc4pXPkn!$4!t0$uQoXitX|i8G+5!x+K(Y0*V*!NA2d{T!7ug6m8nlz+qH~O<*z+P+|@iW>|g$?DlV{-C{Wyf zts}l(K`|U+j%6nqEvuNZ70JJHy|z7{CMn}Jc}7rATr%G++AVWbT?JhK{Q!j!8LOIu# z)r=+n99aIXPZ=-8p%xEy*3YFsabNN+dbe;7rAWsB)&fHXaHsZJ3WbNQZsX}*ovqAe z1*m!V?u`yveF&*DJ5Y^%A_C}Q<$E$$K;#gqnR2HpH>Yw&F{G1W(Mb^4rFL}Bk+L7~ zb^M942C!$=684jF{7xi*)<8o%f4gufWX@)Gh8n-s6{**{bfYQtORKt>)f+fh2O(}% ziSlMt51aNRCaj790EgMw@%HoHUpphHE3Oz!j;3>(7XpHF5_0z0*fM1%mdFnZUVnFV z8g&9z!3fkfJzk6;`*KueHD-F~^BQOBWTIt#+CaxL0&uxOl&VK_&(Sd-b=D26$bH3^ z#vBY~UOZkku!Hp8)cI8^Kd2eJ>^J%=aAn;53_{YlL#>q6B>S}B?k_<@6phsQ^6H6e zcx8>_l9j}L0C*Z>wQs{NfqCt~&;r9d{R#%)D~nTK-%nlrC{99Gll~pU{)=~OObQG% ztgE2`ko$)ELi8+-0c9H=750RiNR6wi{}#?+e&aC|OlPCSfmhq^)z*DD;r7=e#+eky zkT59r>=P2v4yC>=&h-?JA6Q#^WUJGWR?G(kHAjy`r@JR|zi!R#uxr%1hQ)sY_(Dij zT06a5Tixv1=#Q?0*g`%1o~mS3jY~@8Q+N=xTIw8|4Lve6{U*NyMOyBX49mLxmbeVf z{*{++P^ZeRI)%um-AbJIWoAUU#B4Vnb7bA%R2IMl*eXT&!$iFmv^ zZTE6a^LQl_s2g*6qimzp2eGJ%D%q@X*y$T;ODNx3KS?Z>Pu+R)!XDAEx=BM_ykQ5j z4UJpE9up!Wf)&J>Mbf95Rg(vzW2tz}8PO`YKV;K?A2#xO2;Yb9++DKU>~-06ME*%z zem)cqqiz#{J6kNetMn?L#TPYlo*p>VeMT~i5hWX!)9aU!0lu~v7Sjad%r?9-8U!?o z&fe29y3UWw!6KCUQtmM!V5b>@hA?5*YCR_ve3)`rrQzRRK(NfSU(gTmwLDlZd+=Ro zws67J)B4hFvxmki z&U5`;cacDS$Euxz>1VWx&BvA664SJc{2Isu_YA$@sUHPT)R6ls!1(gpyY7icE8W2x zl9gohOC+>CPeh5x{R;vLho*J@VR66q$|XRL`A;0XaVWJR#XsX?iiK`G{;WQnfOYWT zKK$OE$3~_-SPDo)SCJx=CH@RQHOGVgdm(Dlx3xAL+TMN$oKoE1L1NKN227#iOfg|) zPMzhC4DwV3%wgeB0DB|ZymkixLmL>>+baUio#M*fP}3GW9<^k@RlRx2R(PqNx?=uf&F~#(q0l2$rlsgCi~S3ATMgQ35E!M+dFID6g518o+^NL*y{y zVPJ{~bHsV-H>0abY)-i<{s|HfWI=eK@sf%y^oh4q7+pH9(;9mKlw7O0S}*uSbP z2%(0>g^6lkNLs=YfmXfH>^J0m z=_#3I+33I#iYMD$(QeQndm_{F&d!)ja%ei}n*M(u`Co<7vPsFG;$vHTe7p7-ljosp zpld6@&}a;e%cSF(r zcTRGp-3Bfcg-e8SU>Uf34J@X`dVr7&-(WKVEJt@-_&$!yQl)>-{drsQ+Y_1uB>E}l z=vzTStt^rn^ZVzLIr(hppH%mMT@&E9){lDjF!!#GEYxIutIhoQKkpqd0C^N;Wii?O z<7^x^2@q01u4+vha*Ee2+OJJl^eog6aNdvi;J3}*R80EDxmiEsb$i%h(`bZI}UgLgTA|tTWyx)9FYtJeLvG zr4I_2p4yWgPUU+r4;bKph0lOr#d6>8CX`x^8NQvX>?AjXb|ESeu3`;JqloR<+4<@8SVXpoT^Q+lq_Kk*t0_{+KA zfv<7c6y>3oVR2gqv^$*XuFb7E_OR{AHFZ(;RJv9^O`d89seF>kX4D(|&D-Jd+nBik zgZA%P_JNhd$64)_A1tM`sZ(3t!bf{O<2Ab|-~eS{lEz%md(Z5f_;Jwdo&~B|V$O9n z!V_4?{@RL+$B#6mL%>E5+l86bPl5#SjR!Nv3Dx8Qt_bMNV}D%PZp9d+6LCO9&X990PF{A9$W8Nv>nF$^V+Gjv|pU)>`2=Dx#Yk8E1L~h=n`!PpnoKpHEORm8UM@< z2jbSc>1{CRXXT#=*Nu5*;KY_p5Ge@*R=TQazE_{`xOM_JWack9Gyq&9=F`&S7`g6z z)=sq$A33gg=qJI-sKp3+*z|%Yw2TE%C;pMD^j0{>3csp-4~|bhHd?s$>2~VNqmN9} zosYa94t+cDDFeaDMuo_iF`K_Pl=cLl<)eA?0kYjHcK1P>feM3+a@!_T&04zPrD>lZRn)Sqf^B6&=Z%%Ni)XBDY-URAr;=%@KxX^re5ctKRZDbqN{$Z*l+l*xD zpr2OG874Q;pj-fIH&!XWcsQk>pi?{;-} zmO%~=1t`128uZx6#Vafrd-IuI_l4d}+;2)%rrWeG~oqWzK{YaccjLOWP!%%+xILoNt+C@Ez({WdUi za44FN52SQ$&_9Y+wh2Yd8|dzE0w3?oM^zRbhqJ1-7#0X^O(Q$Z3f;g#T>ZYd8mmM) zxFFmH=q&HImayUl?_O&%Bvhu`UAdZdCc{VxII2&4*`l5}8;l2|D)aY{Y(NE?Mu58B zIpobBxXX)J(Nx0&j)}Lgk+S*{KH2y~t*pb8LLX6A(JbZwT0uVWu0(P}sNoXN&Wh6A z*X*(s=jgp_HTQWIGL!Nn-0qA=b>&Lr+Xc?FSi7^w*^6=^XW$Aa4Il1R z!WmY;)yHW~%N7ftC&uvD)ZP9Z^Rgf6%#)RTLcp&2XFdADpM&E+&YM_5IBoG#!im70 z&C1u?UI+0u2HlWAgj6#bC|z~4g~NmOYhJ1GPR5{TPf&+%m`iIE zBu&Yx?8uQu%I@BZ@@`QrK=str=Cmq@b!#jn%ww_W&HK~TP2k9 zx(H!}ke0@H?k(?F@!W=W#rzX(G3BQPDa6#W8-o8f%+mjV`yKvtmx=g|$+K}g9*Sjm zX#_$@WTeK02(Cy=t#jh#DL7kIunH6){BW?qG29HM@X{it5!t2jsw?@=+cewzsq~sq zygz`O;S=D*+Ge)ei8?4`^wSgidIXBwVJdK=5LtKKg2RL`31*;zmX^{VT{U|FnA5oS zUZ{|kpoQ#jx|1YlCW@A87bjkJGwQ3+*)zbr&g2>cusmdUd4yO+o>{1XhJN zJtV5bts9_I(VwyTk$@<0Ub6p0ON(Fi-2YqgVC5ydU+)b%&Hi|h=O`?tKm)^Q z8-3K}-ex;@ao8|l0@>Xzp$+(I60I3Qfv)NIq~$Y{6hC>hkD?4H?VS1DQmq;$qkJsg z64cn%CbwH>;%IHq7*qPW$sWmi{o?@)aIlyz?*hC}F%(DfCR#H{%)SEt)YxaTJ=gAM zLbt(#U908l@4#^Kpx#*PqDTpVT4R&`MK)V)SB4U0a-$Aj-h4-KxWkx&V=c7~0&5dW zkUm7pek?-ZV|=Ae%KP^%@?HU|7Ei95o7(bmN=-67f4u7DLxe&7TSGtpd?7y}Wtt@a z&sm)673L#CT(@=$w`>JK z4`PS>d_`CxmfDpsBDKDhtW-O1C^9=v^x6pqq&+438p^odYGC6V46N(4-e-c)XjlOT z4GkN50A|rjTJ4KEl~KI?M4S8guNM0sA3yh8VFV1j9e(c#fNsxyu=2AWqvsT)(jWFq zeV7=!6uQ8eD?*KGB~^<@7}tn45hU^vkGs(mmBEMJJ?F4Xu7=X||#3QPzCTnb;zR3nt{1%KjeaR3?<%z?C1^f+V@=q-D zwlO9@VyjVk()pFau;mWL zO2oJ!{bTpJ3>&vaVCT{=Yi}P<#D$)=YTE;bNw2P|cao;KCES1 z|5VOkUP+6xG|Ihv{l`cVQ}Eq~)R&jq_$FQfY{!WFtM_-4l})Ps{7S*_-#Zo}$BP;5 zP`oDelFb&`pxh12?wGQf>+=}k|` zmD1Bjw{Ppn*@>{ZPD=Of#HgRB7wR)dOHs0eH5mn8e-i_>4;QFbMvhqWo|m z04n{@g@EsQd+o~AL+%_(Ph@R&Zmj%q)!*)GwZEeHDx07wDUDJsKl}W|SAoMLMFmFF zMAK5$i*~YCBMLd6o6`-QT@)D>2V&ohglG@2qW}X9hqjcga`UUD#nGvzvL$_Lw=ukb zq&b%(P~(7=#ZEk+`HJE0|ngMdx;9?V0_gT-!^A2lg>o{j-HqNSncFIsbse?gGTkl${}hFD*+vB42aI>z^?Wet zi?+b5sD4j|qj$k|GxpVaTc-!qVZx7w0|1qD-*-u)F#n3v1LRF<*UKBMfkbtMmDSjY zZ@xIULLFYa*FG**zvu2M$*peCaBJPAPqt;bo8QwE5}9_~g#C*3c15Z1AI(a#`)!`d zL8#D6{dyOWm3+7~^tb^5&v45Z@vsaWaSqdPwp)S4ZRh|Qqk+v|@M&gG#QxI?31 z07H*|U;JuksoYt!pTBV*C!h?GuI1r7-&9OEAq@vl?aEFG^2sN@}({43XfCLJEt zr%yZ>%B#q;Q3+Ag30s=PwABRYHemdXFRY2u7`;flIXvC@B{fgE?%n~XLu7xU^QF=u zaw{J;OhDAJhRcHNws1ABH{oWLaaA`wqMY^&x^x zdtZoOHKp)!aUXmi-gRZVY0sM}qAnu%81}m2ZKyd$`dP=lE(^c6BmElmzx8j{9t-5? z@#+y$Uz-1n>e@Bh_wd_(lWgCi#h5PftxZvvDViMlK@qAPj0GnJ4CfaC!gJN|o@sl|>(p%?EIuVx%~{^q z^ZEGp`VZvr_VjXT4)aJJrhIOiy(I*On*p9a?ZVRmD}Fl@4(@s!t}T- zIPa_d%z^o*&-KVc{d*433<+vDP-@x>VS!cQb{Eyj3!0UiwYGn1X@I&ESL(mgE}S#9 z!S_+#fg>a1&en;@ZUz=UWW&V-k%ElxD)q~aLVa-YZ-uh!N~841^<3Sm8&yk=ro&~= z&yU)b;IK3lqbZ7@hDZA_n~_9DK{i8H(mf7ZNNQToNq}MBXxv;Vp5=3|VhI>Cfffp8 zdrL7uQTeP8oFA4X+TZUDt>cRVaO68y%e?L@)c=tO=s3AyK>y;fc3lX+UDHh>(3)!2 z0ibc#RS*b}fXeU$DPam2dmUMJ&3FMq@GrNyttXQR;ahe#(4g=F6-ZFb8&_3}PfThA zaAE6Yv1gOARoCEy4|6DlW?^qd2GG{6Qb@-nt4{+kJ&t4U9~9+mGc2H&9;A~_TJrsD z$rjaV-@>SOW$*Svrhzns->qJlj)6V+DCXL;mg{AXQg*pU?zzyu(RjG>phZN(vr!Zl-61HLwE)Hh6yD z8SB6Be*V9sXSq_zV&D@WzuFz6GLP%#OHN$05BJ6uI&QzP8#V@#php1=5ivacc#wqO zq{EJJ6kURx_sXU1CF|^Pjc!o3vLF%~o*Rv9R#A<&@5kN3LR$$464(?{JTfCq1{1?w z3%2^KT0G7sER&YX9iCE+kgYA-Vagg>Jm>5bEV`;~$Gt^%-Z&rMU;$BR1Ja&b%qurP zIFc(d>tJ0L+yRiRlw%N;0xHObaRl9$y$OdWUD{xDQ%F?EIg|0rtzM&0&c+_^o%S5;wK|=)vK<;t>n2CY|?ZI9~>l zjh2Qp^1px;5*!_mEmpVzy@rrNs67r|f8<*Ov>1Xo8@Y>4!!9#@b2)xhyXNgQB5R!5 z_Z^FEPQGHR-~Uo_z0p7#z;P6yQ1l5?p%(MK4l2XwYz)x9{xGy1)T+&XGFh}EIdP(x z&$DEKg7R9?Cr19C?Z%Jw3yJ_)yKB6=?1{q8mbXSn0INSDFdS1e+2tXbkt61fpZ>KedO~ujB!|LYG07x?b@VepQvuEUWZFG%-qdCqyV!h|i z0Id)tPV=<*HTdUGcIK{bX~mw*0hp*W zC5<&Q>ryrh!tKweN)!I!d)l*~S15CGwy&De2+sVNWR(!wh5#=6UD2kz;uha0_(j2m zyMsDHp$Ng%_>dObQF?wXd3VlqKDnyMNic}~JB{;j_rz#VcN-rAtg;t;S*R_<@3%~u zPlt~p%gA?Upd!cRv+%Xg1q1NXh(<1;@s_?m^5=WT)QDS~C3pfvt51$xeKs=_?)S)k zzSg0{;kyfy^`G1q%LBc(gg-a($%8k($3ElBRo>%E)HB_0W$Iv>?Y*%K1!dncZ4-^@ z>R@Ofuvk(-6Ofc3#51ToP)?(RD=l0pG$iDSWJA`&E;)SM_(*j#8r zv33wiseky8Nlczhi&M-@)H3j39pw>2T?2*khc_!eA{*tV^5-XkSwI>ALOs48As`Gt_{JAzBomqFY5b=xbPE%dNGK`mXCLf(w%xkM~L@ zsq*|m<+rsj!=7xHjn^(jjF#f6qF~%cZRpa1tBP5Br%W<>1Ow|Z(8;uuoPbuG=Yr5+1G- zdY*15#>`wQ?x9Wyj2?^$6z8Z;xC9$c4RCLJx6`}sWoW8V{T`A8zXPy z=xJ3h?4&qf9q9BajXQ`skkn6he{wQfpP%&u(@!!`(3KWT>y2V)tI z=AVW0YaEQ#w|HrQe!RSlNSQZD17k`uMdEI>6xv(T*^AikY6r2jbRe1!othiZK5xYN z+v!A~MxSj%5hVEYThV-qKVUSOWZ#O1lG{jLJ?j%cqwHA_7bEjIE7S^vR3X5t|DDyy zGFfk7kiVevv((*~9#&vG!s+(oF#K^!@fB^Gjk^p_1HF0i_^?!LOLeb71TAnJu>n}x z%I{C1mbG_OY_Ke{0Fb8n0@XsSy@!3~7w07()BOpx>il?HdCu=1gC`Mu;d*BD&j87CLtRcgKf*e)U z$c`*%D^?t59SVYt5L%y1aTepOZw+7uGR*huIcU)OmbQ04Rx9d`-@*H&#?~-}2ZH(k z(TwP0tne_hWAOFKPC^)?p|DZ@*DfRpvV|KI-DG zHIfhcOu^CcRi1zK=5~K&S8fCt_Ck{B*WJ{h@Nl<@@{+URH+?IMzeM|dyl5kMGsT7O zkD&i{A-C$)zrM&}khUkerK8ToNs}Wf0TjuHxf~z(9}X;)sIp$3E%10?7~W zl}gM_h7@tY&xY0>c{}ZQ-*lHj*j>*6IuPc5omO7ELa*r{nFRyZ;Dx)AtUX)c2gh_s zXk9PlWixsh=&YQt1856?Z&GdY9=Utt`OAavdpt5)`knt-68=6nF-Z{j%Ue(G9UA3% zTjcp&H)kjeVu8@`QAHbR7cT-&%v(%kE78eV;U+|>(pp3?KfJkxTK)N8r@&S?B(cr7 z|JPe)FdWWaFNFx|-a-c7Q_#H^CVzt$d!2G#&TME%)=o5K#~fvQJ4b6xp&}#;Ne1WAeiB8uDpv5klg_&f;Tfx z2nize`zr=8q#(C9`Aq&j;eN;fS_Wt+PiMmhkgkgB!bPeQSYGrM$V2(AOSiedvuD2- zp&Z$6@%A@e+0T?fFFv$BSfC@i?v=8Q!0@b0-#-K4Yp{c0XzA=Ciz@Y&xrPCGQ!-G_(1Vy2iVK1+e10`WFH+fbC5 zVd0G^H4F)az6BMP*-ps-QAe|3oRM16JOgT6`ccy6VQv5O%RQD+AB*K#z+Q zPlb4=abcu+j9stjiKWS*yGK?Aze8Tq8Rgrv^tTt^3Ic5VP)@in?$OarW_e}h7hF5WOlxL)gMEek1R>8TY@a)$V?Bf=vFwHQ%xRhRf zi^B9q;vkeCFinAJWJU_8oJZDGhb=-G1lBXwgUTj9!!tUFzKH)qBY)+l$Ho_z7Ut)Z zs*eDzsVlJl)fghbjy@$qLVHTvlmZ_eXr%~NZ{I3f8k!K_*^Mp5Tkf1%8E)Q`CFAjR zAhgM7C!;pdxYA~)l%bjB$SUOT&l(DYXW6iT+^5Vk3VeXg`^;dAY^lY}{Vxs1{SS-z zL$_FgoTEuah&taGU)9`9H~YA!f=9CJaqyTATk01zhE5U_-i?=r*epz-vq_b4cq}or zt^!0s89ui^;*sp=?S%^6yiRHLd>T6-W4j-VZOH`K^zk84Xom6^%FPoKlt+7-{*GacBJ_Vc)9uoGvY{*L}0 z;Rn3e^sg2x4jGdpcfU9vE?YcG{v{TAx-$P87$O&5J5_J)x3e>0#wG$hp=2XJ6a+VF zY;hD;`#TX)zysr;6=MCpz;p8iB55aKkT0Jz@FW)t6!D`up8aKXr(}r<^pZkw=@H-K-m@{~Q{mFRfZ%MLr=q&;9fx-7 zt@dBZKDilRPO*Y>v$%}WjY+*12|=PjY9Lu3vkHYl@n=Ynny7<3sVj^1Vjl!cZi6{t z1i50%LNLYez|MH_0!yxXu-J_1x{4E!Ok2RRa5vfn2_oj>KLP=4pA>HAuPv=YnLA6)wca7=%wa4D$TEJsjkn4LiHIr9kcGg4}_*J9hxx|h}^mz6u z2ks{+luM4^V=g4#`8qq5Y-MA4_1b$d_R0m{lIxOK{<^nAc{o}}4uWbSn1$-gpO&0B zvaMs;*wl=S;fsn;|NG|ghl6VQeq5g8Q^u%I@zA)1+(0*_jsc0gt$~W193gX`EEO72 z!=NGe-5D?(g}wS-b=x@;)i1AB#c~*G0f3U;`4uC;8&3zE>*x<|@tt;}8PcN-Agwx+ zGI1)sIPEYrOp`UCzcIXta$+Fe`>sx49RbnXoU;^emi*wh8h!izLz*8609V2n)L>xQ7IzAI2EL{<$^7m-CWo`)l^#IXx=iu)B8G`FyrB{@GU_r~fSV@}IbZ;6fs#gtE2A?tfxyL6gkZ#d z&jS`Prj0}HHc4n>G6k8n+Um1AWR_AqB7TCAdS8`GJ5r7{VMVf3Nu|IzlZinb+@@{u zQQfGPNJAoZ`{xE<7jn_u_Ll|ep&!#gcZt<)ASO+uO-$g8bZmpa z9lCa0AxSTJNQK`bt+l1bH8L#h*4;b-6Zdp$j6xb=5V%&*S@%NkoXP2@-cIkf`h+C5 zk;xyz9=P{>(NMd{u-E}~vm%^OLppo2%O4{1gT;5l-_P+X-`nJ7fq;Km`TgEr;W$Xy zSvoHnNj0KK!BMiTdFNE&K&y^}fF%w6Pk7G`8uVg_%Mq$6B?Tf&8A-z$g*yr@uWE*M z3jTR9)QS36A~74p=~0{m4V}s_1k;cQi+37<6)D zurntTCTnGz28?N{l950P37A_u^n;|&1Rwu0-+DbhCaXdJ%wA22<8ot(-~k+vsz8Bm6B5#7!NfL=Q1j7hKglZh+oc!DARsTXm8FMgG;ZbVL|@q0 z5|Pe~b}ZOr;WygSVfUUk?rtW@y5EccR1jNf9x0c;mUSl-9Ebq(Q0I#^`dS{kX+UBP zHOm3K&Dgd1BkhWfv@xHNEv4L@>4O|LWa zC5j_HW4nFSU9W z#2jhwe2q*Kq%OTkCK+Y_hG$NpBV-T67neCyG(r_H*rAYWk1h z_xD0aQR?_OIy@b^nYX>a_0N66Nckimi!R)=59{G=!7p5 z3F#{$sPTk!r}Gs_e$DNr*sJQiSZ)|3NCyf~qz>@Q)xVAyD|U#A7MIyLZ9xn;CHNaW z{lOD^B#4_IdCiL-?^Gg)GC^?%`^*K04vJxyB+oXr zENn)k|B7qR4Of{w7pPut#>ogSeKaxex7+)jlH)`K?GE>CPVw4z!4Lo^XKajBfPYT! zcy+6GApyYcavMvG@CD`zN_4LM(3AQgNQEMR)&Qb9iZS%K*Rn=+cA<`_dLhC2P68C+ zdcV{^IWBQO*xmGd$z`Auk}3Y;-yO$lh}OSX%8#v9HY14Bc^EKc8JQIqU-lm3%)iKj z0h1y+(;Mp>OC(B#O)wu+)e>j=ew?ExCBjjf#Vx}{9VfPn92BYTap|gshjurjaBFH|MnAlb1w<_)Cm*+h*Q(fyU?>a3DB1g6 z!ENvg10T2O@D7Dxi?irKZ znWNQ*xR**U;gk2QqELMDkUDK%*5Sm&zBx{Smz{8J1C?+gMO_P0cb)L0c~97b&yqhM zOk(0=34faMGdK*(l1<=xI5S3|2(i{Ye`G|1XBz3L8w%H`va6k2B&)3Y%hlMg4 z^kl*e4NAQ{k-?JW@#=ti%p^GzCru_=EdN^ZNxAaXFs|{&Eyx)tf?5OQqHFgi&JQbm zMsYXt0oO418z29V;QWZjkzq8SG+Jrk@yGO>4Lxl*M}it!*0(Ej_nBzT-LnkR=rHvE zy;VNlpa*@XBr@OsTD5-&n9Jnu-y5|-)8`YT3+?K28;{5|bf!(QQcs&u96))jhB7{0 z=UxH!`OcEfic`9f2vD94;_omb000{h;Hf1&bMNRczsE&O5F|=L+}3t3)T4kSX~X@NZ=;OP4u2t@Tf^t)T=rmW=-*YnzT_By#v;M zT|?VRZz^`}Qogz1P=Hz_3>6Wd>n|pG|$#(3JG1x+UmPue(~Kd&F^IGzx^Y}pbQCu_e;?B3er=;nd1(Kp9;>z04D9_& zBf@lB=w#k;qwcr0+$4Dc$JIRBgfw`@w}HtkaZVN{E0=n13;JgE`~VXOkBU7Q?r<}V z5^$!gdM(Yz%Z=*Q&k|t^awbsHS?@m>6#m9Pt#S=%0;F(Uxnu9~t6Q^W;^I0~C@oo~ zxj~K1aX7I&Wja2fi=mFB3V8j@HQ;>tj<>6tw(WoylQ-sgDjqFQgQn09w@RbUVAxO3 zg2^esP~4=R9*#qhaCObVAd;O<2B!uUZGfUPtL1bj?&7^}##i3Jo(OUb6!Zs;Mzm(f zsX`QK{!zJP&&#=b{%HHOdSmCoW0{3{gi|UcS__Mjx?YL!Axg9XSf}!c6YbF-R`~!Y z8c|gZk}oGdm*1uDO~?mX2I&rvWHuNR6}mDxpH#Y4ZSLDn#ky;wQ1YhIpjk;q7zWuu zAkHXcYAVEeW==MN%?Em5I^>g{Fg%Qcx2%Jc9BpGlDHj`UMUo#z>qX~C>MNyL35ktz zNO9@nV3Q}$0AnbCkB^UYUj22ftl`KyviU}Ch8 zNLh?2ud!Kilu&LHa1m+Dwy^kgesl#YqUm7}1lBOatf$-$0TeUEww5c~F@InusjD#% z!$Fq4X|ZmfUC1$&XPKj(8xyl+PB6iNd}ztbcog4j%gtGJ0xmQ?<)a^K=Y%8nc!9Tis`)UI5R@AJ@e;lc7>Ku2c#p1ZT(t~L-SVoJl3nG#Y%%Yj zA2IRpw+=X%<7x5FdZ+IO)_X;f2EzK4tMbUKL(Koq#TvhlsRxWwn*9guJI8P2E);!; z^NhXBRUjzSR&KK`Eh8hda+K$>QtfRQ=TQyY_UfVx78-H&O6_dQvI}W6dLLaatQ0Ne zf>vf#*=`;vZGFL6+gbyjR@|KD#QTl^@u|@M*$o&b;kD0uYj>9oZpm$VTU-v4d}>Wsl}Dj1yQ{04B0(rn43a9=CJ40N z2+2RmG0vbShT(&N*H-f%$6I4Ij_vw926)lZn!MqC>-cKLXwy3l8jz;>ac)eNkFw5h zdV=73@B69TZq$4B^>y3z_CN@B45Sb7x7<2AK75|dsG&F~OT7L4^bht1q?5W+vOwe> zM`)IVxlvf8P1=AIMCnY7$q1)gsBO)uglz6i+i_W^j;X=2mo=p4| zm*Kf+Ovw5wYg6>maD62vQ--i9`Z_s)i;IL80CT?n{z#|m_scoEIzzj$es219bY;I# z!oRBkdVUSbf19JkmmKFMxnZ@IQsrs6r88qC5^14N)I}0#%P3>!g&A*IP$jDLprYJu zti&W=Z2bCIqWj9~auR-AjSNG57c&`KpRT(o)%_vza^y>07lgVoBAMInB@? zx8D~W_#_#BUo?ga#D`Qujk%y@!=)aPQe&&!lK%8~y?Fbt1fAl*`*FeJ zm4*fK+$SHUi8n=H6(B2F7>!A|V)WSHd6Jcu(QwX#lO&Q5+Xq4X?BY92&!z2JY3sHd z{GdcfhF;biI1sD>AnM(ovl7ZM&Pvd1hJeZSzBIv?OTi2*n82jU`9&Rr=Pz?sBv92d zx=Up;9CG>r#Ya1r_=kTg`S1)kck{7GH+NSYt3U88=Ty3Jd8H3&Xp0WMn`$)zdXp^$ z2O?s5L+)1+f^c==E`Zc&CMWT zrK6?+yI3SB&!apZAiZ}>jDP#x_1qo53`8_0^6}3FRfa=?-uS#}Vr3xy2s4o8%SVDL zzQ>(rLOc)@#9pii0AB)@rU2dY-LrD>Cv?{%a&?1l!2hiI)rfy+Qabq&gmK-C@WY9+ z?Gt5#_gYF>;0{3|7>zMA7l*cGTGFVD6|vE?Sq(Hy9mY>gn=4XlpX(;X&R?+9mi`sa z98(~{z-=de$v~m&XR%1e`ZL%GQk|hxcLN7Pz>;PDLy?%Hr$xcmq1`-7lPrQrtA$DE zcqB6HTKeTL{qsYePIh_W^tfT=c z@Tt;31LAhH#>WU#GemMu4SqbPi~NYWYiHe5t*k9(Vuo{WGD1ZLU(I3{d22}J129OX z1jI>XP!W?Y*Dblk?!?OwT^P`wq%8&<+HJR}pD%=W6!(fK-*H#|I;TA2Ry?@DRC1b) zeO&%D5Wx&O9dK*%#3RR}U7D}yK;vQ?bJEw9-KOrM4mcTS+P`qfSD3W)?RZ@7aAM_? z<`qH5McZ>Rayj)!?x8>ZNAGc4^3mOx`CNbEAaHcv-nDz_$4$2O*7P7By623i zD0q0VDyZLNq`4H4$Bn|0FDe2S)W8F3#re=gVYUK7R__Ix=C?Rq#V(w#aqwvnJ^w*? z*ONkFdyz$`T;4PmHJ*&BRqPt0R90R5nQy%1g*qz}ZL-6`&A>3d*1?n9JyqnnYV^Rj zcj`>5O^}t=t$6c@9`nm9Jvw#_UZmYnZ&@b_p5PDipk`$!zo|WnMHmqn( z9eusl>ojYMVYiQ+9rbg{C*>*0Nm69zA20YOa@;8l%30%+();Y=K$Ad{=`R-JavgdEc= z>;J1-xqM*r6X`s=Od^nOpD zWaV(1OVOrJ$bG0o123f`<@oPjt1>voc~z2OkFK0_ol)h~M0)%sK>QulVg#f>GTUAE zwkG<1IY18;KiUs!!0BOZ(zvXk1g&KtAAcK!VJWr}c<4en33Me7SUL@Qdlc9*o5~4f zRwo{72uMfLcmgJ-q~t=`$b0c_Yw2*!N5!h@1jl~2_=>dQeSfQt1AUJ?yA#f|W;N%9 z?Xh_6c={H4SnlcEpBwGhbyrTme(n8iWC}}C8G2eUpi!99_6$}E!V!o?t<#q4=-g>> zE-5&D-C$!L;Er2t)3mN^*m|T5%GqU5>Bbq{OYUhAFZ`5!M0mhU3i=}YY8O&Xd9uCT z)9_Z@_D-ll+VHN9kUy0`AWQ%^!9MHqq8OkrKo zw<+avzfD+jFY64gx$TcmJmLmxD{Csg4RcIlwPxiwQs-c z&jUhLneU`Nr99S=ZO4E5GpYSO&sw1b5pUapXH%Hf`ugw7_K9E?dVdLAlx4z|yDsGz zTdVu!)rptzv>(QQV!E|MmrQ*yywA6RM30khb^#DMr{X#Ju?f?g9R`%j`?eR#tzZ!C z$t|hx?##N)_dWE0D`uuNFSW|B>0IVZRkq;*K99Yy$ZZ|LIyAc6eL(oNl2W|)>l*Uw zO!g1ml@HX@^qsG|8|7$PLGfUa^mh}SnHV$qgbQ1&cu@IM;1ly~b~wCA*Ns6`=N6vS zOVuTX^S6O+4*_N9U|aSpianSQ^`v?dBCXh|3^qv?DhqVvWE2E7_qKNYy1T7eG}h~2 z^ilHygMZ)t-a`n!(EP=z<+?ei*}G**CTEYcGOit4W52zc6HV@N>H6lEy_>)sorcayji+5zSit>e0wy&%-+?5>GB=RsQ0gs>QsidL z-mdLe-gXVM;I7<-1qA`$Y`ti3s-a!@yb4Xlp|edk(Jy;oZ=lFkEaq03nWdEwmv!#l zKPx!;KQu#H6}xY8Jbqs>t4DpSm;rn{6(kx227f@FFHf7^CJP91a#hWGYVGw6)s^68RnEbD-*AvkN3S< zuxAdmWQECJ`hYgBK93*x=$bDX8~1M7i@IezB<8t#cfflr(6-G-u46jl?pp}x(eL_KtB_cy;1EAqu!->e2uC~rrSkcWmS~4xvL{WqYsttfB zNNcvFR|#h*>ZPv>JlVGhzhx>QQwT?hOYyy!h{Xs{(YZ3FiboO5UwD;O$ zkNlXQ>|Z9N4($~ze$9{`^Le0iXhj-ETh-S5Lz7CC^$iTTA^l=(lFjU?mGPzXqhIGP z&W6&5GVz(WMG1ni*MG>yysXH+rBNKosp628XZw?`IR3gcTV~dBy-Ujw+h~nh(vnFB z0dzXTEl!iBt(O*I!6+b6iI{E9lc}(i0Iv731_@YlH<6AH#mUSc{d}NR;nbKdJlvV?7X- z+3z!Cx9;6nJ5O{Z&<1G1ENO-9&u95m-l1c~1)A~IE#wVv_s~U^Tcoqwq`&HN<4xH$ zic~hqaGr8@cPuu!jwQ0#U+rPf!jK#_8^YyfXRmFm9OgWCi4d2Hzw~=0S>ou6aC?zJ zT2MU{Sjju!U}QPH7{7zEi9Lyx(R*@~FE!6lUj5v44WE?PSf&c3FsWI4^|nyKx>E|G7GNhQ~WUQPO9tCuT8@$wEs-ge`kYX`W3G5nzU~R?LQuy zcF(BK(-I3#+Hsv?A2a!XY`tYvlwJS+Jwps2AUG;1J%C8p(5b-CDk=>FLo!^vDdlxH;&_Tls3X-;AEit)*}!!%vVN4 z%-n9S&A0y1w0f1Y5+;-x2N0OKe_i3#xukroI3&`$DiEt!p7fRosc45}$C5^_L8zQu za#VMpRCxuO*=p1zazE#2tSB&)tsH|wp|)@R+iPy$(MqPhSCDY;{JJ)CWTJwN@Wa6n zPo8;(ngB*XFUdAc6D@mqbUR>PoX)Qwk*5gYxqk$SZ>u=DtieWxJlV8^3+uaJss#R!f$42uBi7H)*H2C7@U{^QfR@_e>&O z2Ry&O50ueke9VLcA2LRll48Ko&1ZJ%>bGBW*J~?6CNY#Mn$|l}Hj19SfA2X`nZMtZ z<=mUsbECUnNP*hi?@^$1K|(g&rcXarnO$OfWS}5fJ>i&UdTJg}4D(cFu}ip%t+{Pn zhL)x~18_V9L={0|;OEbK1TDGpP+D`0{-&<=oO~(f<{ggbX;9YoWa zpnTe%(g?W37;4rNk!0Jt;W4II=h~+M#r_={komc ziApDeozL8z92g)pKH4Ob@-rO}?GNl`q~jp}pFX=~!}P^Kz6_m&g~o@wL@F(kJ~_p1 zELn4+RqKHxk2HRl@Nq^KYPaTZ}p#BxdEdpX`Tuk3|a1#QAZm^b0s zV>a#dOkxu|u#d0EJ3W@`UriC(D5l!DJFs2Hsy~qO5_pIUl`UeTyPu&XZ(DlW?@*|` z`rgjQo!AfEl^LG;o93qhtswR5 z3JQfsRT~3gT0vN}aJtRtK-Y(G4S=xQR4{B6R>%TI<3>5aRyibSQ5s-{x`2(I zQ>!YgO~LPgxGvqJG$Ld`V?R+*u`bw^g-o0nwZAfI8JECzcXR6Q8J&|5A8)9#SJ7 zcXm>jOy}-lOEoNP`f_m`BXw1>(_fzg0uU>2?%OlydBQ29l6z(;Z};&wb{j;L^VyHC|xEc!?L(k{N}dhg|(p0+SyRKv4d;y)B4Y7fMi{`RBz z41Ry9Y~7K>T2Hp7@-C?H>g{$Q9*RenP z)o6cubkHF2`LhxnUXB9bg|Fnr!oU18G*}fdy@O2;)|sLqElLHdZ?N-Mfv-E>y|Wr< zH_fCv_E=psHofAuhz7!tV}^M1H_tePBOst`hC*C)b-~fibNV{R@z!25CswpTQHCIt zw}D0EL+~Vp(btpfw+(Q!e7z7ITIJ%MEWfGvn0FOS3Q=#EEXti<$OgNs=%a+40ICvC zBj!tCr#2KSy@|7OfF{M7+~;f3s-(Bi-tWxUAP%V@qat|`90)QQFj)_22E{l>TK+sx zG3U{c)QD+}=`wujhTd{C%%RSP3iV&O%xd`Ta;jF5%0BPvFZcsoaED6@8c@Y?Ea2(p zGQ50kZabTD`xE;Zk7V_wPW=N(?~B-AW36&)8L zv*mVDJ=}&*mc83^i~mRgzaTK6+PKZL*?(07`@r-dzm48#=%L`Ub8&bm|J8fj(;~J0 zd<007_LEzy6Cbbpe>JTi$P%aWHrRt&Pl?}G4UeEbyr@&2qfEymtLv8g?ha+}QsO{C zZ5Seaz=V#**v3nU0qxOLeoZCL)1 zF&vxSG(XCZZHyWRVF|d|B6U((;rQXP?>oOPQ}Nm2;8Vhgu=dWWC%?tMeJ-|&g@}tN z|9#kX#~&Qhon)9k#!5}CIN%*_a2+6UKmL8QJR_w{f#J=8y-$M_OWDhk;RuE=vK0Op z`1yCV)I+1e%B1h;WKg;!4E8mB7CVQCo{W`|Zw+by^@5 zD1s|mdZRlQJ zlK|YIjY$kC6yF>{d1pLP_@zT8(wfm%Miz+;+P?d+Q@ZZ~Zdn<6u4{H?wj?Z<%T`sT z=C?pFs}(m9WA6$uOwA<%X(>f}F}UmZOHRZr0pp?79nLDB3Nu@^)R_nTxnA#DEM9VK|8wriY;CYI?vv)qd&aH)cPqcpd`s$S$HyTq4D3X? z#fXzp0vUAl((|3-{XqdJkn;UNb^0l&9G0*|QJ@?*cb*W^GO<>6vrWo~TCr$f!lphE zfW<{3k!{AmexN^@zu{|byVijcMD1Oi8b&ok#1!?#O&b$Fnv1Or+Mchgoi62i!XGZ# z8&Iyay@RI0p4#d=Kqo@2Zl>!t4P6u@bd8IfehiP@-XP9_D!q-8pb3(p&r;s!&Sd)4 zW%tO?z5mRYrmz&YmT$YDo~r1xxU^EUYwC^~a}c|;TDw1GH+xm(vk7Fnm3LBRRUDD& zMN1~aQYCv?X*0ir0m``^Dkim zq@HEG@A&Wf{n=ki*Fe-3N3ZalU}1wN&sEc(Sh7UQsc7Yy7MMVCb=myrU9o4_lok~o z=_7XI2*fga;79<7vu=`v_p>phF)^T~%1m}P{t{rUwIK}Lq`(9Tiztc+82>IR2`6VJ zCU>XKy+XSgZfq5MdGljtGam9m^tDJcMqHX85yed)x8Wnn`1k!DXHo46z$Kb=FE{2+ z2YrN1HQD=aXZCd%3q?fe+blh1s{>&-m{3bZAV-4A{)f1*?)Hv0U<}(qEFJA+Hk;FD zk)_}x-AEz}+IGR?s{0C|Bs9|f5bPO>Kn`{v@tgOQ^w?{dC#l3nM!Zq~2w%UdXJK}_ zPqVM}gpOHaYjMf+JXp;|dqbe_wY*X=j1pbv#W#*m^mwTzYR=K{ntCVST$xH4IbC!V zp7!MC2K6g3GKwd^!s7$CakCZ@dv%j!Rq9Im`V)=YI0A_{3ueCF4|kDrw%YD-L(wU~ zqms9n>T+%miW-;lcIIsLGT*88$)f%VA=g;fAaS_JCmq*pRAU+9J_`mP0z=w&6O~*E zN<{oGJx+`Pk_HohnbhnyRUzy#aDE19|J5$zW7yVqwYAT8ym#Zi!}(wwu!#@oJC=5f ztA75tjv1s70_p8_GWjTC`beARxL&|IHzPLjBT-FcP}DKd7fNk3=^>NUYw4&qM2t@e zOc7AJd~H#ntBJugc?P=iKilc6t(Q8nC%?-V4+(ieMi*bX!?4 zTN!$FXd8Fpd&|kEt)#Wt=M+pL z1j&O5wb?=gEm-E{lwlO!H|zuiil85ro}n^GLXh?1TZGbq)YkAV1^2sDA!oC?Npo&?j$@OU7TlBUU7Pg&(-R)SQV5`Gy=(~8*BAE|uP=2D;>| z`Do@b!+x-l93qp#8kzj1o%I{};h(H&AI4Kj1zJ%O3&>+dtO>omNs8f*#=gv|Fi{+7 zCTgLBKZk}D-|U&8P>XH3Ni0w>@nUC8XkR~D*|QlQ3Jc+b-=(WSbC6;A%_<2}-$Ji- z{VD9|$vH)Z4^9BuKLE;Z%xfuf{_{CEiS{?PXHYC^LSGxwYA+MMN^rK43)I7`#sja) zP8|=PnzHHLJ?D1yE8d+y>&_5@lE}TnQ$^R~*;L$JDNo(Qy4}1=r(Ayg^aoPsFE5nS z*2OC_ohe7jU+b}yuSGGx5JGS4S?^eQFQp#uSi-P_>{q24pWlr1KgfY7xi6K~>QIWB z)vlj(?k zWh%c+zeJx$Ib3RH)m#EG5}8%Vz))V>Mgbm3DDYntLTct5%)5nu0=jIHwC+~&X4lX% z80ne~vcOLUbYf!F&9e`c?pW5bT`r+u4}aE1Mk$SDR30ZRgDH<(NO%*3z}Q3Cc&T#7 z%z5Uwunt4=kBTj+&_{QWjNeM!$&M?s#nO)>W*tm`)+8 zd2bhU7mFmuwI6AG82urxXb01HY*`!a{m1&`dT_VVtv0#PsIa9HL@-tD#?0(^RSp7c za_6G_n@sjQgWd;qXd!{Lw_K_}A0br!5nkT$RF^)nD`_c-5|J-w&&U$H@l0ng{>RH0 zF)yv(=pk_Ry?M`O#MOKVCSA}eIsqGxsji=oi_#B<@PU2@-lLR8Hqk%6LpR<21$(wc zKRpF(80f?@g}?wt*jkZZ;a(FbB6>y0me5NQBoieMR9NWSz)@uR`i=2n-R~aGjjblz zg6|E1Z~D-%DSRSO8{{i2SlpRbRFhVG=qRnD71&2eNG`bF8}4H**+-9BHtvF4w{@8` z9hj|FBE4Xz8lRXXniDQmFs}OFvuc2PSQ+?)qWpA}M6Mu6tK73wx$&r78)3HiC z+DQ=%>yn+jeCToehh+MPO(9D6<)s+)*Vx}B#D4LgHomZ0@SOw=caC$gcpFO>fql7! z>l#4F8ro^twn((Y4d?pt;FipI+pE zff5wXs4KXoIIZnq{+^412&zNJ8W|=Ki8WsP%forI$-vB9@4+@A44uhtm=lfmf4(jN zNN0v(?rBBy()zplLko$Y2$4@U)Q+D#1eTZx;jfyQSt?GxN=rIHB1~~})boS0cZF(o z1_$%&(>~(i28`i)+)p`~NjCwA;5h|B6*hgIkSP&aWqa4sa>?`uCEEz;ZT;yzPa=4M zDRPPrUl|04tD0FV0)rPFGah7(LZ1p5cZIS85%P;NZITl)DW-4k5iBTprDw1tjn3MF znu>`bS3*P4*x~y}@Y6mMkKIRg=EA4fpHrtBFJq}EV9zhl0JGD^&XGc|)J0nRP5|%eE%A>+2>eACdyOat#@5$_1&U6x2>BtN%oU&5J8~`=eMwOJGyt5THX)t*H2BQXg!1O)WvXvouE z?&9iaKJz!y*IWbdxWqvE;F74p$DCO2ufH;cEIC~nT(|!< zT?bW1mqUPNkRjl0AJokHcVxeUN##cqj$s`y^5Qs+1g+h2qU+p>_~}ye1EAjsM>n)v5$*Ks=wM;z*vug0UXsqxn8k~ z${Z;uRrAa0>FinWaahgQ?)q>T00JspN^GdC+qO54Zca4{ugZ31-i&UxrB|1yloz39 z%{_`J_ZPFN&zU?V$*p_fX=Ta-{l|71+fww@ukQ>Y|uy&B0ea{lr$t6!$yqZoRm!~+Q z+Ayij;3Wnm?vr3`S3#HV#-2(PN$sinB5w{?PObQr3~K6u>o?E@wNyA zf6e&xH|v0=`%f)R7!2@=ba|>qCgOmQ?X5E;uVdNAUbAE7juYYrHM3+gMM$U#>A3aa zorOtw&A}hsaP^eSF8`dQo9M0ziA)38z?XPR9mvVVJLQr5v7r&*e5VR-v)Fw^4YWdB ztp+NOu@{2|fU1^WQ8yJl*SSs+uZwzT+P6(xJjNb+qXBXasTo@!e`ozzEv zq$J{R7NS>58lYMoI$~c;Nf%VJov4)OS+G5?n^#?C#yo$`id%KyNAm>VUU}McaUbt# zXDb!w^3c{ zg!KHDJHc3?+S)A2Z7(zraI-Go3@PaYpbR1ZocTs4F`{o#?12 zjq7G*=odS0E>4h8Ot`jYdQ_R+tk|KD&mqljqq%joB38sZV%>LrdGZ%qOy1|Olsf69 zYpw24`Zn{ZT=hiUe~3j`|4EdRUKyE4)c7i{(a!7yt)#bGqimP@KR#!rOC(Sfi{H$r zyYyF2COLZC8>j#JdyBg|r*+nkEs_|6WUMLnE-)}Q3-YS_VMhm$lA_Qy zgI^qm;1{v!vV7twLm~V7VSqADTi8d{r24PZH?fvOQ?GYq6*0q~E~gW?$U^|a8QY54 zL@T*|YVTJRt$3=YBwmS*UlG%0;vxyY6aN@eDJdXfY0N2D*6e)ZlVY=A#Bj*r0`9xo=+5-Ratb?}9ckVim)%}}%?X{Je646Fppye*wVztO@|YX-TvJtz=Ea~{?L8xI zZkE>Pq%>0~@9^Z=eImvJzGQ%LAe^kWs2A9?TV3UiRM=smgi&LFP=wp|wJt;P&+?SM zU8=-)68jtz+gw$7r*53+JFYmA zldRMRx~VD*PpWQ_*b}trjl%qgyLI}8qJ5>{g@mfb>8$@ACV5IS9}4<6yPSCJQih3E z>UvR^nm(R?-t0x=O#Y7Ee^kMQrIZL`_$8O^?$%+XKYH>RRD`L*5nHqPgKZNTritZ? zE!S#kcEN87;D^5-60t_%^s(f56i@FT|2ipp<3bMM=xiv7`-#TBuaRMKsM90c5_X80 zt`?2N>vuo<(avfR+!3lq-${v<{w?2bth03zN{wbHmlVRL7t!o&jcLzlj@2V%SPH%t z2yz}>-bfNov|*A4vO*XbcniO=2Ql^aS$hXBL^NYoXrZPuO5?Tjsz06)V_Re#;SSZp zWHR6(i4V&nL{dctpFhQ}xQB>O9WucQYJ*Qk9rUryG)%edE*8?DlQT4Ubd3Y{aW8SB z3T>O%&8ZvTxgRmz?g!o;DCc~itSmwjMNidPkBhAA*4CV>x{SPE`&Jq?dUwB{hW%z| zt*bxf1^oWfVuVS9bO4ZPhaq+yF0N>`tF5~^b`iug7w-c}E4};K=*4n9qaaGsZ~a|5 z!^xX+7D@LK3b(6s+flz6D4?r$$&<-X6|Ft-Kj}+Rq&p8_W@w6nGfq{foTYiiQIW#& zOFqlAVexaevH0Uq`14TueEW0txn`na*_zK~os;UXzBb@rNq`?`u|WJ`!RzDt`qiIf_JzSU!i7D7xL*zqmT|{#GV`@U-fHyUVcDOGtn4NGc~*}Yz}_uaen*J@c}f? zF#-tw6G&zTab%rTQ|oKrD)A9pDwnKyt@ITs4^>5Ev*wV47u`!Nw-v?sk<>&OIlg%a zvto^biD#Qzj6(m~>=Lcyu6TNq%TRQ{9i9)PKB196Ar9;t3_QlM^>3($@Rv%&U(vGi z^)WJaVlfqLSAc#(v^5(RPx|~pBId*juPWl=M4XcN4~2(J+E6jCV9KQ>;G%49gUf7U zIoSwmQtAGbP7co-Ye{}Pq6rGvuo{&m<07ibT1csczeLc@!&qT)ReRPc?R4u)?u)2i zH?vmFYa8V*XTRu>5yR`T{;M2A@d*>ygkEQxZZnHZbc2=Qjl}7Q-PC7hP=r00`{=0u zGl$R7#9|LVSUNAXwG!4s+%~ZBDdT~QU3cSg;p*mHc(O7T48#iX4bmjFuUc6@l6xdQ z0ftDL7v#^LkDT8m3tgWZdQ8R7)YV(@4XC;3x28n!5?#9QIi`pzLlM*i6HnnE!bd!9 zt0kGsK9@Abq<4x^N?UC)uXC&PUya$4fA}AY9M>hBpt`oD-OU0|^P+eheBCH|>IvwU z(zK3)ZfE|U$;dMgj*xoyMw?n1;M;A+Mo;~I;xzc$l94yAgcJmSf^bw#>fWHjwsv%C zs`X=}Ea?6I?RU@iubqE{IJionZ?RGL#{6w2NBscyzVK7|K-gO3A-*cFXW_cU4zQ2u zcXb^eQB*S|a8v-AFxA$CVdcyOR^B9=6$8^LYYxlzI6K)#YyTd;#y=DO$9{?=> zw@iChi#-#|Jv6%4GeSahKFVc2qw)}G*XNsM=Eo#-+*0otkFBDLe~p}DT!zj@ugiRH zH0Mr;cV~IOa}aoL`#pdIzF$?_qd)h>Jz`+s-||GAOu^*yYnP$?<*PsSSNUypLPIr& z%4Ns<_U1%WrQrO!`lLn^n72K;y#KxR#+i`z(^oz8UD(sbyRHgvr!(1gpMhzyQR;rWq5-va0~;K=RZm(RRlIA~_>cm7TA|vKFoUic!M- z6omOBax`=4}R zOm{;8i+|WNsNYO5c5po|zpu&IcDHUPed-}SV1DhkNXSH!D<0NgaNmaH z-1hdTfnZ>}chKmCt0L@{lUHAgqz0}|Jd&#H`sF*YbUU2B-X0DvDx|R+=)52+hXX?j z1fw1|97~xm!#08IEa|$psFum+xPgV)p$#i9+SB2i&!x&faM+(tVugLOs0_9Hprj_3 zmB3*iytliqb=fLTjViPcXwi~v|{-hrcC}f4!nT)SX) z^Oyfd<^x$zs{j%Aw8emK%?mGJQYmMlyKg?@) zoYJvEupZ8bw6mf!!#rf>-_**LcVetN7^B~JqJX5ok(rf>P;gmfQ^IJl4H3be7fqgKY-JW|f+-dhN%EmY z&!wRlkz228>QIKKfXGcLrnm^{(`h?+Z-~*iIUmJBlR03~f>8T34Wb;&YIdp{aqNd2(OB zQw=ffOmmR*qM9cqYwDXAs53>^NAt@2VT#T`VlFL8%s|5kEYA7 zFNO=&`+Bu^B0TepK<%YEs>Uzs-{Dzvh<((P-j#+aBLHrY^6GsE(@E z&;wR~WM5X^0e0x>016!IU>OJ&vI1Z&AU0m1O~Cik7(QV+IYSK?EM6y7W5Ltc^HpmS zx*jyun%&cn9b|fF3waYUM#8KDUfCi-&V>L_mm9(^di+Q zOUi5ycI-FvoZE;!_8Vc%h&)Ph%xe05sP73IicmVc;?+ip9-ELcN4Q+us7c$?=>D)w z;#m(c2A$UEYZ4rzwQl*3dU6q1{ZQPsP?^C1;inTAT>Jr3A-saJe6J56nV?@iE$450 z_Cp!$XRT^~(c@4MR{TZCULnjYME@sCa`Pf+E@i&Q{?%#l3 z`Qp8LOg}d}GqrveX{L-^%PO{u-L+%mYGvKs{uOkgml6au`jT%clJ??JySibPR4*qS zD*#-Ua+V7w6eOcqj|!H?&SvKumM;y%skH1Nl-pM@Gn3SKfNq-3s&f6iXD5~Y*R!E< za=o;V2Z$z!@H`xM#`8uVL;i1H+YlwetbrU@E+-EtHrn1%0W^S@1KxA*v}U+Os_xTj z8mJo=nLaGGdHfhI^p7T!h<-V5Y_2#7t2EE}a?I)EMoD%1*Jlgo$if2{CBwUtIvXM^ z-vCZme)*?%=^;OEkdVle)crmQ5N+>gv^(?Ieg_B*{R5<8fb%urhcX2>v37LV%VJ z8?&4Vh|@z1qTu6OlRGYrseR?eGFXK6z2gwjQ=jpxkTj8-+ncjNjgTeh4#W=zc!2>2 z3c0ItQ{b{j_oHC;l`$!WQP*<(<;D5Z`mI~OrCMzA-;4T}|Nr;PFU;B1*FL|Q?V@>Y+Gi~X7U0}@Vt78O6QTNf zOFa@)MW{=psG?qC9#67`x~wErpreH8+am)cL=@pp@%t!`}B^#CRjCX!p|4n84&r-NoWX|BV)Q{3D=GH+o zbAOm`vojQ}_~>zUfr)trj{orI%z?Z2k=T8SiI%%_-Cz9CNv|V$5OJUipM9lvxef~d z!I+R<)yWv}kA{MU4eok%nm@ERUY4uySNT~^T>EDy;pK?Z`W;9c1?igIotU?f%$Pj4 zq=(OGC8ICZYYZ~iR~8Nn$#HBUm>3l+W@VM`HaQct&ZH?jRuPF$zBhF@YDIK#-rfNh z%lDq_Kwr!FH=2%tptwkUiyV`erO*08<%b2?z5Z#deZQLtn2F05rLTX0B?;K(|S?Ax2cA)jl7G_Q>;U!15yw2w|%84j6AnPbqs)Da;2 z-twRiyi!H|lCpO6Z!b%$Kh_IEn!nAryQdU@aX`ir*z~3AA57ZlE2KX16J<&X30~9H z>CY4Q>s!suo{1*@t0|WK*B?F>+w^wL^@`?tmLxwP1_DDN(qXSZ=o0Qc7SRGF5I{k$ z4&zY8*%JR`k}^lJ)Vn7aH$=hgBOjwEm<6IkdbMYWnu0zR^T5`OfV^=rJa5jpm%d>p z$%ObEMugL|{OJ{KCYPl-uKQXlYqTRQmO7#n2Nh|MEc%1bVY2K^dw<`>A{y zC2ZoReHg;QiP9Jw|ML)&n662DUl9aRNd_hKb0lQ-BnI72e5n4@INd8|EQ5@I)Q!=z zM3P-2IhCftGDwwJ5Fa)?`xN|Ea1q=zwR^D8nqDEx5Nw@Aqfo|n=d&2^)zjPE`;ABA z86bx0#qf|$c}|Vw%gX<2&i0UHE^QU}0L#dovuVGZ?!#Y=?%4@+x%)q<@uNZmUH$#S znh;&i(d#juGdEWfLPCa4>4}_($5V&|Mv>(HltC%?(yPv|mS0}7!K5jQ0|y>vzK}); zgt?%f_^i1+y74WVtTL@ES6rW5%RpyV#Dr2D|7N8-y80LZ9ti5u#|jRIi}T^2z;A;A zZ>EZ0Aq6FNbu63p{95;cdQZ>iNccB3v#-?uZ@R+Y=iXYnlD_$K_W8lWJoTl&N8Wyn z4QW&;Y>Hr;qq=PQZF4?PIhk8ziFi%rR>}+GcKDn#zgVRPnQ@rR?-9e}Ac52&J++}k z9FS}qJ_G!N;>s-D*3OMu9tLK_B&{Q~hdWL6w#2;~ao_rVAAPh1SqIbO!+Gs+^=gA` z(a#DB`rL~pd2$`mj=WJNTBf=!afLEu%_kw^Z05jUl+`|g8>czESyJBON)*8##j^HkT@c6Kf`1$z$B&AS;*(H{ zm6m{V;<*YjK@?9Vu5GG=m6I80-1=#fXE21E8t3h;z%D046+|mI?`PhW4IjV8k2P<* zxf*9%ttc5iCTmL^pf&&OntL06v%)WRm{_*?B(>0!8e<|YAAGvg)p*`_p?u=H8Kc=x zg#z!L`Q026{_=7AB0M`LT(#(cKT&l07?)ZagDwrLu`HXb67!j9zWSW%b~`=kbQdO) ztUz}3wLfmHjkA9Gt4bHh$_M^dZqz}iYCG-PYtHFROtP4KI;q}CH5vt(z{d{S*CLT< z>CTCPHjT_Y^vF=yklS~Z_%43$K`d7yOA3_o2{wWKoQzm$eEsPJ@}S^8y< ze(k-#yUc&fyHZY@?sM$c=F@`wY3(t75nUw~f@01wwW*)_%%@K47*>T65SflH7Wp{j z@twOgdz|kleo*RG7Tx$g_h`63Z>$^*Uwbua5YkZ`$v_D-_+{BAE+^L;0;lj;-6m`H zZGel@taDc$fTc&gjop+(EH@~$Pao+OEiX8}GS6Qg40&~!nW)Fz75iJj1jQzURfX38 zs?FZaiw?$aq5u`lK4`IBmN#*T6_2vEh@$4ngB7GHIdJC5X)%FPpo)#+GKx-1=W?7} zrN7O2GRLqH1Ox-tkBlp7?^!O=0-4`9ehrjKz9NYtvz`m>pTRha&Ut%~03#d8B(A7e zeps-LZZ27-Rp@T=A`3vI|3X}C62V(nb-8`YE5Rh47pS1eUpbcAt)Ncgvn=&vkK5;D zCF6M{jwUk~swu8XE23AWQ|J*IfTW4>!t|+WW+tbU%^Q?F& z`O+PrKMu`FI9U|bV24cx!J9!q;I67pQvEEor!5f0RUb>u^*;tR;Nmh%@0o+&czFI2 zs=y}8m$>v*)0dxKG$#-7#YOsYzXY3LY%uF=yVK3U5Pb?@=mTcpDSNrma8j&S)#Gu3 z(Xm7bOpjn*Zp2JP_E7fa(3XB~-Ft!9?7Jc)uWWG#j}(V&<2s%SEbVtk@D{4qC9#s| zr}iyrJRjfy9KX1>>Gud8B6(mSqJ&XuV_p1`NVNKoZmc|-5rEn@cAz+4;=oK*;}?mZ zV65t6QdObGLi*>h`O0iteQ?g`)S@r>t>Gi>Garb{$-!G_LDhyLm1AT^gZFe4v?mY+ zGZyCGp20)RnE(Gl`hYZU1sLaBs{cKT;(PLyxC9t9ETWjXpuYB{KwJC{I-(=dOTPjA zk%pxzLtnG5p#|#af9Z9a`cBlsiD{9_%E!}G*Uatt?H}%xGpU=+5LWUw(@3&D;hSR(b?M3Ti&Mc zyA0b6&xM6cOH3#Z}!zM;E)<%F#&{`rLY+|MAqxeGD)jI^RAt27Cte zQ?hespHmwTr|vc$R`!Oa9^Ekvj|mNfq1TB1oRhn5u_bYIYDzIaWj9Vf`xT_%@t_41 z-?v8)iqr{Jv8`~Ph(k9<{I*L=_2PRt)}Z#kL=JXTrB&mG5)_`hU0vHwBNdT=QGfi& zufm@a%y@UQp9KkM``b5rCZ_O1#i|^a>G4SDJ66TPP|f!;*8G7{f=dq8sss>%Q9SZO zeZQXx^1oOP{>1L)E{VT1XRT>r8n&;;un#*q>HHGd_!zxF->=br5JI9uK>b8D(N^GjFu@*+{Cx^aNkZSd7Z?YPE5cvfM&Mz z@fR~E*C1W-KUy-j7Z38(0mKh=@lWfm`jRPgE>WMU0sh0pU;RF*=T|mO)*;OpR_}iK zpwTTZDA8buVouh5rQMF+g%svaX?AuE%rn%097Kwe$B$|!d4*j}KyWr8KU9~7Mu_ep zwdzG2g1(q^Y{29}(3alV&3b>z_1sPCVYv9*rn5yQiU_ce0qep|YxDRe9f>|_79nAVecPDm=Cej+M zd=8uLvhwy>5z&Lp%e3}~xF7x_3tlr&gJwloWNo|?yj3x=OXT$VV|{wvW+z_l;vtlr zS;48-{gT<^cx9rEAXWH_y7;rc%y-8wzvMw$FxPwDh5f=P27d!nMgu&|o$`}0y4;fY zi?>^9x2?IkkivAe)e+j_eJ8%zfhwuL=#zgRi(QJahN7y2<7;ocN#$!k6MpuY*A5Du zl~~C{#$h;m6m!VKN0%q=bF}bYzhY+XmIilrX^3imS-e`ZLrIo=3qHdXVyq!v7Ne!# zq%6#26hhRg)q$_8NIzO#&ob^EnX+aLrMC#L0V!`Y=wnS4#Jo2p?9np(&=DHj&gd_P zO+ZlnR*o)|c|z~FV*EAMlJohU{GCtt;9q%FRqdJ*%aRN;zf*krbINw-qhCzSVeRR7 z(X6L2h+ih+89c1>t*9fPBg;@XN3ySoozr{n6vxreea4UHGmoA<`ON+Mt5TZsI%RI! zZ<04lQo^)$l0K0z0&38oJ4h28%)648ltZeX>yJ)b=%aDuYd6lBJ1aW`UFQ01s)Qe6 zDYsA*wlWhT9HN`O|J20ZE;ar*(?}CVfktnxm7*U*D7&qyp7zGw%<3Kp(OJzl3guLA zWDt!jnz+7`p_6)j)xI_q9g;+si@=8gs>`;7lfdIRvnG6O1Q|sVk#XhT=v~7GA)igv z-Z7evK%QYrg6A!!jLofwqU5p{X$nL9-8zp5BRa^^^T;1+Urs-*+Dg5cnX?~q@m$}r zP24~?J8b|)5aCAqgtW1z;ict%QRU#FT{Mt%ob^+kIH5?fg&q~bCG^fxhbR<`nHIHe zd>-TT&iSPL2(n@FKOBgAZ&;ehwrrD%XzqH;HTsOX>S10)5hG0anQ1sYU2;={KY>WM zkv%4uRyf?WGtz(B^Jf`9s50|JFF9|Lxm8CgdkH8U%=oRUQnknyYZEA*1qOnshiR*s zCb_XAOol$)*MC0~w@he;L%@Q1(H7QG{eqSyJn&0%ENQ0m?T1kt8O%?43%aQj+Nn({ zIB@6xIi?`eUbi%gJjX?sT2hfJegJ$om`u&73wJ*l4mN+stG9fP8LRn}$zLp`0T8pl zg-zA*GL{T6D(2S`n-@H*J=Q>NJvZi4*0b)=>(ijtBFhc=sMOK=_xh2&K%g9VV(i4s zLU;DK4Ig40L2chQkr?ATZ%ZeRgP&;a^DsY+BW{~7Ye;!S>L!i*dNWPR-q;&f{aqV^ z(k5$x5GjJ@oHP#EKM5FC3aOKim$zCe(yQG)8uzkvyFMLle;(aUFaL zuEIi*R)PX}0CLoWjO4SAUgw)6aJunm7j=(9Y$PE7?bph^GB%WQ$v+GJx_&=L19c}d zpc!8m>zz|}sBdP9&6Vk??dA5I^B?NDdTYI@&sWj*VH5beNLXC_@!r>z&k9k+MH`Y6 z2YMs-rfIk>`BmV0)=&URk zSvw_qFI8UZ;PSdxln_Q>9`Pl}E4a#~y5^PNj|N_dJ`WtXc-^^X?JnK8LeAF|FbwTK z|DC%~84D#4Jye zyI5atv?}Iu+w=O_<>yHWQEgXn5>#P5%MQRn%^MR?6gBLwj&kj8@&U-&%MB8wEdCTa z>G;~E%vwk_PCCVzVy_s zt9N%NQu_l@vo-v4KRWSNIfl~F0B$>XnTSp#5_o`qHTq;zlxNsaSW`!V^a~tw5#N(F z+c>>8augK}ejl zG!F#CQP8LV^JXx2$1v&h4wIp1vBOF)?+ey{bD{ql34V0qV|qnyYge-DHcwpy!@vo6MD9JugBF2 zE^zK~ebFyqbko=Eac_Ir7pznm)6Td=q%F-(hANOC8RN(m5NWmKqhosRp!7;`iTCxd zMJQni$0y3RdwLaJM3fu+jWlFWg@{b7YuA?3=D`ETyj;oJpw!ak|RqCvL_s=p+)o zPqZ$E6OXPOy0Q_7%~@Ri5edym3#vIs*PW`{k53Ix3sW73GJ~o6Kf4n=h>Hxv!NmW@P~4??W+Id z9U#qi^geaH@@Hq?r6SG&xV%jf=sP81=Y22V6RH#VOGDdag9w3SzR;huGY#iF9?nK4 z*t6-!pPj!q$!Dt8jO*mIRKh4H{Tco0y-Uap8?Rl@y#4SM5%OMxR9Y*Ls4P5kjGfBk3? z91HziaDQZUgx9NL(^6{bVSTWo4$m9AJV99u~l)B{9o8YkaN(UXUOhq>T86OuX z*Qj7|fx#EHBzzRDF`6Mb%z)IvSzcM-r4vpMD|JsknkCl?hRN5JsL`RDbH#dp#*)~^ z1E<7>Pk(cF|8XnW%c~^Fp>*#wK9`Hk!*ip?a2+od^-c8ci4fLZ*8A)kyb6_l;xe$Q&E6e z*d7k-E085I34%n&K&;$&W+*1kr=w{WbRBOc0>rHwN&VRj?Xe)c+A?ydf zK>gL7XN^lSEjZC(zt&Nq3O}Owrti45{iHnO@Vme6BWXSdG$X{5SCBf@*{v(d;rXiLJjs&c zyzF1pFAgj~u-SmfF6I zd(QGnsX$c@!*XoyOC#>)-u<%0g@TKog!Z%Wx~2lXcd6vaibwX9`eb3(X6|pql4U5k z3VYLLOwRUx3oP}V)F5Izkbb+uA^mS(JrfeTG8ggQ%e+4sG*2w9BE+7JX5-&2phhM9 zoF2X`D;4HJZUaLA8y#J9C}%>@E1zLeD*flbf}aRAXTKTQ$+|q5LiXUx#mkN-u~)ig z2QYVNTAT(YBz>I19{;@Rk5va-7(n%vu54(RU_-FUw4W(Sqw44-x#RiRx1OmW4llf$ zkDJ}Ls8d@Szh#h-WLJ_?M?*{o^Wky*G5~ne=a0peLGR?CL^>IR1XW&G0F%wo2Xs1f zyA=8*x2*(&+fEDv$Mb2Y`t+DGH-;{5zm7kQCwtX`cM!15lAks=kaivIKH_E3!5c`J zI5sc<`}K*+Fxr%Ykd&9kN;A{^&_$^OjGsP1y)$|16 zYUwaIdajl&_6fbkO9W+K!=sQCKqpTe`E?z4V(zs}O=9J~Yntqgt#sTgaDQKqw4*FY zO@Uiscoj*U`0IQdUsJzxMP4r_SG;AUF4nc`J=Yg%jA&6-b|DUSa}J=Om|Kx19ckM{ z;B%u_d+4Ks=W#IcBXS|VxwLT^F&QkM-h5i!j>Bc;{NhR;P%Le4H{xr{=>>T4;!Je1 zUG`li@yXUt?V9k#d!ko_suxn>(uP!lWq)#0T(8GtycgV}!jZ>rWt(1Qp0yDQb-p{3 z=058pZNGn4Gs?=Me+N4|_*Fy#zB?IPrl0H%76~uem8Y1a^5J9d;p!VrqzDhLESi&qeih_o(<{kyI_U&KK%g9B8 zB4lvB^uyj;L@3a{C!OBQJWXJcS*T}Tt{rYJ@HQE-n~&MzH_XSY>ZhaVM-OC9WgnN( zFFc8fy&4NUSwWo)A@y}*B$HLK>&wpZ2QR4T=hfn)_A)MimM@-LxB1+c*`%jcmb=Bs zH#D4*{16J>O_P{IVAS%tX%hlU>!p4vs!I1iq_zzL(X#qf8o$*<1<$0j9xf zPEU@#2MVr2O}(G}T^gEteh4TlT;(f$xuYn^s%ZGA2D#C7q#U_LHQzBa_mp*BV;3cRLl(_3X`LBU@+=--#?xw?Sqpn;!~ktk&R zr$DDA;SKbIrA-~~%;w=vl-ISo-43gs$IRokp4#Bb4tDGgzZeCrF&W|M$zH`grHtvV z&B<6f4<9Mh?8h>*>}}i|#!||Y>s4d(cBmWA_T#?9<@QpY{3Zuk^fEiy{PayU!lwfH zZ!!!yLxKn??A-wdO)A6DPqxv|(c1o!dMB$ShDp$#A6Lgqlo$4>OAHQxXB2UK%{Xs<7RgffyJ|05rxpecVb4{TsDa5OxkC#sc32i8 zG+y9LNDuL$Bb-b`+?EasEk~Nmj(E$1UG^Ze-zr5;rzVzfM_>EwRd&DHikoVx>HabF zg49H3Yz_|(BoTtJO*vLbz433oOcyxzo)^+#RnhJ%Nzd;B(w(9)HQ$<>$$cike0sRM zhrN>g|{Kae{Rw# zQ|a#`Icq;ze5WwfwuO4#3sh za+UsH@U{(iCM5PcYTj?!&uara5ArMNMEgj?dge6jmHK}oSxl&F!?jr2WYdQ~+qB)9 zogIiF@k`?ZF=t@3)QpV_D#gZtSff?OoOb*bim1Gx^>^!)HdSEdhAgLJAV6>g0JSB^ z?>o7~AWUF4tnGPtPV=sP&2MRsE z{yd+QL0qBUYDhSv+kBkA$mV3^b7TBMpRyq<{5i@N*P(^PdL6uU%j(VBgQ!+KTaMYCq zgQk&NH5oQee0|>=m&l;-gr)lip4u$UnS5KVPi9^B?X2vYD=&#b&lCq~QN>P-%>_<_ z1={2WaUi!74qk1(VTv-nshr%_72fRR*dBuSg0D6Tn2G$f-1@^K$AzyE<|?n+?(_tF zzwtc1m~%ULs?pfr_8v(HMyo?ZI7LCs$S zARnibZ3R+AM1*eb@|*DgG<|D6`bjFoBP#pP0PP>81@}Y(fM6KAuaz4NbyArXMS>7a zT$^Rcdbe4%=t!}Z(|A_!++eBcws&*mKJlg*RzfrgZHA5pqb}MZ#kH}ZixO=jHAgX@ zYtrI&JRWlvh+L$=6b1ie(r~0E|JtY4)es_0^sNfhP_uakh`pdjP1hDhqQNkBkA*eS zjp0VB<1bjrs~U#7UbYG=sa)qN&38onCTeYOx)o z3dpTMR)olDS8{4leJo3zXtd!w@{X1hRJOb1c3#}){1a!{C%*#JJe<;T@>c|kcL+Ye z5wL;Pwi#2?W%)x$BC}@U*tqUn5IaUn>fhjQQv`LzdYa3m*s>FC`hnHicgpQ1S^}8A z6S(4byCCs?e>C%=yxrOA!`nnDcI#%w?VZCQp$`*-+6GQAQqwvYZ~KvY#2=w~@7-7J z)*4F-@6RJbxhAn{Y5MAFuAHF>eF^r!vy)qf9R>jemm>@lJMHMRvW~`8^vInEN*YIL z@zQMCK(UIZ_TU8>h?NzG%I|e#hW7NJkWg)I=;oxH(5cmCDEfe84C^fN)v-NA(W#}0 z=cKa(fRbE3kH2o)x!d=wcf(JjFj;^W`p<@qAUz^7-BMB-WrBmtb{1%4ME}{b{D%O*6RN;>U$n7txP9)* zrQk_5;95oZGyT~CQ}QD+SdGtF6k12=#u$pswy~e**~`De!1k;K&c928T-jzG3y=rF zAbw@{Q@QHKnCR65l!djc%hR^uY@ih;s|Y~x{`EB2lic4lS=|J~|Mf2&wqGfw!*lwc z{mKHe=!Q(uz!nr?vPn|gu)gGXCmJ3e(M$K=bO@+e9{o7}GN|2*ppl8Td0PgJJ16B5Sq(vGEbj?8CoE z6`e&p0Uck?ikZI<#*68ahHx0dsF320*pLm1 zi25Axo#5NpTRei{`?XBLGmgyUMBQ8yPz8^xrPnP`)OzbG@I{TA`db+m+qe#s&zN<1 zS!3;%_U7w70Lb9bhsKG718q}9=`NIPHd`<&IH;vgiY6w~qTmgytRaQvpG*@KSVtYE z)SuVAMonQP8qQ|9@hPDr`Mo3tjo#U#MB(%j^gYQiTzVV|jIj~GfgJI8jI%7&tG5&N z;$p{Jywu1Z+AhMejWBGqt8udGm3yl=lUGU0s45HyIV14&KWPzOpXgf;1L2UhlMJL z_DphiE!Hnrj?tZw+3BmXAqKI)82jh6dNvd^Bbn~6<4-y5oT-vIIJ zi=-JYSKab3^*NEC6}enDDu7EV*P+Q!q?lC4%tf+8HEUk&z5U2vzGqGL1Py@6RSyP3wG14{3={N9pva6E7iWW5Ey1o ziLE1a@JT9vx!2*$+{Ec*IKS|iW8RiJ@Cq7h#lAvhcpY-1P} ziZ3Hvl?nK7_C$*<`=oi4b-|9@zbBH%+b=KI?k}keGCT^GnE~T3HQVLS+V`F&grqfB zw)H*gWF5$~NXb}wXrML+4UXNmNAKg?PpRA=iVW`=*~m$ZMmZx}Yj=~yO^wbuzxBva zCiLw6QcivMZJLGl0Xa9!;jeL?!{+*1;PqG#lJ>kXmY2&=vzY0Z8tff5D4KBAeIMhV zABHzabO&=hvq<9^e!P4FXgV%a30n6P6c*VdcXeU@9X!e>oqo)$^hXo#fXb4?M&D0L z9mGvH4=AiNhrQ~QCNnVe!w+78&^fT4j8L*7A)+BYcjoB_2Fb~2URW;d8W|a3|JNFA z{|qRRLR*KrT9;gmgE~%NLz|9Z06O%5f8iawTfc)GiPkDJt}Xw%j-6SNoIo@>T$g~z zA!(v}`jw4U1;{@b2vgLHZtM7>&YivZ0ORYaq1>*yl1%I|5Xgx}Z81Y;0t#Y8A@^by z`iQy8f~nS|u^~hbBu7}g#1(A2y$pK0YWMwoEVF*GUut(6CkjLi$IL%S;e|t_Iq}!n zKIXd6C;nJ&y4Ypwqg2YTLX`Wq7+NH7P$!M1StX6Cvic3c-c>Z!0>WOGpRzXf`*G=a4DpQiAJh)XlUOpvtU8JiRUs zg`HR1eNLv1X~Bz%+V~|ke~c;0ZmH;lASJ=(_QkGXiGaN`LE0X(d_z?Z6(iDV#E!D5 z8LpY!XjE<9nuA37^mN&ST8PuLOfoCrio7pTerz-~Mh}0PDxMp5k`Doq8pF`Q4$nwC zC}rTh931fv_kZ23%fbN@X0=QCIiLO~E0T5=~mXt8I$uiQMdv{B>Pw<2EaZXdGHrUQ3P{SCX7& z=9JQ32YV&cm5~$}6oe)RAc%l;r!OwnN0h(U--*tWK}{MTiAGxU4Qi=2JQ98p{>a3i z22w-)x)eKf&LNdMu@4dKym11az-qxoXB1`J4xryit&A;88cc}TLq)Hs7u%s@LR3+O~MRXkqi z8Pf|TPLRnMmSM@vn4>*=i1M}PyxD9z5Jg7B>J0wCg1x(T9Gr(Hp)U#bE{46Vw@%?M z(~w<3oE@C#)mNM10VzIevSgSGy!-6j#4hnKd~7%V8sNV0F!}jw`(3?iv%2)Epxz)y zRxLrPa+bPR{xgl7(_|V}QcP4yaES?ZD$G$pi4Mdxh=a&d*UyPxLla%VM!>?-7ERpn zyjPZNmM`->Mv;PKU78G298fHB3#LxI$Vk3KyhGQ`<0t$7=_Z9-jtfXe+B`W^&?)^9 zaHJsXuzTBT+ zwy<-qQv=e^OEDCLesEi<=d#gX@e^6%ACW=~_y=3DOvb>9Vvfah1IhdIUd!oQZN{() z?MV|`!aA|85wPIXtzP}T``t|M%K~8z-9m{7%(OZ6>Vs2uPZnB;P_2xW7Kdu)%vY`@Zx%m-WpN zIDMU;zcf2WBRUb1YhFf4M;)f|=znkCFe#Ek01ZaFr{&RE5jssNbHsbRhSv4{XRgGY zU=}r4bzO_OfcfaK{dxM{ayX{NS}(Jn7)c1GZLo@}XcfQudrU0k4=r!3p6Cw4!dN{T zV}FVmQ%VVNKR#&$g(&F^I*6PQI|8%IHZmW{GB-|Liw>hK>%HP(Mrs(VfdKd=9s~+i zQ&90_l?|6W0UAU7?aGN*AYPP`KF@Wcm$JgUUopyMD@(!i$5TQ8+Z4_a=O`gfl^!^%7e4N@ige>ILi= z^TzE5t%ej0Ysd+c0&vOa!m7hzX5<{H7b$!XNj)VzO$}{s)6!5)VQ!0u3aM<^$!C{t zttjbIWtMhyLsc#Uk(q0y7krnonf%AA{qO2y0V3?_aVkvjK9RCEw4xU3P%2@olxuFm z)vxP}dptrS%@hm~X$mZEnBvf0k9n{58! zMk{Vi+J~hv-C<}7tDSWd^(gGjU|{ftli7Db%3Og7MwP9!JM#mG%{qT;Em~@vkN-DL z53@9lKK?Yq|{CW2f?!m{*C-kdqcm!1`n4l zo5g91Rh84(uxEbz`a$VdK2z)Q8FQ$c(!9xaNZb12fDtYjBjZDYc~qT*28AO(nT67r zoLAA$YK-5-Cvv45eP1w$<72c7HBFf=+~3`xwv%Z;p|6xG(>gV>>i(aBF#<0d_ac5! zPNbo#s@<}R5DNA;9cQ!Kb+nVwFjQ`u^2it4ABo+jU-peU+p`S?W5O3S=k%TwtH3J6 zy5PVj_YvhjKMB?PG}ZVHkwfJYNj10Wck~?B^>1*%Q~@*`F>^L-Rrs^$04@TJcHHC& zV<)BatvN}OLC}!Be0iv(tX~IG`^_?Uaqi%Bk9->rn9~0XSaj2U6Oo^&#YxLyjKN9C zWXX zmgbazbPn81_^qu!MoJTT<#izQIUS}mx8m)}D5yp3Rkz6@(R0a_Yl3Mw`6vk&WNGu1 zsE#jY;zer4ojvMj(R4ouY5VIx7w8`coAbUwZOu)w$Dod*B2u&tE!t38aO`Ks!(F&; zN18bY&z9$b$stQ=c;CVbq)S@6^@mjhNUZs7cPS{8wbUd6U)(Ta=CspLJyW#CPS-qN zEow4DhNii-d={9>E2xc|NK-R2S5Fx8X3w1e`Q(@8aNSLT;eM)xHdZ{c7!87Oqn8R{ z1?ZbuT-i7MRL#%aPJKd6==UhaYoxz}0Go->gqQlXJ6txC{u6B+ajd?&M-`n(^Qk%x z!ofFP&KC%x-b&mgT1mi4?U`IvHpXzwcE&f8kspJ%O)GivgeO`!B~a3)e~Ay!K=S zM1oZ`=2!f*^B&3DN#QLK&;ABgH4i{EJ4dF zWY`oShblk2*v>8|=)CzUaiKY-?oQFs7jXqUa|&S!U1I&NdB?pYcGq~Kz7 ztn?0(RLdSg2M}>&Wk-VZ+HjQh3%Rt&pzq4%J_qZ+4Q}_2l!R(ee&GpG((uh!2%8X< zSr8M~RY%sEdu{<(74Jm>S1*+J`~e?(C}&w(waP?f8lYlqjS3+ z+I+XNicbV!XU1dE`h)k_XgQeauJ4~D%=xC=OVk6fvHZ<<)M$xHJqx@p?EBXS%k3fm zo0TNSUD0moGyG@5?c_=?4bx8y-6Sd4&8;zKa)$(s46ic7Mzre{jV<4*=Rrs503k&f zg-pbPwgwK6a3L^`Zm0rF88ZC3(7-b`fqR<~YJ7SP37MUph1U?h+noekEPgCggOUbv zqAp${FoP|IK9Qw9aeC!c^d7Ty=#va+z1Cjdb0EHBB}|YI3o>SDNvW^wkqhjrHUixF zw!cD27%$m0LUVV8jin~?*on*aHUC`2|JLcvSr#EjLz+x}N}>GqsYmsT++%eVHl$z&yr6M<8e|i%cd}kKzgTF3t${?us6`#>uSkQ^({^ z(@xhIF%fqh_yr^14Ug;ZgK75=rOg=JGo;J4Rtw)XFR ztLW~gPWEEyH}Jp4e!w7Dy7&+L=AZXg1y-}u-Lr7KOtW-oaipC`-ct zrGu|i;hDI6$?e9E?vF+vz&;Zh$;tK(44JLLW+jHjDCos<+-9k(lYU;D)9m5;jk)wUyP{pTxG`K+ zGKs%L!dNmyTQ;fqV+t+iA=gA}5!%Lp9ArO?ytL{4=tF>hF<%!5l8H4&*?w;rYN{XV zac|OLDp8GUpS|B!%Dfz-##3sUHF(Y~C64ZQ+FmQX@?`EvWL`WP*_79I=KpN@W=YTB zu5LfoJX{gb1ykb8^LQn7Y9@%GV~lw0kY$Jr7|M&A85;xwjQB_&J{k^_tb7n&g!83A zx0$Tf9yw0#k8ieQPU2UA931Vcak?*Qs^7b?m-~1c|A*!I5743$TsPZp`(Zm&L!G}) zyY_Vz8m_x%XuS&^5j%*o^{R`HRcPb-(DYmpk!#%wBh{w1TwsVJB%ShU?~tKnRgeZ^ zZ1M`4jPeev@wD}&!;U^WNXb6N;ue*iO^IlSH(4}v)`3K|4W{11V%LO6Qc9SbwodPk_%pek+cJ57RsN4&KCF;`sJ#tRX!fHKy^ZeIV;y{ProXH=~O`vh1xS>e*>WW3hhRW_y59KJw{7h|UkpZ@VgWKwIyLi$<=^i5 z$k>+BE2}}?L@;^?F_%_UiT_}I%1%x-?qjkGtHk$!i<2UbJY$I=bx5)U$zwzamIJeuf)-40x3B`n3rrI|MQ zyG@~>bFSgcXAhTSDEwip39L|V9NBlNkcyOZ?Rw(2Inqvm2d@XC=5Cqjt_#ACR;bUJ zC)i50%ic4h{%-YIa^dS-Wt}T+^nRT3h|kZd6{pd2pPM!F46nlTlfgiT{WLvTmCiF! z1Kn2kwxOrosonxjhb`WNo`hMB3!mo={dXeUBX8e`L;U?co3B zx%qpk4rvYCQd^xa@Gn|n!PUk`={08{=gXJ?mJRes=IW~m><9;?tI+g=dm%2afY+b@ zTY(luTduGALy?f^wkZvtr3B1>_B#F7&GKQd2|b33`#2_jX66AH@vB~>E>|bz-j9{= zh+v>QIOa)%`bA2lhpC-i5YfY^`2Zvf!pR; zaYx{nNpe`5F=EPu8%OKAsK!?Rh!18QEHP`2sEqKx zS9QI+IT@-lq}~OfkMC%mZvXb<{<9OV!wM)TeRy|r(>1bCqoIa53u-1Z;2BP1ZK)GZ zstt((22+2UUx?yRvFet73jWw#Bd!2iy;=0~=Tmx_Iu7UaH!d>%og(9tS35^3+ z0vhekzRL)!{NCVLfRL5RFpY9oq$IrWtla`%lO5SrFN|BqM%5>u6{4qq-tvJ(vN7jpxq+ga5ALe0`exM)@fDF3^_0mqI0KT=?ykGSv*OOB^m>TV7XW^ zbLHYB1NgObD}G_E9M%hj z2hREKb?e*Bo`4k!hr%k+NH?N*U=80^y{3>P$N@TM8ZL4g|nhSNT=5@Dj z&uu(s_EYUp0#5elC(ND&;V*wgrXu_$uj!+g;>5VA0{3CeOn-))(gY% z35Ze`0SKmf%6SUIU1#3Lx4D|Bb3WqkMwZwbkg^UGyy^xjutCyM%?A_7#B zzm=o`HfZ)0mUnxo>ci(zelWCII6A-=eUs?s+UEsij+Z-7IF7XJ+uAnD)Wxv+NjCf< zZy#n*kXPxlt!deCo=*>iNd+EfJC|rZYQg@ zd_5^Sk$hM3@sT!?6ZOHk?DKB?5%MG-Z(-IaC;ZRTy89K23w#&7+4LVy`smYD?5HUa zyu|oRd^}3~k15Af_DHdh>V0++HN9zQ&aw~pJ!zuv5S2=;30*$F`6<%8%#SoR6 zFkBc?d=k|*=D8_(AFIUFYHxHgJH8ZlS;SMsCY1$*75-R8s}*rYzz}kV?)XR0K$h!w zO~U41&&o^ex~*<=XiNpnkrjo-X}F6XhOUE%N^7}u#-+M_;NN>!mro$w)pnaRIp2XB zy8kpttc9M;Vxz53t3dInZ>ZAOkMB>>hR?TT4t#%M+RW+E4 z_!L*wdUaEAW?PTWA5uH4u!I5HdSRsmzKcLhzjqV$tAJrp{*+J0XNfJEQ%fh<&&b%x zN7){Y%=5J0ZYl`WIgczl-7}}!kjO|;rM{Y%MuH&NH=CIsU-gp)O6qL~=Lp^k22x2; zH4saDpPLaFBg!oN;4H~r%51q)@nB*?a=1vS(f5OOpiq+EJHmb}{Jh3` zLXeXCaZ31B0liueYo-<_qZyx5T^2#d7%9ouXng(U%gVBP5G#ysr9o9JSXk>Z0r7Uk zN!7#}y;^kM5f}VxP49PIMr7Hwir)SAh)8D*z5Ckn-*@?9UBoqkCfNMhYzoZ-fIH4s zv7&Xob@C~zC@}SltQqIy1q}J4^1IXDp3WW~Olc2b`tfXUW!b397-c*5fVI>a2qUat z6Qr-~e<(O|@zOIOh^9X%mg)V-U7u`5d& z4MI%Ebi`&6(}DW7j@ga@!YcL%XIlTsFsTPwAZA6|IvSzXJ}EW?2g)S#B;sd(9MIE~ zdeqTnz{zEW^04~3XTEwI5FJSp!0(!m- zf(_)kQ)QP#z9|GO@LvXVUv!t5En-HZ+QS8GPZO9+%w$2iXLs$%H4|)OWuBJpi(r2R zS?o`7MXv~o(^m30sKef5=p-Nhpxx?yJsOp8JskVS(=-`iyY@u%3@7JV9m_Yemk5|L zK-cC>V^VrtVg*c#QWy4Nsjr&h11Pn%ZAJ3PlsQB?W3S7>V@tCl&4ZcdI%n?T1U$JP z3fE@&0y~eJcKh-rnhWYiWzzl*=joGTl0As&ca=sJKhf$cP_p# zN^|9`qv)Jo_d6^gMrr0Gu%|?CQ(-kxI1^bpZmrmlEsGYxA)~nhfl|(g_|9zK*{P_| z!t`3R~{~se+JCxv03{ls~X$CT{i=(y2ul7y@k`@qh-%T zSfI8Gy&)lw@O5_S6Oyt-aucRG2}$+L&Kly#U3sW!=LBvenx>`^r}_v}c|{FEW{vGz zOt?5Vw@0_+k(?)YfAL6##i)-ZEg002pkIjg>tmk0h%vDDMO7F{n~keVM~jhm&gsyz z`YnDs=)>l{|Nf*Uw}$SS(iP&JFblJsIk18V_(3ZTGGSrqVOXT3qL|k>KMJ6~)`;qD zHx`^Tso(0viLQ`gWe&+l^LMU9r)7n6nlT)0I4wX1Koka_#~()GKt{Auw;J|85EI{Z=Il}aV@iyP~&p1a8 z`}T>l8Z4iGd%X*rqePH&gE{rn5wBeaWBo{+dBW~CJr2Jqe_{lxtuS^t!zO*WdZUqc zxw%z9KrN!k?EW+Tm!ekFvYQQ8GMO$EX-yf-+>z}@yyW2Y%!lS>OFl8>^ z?PY|IO8)0_{WlEE9)I^K=6w2n{iON9izrwSsKVkjC2n)DprKJxT%$^vX=~3mao*Nv zW4Gm$aUS`TzrdX3N8L+Q{vy6Hb$=ab{7!=qO!eWEPbJ&d{uPafcaQN-N_>X;RRr+) zW-5>7fT{%tVH(24`#_205uBaUE2lJUu~OtchVaPo8T?gHePFE7=Vv4hz}h` zEsH$AuRF46P8S74{iJ9wlf|dTl3?-zXmvhQ8r-S4ZO#d)3N|nc7gYplAfnv1uP2%M zLE{E|sYPm^Gb|cQ+GB7iwYrssk=k+**5pb7A7R1W*o(u2Gaz^Pm0Tw6)2j7eMKS;e zDQUIm5h;z^j#(PE={*laOGv6HDDKx*o-@A3Oe`=Z1V{LG*!_aRV@_xa8!!B85^V`rre_jce zMwaePp84|#yds9fZx3b04}O9C69{mMOr`jE3ma=K0gRjryg9V#@JXXu(yVmrt9vs2{`H$CdNDJ<4BPe^l~f z8WkxB&Mn2vvJu7kRlZBSm@~q}Fpdu0rw)w3)Rq}r{iz*OBdP-{92=7?<_d|8Tzq)2 z>{eCDbg(#j`+%EbKK%g!6J8o37*mq6;Laf+*8)c}?S}{5h#4DpuwRd%eG4xd4+#(P zIm!8s^fL{ca9YkasU=6y{?Dy}Zub zh0CHX!u-^sS&B;GmhTE+^hf$L#7GM~x5M>tgQKgNXX&KW1v8;kM?p1|W4HuoH|C*j zt}kQU%1p4C4PT$Fy1ye#p-~QBrByF(|FbeTTBc4X^ZTT?f2dXNpJSPXnEubPuC-? zlEa#6M3@vdb~c5xagrH?l$4ndIu4Ux@{x;y&Y4AIbAbT@yISJrg(NS^-QJ?v$qV`5 z{Mobl{e{M@i@v3~qe|1tdh>c}b!q|wj*lvHuSDrAX=E+Z-E6~@pJ2vy8mhos8lCDt z@0_igJ)6!yAOU|-2uTRFc^lxwQ}N*EN3Qc&gQsiEjmbARR;SD5>VckKE)lHNNxg}f zHnF;0;fF#^&Dsnfa4f?!HUhk3IJiF8EF=Y7uIMoU^#@#oOFdBJ8 zV$gi2Qmp1s>A+6%f{KGN`Cm8VUk4Gw{_nGKM!6L}7=1k`av53f>)cFHC{2!5<3|#D zf9Oxr+f5Sp*hZ8nY5v;jrpsp8VBjo zGd8RM3mWKPb}jkm&wC6D&6$fvS{}}6Ico=X52J({G9k1SsYF^@t_e~v{h`=&Sr#nugnmS{Bo=)aN&yPm&s>C#_V`e5y#OW^LbMd;#I`JF+JJO%qLp;R~~%{~Yq?v+P6 zFkX8688r4{S=%-C61toq4Xnb*8u4Th>;Dnuh-{I2Gg8xfk!&N>RXq4dpQg=)W( znTPpUTcoPkUB1(k3zroXG$$cm4fvtFfL zD6ZAbbI~6;`hp_rU}@xD-&3=n_bA$eI)VJEHlqFaT*mU=8^1` zxBf;inc0U%XfkY9!O$Y(cm=5PZ4|j!N+*#_a=m`)6R`PG$<=j9>%tsrW6gx8&s`vI z-WPtRVlS)7I5f!H%u{=`LDbp5@_qPaslscDv zFumwe(NNvc*q|fu*{b);n51aB2*@T@lF>$E@1myD{o#A*IxCr9_;I^{VURsLyvI^ZQ-!8f1+)z2{zcNS@@?StCST ztJh8USkLo}1g9pt0kag-=Kc3j;g!kEUvjUlVq0{kcR^NSIx^F$9^^N)tZFa;uolMW@{>v)aEhSkvx1U zJZG(v^Q!up%0D+wD4o;Gt;hyf!`gwRqER6`C!P4;6l91v2;&{`leAj@j2AA6e(*&1kd~Iy^QL))LnJtXcDlXqVUIr zTRfa%NGm%3mi^MslkuF_Z|O+C1WE1&P2Dy%^OguKEPQyYb1;(+78v-Lh4ogH>!WPZ z+Ysb@|0B1{TDGO3iwV+p_MX>KRE-ooCU0dyJN>ebr`1V}yyrCiPju^p>Z0!5FHWki zIe^1hp5Hfwz2(fxI@9cyIeiyMCtK6iRn~UgbZFpdR>_);6*KrzAdNwA<;s85tLu&M zLg21eLI4a49%gyvVm%IH#&tQ=Z~JX(;Js*;3h^im8*0=GC2Q;Qb^0|j{ZUx@h5F+& zqwaiSXlX7kzL4TwQDC62O{?#r14A-!6`~r>vg3!I(*Au2lbk|rWCQ=cAIJCa49S4?xNBXsRRYFI2~42#+TwomF*onNm<7q zj;-OomcRF#7c(8bPJHJN&Ya^P+n`HYKV$q{3>(9BywhMG?|MUUlX>1+kv3?}A~tVt z);eb8exS8{wcU1AR2cy0LW}P84W69h78@g8KhP_0J*eeb5PA$Pg|R67kf=KfzB(j$ z#?m7Y>BfK0SaN2RR%r4Gv-DTY&G3T<_X{50B3i7y{VnzXrHRU~d%k}S^c{avc|@A# zrH=cgMB)yY&%LeTH3aw0M+pTs=r+(#>d?ocWR*;ylw7Qlc9=MkT%<)U+1ky(bI1Qj z*L#LFy=?8n7LX>QQ9zU?B!W~0r8g0T1QA3C(zg_;p-Kl)s(`dWK%^rbLJc((rNz*T zw1gsEN~jV_fV|n~9QQu|=j@k@i)%jcVP<}7*1GR|tu?cn$t^|V@gb%y9Un63omUTM z0pwS6Uu$jUerCv9uy}jS}WkNTK8Dyg}TfqN}-(qKL|7;bOU;E17s9^ z(0aWrYWveM?s|q1lCxyeY{w9wtxU@R%G7r^?CD670o5P*_vmTZ;Y{U{ypJh#sg|@$ ziNddIJJeA?fp?=3dJgvQhM(bh^9}sgzmQKpS$lXq$fg#l`bYsoH)wnn4(t?3clzb< zK=(JO9^=km*YoTk*}|RQJci4f6U!QxZaRTWpjn`#>wi=uRFZB~hMO54A7ssU*x68T z_YL5fs}$K`jVr9jlbQIIlSgy*m3sf|sa zwO*$w2OvEbKc(tOz%Xr+YN~m3vq6~v)?o-P6cShiykk4Kn;cmi^(;c-dm+P5UZN66 z`gvRGP0*uM9py+L{%7h1=dynIL3uCM2!SryKgYPE9Yv$pHpo7ArDk(3ghYHfw7q{8 zr3!!=Y zrzTu-v~)MT7dQ&-w@vJ4Dy%uE>8#cAQSg~{&s&3lEEqhy1Aoci#Zh)h_AwhQsQnS> zS`K}zb`*aWm5tz_xEU>fICEGe$LuQ(5sAqclLiSi?)EOR>G$~>SZzRo@W9KsK;7;$ zpo<%~(YWo75ih~R$2%Ph#cZDOW6=3Au~CAE^x38(`L4y55BW0~<2PDv2)E>2rqC@D zJi*N8^)Hj|jULBrNVXny9h2v=FnBdRP@6#%=|^_Y07fp%okxi@W=C)B>?#mv-|Woa zpau#Ug8Q1QZS7LDRe9QwDThNz{@cZgH_iiu;dSi!zT@pbz6y}1Dn!}w?=Xj8$E*@? zst_PEoCTiSly)3Mq6r|Mo+`@&vAKF;ZmB)LNz(BBN57$9gB(mgbdd50#9)U1GLg>% z{~ij+PZjy2d}-dd*^?0RQuQog8Gl0=8z1#<8vA*}xi;7*K^stXHaM{=2}+X#A(|V> zUYeVps~dH3bE$p0x-qw8-W`f&Q1Jxg^b%ZGCm>4CqTmujDo~laB!}zAL)Xo~j@EuJ z7nU)r!M@nCQYcPd0^4TKwHlww5(M1r6nd3-4=l2E%PlKPBW7lxk2fKu=0`V-R>>U)uSzwF$#oxLB;)S4s8FBKLQ8?nfhb%6{eX2zUeS*Zxv@T z#atbB(uBp?@ak!&%=_&^F&!gGNKC$73q*aN9Br z*`UFvr+cR}zRu3SenOV!f=or4ZC1ANX$JpggMV>N5jznRADb=AO!FSiR7*>lZB88A z^BbfTBS|=1k}pf`wJP8ifb=2m6INQ%^>wllQe{+z-sqs=0RNo#!(-`+k2RF~mlZ(w zY=mXTU5$g#y-gi88zX5lrHuQmct98o*zoq9Hb`1=G~1S5@4`z=guLTz-15Q1z2lSe1uNrXUHyL9@$$ErsfI}^*DmtbaR?8qL z5RM9bVb`IMGQQ_y5e;|6l>1LK#CzT{6Vcd!KMj#|I+=-yxv*U0MJ2UIt9QY7 zdk_&*=J&^9^7xqQ83AlPXGnq)>8YD>gmU(#pEG1GORY4p=vkiw!0SwRWmi?wETLC%f|HtrDdNk&CdEx zeTSelZHitRuyZWlbn>3R={Q+AaXZdN1D?M_59(6#bKDlkG*v%PZ*1$g_bzxa9uoqi z(__@+EsCDYn8cISi2G(-^H@DGb=NG&|DRtpz@k*Ygn8l>7yHu4S=tfnUzke$y?VW4R6dHvCG=|2<^+u^Kn;@A@Vh-$LwRu zbyZ&4vKwP3I11*h`V#&5hOXyD1PX8qMP=)|%290-UvpmQ;)O^kbn=NKa8bkJSf`V5 z`ucp5e(_B@$LNY%gy^>o4q!PLQ_$Pu8qJlR`HvbezI-Rr`SVnFbS(DP=Mbr zUOYjDN1NwoA;%LVi3dvZu6K;GtG^f9E57csHEbidS*y0wI6+6s5FwXQuY6;M% zMu85*!dkI|@0G{7YGLFgLJiP1{A?yOQ5mMRHL59J*9j$0V z$O0RRaCDkPs)+GE%yr914~JxOPxI#01XAH5MCt=(kT;umLXAAr97;l|)Q#YBO^{Gm z&jT#7pUXBS2O+nyCkAsT0)Y2Ge(xk@GqZjNBKZl( zQkFCFBx`mx6+KX?LsoPQf1726PsLOHGDhnJ&`yf_uR zbI%VMHRDJQ4di@5>qGWY@rwBz;#`3QS?yGZDE&&GVc))xao=8Fc0=Tnxsj(`42)eA zT47;Sq5JlV@CSZK>L|nz6)th@qV|Q^kIakJ_ar7Yn`0+qB|BFmd0Qkpqh+yCmL093 zQd|to!KRRK*O9sF#)}pAl4j7xC)5;hq>Sfl3SFt{-Y5%jKA1wASWw}BL-a4C-q#ob zJ9y6pCaMdU%o~**Hdot6nuH9z*MOdb7}7Nem2!B^Xq+5ic7`HN2x%sfw?ubVHD92-LZvvw$BEfiKv< zIZlWjrKkwy!%7^6+-v5Vjv&;QKn1z^}Ckh8v%JSfXDN zV|B7>wf00S5)OXWPB^l{b5sFHmB>;nM7r)HidF*V^v+Q5JN^=5y4%{PqdYq+?khw3 zn60U7M6&N!9Pan)(h$Wd4qV78yfFCq#`_hM9MxN3y^y6&O*3-CP06WxCv-gU>+mJ6 zVqjP1_O4L|-pk&?=|@`HOoi0yA5x_zAj501d7r1%Pn%DI0vwy(#0HzT3MH$tivRyW zs3SzrA*L9mmj9?MFW~C%if@Y6#(Jx&YiywpE%HTS* zb2V~|+CIGJ2%6oy=TU;!1fW2f%QT(FMV@5TM?rb%+t{nPlY|8x(RsS2q8ipCl=nI0 z6WR(}1b`GJ)1 zD#g_;#C7+K0~<5{4)K0vLGVzvItmPVvKdV_j8RI=y;Uhs3@JMpvUi-RGPF_|O3XL< zc8$uA_mci8#==a>rBXdJr2X?X>h+EYVKjYUqLTafm&bafvD3Z1Bgep*FCP+tNi}a* zD*qYKvvtXx=7gbWxeODv93^I|qz|KeiAFUkNr{VwvMywz$b)2C123n`f|KA8T6JwV0$7 z@?nE4ofSRcHFPK?>|v0GVd{5@aKYPH-?|UU3?Ff(casi#?X0>mNsBRZ(x)bpDb_eW z-GYesHRTvizKY`a+Tp{7w4lKT1wZ_QnPyl2idZEj!R`AfK!n7gYN+)k3PSLo5j6FS zLusn0U%_bywlj-YGXjJM+AF>08O{9VC7rCRR&?l$L#DiuR1tQKSICQ5c%xg_fYSyH zQU0xYkZjmFT}vR8lQv-m=f`=G*cu9eaaQE)0eu>b1bo zzU~wL-Hx>=8up($FK=DT3a974Pd9M;{DfpslxhM0=eKV|z724kuWpa1 zwCW97aIAzlN$gv4ICZUAIN;D0ezumpl5o)v6*JQs)7N<$;PGzmeT8Cq%Rz|eBJ$Do zGKeQ|K@v(|JQ}>i`DaKE)JPJU?)q^^WRjIWJ<)nd zKqG0GCYupsGq2|p+bk@Aadq?=B%}%*@(TK3q$7r_q3XrEg|t`Lgn>Y9nhFcwB{=kf z&eZm<#h&NJCK8vPJ54z<{W==bZ;(?rwJRnuOH>YhRUWU1_^y1}>U-kD7cc0#d4dAJUMi7# zatY_$ewL4&k2I;iffc97zP`p|lAU$D{aYPzH?dDmHJWP-2`ifQZ48q)Ebyh$PjR6# zqM1*nQ}Rxqon>Fcs5sD#A3+m zk#BWS{U|VlBlL}3Eqle>p~y||8OQz9jfD{rr>Mb((*1aS+#u)e zGNEpJ3x|p2-i3))K);Z`{X*{tXW4qh#iq1Lumb8AgN1{7V_fRDh%q&2HHKhW#+X87 zn_}~bE+{1Mh|%YDqieIHx31}KpVp3%b&L)^zeRIpPV}HFCJH>)`Y*M}71`5pVj{^G zFpAwS)`$cyJFPN|zVAIOyqh1b@l;+1IkJ^(-|W`k&G25ASId*}xiopWP_MJx^za*v z|BsR8ort}3YTZzX&CTG)+H>KbA`%DQN^}p+&-Y37O#8&s&Y+y;XuIFMI4RvvUR58L$9tK@ZomnAfCU>fbs$U6E10#9Aj$k7Zml~Fi=K;2Y|wmK>otVkS8r7Ae7v- z`zT7T*hq4+Zsqj+K9`ijy~hBs5qCIru27Jk7G2k}qsU2`tC%vs_;VgIw`B3i z`lA^htd;4*B< zC&|gU+p8tFoi|M#XIyp@Q#>c@?a>b?s=KfrNZt5~YDg$#a#mySxmvV`asfuuQrF`9 zCs)^{q|yZKE_*ie&(l*yw5g&xXA8U@m8T$&>t{?pLoM3Mmcns+4UFCn-EAZ6r)>mFPHYTo; z+)|_;=D|$Ej${7QKmE+K~L zN!4Sd2Zbv?V%^_d+@Qp6wEq|qU&Byw1BX&Qw?N;F)P`Cf4D~J7yxAMyszdbP9p#Ny zsep#}2O$t#f6R96<|cVdzc;4 zG(I0}!boNKFm;q3l+a%6`(~Z3Or-Oi@@&_7@0~kmb+6byL*8Rw_dfOB^sO&zgj<(+ zl9ke!fiT{oL?A4P`%Sk^3rP-0O3qj0Uwn#pelcWPcpr7xWH5D!E#=3KcZj4I_CH`^ac z+TDrtpDDgbA|=uzRdR0F76pewviHgZe3=S;3Ih2d{K^dboC`~^{f!3lmnPDN{97vU z+ZxInLC+r+32l!YB_qe883B;SD(IPDnfDxc0XjX)L7=K{>hZyg69NrMQ5uTYn5+v1 z<}-z{vlrDI^Qr63p4(Nd;&<~!H)EsPit6M#4gyK;%l0`M0T&K z>Dkh7EtN@2AI{EyMgRk$u6YPLU!X*FtXr}MowdwOb=1}>Zr^ytLzi29~<&W3@`buT`XTVh*dPn>CT%3yI!T=}*RWA&VmT)~h! zbD?r2FTn`g(qKyFT|1HN&aXyQ*NStHu~dPSb4YvGt< zY2S{`ZM!?;)ROXo{PR0lD?cieR?5lfM}QTkPT80?$SpN^e>gV^K_&c0jGlwtS#?yb z)bi`cRnC_)WVTF5rX~(u$=-tc-o|XHQ+eN27|ZgwJF%*p8k;}VJcfu94w$N2Vt-#eyU)_SkqutauGI+{_=t4!cHE&!!hR9?F_59tPH+}sPl=C02@gUSJ{9PJFXj! zU1Be3+|;8PJKBkynAv3L$2(Zj=4$F>fl&YmE?vVec0k?RD|Wc-eQLi?f(@7Sd=7I_ zc=~A&57_7_M<`$bYJO3}0N742l9qYxwcZJHnnK~fZa==xYhhD;W}4&O6W`VRB<85H z5mDIj&b?qNNMn5BbG|b5mqA@`e@;|93A%|jb9E*tnr==d3F={uol|={1e3deTIK(P z&dbghRHNlj`43DRs>#mHT!frAM%_FwWHF6k_$XqA#{_KMsTH%ym?fhpj>Gvd83u_V zaY}+ZfTBNQz9!}ZvOhg8imL@P2Db_*peWFzu|K_E8th5YjuCJ+i8+s|GfE31ZE|y9-LIunVDy;z++Mpg!#)yve zb2T&t#U3{V-K=KyO)VGX);-T`!?f69hCH1j2XdV>eF};w{3)0s zGqg;VDgi(s+p|_3Zyen9V^L8F?QA1%zMsaq6zVs9FE!Rx>C(}HwnYY60K(xA`q&!e zm2UHr^|Gp#+Qx&xlP0-+zkTA)+%89(omEp=0@aOb^2;F!TW329@a2pU# zEuT9dko+N(1&|UYvi0MkL<(ox!iGFXEm~_*(e-u0y@u}|)D{#IVEW?g4n^-1Y&61!R*DYoc0@M`C!a|q$<8fZNfG&zT#YLD zKa^mYOi~;QRx%$y2VOUU3=!#0ZkqZ%?rxjUUtHCStfz1K#(pz?0Z`LY-4yHsrD#T| zpcvuqO|;YIGj&PNU3-dwC9D954z$gP4wv4@CdXfxr9C(2h zg4{pZ#9!loSy=x4{k`=XQ=hNb)0-TttpoaZ``w#1kKUQMmCuaCzHD+r-@A|n6~uSg zjT3+X*w5>UX&1ZUIpI(qA;k3xli-VZO?c@X<YMA{00C9pa}ge*3)Ruv~12UXWxUuM`n{!rX?3pa7s;G!DDSD>GvEdsyxq7 zmvO)b{TBGPC+9lZ$aigi0SgsNDu25|CuAb_ALzU3L%!-8Fbf2m=N&fmuU$zVnKJKu znP>Hi@-uy+SUS6C|9a)FsJQs%7TeNiwut}%j&sq@!=k&7rJLUcQ+=U4eaoQ&CO+*Pa2Oa0a~9*$&iO~hmF`8 z4FmQF1g?hq!%BB%G-L?iRUcZoQ5V6B$peBwOa@S@b6Gj9Yx~W|xUqHV)gajr9uakl z2R7p7N%1RhnDEFcXm7v~Dr@?UCpI~v(|sS;dGwy%!) zA;IN`8lWs;?uUJ2YUwX)p&av{{g#nTB?{h|?S|?Se2Tgw-7JZ9b9tBAtsmH?SdM(} zs@?D)kFEKVU0cw5?Yd%osh#s?4VIL>_}7Mf)PD8vp&FCbtIeU6+mZD-Fi3vPyZV7N z2spifDR)=Y#3z{72u7=T=ym*DazEf``=Cf7?t;$V4sUQVcbJDN!0>BOkR*L}Nf)qt$fAtLKhy+tvq7{eXrbA z_9sQ{mnghuK!1_A*eYlyFxVPR?ZQtf3P8b2gcVYcqsVoRE7MG(-Cgr#mVG*%Kxvo6 z9%>{#{od;m!_Vi z(Wz!@X5TmqJ0C%nr5#lY_)_^o17s_B4UhxNRyjlOIio(5NEo;dmh+E*WC|t3d}m^B za@vbC!pu2t?$OsQqdeAa*zG`Pz=J$sy!;GGh}=7}XV%ov0QPYOxg8x}2YNRmdj4xg z|1t9Gd{X{9U7wl$@Y>przuZO9qiaN<@EUb7gP!60qadtw%QNeP{0gMnccQXU^5ya^ zjp*8dozq?|8BPs#<#37ngBJ>mRqK$50d<5nfXT_~Tp?naWwVZm@ZJ0{FF=b&NG3sh zQn&7%?rZ~XZrKXbWvUnj=HOM;VOL=Vw0Nge2~S8X@fF;QUazS{=pEim%OCH**;LUE zcoa?Yy`8028LxRr#xXLmQ{_ijIUmr>Q>C%&y zWQ9lkZk}Rahh>0EJsNEA)Y-*lvx4u$;Ezj%pV;FUw)YwHYsKdh#=LPU#@kEe>S|Rw{_xn|tbRA|XWV7_tSmsrO$hGx z+pueQIWL;k$ZHBlz?1rZ)fa*?otZNxyv>gBTBHLCuRM$8HDy~L$G|uYE@#5t<-iX9 z*df<7oTiNFbH($x+(PuUwcP*xIVj8c&rm9+W;yw%vohN*t*7f8Rb);28F1g>V^+gX zISz3Xcq)>|rhs1bQNKlCB~fA*bK`q`3P))Ty1W3t-8&>=b* znD4YGWi)r!swd%|`dlMUp#%Bk@Xp%y{>&s^^AXWXAX$x!j`@%0x_-6m-v@bcbTLe9nF}y1ft|`%EaeOc ztP1z-Bkus0H=RTRWQUS(4e#Syn*X6nr^CrJXNt&h5{)MjM-5B-|?5c5=AMU6u)|V`(>x6i!Z~! zdoVs%3Xw$@)elBD&t z={i>lQwPb>|DaR&CEYbD&RcO0?Pq18Cv_e2zuD-6ArM2q{>tNwjVaR6)MjKNCWB@$XBJtlb{!icjpBaCIEb%BOUo}kD5O@Vg$!oE=ovs-VoXZn$>^|f>k-OEQ zhX=y?2f9-EqNNwb1=bJlgtcupG#xUB&5H}LP^zmQpOJ{_ejvEdK$pqXZ&mQP=-t3M zmg(~Sj(+0qr!iO?I~aBD#&*I@RqBLFvvHEPKi=Ap9F=1DLK({|Y}i2RU)IrgDM0YP zy!xt|`csaH_h#j>6Z#~;&Hp4kC!xE{^63q}_=Uj0Z@|W?FKlj9lysXFK0UoVb?4VQvZqb0TaMDEK-?lZIlY{ZBiHyg6`t)bXrr!*EB_15qR}zQ(|Av#tTDOx0Sc~7yI0vhY>BFAZB<*Nfl`d5 zb@f#U_uJ9Wd}8J0){O2sK+*ksgAg6vU*8lbD0)xv8hLA(=+ET@il=&x{S6`hI*1r2 zf35!e?X+E3Qj!H7@MUgJ5|xRB6E0 z(y6FC`}B8stnM&v#UQ=@I!joCFxB8uNu#pJ`5T3+hWe4UCWn>9jqWS6mYPOL@x?+1M;V&frc=Ky1&_K|B--{Q6(+`cHdLouODhoz>H{ zxh<($QTe&A8bTDK_ZR#0(csJLQ&v+YDfbJ*T~t4W*Ny})h0VD8?pm#VdSRIb1KgPC z6fu+~R^XS!XhY5cH;Nt?9j=qPDP5F}?weD-X0D5?>WH^0_JZ3vDN+~e@s$ZoWBVL_ zB>xVg+6Tz74eBztAy4&|@#OatJK(tikKL97s3zgivwMT=zIn9fNs8e!)Up8W7O2H8 zuz&9OH}d?~WdA*6>(NdgPWtE&W2SO1eqlW+O=#)Z$@8pBPyBKB_dgBBAtrT)u4W5? znRjYwI&lwcyV+n)N6FvDLeB{c8F!?!uF=LSg@;+wAQu)*FGRg{uZ~>yX#Rmi6Q}z) z1-S!Kpb`G7GDZ{}C$uZKvZMN+A21VbmPVnS|4Qv=_^jN%)I zjAH}6CX7lcTduL6K3{KG%PM+}7GVSGOs?MGzg4kwPl1KYw23@Q<5aS){#MNtr7Ndx zPdF3JPRCP_SD3dA&r@IvunpK--q)Y0oOy)5D#0jEY0_>ASMzFELni5%dS?6CSO_*Y9eyR*aL?zFC>#Pb=|lPSTUdsCgGHunG#` z`KDcXeOztM!=0+8>0Ef2;Im(jFQ0c+MUD{~=ey7>PSI0#FOgJ$qLfehA?*`SxT>n1 zThh(s`_)#1)VS)ZBSS#iIJN2Q5eVf@tFs#GQlsy=}Q0AWgz%Pzj&p|2!VX4Fl#40jmV4jB_CJc16it|u-f0o@`PXf-$P2)Za0hqQpNb73f761ER?sI zblgHujIHa|Lq0(-yqt}U#?1Ih9S^n5YD9+t;fsA2*mdSMBvSp^SCt-`lUnu5qnxO8 zz8Gq}uQl@??pr1_dTirlN|obyP= zzDt=r#k(KBIl3a^>q9e43=H)Edhf8_?d|!SRKwcP zVseJleyg5! zmKr#qaLoCbj?gyuQOWzw-r(n$5(U(e`V>?^2^E+srJk3Ai&(eFFJ>=dI%c;u%Ho$T zJvg;GEFsVBg z%pm%M-n#CT&G9qgku}~Sqh^oxsjx=hOqbkH+;fHD)+Qn!Wl7F;Cx?_Jjg|^o8Z~8_ zlThU`xz2wuGE>rjHLzfG*OFa0;98gASmaKPpwk2?uxV{%%>r2tmCNb2onU9JH?s9Q zl9y`9SAIvcnti?>gE<&LGEE+R`6|M4&eHAc)#fN+Z9o%ie~#$=+TNnLg+8rvP>G+spik}t2|(e}r9F=+ZKZ{nHm7F!G@WxY2e~GqP5QSS(L6v^C(5Bjgt0{rD1SK_ZXA;VjB@ zQ3L4N50|4Ed|4E?0{7YdTwMyZIQ^DvST%wj%?@6S=~uIqTIBCb-yczTT@Gu4>HwgL z#1NsGc)$6|Ki!!Vo}dtCBOm)st^#op{^WmGnEn*zVu0-N=J{9y773W{S=4`EUEfM! zSgxl53@HC&`;Q`ar9CU3tyoM)PJ8BO$2c!3E<5{ajNvWyH6WRqfp#~vGpemwSHBF7 zwy8DB*%*yDP~@ud*9$Vl?V6@#7N-gClR3u0k&(RHg<%BSqCjmp`a#TlE=dqm!Xvy< z$d?-XuOd1$9=`gK`_l)`gw4YPmoukQD&Fzd_`0^zH)2C#9!G zX}~h(*1544Q<7njn6)>!+x2hFH-GtTUUaice>*64%N=pr-nN~@&eXC(BvN|eZxr5E ziX~82VWEk2=DF^f+*vAuzpe~Nv3O-Zf0(If7{1ow-uQCaXFIgRZM&~&eo(xEZ(Uza znNIK_6^bf_G}-uB8!tOiBb)`d(QwE$O+4eErHdCo*QLk4`ekHpUM<7Cb~i4FXfs` z#Tu>K0F$x;Qq{&oN3Q9|FyG)Zwjo_%h9-@mde4$sVT?nV}M zRt+38gGrzede;)(Ti$;}d=Q{F7&fUIzIoc=xIbfRLOwZZPT&)dOa6x~V6d@zN)Fjx zUb>wJy!x|8A{Qt!x-$RyX~v#wI&|q`?vJ52563bBq)y+p5!S}`7}sz>U{+2}>^O@q z4lS5`10&Nwfl-4V=iPl3C?Ou+`#Dkj=c~uvYeZ*`ejy4Dcc~~ft*)|Qb$Y=bQ~J4J zc`j65*3qsXGWRKka>Jn@n!i{s{>`giao@Ep$%=B11a z^u%lSN5@gS-C0pif^x|^t!j?k79*2#IHtJZE%oc&G8H9zLEOOY_j#B0PN#OJx_A0L zNC6G_GzHbAp0z}gYPj^HC8__5XI_zp*p!pi6yJacp8$+kFXb`V*uQ$!(-!cq!Q1Cv z&Hf}2JNY%ZCclMPQvU?K%t+9ZDQ&TpKTT*O7>zQY)zHxcFf*;IpZhMt!g50}O!=*x zPyk&_DfMh$a~1$Utjx!~+Uz@H2wI=&pBK`2n8)g3)Bh7A9O}x>an?RT+(?!Oi7gPJ@4{ z3;)`K|40ni^X*9EtZAua*0$vmYj~=#id4W=x1~g@u8#~28Maoq^ya}82m6mT9wQ*d zMdyQ%KS_X;pUar9Ub(|_y0{CVEbYwpR!(4ab)^q@q3>z#r2mn+VK@LUwKO~CaEn$C zfD8l-7|v+Pb}f0B2Ac}#1$sMJ z*uGjB`oHV@2z@0Xl6L6%2Uw)#yEK_IV%LQHYjbwEDfF{&dMxw;ObZN4j|IK9eb!ue zvN}KO$$81lN3Pl31Z2M+ETELFiK-N~)oyK#2DQdnAP{FbzgbsfJO@&}c_WL`e_*AjjIH_ZeH?F*aEAKbxg5%=lvj&Rp}ZLw$Oj9j zh1jCY=f$y1z!@S}tq|d~x5;`Me?b_cbr7tW3zsHyC#%WKw);@n+W#dzE($O$x#eHb zrC%w@+)Kx-a*wRw3+LWEu7a+lW~lS|rKfVDQ>zfRq>qYpcpyb9R9)L1V|NPZBW!n% zxu1PlIRHI}u(`=82FzQhJShoqWDvZ3Cv#)Nou2c#%Fd4u$zgpd4_)_N&Ls>;Tm!ym znKBj@-Y{Lj=z^K!0>h$)zyxzlS4CGF={h55=)RKC%USWA(*?CTv-PsmL&tp>dg|R< zom2|PUqSTLi+v)*6RTDiawgURrgI$fWiUFL`>gYB2_4DnF3`kFFTe*SK2GIJ68m(>ld`Za`- zhUM;$d(o*6Nn7&TOsDSc=Qo<=TqKa%Dm5J!8E%!70Co5a^gosi(`y!evZLFN-v6F{mdR_-+aAC#fPkY6jBJ$G2;41!~KC ztkOfTC_0P$;R^MF7}&I`bkioFcb2$ZiV>AADbo`ThmBA~fIPtLNi5G&w@7Rd7q zR)XFya5|v-I&+1!CePi~&K0F>5=1UvVlQ@(Z;W}Dc&)f3qS(+Y;9vd=h4&wG+@~-E zsqM=27Pz#0oHRv=7=M%u{GWZTtAoB86>bUyYN^?Y;}f2?6xUeS^&7Ok?t?BRTJR}|rJI1tZczKzSjy$N}IfQn_0+^|TE1Ap7EyAnY4HxU=73HLUQd4IE zKqxr6qaV~DzV)hjJV%^C7TTrY!7lwh?oYvD|K3eOjD#y1Szx+Nz_$0=;wGp7uYl(dswDrXFa@2Gq;`p7w8WOmV>TT+`0pYl%-|Ep<{T9Nzq6 zucaT%7vn{=&*AWfs6} z1VYCXoy?sXsD0Vy)@%G|V@@!f?{?rI+Vc|aHH6JX>KjdIXO8_j?R{w|Kj_K;j$fUU z-LkTRd19IM{VWm#YK@w`Ye~&khwrTRw+W2esZL{*sR7+W4aC5AtNz!HpEyck^tD{W;pl-A$L}*K zM5PEwuLHV<@_1L?o^Ao^G87c7QHF7awYDWOhHLB2S%H|$9wNNn1LTbD1v9e%MQ5;W ztiria4`Ws7?@ce}v?Wmhd(eQ-fnjcqGF{F)s0C~v%UpYmp4wPTTEr(Vl1_(dlS$z$ zKj|`FQOHTYzL>R*d7n0xJN&m#`HlAO^%V+p`U;A#C7K$*>rdIHZ7M$|3+~d&cVP+L zD|`+y8Dw6R@MY)T2Y;$S4SNR^hELHZjK(;55-#7kVgp723zxoH=1}urDW^C(7Rc9k z1HEyq_~^aEVL_5o72Y#|~BXx1V`b~I?VuO*$5?<+2CY<*+^TRx33?9<1lmb+j> z{wEtMuDkT>>QhB;s94&e$t#B*A^nD*(52%b%RUK1inDjJdK)5HW7be=<|%jDIKQod zZgwP8n-8knz-7sy1u91EH9~hb9H9aXR=3{EgGOj)zZvpVs}{g*gr7Mue58daJusKm zUwX-qS_CX_YSuQoRU#zBULWCHu*M&T!{E>>T44V71QTw(a(_TvwlFhpp@?|=171ef z+O=qQGH4E%XmT>(oTjk7?jg1d*wmM(9$m5DF}XANKSK+{Wbt43^IKMVSb)8klNh?p z^I{I!9jyB9+P?B#z+$c7a&?Hp#)>9*hFjf9g!@S@rmYxXiyBddCTgoIQ_`L}!nCnA zTr8ipSw=M_tF(zF>!wFn!vI-1&@PC233D{?n)012p+RLO11W$qokmHuAF`@`;`(1EVT0V-dVO+vdgBborUe_2xIVe!G>VcT+q5-5VD8 zMTqsmWra5GWbx=k@8H1YY)O%*-&Xcp#u${quE>6Ts<`~CrDKKl$xgj^7^Rz2 zGsxb_WL;ii?w7uKVHeZSLilBWRB2f}d6K zZxw+r>X5#Xc)ORmU(#-LdftGtY_ji;#1B)7xCb09t`xz)OQf9zokdli zoSTv(oZk-vw01>9dAYNoEcDvtUWZ;ymb-=({w-(Z4p>zL@9Ua>#_yW3@TC~cV)fL0b6!&GY*(jltodZ#Rc&*7-KT{Y|v#&&_ zsr$K_*ATj;yc2{Ci{CWzm_Zqx5*%B0%y$aWW8PHYz8OqvdS9yeC+SC^VTr%}mGPVZ zh>))+T7q@D;wNb`F}o`C&ht(Or=6jyk1j_veH0S@Cm_6)WJ@{-pbrL!;bnoEMerBi{y~gMZk*a+E9*{Fit6OEVm{R~un8a!Wgs#JCs?bDWb^&>7TZdQFQuUF(!J`NCFVt9PL z?mypf$*8S%vT3n1X|a)i^RL4 zLRwOK!9x>)Bf50(8UQjW{X$knubpltpfv&-3zrzAXHZi}EAhMU?X)wvfKHmK6{bv? z9Uk-QP$gScYu!RbF-{uen)?rM&BnLc_WpdZr8SYiS0Z;aIW2(oxd%5g=iVeRqf_s5^Sz5=}r?#i=0ORtLp>ZqnCrYIA_i@NaKtb9EOBZERL@NKc)MEaZnRmKt$ZpF@2SsTs0X4MeS=QW1`-&2? zF0d96Ns>O%$>Qb?-dQDnY;-r7!8KR-dyb8joOHSSKW*8ldm}cnX0#T%{3|g;n@5e2 zQAO7rglD1|f)r6{>-2hDWW+%l7sf@N*`k^Bl%*hhrt&So#=MhetNKL?tfxr#uHWi} zb&D^-cl3dukhj7%y!x6No_)o3EZtxJr&o|Nq*%^020^EdEdgQA7k> zP&BCuqCm*vLJJeXVksCzWdsET1QPJmst6S#q+#i}fkqZ3K`pod#VV+vh`|J0SR@#h zDM%X$6$~N}RtZT6%)5yY{$MJjo$s4YdH--;?m54E?(dv??tM4;9;&U5{?DtP5Dfd? zjBee=@;NYkmzzaQ>`!YGJVO>Fs)qh>2CnjCcV4kXP8`4N*_1WlhkE{?zA*Epfd7OuL5N3T|m_BY- z7`0P0#G;+dEE^g|GIB7+@4IfIR4+c$d8s$Po|P@-3yOv6HwkDr5`KS1IZ@C`LumJG zczlP}7HXE|4_nw6!+nLnwo@5FO8mT=9zK_L_$=PEM(V~wgj*+L!i=<5N8^p?%l%$% zSAo^P$3l?L#mJ=&{H#5`s{FN*YV0l)?uFIep~w7Itf)s;Pm7TjKF(yN7UY9A!xbPxmkOa91? zxp@1?j$p>BuPP!a5vdit+o=-FWdM#mar=PA`;ny4i-jxc`B;&V71tKb_>tbg_o=IQ zS>Z3dX&-7fLm5py^^s|kGV2?S=I=0p#Ar`}7u9EGrB$;2#i8Dq<_g2NB^k86It+0k zgPoT!I^acUznaLIYR8tAw2CS8!#N@5cn{8Cd{B7LGkk`#zouOA!B#a0(!MvGQ92Vh{knM4R`N*-q9a(y{5QG70u<&Pnv zTo&N^G8?6)6su|xMrtSU>e6NOq_)8N@&t~gsjOi$k!^Ta`2UpUVPncswmX9l&S7OY zadDmN*ar9goLkOGulreVge~D8?8_q-X#}EuKvc!XhxuF9NatyGr$^m)i*_|CBSx#> zg1+}R;lC|5FCD&TC(yD=DTDip1mhp9<+WUOVQ@7D3lV5{qZdz-TCuhm+)+>cS`nse z6;|q4GFSFDSQ}7Kg!U-#9u||+($0}rC6k$SaiRT!+|zy%JHb0!Y)SbjCW^tZygXIxxf`%iSJ#h^!f488ZBk4o*sbrIJ_WNh|WP6OR{ zkqj2Sps$DDaXL&qoRu5)3cveSa-K|3St8hk~Nkmgy);?RZ~}6MZNw*!K=4dId7zN%f2#?;(E)lS+I`6 z$*pjhml*@SZYU|ezpooU0OB+R)^7HBV_=4_0Sm*sv12f?F zC){+Ptj(o%%a8)~1?ZPdVtb#=7XFqRR#K#jVeO4Q4-##+_m$P8HyyJ$p+VxP&LEsE z<6%y6YRCFpkC72jx|~P)R(GYb%(=tj9$C$_jD{$mm)k*(%Bh9ELE$Xw;?A})8D6)x zy!qMCiDI}S9uNd7D}+qeI9AnP&5`KLrblaFdh{6iN6f~ee72&HO=~+dBfyo`A1d4z z$Gpc4R0~imC5!_|65r1>AvMB3!&Y%IV1-{I8Z zP2Y)wnxf)ywvQ6LQL&(Fx!cHOavEJ@7QHj34&9mh0RB?zNb-<$D=7V=7$%x`^wHG5 z?DVig$J$c*a$UGhVQftFcSRS^F5e@Zan#>35+J zlyN%D7;fnO!3(|i^?~q!c$bjRU;{-aw_s)ekQLE~f5EG?O<(8&7C7iKrwf=Ca89o; z*oQcHAliJ$tB@uw^y_UCiV*#nF3;I;vpkug0s?z6oQKvZcUSS(5e|GI0FcjO8%!;K zKf5OJLYyXTZ1^^5-ple1+Dja8vVk92F>ThHBAgF>4x1>v$-_Fu>G1Sh@FU*tAz791 z3k?E<+#%UJ0_9Q7%eiBnKIKq&cB`cEXw7Hz`dh@xEYk|9JE)67P_nCCnmcq#Isj1eK zfJvvwn?qMz#g>HE+issRCBZKd+ENQBQ8-89tR&B<>C@ZQnWS~-&DZefiW*{bT_+Ph zJ?D`Dh$81zaAy|YuC{)D^0uckW9S_^4fdW-D!;A26ZS==w^qNQykAAx@WJRV35vs$ zK*SUrYgfMU6ONU7=qhoI)`j?|Nz=v@;uy9F5dZF%+2GGkQ7!&i>!mII+c`U zxTBUOgbos}2y}I|(F3H$YPO2qXoYa!J97T>O1&MN-QZ6=4J7ILJ@4 zmWNjkKA}VM3H9&${(!Y2V!(Wgj0rPiTx>sr%5l~cW`+`SqCiaEdcw?5LVlp{4_GTR zV?u{M&3fE4QIdg7it2uxy%anmK{I>vm$kf-i}0Pcd}4#oZREQxAVJ$e&6ZzwV2>!j zCaw4pCR5m>EPn)fA7L`Z_kYayCrybD@ckFSj?8&+cRJWvK(@nmF`fo;5rR&D{fzuV zf@fU$6$y@`6qo#gQ7$T_Nt;YsaSHoS#dpN}+<_)anF*6;(wXr4ic{F5d7@-ODM5eG zG@2-?pN_4~Jc0z?Bg^~i6u^JGXyE1A}zfw8bua Iqfhj|0MwPlk^lez diff --git a/assets/banner2.png b/assets/banner2.png deleted file mode 100644 index a46bc4fb4bd0170314159fb6b29fd4399e858b59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227786 zcmeFZcT`hp7d}c?AfgVA61t)yqK3fG`>3GO1e78rU??h`&^w~y3?V@QQA&c+q)0%T zv;d+BHK7_hC?)jJ0|^PgSm(QU{qFj{`~SenIwxnHWW8nYXFvOS_nW`28|xq76Xs)M zV>@v5$|W;4wtZ1-Y+Ne)d02O5dz&t@PV6u<{Xf}?38HhXH^Rx zq(04cd5V=_+=!k38-f&nd5adQz0+!ftx)6vAL9I zH0rQVV564#SN^A`A4l(V%w$`MF?5nuyVZU8e{0rtws&mag{rqDdH$C}{6REF<3af+ zZ)WZ&>H|LL{4WRl1V`hWng6A`tY?A_@$j)}w_K`B&FUBZpT_kNCwCM-TUDym|I~ro z6S_iY*mfla2k#*)VEjmw)O-SxP+-E|Avw<<(5N<|xTO=UuCVRL4GYhUe z^(~!tE&BM~VH*pD4t0r<$0>|4N;th&o6+kPxkruMTY@mBAy~%O8�qFUQ82TV8ux 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

    adse=QVtPB7RC^Tug) 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

    FlQ`QQXjZ*Z)M-1V)e|Q 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�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 diff --git a/ipabuild.sh b/ipabuild.sh deleted file mode 100755 index e9ea9bd..0000000 --- a/ipabuild.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -set -e - -cd "$(dirname "$0")" - -WORKING_LOCATION="$(pwd)" -APPLICATION_NAME=Sora - -if [ ! -d "build" ]; then - mkdir build -fi - -cd build - -xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ - -scheme "$APPLICATION_NAME" \ - -configuration Release \ - -derivedDataPath "$WORKING_LOCATION/build/DerivedDataApp" \ - -destination 'generic/platform=iOS' \ - clean build \ - CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" - -DD_APP_PATH="$WORKING_LOCATION/build/DerivedDataApp/Build/Products/Release-iphoneos/$APPLICATION_NAME.app" -TARGET_APP="$WORKING_LOCATION/build/$APPLICATION_NAME.app" -cp -r "$DD_APP_PATH" "$TARGET_APP" - -codesign --remove "$TARGET_APP" -if [ -e "$TARGET_APP/_CodeSignature" ]; then - rm -rf "$TARGET_APP/_CodeSignature" -fi -if [ -e "$TARGET_APP/embedded.mobileprovision" ]; then - rm -rf "$TARGET_APP/embedded.mobileprovision" -fi - - -mkdir Payload -cp -r Sora.app Payload/Sora.app -strip Payload/Sora.app/Sora -zip -vr Sora.ipa Payload -rm -rf Sora.app -rm -rf Payload diff --git a/macbuild.sh b/macbuild.sh deleted file mode 100755 index 1472471..0000000 --- a/macbuild.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -set -e - -cd "$(dirname "$0")" - -WORKING_LOCATION="$(pwd)" -APPLICATION_NAME=Sora - -if [ ! -d "build" ]; then - mkdir build -fi - -cd build - -xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ - -scheme "$APPLICATION_NAME" \ - -configuration Release \ - -derivedDataPath "$WORKING_LOCATION/build/DerivedDataApp" \ - -destination 'platform=macOS,variant=Mac Catalyst' \ - clean build \ - CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" - -DD_APP_PATH="$WORKING_LOCATION/build/DerivedDataApp/Build/Products/Release-maccatalyst/$APPLICATION_NAME.app" -TARGET_APP="$WORKING_LOCATION/build/$APPLICATION_NAME.app" - -if [ -e "$TARGET_APP" ]; then - rm -rf "$TARGET_APP" -fi - -cp -r "$DD_APP_PATH" "$TARGET_APP" - -codesign --remove "$TARGET_APP" -if [ -e "$TARGET_APP/_CodeSignature" ]; then - rm -rf "$TARGET_APP/_CodeSignature" -fi - -zip -vr "$APPLICATION_NAME-catalyst.zip" "$APPLICATION_NAME.app" -rm -rf "$APPLICATION_NAME.app" From e8f1a7d896f055be5411797356bfff3f5079f162 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:26:46 +0100 Subject: [PATCH 02/30] Huge things frfrfrf --- Sora-JS.xcodeproj/project.pbxproj | 101 +++++++++- .../xcshareddata/swiftpm/Package.resolved | 16 ++ .../AccentColor.colorset/Contents.json | 4 + .../AppIcon.appiconset/120-1.png | Bin 0 -> 3920 bytes .../AppIcon.appiconset/120.png | Bin 0 -> 3920 bytes .../AppIcon.appiconset/152.png | Bin 0 -> 5475 bytes .../AppIcon.appiconset/167.png | Bin 0 -> 6305 bytes .../AppIcon.appiconset/180.png | Bin 0 -> 7104 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 0 -> 384 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 0 -> 565 bytes .../AppIcon.appiconset/40-1.png | Bin 0 -> 832 bytes .../AppIcon.appiconset/40-2.png | Bin 0 -> 832 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 0 -> 832 bytes .../AppIcon.appiconset/58-1.png | Bin 0 -> 1384 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 0 -> 1384 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 0 -> 1473 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 0 -> 2050 bytes .../AppIcon.appiconset/80-1.png | Bin 0 -> 2197 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 0 -> 2197 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 0 -> 2475 bytes .../AppIcon.appiconset/Contents.json | 18 ++ Sora-JS/ContentView.swift | 177 ++---------------- Sora-JS/{ => Loaders}/JSController.swift | 0 Sora-JS/{ => Modules}/Modules.swift | 0 Sora-JS/Settings.swift | 133 ------------- Sora-JS/Sora_JSApp.swift | 6 + Sora-JS/Views/HomeView.swift | 16 ++ Sora-JS/Views/LibraryView.swift | 16 ++ Sora-JS/Views/SearchView.swift | 174 +++++++++++++++++ Sora-JS/Views/SettingsView/SettingsView.swift | 139 ++++++++++++++ .../SubViews/SettingsViewModule.swift | 126 +++++++++++++ 31 files changed, 625 insertions(+), 301 deletions(-) create mode 100644 Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/120-1.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/120.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/152.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/167.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/180.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/20.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/29.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/40-1.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/40-2.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/40.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/58-1.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/58.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/60.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/76.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/80-1.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/80.png create mode 100644 Sora-JS/Assets.xcassets/AppIcon.appiconset/87.png rename Sora-JS/{ => Loaders}/JSController.swift (100%) rename Sora-JS/{ => Modules}/Modules.swift (100%) delete mode 100644 Sora-JS/Settings.swift create mode 100644 Sora-JS/Views/HomeView.swift create mode 100644 Sora-JS/Views/LibraryView.swift create mode 100644 Sora-JS/Views/SearchView.swift create mode 100644 Sora-JS/Views/SettingsView/SettingsView.swift create mode 100644 Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift diff --git a/Sora-JS.xcodeproj/project.pbxproj b/Sora-JS.xcodeproj/project.pbxproj index 766ee9e..ff8f7b7 100644 --- a/Sora-JS.xcodeproj/project.pbxproj +++ b/Sora-JS.xcodeproj/project.pbxproj @@ -12,8 +12,13 @@ 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CA2D298199008AEDA2 /* Assets.xcassets */; }; 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */; }; 13AEE6192D2A75110096D953 /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6182D2A75110096D953 /* Modules.swift */; }; - 13AEE61B2D2A78050096D953 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61A2D2A78050096D953 /* Settings.swift */; }; + 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61A2D2A78050096D953 /* SettingsView.swift */; }; 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61C2D2A78160096D953 /* JSController.swift */; }; + 13AEE6232D2AAF160096D953 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 13AEE6222D2AAF160096D953 /* Kingfisher */; }; + 13AEE6252D2AB1730096D953 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6242D2AB1730096D953 /* HomeView.swift */; }; + 13AEE6272D2AB1990096D953 /* LibraryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6262D2AB1990096D953 /* LibraryView.swift */; }; + 13AEE6292D2AB2070096D953 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6282D2AB2070096D953 /* SearchView.swift */; }; + 13AEE62D2D2ABCD30096D953 /* SettingsViewModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE62C2D2ABCD30096D953 /* SettingsViewModule.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -24,8 +29,12 @@ 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 1329D5DA2D29821B008AEDA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 13AEE6182D2A75110096D953 /* Modules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; - 13AEE61A2D2A78050096D953 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; + 13AEE61A2D2A78050096D953 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 13AEE61C2D2A78160096D953 /* JSController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; + 13AEE6242D2AB1730096D953 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; + 13AEE6262D2AB1990096D953 /* LibraryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryView.swift; sourceTree = ""; }; + 13AEE6282D2AB2070096D953 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; + 13AEE62C2D2ABCD30096D953 /* SettingsViewModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModule.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -33,6 +42,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 13AEE6232D2AAF160096D953 /* Kingfisher in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -58,14 +68,14 @@ 1329D5C52D298198008AEDA2 /* Sora-JS */ = { isa = PBXGroup; children = ( + 13AEE6202D2AAD390096D953 /* Modules */, + 13AEE61F2D2AAD2D0096D953 /* Loaders */, + 13AEE61E2D2AAD1E0096D953 /* Views */, 1329D5DA2D29821B008AEDA2 /* Info.plist */, 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */, 1329D5C82D298198008AEDA2 /* ContentView.swift */, - 13AEE6182D2A75110096D953 /* Modules.swift */, 1329D5CA2D298199008AEDA2 /* Assets.xcassets */, 1329D5CC2D298199008AEDA2 /* Preview Content */, - 13AEE61A2D2A78050096D953 /* Settings.swift */, - 13AEE61C2D2A78160096D953 /* JSController.swift */, ); path = "Sora-JS"; sourceTree = ""; @@ -78,6 +88,50 @@ path = "Preview Content"; sourceTree = ""; }; + 13AEE61E2D2AAD1E0096D953 /* Views */ = { + isa = PBXGroup; + children = ( + 13AEE62A2D2ABCB40096D953 /* SettingsView */, + 13AEE6242D2AB1730096D953 /* HomeView.swift */, + 13AEE6262D2AB1990096D953 /* LibraryView.swift */, + 13AEE6282D2AB2070096D953 /* SearchView.swift */, + ); + path = Views; + sourceTree = ""; + }; + 13AEE61F2D2AAD2D0096D953 /* Loaders */ = { + isa = PBXGroup; + children = ( + 13AEE61C2D2A78160096D953 /* JSController.swift */, + ); + path = Loaders; + sourceTree = ""; + }; + 13AEE6202D2AAD390096D953 /* Modules */ = { + isa = PBXGroup; + children = ( + 13AEE6182D2A75110096D953 /* Modules.swift */, + ); + path = Modules; + sourceTree = ""; + }; + 13AEE62A2D2ABCB40096D953 /* SettingsView */ = { + isa = PBXGroup; + children = ( + 13AEE62B2D2ABCC10096D953 /* SubViews */, + 13AEE61A2D2A78050096D953 /* SettingsView.swift */, + ); + path = SettingsView; + sourceTree = ""; + }; + 13AEE62B2D2ABCC10096D953 /* SubViews */ = { + isa = PBXGroup; + children = ( + 13AEE62C2D2ABCD30096D953 /* SettingsViewModule.swift */, + ); + path = SubViews; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -94,6 +148,9 @@ dependencies = ( ); name = "Sora-JS"; + packageProductDependencies = ( + 13AEE6222D2AAF160096D953 /* Kingfisher */, + ); productName = "Sora-JS"; productReference = 1329D5C32D298198008AEDA2 /* Sora-JS.app */; productType = "com.apple.product-type.application"; @@ -122,6 +179,9 @@ Base, ); mainGroup = 1329D5BA2D298198008AEDA2; + packageReferences = ( + 13AEE6212D2AAF160096D953 /* XCRemoteSwiftPackageReference "Kingfisher" */, + ); productRefGroup = 1329D5C42D298198008AEDA2 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -148,10 +208,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 13AEE6272D2AB1990096D953 /* LibraryView.swift in Sources */, 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */, + 13AEE62D2D2ABCD30096D953 /* SettingsViewModule.swift in Sources */, 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */, 13AEE6192D2A75110096D953 /* Modules.swift in Sources */, - 13AEE61B2D2A78050096D953 /* Settings.swift in Sources */, + 13AEE6292D2AB2070096D953 /* SearchView.swift in Sources */, + 13AEE6252D2AB1730096D953 /* HomeView.swift in Sources */, + 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */, 1329D5C72D298198008AEDA2 /* Sora_JSApp.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -210,7 +274,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -265,7 +329,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -292,6 +356,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -322,6 +387,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -357,6 +423,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 13AEE6212D2AAF160096D953 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/onevcat/Kingfisher.git"; + requirement = { + kind = exactVersion; + version = 7.9.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 13AEE6222D2AAF160096D953 /* Kingfisher */ = { + isa = XCSwiftPackageProductDependency; + package = 13AEE6212D2AAF160096D953 /* XCRemoteSwiftPackageReference "Kingfisher" */; + productName = Kingfisher; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 1329D5BB2D298198008AEDA2 /* Project object */; } diff --git a/Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..bdcfc53 --- /dev/null +++ b/Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Kingfisher", + "repositoryURL": "https://github.com/onevcat/Kingfisher.git", + "state": { + "branch": null, + "revision": "b6f62758f21a8c03cd64f4009c037cfa580a256e", + "version": "7.9.1" + } + } + ] + }, + "version": 1 +} diff --git a/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json b/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json index eb87897..bb57667 100644 --- a/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,6 +1,10 @@ { "colors" : [ { + "color" : { + "platform" : "universal", + "reference" : "systemMintColor" + }, "idiom" : "universal" } ], diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/120-1.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/120-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbc052661823797cdef8a8862d1006268546cb5 GIT binary patch literal 3920 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 D4;&WA literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/40-1.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/40-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9c473ca5c40c690f0709c4bd8add833710aa45 GIT binary patch literal 832 zcmV-G1Hb%x&8e(qjo>xxABmEnq1h0U3fUb zE=qxBb3bWx}Y13GH%@9ZDjM?F8WR2P-H2b$+>>B}rjf1sRg!@pxJ*TUKn~>$sT4 z@G%emf9I}OG{DS2Fg*~_5u#lyYDP#VBT?JVRm^{mxA?-_pL^_)M4=`6lT)Kke%-0( zo&D=q53T&~?q$#I{qEuBK{O3|r3^U+5ONr$U1(h59nnyAN<#ows@l(ogLVI&v!3%; zUU;jywf)NLF8%S7yVm`43;+1|Z_X?paY@eNrVJ+`me4+`eh%Yj zkp(*h?+&HvN<_zq^+>EXFg6Lno$=3!heI(DCax3gi|RREdFOO#r!>j&%2EuPn^(Ki zs_EuhJ0*}{86gEBabSy!efC>qg6~|YI|6ZG7j|J6cHxbqIsgFH;Ow{vU?NEX0000< KMNUMnLSTZ_GnTLb literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/40-2.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/40-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9c473ca5c40c690f0709c4bd8add833710aa45 GIT binary patch literal 832 zcmV-G1Hb%x&8e(qjo>xxABmEnq1h0U3fUb zE=qxBb3bWx}Y13GH%@9ZDjM?F8WR2P-H2b$+>>B}rjf1sRg!@pxJ*TUKn~>$sT4 z@G%emf9I}OG{DS2Fg*~_5u#lyYDP#VBT?JVRm^{mxA?-_pL^_)M4=`6lT)Kke%-0( zo&D=q53T&~?q$#I{qEuBK{O3|r3^U+5ONr$U1(h59nnyAN<#ows@l(ogLVI&v!3%; zUU;jywf)NLF8%S7yVm`43;+1|Z_X?paY@eNrVJ+`me4+`eh%Yj zkp(*h?+&HvN<_zq^+>EXFg6Lno$=3!heI(DCax3gi|RREdFOO#r!>j&%2EuPn^(Ki zs_EuhJ0*}{86gEBabSy!efC>qg6~|YI|6ZG7j|J6cHxbqIsgFH;Ow{vU?NEX0000< KMNUMnLSTZ_GnTLb literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/40.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9c473ca5c40c690f0709c4bd8add833710aa45 GIT binary patch literal 832 zcmV-G1Hb%x&8e(qjo>xxABmEnq1h0U3fUb zE=qxBb3bWx}Y13GH%@9ZDjM?F8WR2P-H2b$+>>B}rjf1sRg!@pxJ*TUKn~>$sT4 z@G%emf9I}OG{DS2Fg*~_5u#lyYDP#VBT?JVRm^{mxA?-_pL^_)M4=`6lT)Kke%-0( zo&D=q53T&~?q$#I{qEuBK{O3|r3^U+5ONr$U1(h59nnyAN<#ows@l(ogLVI&v!3%; zUU;jywf)NLF8%S7yVm`43;+1|Z_X?paY@eNrVJ+`me4+`eh%Yj zkp(*h?+&HvN<_zq^+>EXFg6Lno$=3!heI(DCax3gi|RREdFOO#r!>j&%2EuPn^(Ki zs_EuhJ0*}{86gEBabSy!efC>qg6~|YI|6ZG7j|J6cHxbqIsgFH;Ow{vU?NEX0000< KMNUMnLSTZ_GnTLb literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/58-1.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/58-1.png new file mode 100644 index 0000000000000000000000000000000000000000..25a3decb48135e81a452448b490555ff12cb9e06 GIT binary patch literal 1384 zcmV-u1(*7XP)Xd?fXPs}Qv;B)w%j&TwTIISsq{PcV2-`J1}@@~I_a0FOMk)ft0uxH2tfe-2}SSmcaRNBR+q0}pltJY)) zf}|CnkFi=k7K_bprwbLUK63czhYwGOleeW`>lIpC?OHo!WD##k!s~PfTnzWu&;)RG zW78o4^d)}UJvcgv)I4vH#i;axD-8Xq_qqIpy zj(yII&F`s6lB|uk*f|R!GJdLhe)++gV63NdnzC}Nkk~l`f`HRtBV9cHbKcnIdiZYh z*!!vY?J9hI5Z)0?o>=(!ukx-^M5w$qeQe1Uy=&wWIlqSt5EM@Ybf2$QLG|R^CK>Ze z;!>adzoCA_JA`qG-OCzrX_Ezi~)X(CW%Jmp7f#zI?}~g}O8^GPh@y$LoTbbBg0y_607dhvR^%CNOs)05X83W${}; zHj{}OjJJTt!#lh#Cu#N44w@rHQC4JLl?9Sn?X|}%*>GPCFD{$Crh0gFH9Ws0?!-rn zeKOPO^i#B`$S}bZ$lr=NMRl=)i{`zo5D-N{k$>L@Ax(q7o0A|77!N%(`?b@%o3cL1 z{c&n3Yf1_0qoj{F`)rLJUI)X7k_0skB%1qsF#_7}H)w4C@EZ-NisBLl56R?qlNFpq zIj1klO*#X#TQG882AcLCx0*2WTUBI6mVA<6Y>X@#P^hZ^(Q7sMJGZexb7^UEO|Ho` qxhB`-np~4>a!szuHM##6+}{8UiYE-XJo^*?0000`< literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/58.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 0000000000000000000000000000000000000000..25a3decb48135e81a452448b490555ff12cb9e06 GIT binary patch literal 1384 zcmV-u1(*7XP)Xd?fXPs}Qv;B)w%j&TwTIISsq{PcV2-`J1}@@~I_a0FOMk)ft0uxH2tfe-2}SSmcaRNBR+q0}pltJY)) zf}|CnkFi=k7K_bprwbLUK63czhYwGOleeW`>lIpC?OHo!WD##k!s~PfTnzWu&;)RG zW78o4^d)}UJvcgv)I4vH#i;axD-8Xq_qqIpy zj(yII&F`s6lB|uk*f|R!GJdLhe)++gV63NdnzC}Nkk~l`f`HRtBV9cHbKcnIdiZYh z*!!vY?J9hI5Z)0?o>=(!ukx-^M5w$qeQe1Uy=&wWIlqSt5EM@Ybf2$QLG|R^CK>Ze z;!>adzoCA_JA`qG-OCzrX_Ezi~)X(CW%Jmp7f#zI?}~g}O8^GPh@y$LoTbbBg0y_607dhvR^%CNOs)05X83W${}; zHj{}OjJJTt!#lh#Cu#N44w@rHQC4JLl?9Sn?X|}%*>GPCFD{$Crh0gFH9Ws0?!-rn zeKOPO^i#B`$S}bZ$lr=NMRl=)i{`zo5D-N{k$>L@Ax(q7o0A|77!N%(`?b@%o3cL1 z{c&n3Yf1_0qoj{F`)rLJUI)X7k_0skB%1qsF#_7}H)w4C@EZ-NisBLl56R?qlNFpq zIj1klO*#X#TQG882AcLCx0*2WTUBI6mVA<6Y>X@#P^hZ^(Q7sMJGZexb7^UEO|Ho` qxhB`-np~4>a!szuHM##6+}{8UiYE-XJo^*?0000`< literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/60.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 0000000000000000000000000000000000000000..d007118d0a98c07f614ed002bb323e8c59564e78 GIT binary patch literal 1473 zcmV;y1wQ(TP)H2!jX$j0}wJ2r;so_&*knY%zio!h!~a zlKz;aJSwSBGI#??IEZXL{3m+!r+$`1d?(QuLJK2NN1rNz(N6`oe+`e7%RgEsZ}Vr? zfJelS{5Skc4#T@=HA8GP%dd3H2 z^Vek0w`BLXWZh?}@vq)$^2nNZtVSsClBigcDQJM#k)T3dvL2B2Hw^WMJhk$}TD`}$ zZ$p|1Aj&iv*$E?4vF1G|l2LC&w|#qk`=`rBzdF3#)1x~*w|VwgiDT8m+rNx0d4mjn z=5mdK^&eVepH=%jAq{^`T=9#3tl2}?2fY}b^fsCQIqC6m??O6YAdE7M4k5^ys7C=u zhP@uy`PJs>Z+`g-Dw0Ht<^dx-YG_qT|8)NJhWLdkH;%Rm@2`~H{4H7e30eIE+24v> zo|L#gDtYt=viPH2H6Hpg$TI;IK#>Y)3R%u6ig^K#jOq!=Y!kil~r z6|Z9}gjp5z#DVm{=dNu3k)$qe*ti4v?{VFg?Q(fp9=`a>$IV){TeEIj`uYrVu|1jh z;iWbOi64cTvPbkVZc3nJ)i4bNtiNzGfkwr*fQd0@;*e+zdr(UCd+f%p-;y^EkTlu1 z@6ac&zFDeFjX}eP?AkSpT%SPBHYW=|I@2U?%IjSFN2OD}-z492J-yy6T@P6%`WtHo z&?Q{m=4$XENv;2YxaW5*J?r&b$2+FuH`9a^$4jZm8WI^v4%Hx&UprD0jeLpwRb{Y8 zWbb2s`{a?xoDWlPdusU^27*wguW?%p5aM+BgsgOZ);QkqVY1}M)Wxxp#PKAFrV@L| zm9dHa^{>tR=vtSD*M1}Re3W@#;54^*ms@sGT0oE(ew00L&cP7F!tQYu2XcX)@*|vfzvOl(%jS zeDO%5q9xx+y`H5@S^j4!iuJM&-AkVhy5kM>@T?D4^!c#iw~u}QO5RVe6}0^Q>Fpyv z3r~1G`3t>A$by`xm?nZS!)OEx46{y%um6ZpDUbV7r=Ml~z)MjcHp?$$^Ae+~x}j5s z_L7f1q}@lp_NRM17@z#sm8lGK}N_eNiIlaGAl{haXASqF@J+jw#mhG#Vu zS=OCZr2alA*gL3HiB?JXAT4uZ+j{u7}nsE=!VRO|!-Si9Z(v05VOR z?$eZPMYf|~Rb*X*=ASOS%%gAP3j+YQEIXoqusXkS2koF8w1alg4%$IGXb0_}9khdX b&<^?!mHCyHyg}+O00000NkvXXu0mjfzS872 literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/76.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 0000000000000000000000000000000000000000..6648094d7ce1330eea5e056d2badb1a70bbfa5d5 GIT binary patch literal 2050 zcmV+d2>thoP)A~8&8Pq>^epPji zYuB!Y$9o9=ZwZkhGDL>R5E&vvWQYurAu>dU$PgJKLu7~yks&ffhDh!IxjFHV9!dc9 zctSD&L0|&~3S~t`2qvnClBg=$$25`vBtc%Wn9YwA<&Aof(4|zc5YPZOM|9ISS)8OH zl~SPoh87<>1aSH0kG4zokqp2lVy=9l$~|inY(BCf-cgS+6O@#eV~rOc=*wR;Mc0Yg zY}8~rMwQen)<4EcKn}w!S35_paqFUb zoOA<}0^gCMEaH}<56n&8Id@&3bH$S0$s##J7a9^GfRX}`%ZQK-iYJ+9HdMldC`w>TA*I zlHa{J-ka~5at{?@UJxg0is8l-ZfM1hj+#VUL$uz&cvO!e-f-``e-Gbe^^GV+wU7wF z8AeL{cblvYZ#r|Su_n2~y{*gs;m>9U`>k>*AVv+z`cuz4^%XDQ)mAfCTI`lVUIo5k zb2H~s){(Zabjg}y(AElx^#OBTF(#d@=%LY zd;^Og2~^L$QCR$KbZVe?Kk47n67CWVwI2@K#s8k`P?^N(vshGY_h}s z#m$KizVjk2g5$QPq(V>tAORyfTaB4$%j%z9b<4`Or25nSB81ILx3ly$+R)wE+vYC5 zHuJ6C@?FA=*BW&iL(+&5RHfn}08gW2-o5B#-t?w(sVVQIp8ND?d?!7A|BzP~C9zz0 zA_5~)fD);(Fm=JRpa0Dt{6I=z1d11ZryHzW&AGc(&&bd%ncv)2{MlsChk7J#HfTh| zfDWfR?IZ#yhJh_Vl_<8q;Os&yo7nuKD{fqw9=>CNr3@4bkQgB%=YdtU0^f_(B~RM@ z%x6CR*-E7!*9*xvDvUVawI?Su2Iz1i)UxJiBaPCn@Y$Tlx!~757#$LO7&YcwC@TR_*i*Awc zZK!LAn~fT2%eD%yYTY^nAOxQ%&!M^KeXP!T?khJJ&r3vGjx*Q2M<@-HTEFF}Gtb|) z?$m8(oO<-}$F{6!DFg3^`5(Z|hrHf}vCi_neeO+@?(^Pq`pK&tH9h0R&AJ++37Pm8 zcHRG`;#uZ7NRF>o`re*;@xo)Z4g1P{UAo0A@O2Xspzm z9qG1j>G!Uk5jT}cuff&r(O-V@%(|hj`kxNIvoH45RDBDQK&)m5oguhLwkMAW%FpV6 z{inxPot5;DJjP3%Q`@*5%@(Dk@TY}41m$j#?F+_+qO+O&K&hw4xqZ~Xeo=M#l+`rF z^wuP{@bbYkH>@;yZfdbKk9Qb)1W{Fl)j?wAlH;_|vtPbO9=xD6aaOCp=~%aUw-!5^ z5CV4y3cq94pq3e9Q}c!49L@x2)_(G``8($9yJaj3CTbXss|HX_hKvX9y3MIqJ#~G4 zps#+ocy)$#Ht9_YBtmtN2p|x>0A3v}zV4}spk8&hEt3&IiV{ z&n9Zym;oAtY9RpuxOxRyYumslw&ckMQHCZWSIQ0em#p%0 zjuzHQ5x!}4!@89sTH^>Lgcu1?C=`aq;)8RsTlr_E*oPZy5}M9*9TBUC1dvK)eId%8 z6kH$zL&nI^$Yf|BY7f@<2#8R*=Luf)gI6!vZ*2-%HYsnF;V0uNW`a^^Igv$MALnBO z_z}6)%D_t&b4R7#-~LdxaN^s-4U!yXjEAMXbxCFeXX_*&b4h8J8I;cMeE zZYoe8jxa)fu<4Bqi7=QUn(<5q!4Q*)e;Msv`m?M=vNyNH6&ncx#RZOo{~HaU`!F| z0J>7k^D?TU!b%=Llgkfc9wK45Ob{YNWQYurAu>dU$PgJKLu7~yks&ffhR6^ZB12?| g43Qx+L{>k40JS%_3M};7`v3p{07*qoM6N<$f^)Fwod5s; literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/80-1.png b/Sora-JS/Assets.xcassets/AppIcon.appiconset/80-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b0483790844c1d85fe48210db44109d8ff146bdb GIT binary patch literal 2197 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 literal 0 HcmV?d00001 diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json index 9221b9b..1fa06d6 100644 --- a/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,91 +1,109 @@ { "images" : [ { + "filename" : "40-2.png", "idiom" : "iphone", "scale" : "2x", "size" : "20x20" }, { + "filename" : "60.png", "idiom" : "iphone", "scale" : "3x", "size" : "20x20" }, { + "filename" : "58.png", "idiom" : "iphone", "scale" : "2x", "size" : "29x29" }, { + "filename" : "87.png", "idiom" : "iphone", "scale" : "3x", "size" : "29x29" }, { + "filename" : "80.png", "idiom" : "iphone", "scale" : "2x", "size" : "40x40" }, { + "filename" : "120-1.png", "idiom" : "iphone", "scale" : "3x", "size" : "40x40" }, { + "filename" : "120.png", "idiom" : "iphone", "scale" : "2x", "size" : "60x60" }, { + "filename" : "180.png", "idiom" : "iphone", "scale" : "3x", "size" : "60x60" }, { + "filename" : "20.png", "idiom" : "ipad", "scale" : "1x", "size" : "20x20" }, { + "filename" : "40-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "20x20" }, { + "filename" : "29.png", "idiom" : "ipad", "scale" : "1x", "size" : "29x29" }, { + "filename" : "58-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" }, { + "filename" : "40.png", "idiom" : "ipad", "scale" : "1x", "size" : "40x40" }, { + "filename" : "80-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "40x40" }, { + "filename" : "76.png", "idiom" : "ipad", "scale" : "1x", "size" : "76x76" }, { + "filename" : "152.png", "idiom" : "ipad", "scale" : "2x", "size" : "76x76" }, { + "filename" : "167.png", "idiom" : "ipad", "scale" : "2x", "size" : "83.5x83.5" }, { + "filename" : "1024.jpg", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" diff --git a/Sora-JS/ContentView.swift b/Sora-JS/ContentView.swift index ea663bd..c92d876 100644 --- a/Sora-JS/ContentView.swift +++ b/Sora-JS/ContentView.swift @@ -6,173 +6,30 @@ // import SwiftUI - -struct AnimeItem: Identifiable { - let id = UUID() - let title: String - let imageUrl: String -} +import Kingfisher struct ContentView: View { - @StateObject private var jsController = JSController() - @EnvironmentObject var moduleManager: ModuleManager - @State private var searchText = "" - @State private var animeItems: [AnimeItem] = [] - @State private var isSearching = false - @AppStorage("selectedModuleId") private var selectedModuleId: String? - - private var selectedModule: ScrapingModule? { - guard let id = selectedModuleId else { return nil } - return moduleManager.modules.first { $0.id.uuidString == id } - } - var body: some View { - NavigationView { - VStack(spacing: 0) { - if let selectedModule = selectedModule { - HStack { - AsyncImage(url: URL(string: selectedModule.metadata.iconUrl)) { image in - image - .resizable() - .aspectRatio(contentMode: .fit) - } placeholder: { - Color.gray - } - .frame(width: 30, height: 30) - .cornerRadius(6) - - VStack(alignment: .leading) { - Text(selectedModule.metadata.mediaType) - .font(.headline) - Text(selectedModule.metadata.language) - .font(.caption) - .foregroundColor(.gray) - } - - Spacer() - - Menu { - ForEach(moduleManager.modules) { module in - Button { - selectedModuleId = module.id.uuidString - } label: { - HStack { - AsyncImage(url: URL(string: module.metadata.iconUrl)) { image in - image - .resizable() - .aspectRatio(contentMode: .fit) - } placeholder: { - Color.gray - } - .frame(width: 20, height: 20) - .cornerRadius(4) - - Text(module.metadata.mediaType) - Spacer() - if module.id.uuidString == selectedModuleId { - Image(systemName: "checkmark") - } - } - } - } - } label: { - Image(systemName: "chevron.up.chevron.down") - .foregroundColor(.gray) - } - } - .padding() - .background(Color(.systemBackground)) - .shadow(color: Color.black.opacity(0.1), radius: 2, y: 1) - } else { - VStack(spacing: 8) { - Text("No Module Selected") - .font(.headline) - Text("Please select a module from settings") - .font(.caption) - .foregroundColor(.gray) - } - .padding() - .frame(maxWidth: .infinity) - .background(Color(.systemBackground)) - .shadow(color: Color.black.opacity(0.1), radius: 2, y: 1) + TabView { + HomeView() + .tabItem { + Label("Home", systemImage: "house") } - - TextField("Search...", text: $searchText) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding() - .onChange(of: searchText) { newValue in - guard !newValue.isEmpty, let module = selectedModule else { - animeItems = [] - return - } - - isSearching = true - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - Task { - do { - let jsContent = try moduleManager.getModuleContent(module) - jsController.loadScript(jsContent) - jsController.scrapeAnime(keyword: newValue, module: module) { items in - animeItems = items - isSearching = false - } - } catch { - print("Error loading module: \(error)") - isSearching = false - } - } - } - } - - if isSearching { - ProgressView() - .padding() + + LibraryView() + .tabItem { + Label("Library", systemImage: "books.vertical") } - - ScrollView { - LazyVGrid(columns: [ - GridItem(.flexible(), spacing: 16), - GridItem(.flexible(), spacing: 16) - ], spacing: 16) { - ForEach(animeItems) { item in - VStack(alignment: .leading) { - if let url = URL(string: item.imageUrl) { - AsyncImage(url: url) { image in - image - .resizable() - .aspectRatio(contentMode: .fill) - } placeholder: { - Rectangle() - .fill(Color.gray.opacity(0.2)) - .overlay( - ProgressView() - ) - } - .frame(height: 200) - .clipped() - .cornerRadius(8) - } - - Text(item.title) - .font(.headline) - .lineLimit(2) - .padding(.vertical, 4) - } - .frame(maxWidth: .infinity) - .background(Color(.secondarySystemBackground)) - .cornerRadius(12) - } - } - .padding() + + SearchView() + .tabItem { + Label("Search", systemImage: "magnifyingglass") } - } - .navigationTitle("Search") - .navigationBarTitleDisplayMode(.inline) - .toolbar { - NavigationLink(destination: SettingsView()) { - Image(systemName: "gear") + + SettingsView() + .tabItem { + Label("Settings", systemImage: "gear") } - } } } } diff --git a/Sora-JS/JSController.swift b/Sora-JS/Loaders/JSController.swift similarity index 100% rename from Sora-JS/JSController.swift rename to Sora-JS/Loaders/JSController.swift diff --git a/Sora-JS/Modules.swift b/Sora-JS/Modules/Modules.swift similarity index 100% rename from Sora-JS/Modules.swift rename to Sora-JS/Modules/Modules.swift diff --git a/Sora-JS/Settings.swift b/Sora-JS/Settings.swift deleted file mode 100644 index 4e4022c..0000000 --- a/Sora-JS/Settings.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// Settings.swift -// Sora-JS -// -// Created by Francesco on 05/01/25. -// - -import SwiftUI - -struct SettingsView: View { - @EnvironmentObject var moduleManager: ModuleManager - @AppStorage("selectedModuleId") private var selectedModuleId: String? - @State private var showingAddModule = false - @State private var newModuleUrl = "" - @State private var isLoading = false - @State private var errorMessage: String? - - var body: some View { - List { - ForEach(moduleManager.modules) { module in - ModuleRow(module: module, isSelected: module.id.uuidString == selectedModuleId) - .contentShape(Rectangle()) - .onTapGesture { - selectedModuleId = module.id.uuidString - } - .swipeActions { - Button(role: .destructive) { - if selectedModuleId == module.id.uuidString { - selectedModuleId = nil - } - moduleManager.deleteModule(module) - } label: { - Label("Delete", systemImage: "trash") - } - } - } - } - .navigationTitle("Scraping Modules") - .toolbar { - Button { - showingAddModule = true - } label: { - Label("Add Module", systemImage: "plus") - } - } - .sheet(isPresented: $showingAddModule) { - NavigationView { - Form { - Section(header: Text("New Module")) { - TextField("Module JSON URL", text: $newModuleUrl) - .autocapitalization(.none) - .keyboardType(.URL) - } - - if let error = errorMessage { - Section { - Text(error) - .foregroundColor(.red) - } - } - } - .navigationTitle("Add Module") - .navigationBarItems( - leading: Button("Cancel") { - showingAddModule = false - }, - trailing: Button("Add") { - addModule() - } - .disabled(newModuleUrl.isEmpty || isLoading) - ) - } - } - } - - private func addModule() { - isLoading = true - errorMessage = nil - - Task { - do { - _ = try await moduleManager.addModule(metadataUrl: newModuleUrl) - DispatchQueue.main.async { - isLoading = false - showingAddModule = false - newModuleUrl = "" - } - } catch { - DispatchQueue.main.async { - isLoading = false - errorMessage = error.localizedDescription - } - } - } - } -} - -struct ModuleRow: View { - let module: ScrapingModule - let isSelected: Bool - - var body: some View { - HStack { - AsyncImage(url: URL(string: module.metadata.iconUrl)) { image in - image - .resizable() - .aspectRatio(contentMode: .fit) - } placeholder: { - Color.gray - } - .frame(width: 40, height: 40) - .cornerRadius(8) - - VStack(alignment: .leading) { - Text(module.metadata.mediaType) - .font(.headline) - Text("by \(module.metadata.author)") - .font(.caption) - .foregroundColor(.gray) - Text("\(module.metadata.language) • v\(module.metadata.version)") - .font(.caption2) - .foregroundColor(.gray) - } - - Spacer() - - if isSelected { - Image(systemName: "checkmark.circle.fill") - .foregroundColor(.blue) - } - } - } -} diff --git a/Sora-JS/Sora_JSApp.swift b/Sora-JS/Sora_JSApp.swift index 9d33576..70245bd 100644 --- a/Sora-JS/Sora_JSApp.swift +++ b/Sora-JS/Sora_JSApp.swift @@ -9,12 +9,18 @@ import SwiftUI @main struct Sora_JSApp: App { + @StateObject private var settings = Settings() @StateObject private var moduleManager = ModuleManager() var body: some Scene { WindowGroup { ContentView() .environmentObject(moduleManager) + .environmentObject(settings) + .accentColor(settings.accentColor) + .onAppear { + settings.updateAppearance() + } } } } diff --git a/Sora-JS/Views/HomeView.swift b/Sora-JS/Views/HomeView.swift new file mode 100644 index 0000000..db6742f --- /dev/null +++ b/Sora-JS/Views/HomeView.swift @@ -0,0 +1,16 @@ +// +// HomeView.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI + +struct HomeView: View { + var body: some View { + Text("Home View") + .font(.largeTitle) + .padding() + } +} diff --git a/Sora-JS/Views/LibraryView.swift b/Sora-JS/Views/LibraryView.swift new file mode 100644 index 0000000..1e6408d --- /dev/null +++ b/Sora-JS/Views/LibraryView.swift @@ -0,0 +1,16 @@ +// +// LibraryView.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI + +struct LibraryView: View { + var body: some View { + Text("Library View") + .font(.largeTitle) + .padding() + } +} diff --git a/Sora-JS/Views/SearchView.swift b/Sora-JS/Views/SearchView.swift new file mode 100644 index 0000000..cd144e7 --- /dev/null +++ b/Sora-JS/Views/SearchView.swift @@ -0,0 +1,174 @@ +// +// SearchView.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI +import Kingfisher + +struct AnimeItem: Identifiable { + let id = UUID() + let title: String + let imageUrl: String +} + +struct SearchView: View { + @StateObject private var jsController = JSController() + @EnvironmentObject var moduleManager: ModuleManager + @State private var searchText = "" + @State private var animeItems: [AnimeItem] = [] + @State private var isSearching = false + @AppStorage("selectedModuleId") private var selectedModuleId: String? + + private var selectedModule: ScrapingModule? { + guard let id = selectedModuleId else { return nil } + return moduleManager.modules.first { $0.id.uuidString == id } + } + + var body: some View { + NavigationView { + ScrollView { + VStack(spacing: 0) { + if selectedModule == nil { + VStack(spacing: 8) { + Text("No Module Selected") + .font(.headline) + Text("Please select a module from settings") + .font(.caption) + .foregroundColor(.gray) + } + .padding() + .frame(maxWidth: .infinity) + .background(Color(.systemBackground)) + .shadow(color: Color.black.opacity(0.1), radius: 2, y: 1) + } + + SearchBar(text: $searchText, onSearchButtonClicked: performSearch) + .padding() + .disabled(selectedModule == nil) + + if isSearching { + ProgressView() + .padding() + } + + LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) { + ForEach(animeItems) { item in + VStack { + KFImage(URL(string: item.imageUrl)) + .resizable() + .aspectRatio(2/3, contentMode: .fill) + .cornerRadius(10) + .frame(width: 150, height: 225) + + Text(item.title) + .font(.subheadline) + .foregroundColor(Color.primary) + .padding([.leading, .bottom], 8) + .lineLimit(1) + } + } + } + .padding() + } + } + .navigationTitle("Search") + .navigationBarTitleDisplayMode(.large) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + HStack { + if let selectedModule = selectedModule { + Text(selectedModule.metadata.mediaType) + .font(.headline) + .foregroundColor(.gray) + } + Menu { + ForEach(moduleManager.modules) { module in + Button { + selectedModuleId = module.id.uuidString + } label: { + HStack { + KFImage(URL(string: module.metadata.iconUrl)) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 20, height: 20) + .cornerRadius(4) + + Text(module.metadata.mediaType) + Spacer() + if module.id.uuidString == selectedModuleId { + Image(systemName: "checkmark") + } + } + } + } + } label: { + Image(systemName: "chevron.up.chevron.down") + .foregroundColor(.gray) + } + } + } + } + } + .navigationViewStyle(StackNavigationViewStyle()) + } + + private func performSearch() { + guard !searchText.isEmpty, let module = selectedModule else { + animeItems = [] + return + } + + isSearching = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + Task { + do { + let jsContent = try moduleManager.getModuleContent(module) + jsController.loadScript(jsContent) + jsController.scrapeAnime(keyword: searchText, module: module) { items in + animeItems = items + isSearching = false + } + } catch { + print("Error loading module: \(error)") + isSearching = false + } + } + } + } +} + +struct SearchBar: View { + @Binding var text: String + var onSearchButtonClicked: () -> Void + + var body: some View { + HStack { + TextField("Search...", text: $text, onCommit: onSearchButtonClicked) + .padding(7) + .padding(.horizontal, 25) + .background(Color(.systemGray6)) + .cornerRadius(8) + .overlay( + HStack { + Image(systemName: "magnifyingglass") + .foregroundColor(.gray) + .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading) + .padding(.leading, 8) + + if !text.isEmpty { + Button(action: { + self.text = "" + }) { + Image(systemName: "multiply.circle.fill") + .foregroundColor(.gray) + .padding(.trailing, 8) + } + } + } + ) + } + } +} diff --git a/Sora-JS/Views/SettingsView/SettingsView.swift b/Sora-JS/Views/SettingsView/SettingsView.swift new file mode 100644 index 0000000..f882c4f --- /dev/null +++ b/Sora-JS/Views/SettingsView/SettingsView.swift @@ -0,0 +1,139 @@ +// +// SettingsView.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI + +struct SettingsView: View { + @EnvironmentObject var settings: Settings + + var body: some View { + NavigationView { + Form { + Section(header: Text("Interface")) { + ColorPicker("Accent Color", selection: $settings.accentColor) + HStack() { + Text("Appearance") + Picker("Appearance", selection: $settings.selectedAppearance) { + Text("System").tag(Appearance.system) + Text("Light").tag(Appearance.light) + Text("Dark").tag(Appearance.dark) + } + .pickerStyle(SegmentedPickerStyle()) + } + } + + Section(header: Text("External Features")) { + NavigationLink(destination: SettingsViewModule()) { + Text("Modules") + } + } + + Section(header: Text("Info")) { + Button(action: { + if let url = URL(string: "https://github.com/cranci1/Sora") { + UIApplication.shared.open(url) + } + }) { + HStack { + Text("Sora github repo") + .foregroundColor(.primary) + Spacer() + Image(systemName: "safari") + .foregroundColor(.secondary) + } + } + Button(action: { + if let url = URL(string: "https://github.com/cranci1/Sora/issues") { + UIApplication.shared.open(url) + } + }) { + HStack { + Text("Report an issue") + .foregroundColor(.primary) + Spacer() + Image(systemName: "safari") + .foregroundColor(.secondary) + } + } + Button(action: { + if let url = URL(string: "https://discord.gg/x7hppDWFDZ") { + UIApplication.shared.open(url) + } + }) { + HStack { + Text("Join the Discord") + .foregroundColor(.primary) + Spacer() + Image(systemName: "safari") + .foregroundColor(.secondary) + } + } + } + } + .navigationTitle("Settings") + } + .navigationViewStyle(StackNavigationViewStyle()) + } +} + +enum Appearance: String, CaseIterable, Identifiable { + case system, light, dark + + var id: String { self.rawValue } +} + +class Settings: ObservableObject { + @Published var accentColor: Color { + didSet { + saveAccentColor(accentColor) + } + } + @Published var selectedAppearance: Appearance { + didSet { + UserDefaults.standard.set(selectedAppearance.rawValue, forKey: "selectedAppearance") + updateAppearance() + } + } + + init() { + if let colorData = UserDefaults.standard.data(forKey: "accentColor"), + let uiColor = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(colorData) as? UIColor { + self.accentColor = Color(uiColor) + } else { + self.accentColor = .accentColor + } + if let appearanceRawValue = UserDefaults.standard.string(forKey: "selectedAppearance"), + let appearance = Appearance(rawValue: appearanceRawValue) { + self.selectedAppearance = appearance + } else { + self.selectedAppearance = .system + } + updateAppearance() + } + + private func saveAccentColor(_ color: Color) { + let uiColor = UIColor(color) + do { + let colorData = try NSKeyedArchiver.archivedData(withRootObject: uiColor, requiringSecureCoding: false) + UserDefaults.standard.set(colorData, forKey: "accentColor") + } catch { + print("Failed to save accent color: \(error.localizedDescription)") + } + } + + func updateAppearance() { + guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return } + switch selectedAppearance { + case .system: + windowScene.windows.first?.overrideUserInterfaceStyle = .unspecified + case .light: + windowScene.windows.first?.overrideUserInterfaceStyle = .light + case .dark: + windowScene.windows.first?.overrideUserInterfaceStyle = .dark + } + } +} diff --git a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift b/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift new file mode 100644 index 0000000..6a21f60 --- /dev/null +++ b/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift @@ -0,0 +1,126 @@ +// +// SettingsViewModule.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI +import Kingfisher + +struct SettingsViewModule: View { + @EnvironmentObject var moduleManager: ModuleManager + @AppStorage("selectedModuleId") private var selectedModuleId: String? + @State private var isLoading = false + @State private var errorMessage: String? + + var body: some View { + VStack { + Form { + ForEach(moduleManager.modules) { module in + HStack { + KFImage(URL(string: module.metadata.iconUrl)) + .resizable() + .frame(width: 50, height: 50) + .clipShape(Circle()) + .padding(.trailing, 10) + + VStack(alignment: .leading) { + Text(module.metadata.mediaType) + .font(.system(size: 16)) + .foregroundColor(.primary) + Text("Author: \(module.metadata.author)") + .font(.system(size: 14)) + .foregroundColor(.secondary) + Text("\(module.metadata.language) • v\(module.metadata.version)") + .font(.system(size: 14)) + .foregroundColor(.secondary) + } + + Spacer() + + if module.id.uuidString == selectedModuleId { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.accentColor) + .frame(width: 25, height: 25) + } + } + .contentShape(Rectangle()) + .onTapGesture { + selectedModuleId = module.id.uuidString + } + .contextMenu { + Button(action: { + UIPasteboard.general.string = module.metadata.iconUrl + }) { + Label("Copy URL", systemImage: "doc.on.doc") + } + Button(role: .destructive) { + if selectedModuleId == module.id.uuidString { + selectedModuleId = nil + } + moduleManager.deleteModule(module) + } label: { + Label("Delete", systemImage: "trash") + } + } + .swipeActions { + Button(role: .destructive) { + if selectedModuleId == module.id.uuidString { + selectedModuleId = nil + } + moduleManager.deleteModule(module) + } label: { + Label("Delete", systemImage: "trash") + } + } + } + } + .navigationTitle("Modules") + .navigationBarItems(trailing: Button(action: { + showAddModuleAlert() + }) { + Image(systemName: "plus") + .resizable() + .padding(5) + }) + } + } + + func showAddModuleAlert() { + let alert = UIAlertController(title: "Add Module", message: "Enter the URL of the module file", preferredStyle: .alert) + alert.addTextField { textField in + textField.placeholder = "https://real.url/module.json" + } + alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) + alert.addAction(UIAlertAction(title: "Add", style: .default, handler: { _ in + if let url = alert.textFields?.first?.text { + addModule(from: url) + } + })) + + if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, + let rootViewController = windowScene.windows.first?.rootViewController { + rootViewController.present(alert, animated: true, completion: nil) + } + } + + private func addModule(from url: String) { + isLoading = true + errorMessage = nil + + Task { + do { + _ = try await moduleManager.addModule(metadataUrl: url) + DispatchQueue.main.async { + isLoading = false + } + } catch { + DispatchQueue.main.async { + isLoading = false + errorMessage = error.localizedDescription + } + } + } + } +} From dd3b97b0f2fd24aa41a080e686027a5ec30f64c7 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 16:22:26 +0100 Subject: [PATCH 03/30] bug fixes --- Sora-JS.xcodeproj/project.pbxproj | 6 ++-- Sora-JS/Info.plist | 10 +++--- Sora-JS/Loaders/JSController.swift | 8 ++--- Sora-JS/Modules/Modules.swift | 6 ++-- Sora-JS/Views/SearchView.swift | 31 +++++++++++-------- .../SubViews/SettingsViewModule.swift | 17 ++++++---- 6 files changed, 45 insertions(+), 33 deletions(-) diff --git a/Sora-JS.xcodeproj/project.pbxproj b/Sora-JS.xcodeproj/project.pbxproj index ff8f7b7..cd6dc1c 100644 --- a/Sora-JS.xcodeproj/project.pbxproj +++ b/Sora-JS.xcodeproj/project.pbxproj @@ -351,6 +351,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "Sora-JS/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = Sora; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -361,7 +362,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 0.2.0; PRODUCT_BUNDLE_IDENTIFIER = "me.cranci.Sora-JS"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -382,6 +383,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "Sora-JS/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = Sora; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -392,7 +394,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 0.2.0; PRODUCT_BUNDLE_IDENTIFIER = "me.cranci.Sora-JS"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/Sora-JS/Info.plist b/Sora-JS/Info.plist index cf5e9dd..6a6654d 100644 --- a/Sora-JS/Info.plist +++ b/Sora-JS/Info.plist @@ -2,10 +2,10 @@ - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + diff --git a/Sora-JS/Loaders/JSController.swift b/Sora-JS/Loaders/JSController.swift index 7c21259..587c9ce 100644 --- a/Sora-JS/Loaders/JSController.swift +++ b/Sora-JS/Loaders/JSController.swift @@ -28,7 +28,7 @@ class JSController: ObservableObject { context.evaluateScript(script) } - func scrapeAnime(keyword: String, module: ScrapingModule, completion: @escaping ([AnimeItem]) -> Void) { + func searchContent(keyword: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { let searchUrl = module.metadata.searchBaseUrl.replacingOccurrences(of: "%s", with: keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") guard let url = URL(string: searchUrl) else { @@ -56,14 +56,14 @@ class JSController: ObservableObject { if let parseFunction = self.context.objectForKeyedSubscript("parseHTML"), let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { - let animeItems = results.map { item in - AnimeItem( + let mediaItems = results.map { item in + MediaItem( title: item["title"] ?? "", imageUrl: item["image"] ?? "" ) } DispatchQueue.main.async { - completion(animeItems) + completion(mediaItems) } } else { print("Failed to parse results") diff --git a/Sora-JS/Modules/Modules.swift b/Sora-JS/Modules/Modules.swift index 67938e2..2308b50 100644 --- a/Sora-JS/Modules/Modules.swift +++ b/Sora-JS/Modules/Modules.swift @@ -8,14 +8,14 @@ import Foundation struct ModuleMetadata: Codable, Hashable { + let sourceName: String let author: String let iconUrl: String + let version: String let language: String - let mediaType: String + let baseUrl: String let searchBaseUrl: String let scriptUrl: String - let version: String - let description: String } struct ScrapingModule: Codable, Identifiable, Hashable { diff --git a/Sora-JS/Views/SearchView.swift b/Sora-JS/Views/SearchView.swift index cd144e7..3f7fc8c 100644 --- a/Sora-JS/Views/SearchView.swift +++ b/Sora-JS/Views/SearchView.swift @@ -8,7 +8,7 @@ import SwiftUI import Kingfisher -struct AnimeItem: Identifiable { +struct MediaItem: Identifiable { let id = UUID() let title: String let imageUrl: String @@ -18,7 +18,7 @@ struct SearchView: View { @StateObject private var jsController = JSController() @EnvironmentObject var moduleManager: ModuleManager @State private var searchText = "" - @State private var animeItems: [AnimeItem] = [] + @State private var mediaItems: [MediaItem] = [] @State private var isSearching = false @AppStorage("selectedModuleId") private var selectedModuleId: String? @@ -37,7 +37,7 @@ struct SearchView: View { .font(.headline) Text("Please select a module from settings") .font(.caption) - .foregroundColor(.gray) + .foregroundColor(.secondary) } .padding() .frame(maxWidth: .infinity) @@ -55,7 +55,7 @@ struct SearchView: View { } LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) { - ForEach(animeItems) { item in + ForEach(mediaItems) { item in VStack { KFImage(URL(string: item.imageUrl)) .resizable() @@ -80,9 +80,9 @@ struct SearchView: View { ToolbarItem(placement: .navigationBarTrailing) { HStack { if let selectedModule = selectedModule { - Text(selectedModule.metadata.mediaType) + Text(selectedModule.metadata.sourceName) .font(.headline) - .foregroundColor(.gray) + .foregroundColor(.secondary) } Menu { ForEach(moduleManager.modules) { module in @@ -96,7 +96,7 @@ struct SearchView: View { .frame(width: 20, height: 20) .cornerRadius(4) - Text(module.metadata.mediaType) + Text(module.metadata.sourceName) Spacer() if module.id.uuidString == selectedModuleId { Image(systemName: "checkmark") @@ -106,18 +106,23 @@ struct SearchView: View { } } label: { Image(systemName: "chevron.up.chevron.down") - .foregroundColor(.gray) + .foregroundColor(.secondary) } } } } } .navigationViewStyle(StackNavigationViewStyle()) + .onChange(of: selectedModuleId) { _ in + if !searchText.isEmpty { + performSearch() + } + } } private func performSearch() { guard !searchText.isEmpty, let module = selectedModule else { - animeItems = [] + mediaItems = [] return } @@ -127,8 +132,8 @@ struct SearchView: View { do { let jsContent = try moduleManager.getModuleContent(module) jsController.loadScript(jsContent) - jsController.scrapeAnime(keyword: searchText, module: module) { items in - animeItems = items + jsController.searchContent(keyword: searchText, module: module) { items in + mediaItems = items isSearching = false } } catch { @@ -154,7 +159,7 @@ struct SearchBar: View { .overlay( HStack { Image(systemName: "magnifyingglass") - .foregroundColor(.gray) + .foregroundColor(.secondary) .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading) .padding(.leading, 8) @@ -163,7 +168,7 @@ struct SearchBar: View { self.text = "" }) { Image(systemName: "multiply.circle.fill") - .foregroundColor(.gray) + .foregroundColor(.secondary) .padding(.trailing, 8) } } diff --git a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift b/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift index 6a21f60..735d719 100644 --- a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift +++ b/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift @@ -26,14 +26,19 @@ struct SettingsViewModule: View { .padding(.trailing, 10) VStack(alignment: .leading) { - Text(module.metadata.mediaType) - .font(.system(size: 16)) - .foregroundColor(.primary) + HStack(alignment: .bottom, spacing: 4) { + Text(module.metadata.sourceName) + .font(.headline) + .foregroundColor(.primary) + Text("v\(module.metadata.version)") + .font(.subheadline) + .foregroundColor(.secondary) + } Text("Author: \(module.metadata.author)") - .font(.system(size: 14)) + .font(.subheadline) .foregroundColor(.secondary) - Text("\(module.metadata.language) • v\(module.metadata.version)") - .font(.system(size: 14)) + Text("Language: \(module.metadata.language)") + .font(.subheadline) .foregroundColor(.secondary) } From d519fc6110bd6160ee79494dc4621b3081bb3845 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 16:37:52 +0100 Subject: [PATCH 04/30] added UserAgent support --- Sora-JS.xcodeproj/project.pbxproj | 24 +++++++++++++++++-- Sora-JS/Utils/Extensions/URLSession.swift | 18 ++++++++++++++ .../{ => Utils}/Loaders/JSController.swift | 6 ++--- Sora-JS/{ => Utils}/Modules/Modules.swift | 4 ++-- 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 Sora-JS/Utils/Extensions/URLSession.swift rename Sora-JS/{ => Utils}/Loaders/JSController.swift (87%) rename Sora-JS/{ => Utils}/Modules/Modules.swift (96%) diff --git a/Sora-JS.xcodeproj/project.pbxproj b/Sora-JS.xcodeproj/project.pbxproj index cd6dc1c..6a3f587 100644 --- a/Sora-JS.xcodeproj/project.pbxproj +++ b/Sora-JS.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1329D5C82D298198008AEDA2 /* ContentView.swift */; }; 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CA2D298199008AEDA2 /* Assets.xcassets */; }; 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */; }; + 133D7C1B2D2ADC430075467E /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C1A2D2ADC430075467E /* URLSession.swift */; }; 13AEE6192D2A75110096D953 /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6182D2A75110096D953 /* Modules.swift */; }; 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61A2D2A78050096D953 /* SettingsView.swift */; }; 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61C2D2A78160096D953 /* JSController.swift */; }; @@ -28,6 +29,7 @@ 1329D5CA2D298199008AEDA2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 1329D5DA2D29821B008AEDA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 133D7C1A2D2ADC430075467E /* URLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; 13AEE6182D2A75110096D953 /* Modules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; 13AEE61A2D2A78050096D953 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 13AEE61C2D2A78160096D953 /* JSController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; @@ -68,8 +70,7 @@ 1329D5C52D298198008AEDA2 /* Sora-JS */ = { isa = PBXGroup; children = ( - 13AEE6202D2AAD390096D953 /* Modules */, - 13AEE61F2D2AAD2D0096D953 /* Loaders */, + 133D7C182D2ADC300075467E /* Utils */, 13AEE61E2D2AAD1E0096D953 /* Views */, 1329D5DA2D29821B008AEDA2 /* Info.plist */, 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */, @@ -88,6 +89,24 @@ path = "Preview Content"; sourceTree = ""; }; + 133D7C182D2ADC300075467E /* Utils */ = { + isa = PBXGroup; + children = ( + 133D7C192D2ADC370075467E /* Extensions */, + 13AEE6202D2AAD390096D953 /* Modules */, + 13AEE61F2D2AAD2D0096D953 /* Loaders */, + ); + path = Utils; + sourceTree = ""; + }; + 133D7C192D2ADC370075467E /* Extensions */ = { + isa = PBXGroup; + children = ( + 133D7C1A2D2ADC430075467E /* URLSession.swift */, + ); + path = Extensions; + sourceTree = ""; + }; 13AEE61E2D2AAD1E0096D953 /* Views */ = { isa = PBXGroup; children = ( @@ -210,6 +229,7 @@ files = ( 13AEE6272D2AB1990096D953 /* LibraryView.swift in Sources */, 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */, + 133D7C1B2D2ADC430075467E /* URLSession.swift in Sources */, 13AEE62D2D2ABCD30096D953 /* SettingsViewModule.swift in Sources */, 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */, 13AEE6192D2A75110096D953 /* Modules.swift in Sources */, diff --git a/Sora-JS/Utils/Extensions/URLSession.swift b/Sora-JS/Utils/Extensions/URLSession.swift new file mode 100644 index 0000000..6bb66c1 --- /dev/null +++ b/Sora-JS/Utils/Extensions/URLSession.swift @@ -0,0 +1,18 @@ +// +// URLSession.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import Foundation + +extension URLSession { + static let custom: URLSession = { + let configuration = URLSessionConfiguration.default + configuration.httpAdditionalHeaders = [ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" + ] + return URLSession(configuration: configuration) + }() +} diff --git a/Sora-JS/Loaders/JSController.swift b/Sora-JS/Utils/Loaders/JSController.swift similarity index 87% rename from Sora-JS/Loaders/JSController.swift rename to Sora-JS/Utils/Loaders/JSController.swift index 587c9ce..389aedc 100644 --- a/Sora-JS/Loaders/JSController.swift +++ b/Sora-JS/Utils/Loaders/JSController.swift @@ -36,10 +36,7 @@ class JSController: ObservableObject { return } - var request = URLRequest(url: url) - request.setValue("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", forHTTPHeaderField: "User-Agent") - - URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + URLSession.custom.dataTask(with: url) { [weak self] data, response, error in guard let self = self else { return } if let error = error { @@ -64,6 +61,7 @@ class JSController: ObservableObject { } DispatchQueue.main.async { completion(mediaItems) + print(mediaItems) } } else { print("Failed to parse results") diff --git a/Sora-JS/Modules/Modules.swift b/Sora-JS/Utils/Modules/Modules.swift similarity index 96% rename from Sora-JS/Modules/Modules.swift rename to Sora-JS/Utils/Modules/Modules.swift index 2308b50..8d256be 100644 --- a/Sora-JS/Modules/Modules.swift +++ b/Sora-JS/Utils/Modules/Modules.swift @@ -74,14 +74,14 @@ class ModuleManager: ObservableObject { throw NSError(domain: "Invalid metadata URL", code: -1) } - let (metadataData, _) = try await URLSession.shared.data(from: url) + let (metadataData, _) = try await URLSession.custom.data(from: url) let metadata = try JSONDecoder().decode(ModuleMetadata.self, from: metadataData) guard let scriptUrl = URL(string: metadata.scriptUrl) else { throw NSError(domain: "Invalid script URL", code: -1) } - let (scriptData, _) = try await URLSession.shared.data(from: scriptUrl) + let (scriptData, _) = try await URLSession.custom.data(from: scriptUrl) guard let jsContent = String(data: scriptData, encoding: .utf8) else { throw NSError(domain: "Invalid script encoding", code: -1) } From ee75542b2d13978d9bf0e8d2f6208d1f995b0318 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:21:43 +0100 Subject: [PATCH 05/30] Media Info view --- Sora-JS.xcodeproj/project.pbxproj | 12 +++++ Sora-JS/ContentView.swift | 3 -- Sora-JS/Utils/Loaders/JSController.swift | 54 +++++++++++++++++-- Sora-JS/Utils/Modules/Modules.swift | 1 + .../Views/MediaInfoView/MediaInfoView.swift | 53 ++++++++++++++++++ Sora-JS/Views/SearchView.swift | 15 ++++-- .../SubViews/SettingsViewModule.swift | 5 +- 7 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 Sora-JS/Views/MediaInfoView/MediaInfoView.swift diff --git a/Sora-JS.xcodeproj/project.pbxproj b/Sora-JS.xcodeproj/project.pbxproj index 6a3f587..ccf09bd 100644 --- a/Sora-JS.xcodeproj/project.pbxproj +++ b/Sora-JS.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CA2D298199008AEDA2 /* Assets.xcassets */; }; 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */; }; 133D7C1B2D2ADC430075467E /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C1A2D2ADC430075467E /* URLSession.swift */; }; + 133D7C1E2D2ADF110075467E /* MediaInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C1D2D2ADF110075467E /* MediaInfoView.swift */; }; 13AEE6192D2A75110096D953 /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6182D2A75110096D953 /* Modules.swift */; }; 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61A2D2A78050096D953 /* SettingsView.swift */; }; 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61C2D2A78160096D953 /* JSController.swift */; }; @@ -30,6 +31,7 @@ 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 1329D5DA2D29821B008AEDA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 133D7C1A2D2ADC430075467E /* URLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; + 133D7C1D2D2ADF110075467E /* MediaInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaInfoView.swift; sourceTree = ""; }; 13AEE6182D2A75110096D953 /* Modules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; 13AEE61A2D2A78050096D953 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 13AEE61C2D2A78160096D953 /* JSController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; @@ -107,9 +109,18 @@ path = Extensions; sourceTree = ""; }; + 133D7C1C2D2ADF060075467E /* MediaInfoView */ = { + isa = PBXGroup; + children = ( + 133D7C1D2D2ADF110075467E /* MediaInfoView.swift */, + ); + path = MediaInfoView; + sourceTree = ""; + }; 13AEE61E2D2AAD1E0096D953 /* Views */ = { isa = PBXGroup; children = ( + 133D7C1C2D2ADF060075467E /* MediaInfoView */, 13AEE62A2D2ABCB40096D953 /* SettingsView */, 13AEE6242D2AB1730096D953 /* HomeView.swift */, 13AEE6262D2AB1990096D953 /* LibraryView.swift */, @@ -237,6 +248,7 @@ 13AEE6252D2AB1730096D953 /* HomeView.swift in Sources */, 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */, 1329D5C72D298198008AEDA2 /* Sora_JSApp.swift in Sources */, + 133D7C1E2D2ADF110075467E /* MediaInfoView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Sora-JS/ContentView.swift b/Sora-JS/ContentView.swift index c92d876..44db28f 100644 --- a/Sora-JS/ContentView.swift +++ b/Sora-JS/ContentView.swift @@ -15,17 +15,14 @@ struct ContentView: View { .tabItem { Label("Home", systemImage: "house") } - LibraryView() .tabItem { Label("Library", systemImage: "books.vertical") } - SearchView() .tabItem { Label("Search", systemImage: "magnifyingglass") } - SettingsView() .tabItem { Label("Settings", systemImage: "gear") diff --git a/Sora-JS/Utils/Loaders/JSController.swift b/Sora-JS/Utils/Loaders/JSController.swift index 389aedc..1883664 100644 --- a/Sora-JS/Utils/Loaders/JSController.swift +++ b/Sora-JS/Utils/Loaders/JSController.swift @@ -28,7 +28,7 @@ class JSController: ObservableObject { context.evaluateScript(script) } - func searchContent(keyword: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { + func fetchSearchResults(keyword: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { let searchUrl = module.metadata.searchBaseUrl.replacingOccurrences(of: "%s", with: keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") guard let url = URL(string: searchUrl) else { @@ -51,17 +51,63 @@ class JSController: ObservableObject { return } - if let parseFunction = self.context.objectForKeyedSubscript("parseHTML"), + if let parseFunction = self.context.objectForKeyedSubscript("searchResults"), let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { let mediaItems = results.map { item in MediaItem( title: item["title"] ?? "", - imageUrl: item["image"] ?? "" + imageUrl: item["image"] ?? "", + href: item["href"] ?? "" + ) + } + DispatchQueue.main.async { + completion(mediaItems) + } + } else { + print("Failed to parse results") + DispatchQueue.main.async { completion([]) } + } + }.resume() + } + + func fetchInfoContent(href: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { + var baseUrl = module.metadata.baseUrl + if !baseUrl.hasSuffix("/") && !href.hasPrefix("/") { + baseUrl += "/" + } + baseUrl += href + + guard let url = URL(string: baseUrl) else { + completion([]) + return + } + + URLSession.custom.dataTask(with: url) { [weak self] data, response, error in + guard let self = self else { return } + + if let error = error { + print("Network error: \(error)") + DispatchQueue.main.async { completion([]) } + return + } + + guard let data = data, let html = String(data: data, encoding: .utf8) else { + print("Failed to decode HTML") + DispatchQueue.main.async { completion([]) } + return + } + + if let parseFunction = self.context.objectForKeyedSubscript("fetchInfo"), + let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { + let mediaItems = results.map { item in + MediaItem( + title: item["title"] ?? "", + imageUrl: item["image"] ?? "", + href: item["href"] ?? "" ) } DispatchQueue.main.async { completion(mediaItems) - print(mediaItems) } } else { print("Failed to parse results") diff --git a/Sora-JS/Utils/Modules/Modules.swift b/Sora-JS/Utils/Modules/Modules.swift index 8d256be..22946c6 100644 --- a/Sora-JS/Utils/Modules/Modules.swift +++ b/Sora-JS/Utils/Modules/Modules.swift @@ -42,6 +42,7 @@ struct ScrapingModule: Codable, Identifiable, Hashable { class ModuleManager: ObservableObject { @Published var modules: [ScrapingModule] = [] + private let fileManager = FileManager.default private let modulesFileName = "modules.json" diff --git a/Sora-JS/Views/MediaInfoView/MediaInfoView.swift b/Sora-JS/Views/MediaInfoView/MediaInfoView.swift new file mode 100644 index 0000000..fb74815 --- /dev/null +++ b/Sora-JS/Views/MediaInfoView/MediaInfoView.swift @@ -0,0 +1,53 @@ +// +// MediaInfoView.swift +// Sora-JS +// +// Created by Francesco on 05/01/25. +// + +import SwiftUI +import Kingfisher + +struct MediaInfoView: View { + let title: String + let imageUrl: String + let href: String + let module: ScrapingModule + + var body: some View { + VStack { + KFImage(URL(string: imageUrl)) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: .infinity) + .padding() + + Text(title) + .font(.largeTitle) + .padding() + + Button(action: { + var finalHref = href + if !href.starts(with: "http") { + var baseUrl = module.metadata.baseUrl + if !baseUrl.hasSuffix("/") && !href.hasPrefix("/") { + baseUrl += "/" + } + finalHref = baseUrl + href + } + if let url = URL(string: finalHref) { + UIApplication.shared.open(url) + } + }) { + Text("Open Link") + .font(.headline) + .foregroundColor(.blue) + } + .padding() + + Spacer() + } + .navigationTitle("Media Info") + .navigationBarTitleDisplayMode(.inline) + } +} \ No newline at end of file diff --git a/Sora-JS/Views/SearchView.swift b/Sora-JS/Views/SearchView.swift index 3f7fc8c..09d4a55 100644 --- a/Sora-JS/Views/SearchView.swift +++ b/Sora-JS/Views/SearchView.swift @@ -12,15 +12,18 @@ struct MediaItem: Identifiable { let id = UUID() let title: String let imageUrl: String + let href: String } struct SearchView: View { + @AppStorage("selectedModuleId") private var selectedModuleId: String? @StateObject private var jsController = JSController() @EnvironmentObject var moduleManager: ModuleManager - @State private var searchText = "" + @State private var mediaItems: [MediaItem] = [] + @State private var selectedMediaItem: MediaItem? @State private var isSearching = false - @AppStorage("selectedModuleId") private var selectedModuleId: String? + @State private var searchText = "" private var selectedModule: ScrapingModule? { guard let id = selectedModuleId else { return nil } @@ -69,6 +72,9 @@ struct SearchView: View { .padding([.leading, .bottom], 8) .lineLimit(1) } + .onTapGesture { + selectedMediaItem = item + } } } .padding() @@ -111,6 +117,9 @@ struct SearchView: View { } } } + .sheet(item: $selectedMediaItem) { item in + MediaInfoView(title: item.title, imageUrl: item.imageUrl, href: item.href, module: selectedModule!) + } } .navigationViewStyle(StackNavigationViewStyle()) .onChange(of: selectedModuleId) { _ in @@ -132,7 +141,7 @@ struct SearchView: View { do { let jsContent = try moduleManager.getModuleContent(module) jsController.loadScript(jsContent) - jsController.searchContent(keyword: searchText, module: module) { items in + jsController.fetchSearchResults(keyword: searchText, module: module) { items in mediaItems = items isSearching = false } diff --git a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift b/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift index 735d719..4cce272 100644 --- a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift +++ b/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift @@ -9,10 +9,11 @@ import SwiftUI import Kingfisher struct SettingsViewModule: View { - @EnvironmentObject var moduleManager: ModuleManager @AppStorage("selectedModuleId") private var selectedModuleId: String? - @State private var isLoading = false + @EnvironmentObject var moduleManager: ModuleManager + @State private var errorMessage: String? + @State private var isLoading = false var body: some View { VStack { From e7faec0b1dce4d9569c819889a5cb5bf8ffcaa9c Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:26:22 +0100 Subject: [PATCH 06/30] test --- .github/workflows/build-JS.yml | 29 +++++++++++++++++++++++ ipabuild.sh | 42 ++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 .github/workflows/build-JS.yml create mode 100755 ipabuild.sh diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml new file mode 100644 index 0000000..e9921ae --- /dev/null +++ b/.github/workflows/build-JS.yml @@ -0,0 +1,29 @@ +name: Build and Release IPA +on: + push: + branches: + - Sora-JS +jobs: + build: + name: Build IPA + runs-on: macOS-latest + steps: + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run ipabuild.sh + run: | + chmod +x ipabuild.sh + ./ipabuild.sh + + - name: Upload IPA artifact + uses: actions/upload-artifact@v4 + with: + name: Sora-IPA + path: build/Sora.ipa + compression-level: 0 diff --git a/ipabuild.sh b/ipabuild.sh new file mode 100755 index 0000000..272d0f5 --- /dev/null +++ b/ipabuild.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +cd "$(dirname "$0")" + +WORKING_LOCATION="$(pwd)" +APPLICATION_NAME=Sora-JS + +if [ ! -d "build" ]; then + mkdir build +fi + +cd build +Sora-JS +xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ + -scheme "$APPLICATION_NAME" \ + -configuration Release \ + -derivedDataPath "$WORKING_LOCATION/build/DerivedDataApp" \ + -destination 'generic/platform=iOS' \ + clean build \ + CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" + +DD_APP_PATH="$WORKING_LOCATION/build/DerivedDataApp/Build/Products/Release-iphoneos/$APPLICATION_NAME.app" +TARGET_APP="$WORKING_LOCATION/build/$APPLICATION_NAME.app" +cp -r "$DD_APP_PATH" "$TARGET_APP" + +codesign --remove "$TARGET_APP" +if [ -e "$TARGET_APP/_CodeSignature" ]; then + rm -rf "$TARGET_APP/_CodeSignature" +fi +if [ -e "$TARGET_APP/embedded.mobileprovision" ]; then + rm -rf "$TARGET_APP/embedded.mobileprovision" +fi + + +mkdir Payload +cp -r Sora-JS.app Payload/Sora-JS.app +strip Payload/Sora-JS.app/Sora-JS +zip -vr Sora-JS.ipa Payload +rm -rf Sora-JS.app +rm -rf Payload From 90e571c613d1ff23a89865a580d47315e9be5ee8 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:28:09 +0100 Subject: [PATCH 07/30] Update README.md --- README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index cc5abc3..0527f07 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) -A modular web scraping app, **Still in early builds** under the GPLv3.0 License +A modular web scraping app, under the GPLv3.0 License @@ -21,28 +21,26 @@ A modular web scraping app, **Still in early builds** under the GPLv3.0 License ## Features - [x] iOS/iPadOS 15+ support -- [x] macOS 12+ support -- [x] JSON module support +- [ ] macOS support - [ ] JavaScript module support ## Frequently Asked Questions 1. **What is Sora?** - - Sora is a module based web scraping app, made to work with modules only +Sora is a module based web scraping app, made to work with modules only 2. **Is Sora safe?** - - Yes, Sora is open-source and does not store user data on external servers. +Yes, Sora is open-source and does not store user data on external servers. 3. **Will Sora ever be paid?** - - No, Sora will always remain free without subscriptions, paid content, or any type of login. +No, Sora will always remain free without subscriptions, paid content, or any type of login. 4. **How can i get module?** - - I do not provide any module for the app. Search for them on google or i dont know. I only created 1 module to watch videos of my school. +I do not provide any module for the app. Search for them on google or i dont know. I only created 1 module to watch videos of my school. ## Acknowledgements FrameWorks: -- [SwiftSoup](https://github.com/scinfu/SwiftSoup) - MIT License - [KingFisher](https://github.com/onevcat/Kingfisher) - MIT License ## License From 89038d318631264a16c7c9472232b0dc7ccbf2e3 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:29:06 +0100 Subject: [PATCH 08/30] Update build-JS.yml --- .github/workflows/build-JS.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml index e9921ae..ff780f2 100644 --- a/.github/workflows/build-JS.yml +++ b/.github/workflows/build-JS.yml @@ -2,7 +2,7 @@ name: Build and Release IPA on: push: branches: - - Sora-JS + - Sora-JSCore jobs: build: name: Build IPA From 836bc19148c39c46f4cd5bf431020b2016053d07 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:30:11 +0100 Subject: [PATCH 09/30] Update ipabuild.sh --- ipabuild.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ipabuild.sh b/ipabuild.sh index 272d0f5..26606a7 100755 --- a/ipabuild.sh +++ b/ipabuild.sh @@ -12,7 +12,7 @@ if [ ! -d "build" ]; then fi cd build -Sora-JS + xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ -scheme "$APPLICATION_NAME" \ -configuration Release \ From 2189faade61a915ade220c9fc683e3dd2ea61496 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:31:46 +0100 Subject: [PATCH 10/30] Update build-JS.yml --- .github/workflows/build-JS.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml index ff780f2..954cbf1 100644 --- a/.github/workflows/build-JS.yml +++ b/.github/workflows/build-JS.yml @@ -25,5 +25,5 @@ jobs: uses: actions/upload-artifact@v4 with: name: Sora-IPA - path: build/Sora.ipa + path: build/Sora-JS.ipa compression-level: 0 From 9ad3632532c114c28a7b05e8bb44bc24ce1c4ce5 Mon Sep 17 00:00:00 2001 From: cranci <100066266+cranci1@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:51:13 +0100 Subject: [PATCH 11/30] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0527f07..37f8090 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ -[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) +[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) A modular web scraping app, under the GPLv3.0 License From 250d1cec9d347f917fb8297bf6fba61f0bae930d Mon Sep 17 00:00:00 2001 From: cranci <100066266+cranci1@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:52:12 +0100 Subject: [PATCH 12/30] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37f8090..feccb3d 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ FrameWorks: This project is licensed under the [GNU General Public License v3.0](LICENSE). ``` -Copyright © 2024 cranci. All rights reserved. +Copyright © 2024-2025 cranci. All rights reserved. Sora is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 0a14a550b9d3b02996a8f43b9266e0bcdef0c355 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:02:18 +0100 Subject: [PATCH 13/30] nothing --- Sora-JS/Utils/Loaders/JSController.swift | 8 +------- Sora-JS/Views/SearchView.swift | 8 ++++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/Sora-JS/Utils/Loaders/JSController.swift b/Sora-JS/Utils/Loaders/JSController.swift index 1883664..92bd0f6 100644 --- a/Sora-JS/Utils/Loaders/JSController.swift +++ b/Sora-JS/Utils/Loaders/JSController.swift @@ -71,13 +71,7 @@ class JSController: ObservableObject { } func fetchInfoContent(href: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { - var baseUrl = module.metadata.baseUrl - if !baseUrl.hasSuffix("/") && !href.hasPrefix("/") { - baseUrl += "/" - } - baseUrl += href - - guard let url = URL(string: baseUrl) else { + guard let url = URL(string: href) else { completion([]) return } diff --git a/Sora-JS/Views/SearchView.swift b/Sora-JS/Views/SearchView.swift index 09d4a55..873fc75 100644 --- a/Sora-JS/Views/SearchView.swift +++ b/Sora-JS/Views/SearchView.swift @@ -34,6 +34,10 @@ struct SearchView: View { NavigationView { ScrollView { VStack(spacing: 0) { + SearchBar(text: $searchText, onSearchButtonClicked: performSearch) + .padding() + .disabled(selectedModule == nil) + if selectedModule == nil { VStack(spacing: 8) { Text("No Module Selected") @@ -48,10 +52,6 @@ struct SearchView: View { .shadow(color: Color.black.opacity(0.1), radius: 2, y: 1) } - SearchBar(text: $searchText, onSearchButtonClicked: performSearch) - .padding() - .disabled(selectedModule == nil) - if isSearching { ProgressView() .padding() From 253383516dedf1c2089c64bc08a3b47bfce6b72d Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:08:10 +0100 Subject: [PATCH 14/30] fixed workspace --- .github/workflows/build-JS.yml | 2 +- Sora-JS/Info.plist | 11 - .../project.pbxproj | 290 +++++++++--------- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/swiftpm/Package.resolved | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/120-1.png | Bin .../AppIcon.appiconset/120.png | Bin .../AppIcon.appiconset/152.png | Bin .../AppIcon.appiconset/167.png | Bin .../AppIcon.appiconset/180.png | Bin .../Assets.xcassets/AppIcon.appiconset/20.png | Bin .../Assets.xcassets/AppIcon.appiconset/29.png | Bin .../AppIcon.appiconset/40-1.png | Bin .../AppIcon.appiconset/40-2.png | Bin .../Assets.xcassets/AppIcon.appiconset/40.png | Bin .../AppIcon.appiconset/58-1.png | Bin .../Assets.xcassets/AppIcon.appiconset/58.png | Bin .../Assets.xcassets/AppIcon.appiconset/60.png | Bin .../Assets.xcassets/AppIcon.appiconset/76.png | Bin .../AppIcon.appiconset/80-1.png | Bin .../Assets.xcassets/AppIcon.appiconset/80.png | Bin .../Assets.xcassets/AppIcon.appiconset/87.png | Bin .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 {Sora-JS => Sora}/ContentView.swift | 4 +- .../Preview Assets.xcassets/Contents.json | 0 .../Sora_JSApp.swift => Sora/SoraApp.swift | 8 +- .../Utils/Extensions/URLSession.swift | 0 .../Utils/Loaders/JSController.swift | 2 +- {Sora-JS => Sora}/Utils/Modules/Modules.swift | 2 +- {Sora-JS => Sora}/Views/HomeView.swift | 2 +- {Sora-JS => Sora}/Views/LibraryView.swift | 2 +- .../Views/MediaInfoView/MediaInfoView.swift | 4 +- {Sora-JS => Sora}/Views/SearchView.swift | 2 +- .../Views/SettingsView/SettingsView.swift | 2 +- .../SubViews/SettingsViewModule.swift | 2 +- assets/Sora_banner.png | Bin 0 -> 191704 bytes assets/banner2.png | Bin 0 -> 227786 bytes ipabuild.sh | 10 +- 41 files changed, 163 insertions(+), 180 deletions(-) delete mode 100644 Sora-JS/Info.plist rename {Sora-JS.xcodeproj => Sora.xcodeproj}/project.pbxproj (55%) rename {Sora-JS.xcodeproj => Sora.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {Sora-JS.xcodeproj => Sora.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {Sora-JS.xcodeproj => Sora.xcodeproj}/project.xcworkspace/xcshareddata/swiftpm/Package.resolved (100%) rename {Sora-JS => Sora}/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/120-1.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/120.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/152.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/167.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/180.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/20.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/29.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/40-1.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/40-2.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/40.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/58-1.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/58.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/60.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/76.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/80-1.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/80.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/87.png (100%) rename {Sora-JS => Sora}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {Sora-JS => Sora}/Assets.xcassets/Contents.json (100%) rename {Sora-JS => Sora}/ContentView.swift (93%) rename {Sora-JS => Sora}/Preview Content/Preview Assets.xcassets/Contents.json (100%) rename Sora-JS/Sora_JSApp.swift => Sora/SoraApp.swift (83%) rename {Sora-JS => Sora}/Utils/Extensions/URLSession.swift (100%) rename {Sora-JS => Sora}/Utils/Loaders/JSController.swift (99%) rename {Sora-JS => Sora}/Utils/Modules/Modules.swift (99%) rename {Sora-JS => Sora}/Views/HomeView.swift (94%) rename {Sora-JS => Sora}/Views/LibraryView.swift (95%) rename {Sora-JS => Sora}/Views/MediaInfoView/MediaInfoView.swift (99%) rename {Sora-JS => Sora}/Views/SearchView.swift (99%) rename {Sora-JS => Sora}/Views/SettingsView/SettingsView.swift (99%) rename {Sora-JS => Sora}/Views/SettingsView/SubViews/SettingsViewModule.swift (99%) create mode 100644 assets/Sora_banner.png create mode 100644 assets/banner2.png diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml index 954cbf1..ff780f2 100644 --- a/.github/workflows/build-JS.yml +++ b/.github/workflows/build-JS.yml @@ -25,5 +25,5 @@ jobs: uses: actions/upload-artifact@v4 with: name: Sora-IPA - path: build/Sora-JS.ipa + path: build/Sora.ipa compression-level: 0 diff --git a/Sora-JS/Info.plist b/Sora-JS/Info.plist deleted file mode 100644 index 6a6654d..0000000 --- a/Sora-JS/Info.plist +++ /dev/null @@ -1,11 +0,0 @@ - - - - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - - diff --git a/Sora-JS.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj similarity index 55% rename from Sora-JS.xcodeproj/project.pbxproj rename to Sora.xcodeproj/project.pbxproj index ccf09bd..cf26c32 100644 --- a/Sora-JS.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -7,200 +7,198 @@ objects = { /* Begin PBXBuildFile section */ - 1329D5C72D298198008AEDA2 /* Sora_JSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */; }; - 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1329D5C82D298198008AEDA2 /* ContentView.swift */; }; - 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CA2D298199008AEDA2 /* Assets.xcassets */; }; - 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */; }; - 133D7C1B2D2ADC430075467E /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C1A2D2ADC430075467E /* URLSession.swift */; }; - 133D7C1E2D2ADF110075467E /* MediaInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C1D2D2ADF110075467E /* MediaInfoView.swift */; }; - 13AEE6192D2A75110096D953 /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6182D2A75110096D953 /* Modules.swift */; }; - 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61A2D2A78050096D953 /* SettingsView.swift */; }; - 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE61C2D2A78160096D953 /* JSController.swift */; }; - 13AEE6232D2AAF160096D953 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 13AEE6222D2AAF160096D953 /* Kingfisher */; }; - 13AEE6252D2AB1730096D953 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6242D2AB1730096D953 /* HomeView.swift */; }; - 13AEE6272D2AB1990096D953 /* LibraryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6262D2AB1990096D953 /* LibraryView.swift */; }; - 13AEE6292D2AB2070096D953 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE6282D2AB2070096D953 /* SearchView.swift */; }; - 13AEE62D2D2ABCD30096D953 /* SettingsViewModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AEE62C2D2ABCD30096D953 /* SettingsViewModule.swift */; }; + 133D7C6E2D2BE2500075467E /* SoraApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C6D2D2BE2500075467E /* SoraApp.swift */; }; + 133D7C702D2BE2500075467E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C6F2D2BE2500075467E /* ContentView.swift */; }; + 133D7C722D2BE2520075467E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 133D7C712D2BE2520075467E /* Assets.xcassets */; }; + 133D7C752D2BE2520075467E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 133D7C742D2BE2520075467E /* Preview Assets.xcassets */; }; + 133D7C8C2D2BE2640075467E /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C7C2D2BE2630075467E /* SearchView.swift */; }; + 133D7C8D2D2BE2640075467E /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C7D2D2BE2630075467E /* HomeView.swift */; }; + 133D7C8E2D2BE2640075467E /* LibraryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C7E2D2BE2630075467E /* LibraryView.swift */; }; + 133D7C8F2D2BE2640075467E /* MediaInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C802D2BE2630075467E /* MediaInfoView.swift */; }; + 133D7C902D2BE2640075467E /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C822D2BE2630075467E /* SettingsView.swift */; }; + 133D7C912D2BE2640075467E /* SettingsViewModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C842D2BE2630075467E /* SettingsViewModule.swift */; }; + 133D7C922D2BE2640075467E /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C872D2BE2640075467E /* URLSession.swift */; }; + 133D7C932D2BE2640075467E /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C892D2BE2640075467E /* Modules.swift */; }; + 133D7C942D2BE2640075467E /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C8B2D2BE2640075467E /* JSController.swift */; }; + 133D7C972D2BE2AF0075467E /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 133D7C962D2BE2AF0075467E /* Kingfisher */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 1329D5C32D298198008AEDA2 /* Sora-JS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Sora-JS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sora_JSApp.swift; sourceTree = ""; }; - 1329D5C82D298198008AEDA2 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 1329D5CA2D298199008AEDA2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 1329D5DA2D29821B008AEDA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 133D7C1A2D2ADC430075467E /* URLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; - 133D7C1D2D2ADF110075467E /* MediaInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaInfoView.swift; sourceTree = ""; }; - 13AEE6182D2A75110096D953 /* Modules.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; - 13AEE61A2D2A78050096D953 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; - 13AEE61C2D2A78160096D953 /* JSController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; - 13AEE6242D2AB1730096D953 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; - 13AEE6262D2AB1990096D953 /* LibraryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryView.swift; sourceTree = ""; }; - 13AEE6282D2AB2070096D953 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; - 13AEE62C2D2ABCD30096D953 /* SettingsViewModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModule.swift; sourceTree = ""; }; + 133D7C6A2D2BE2500075467E /* Sora.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sora.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 133D7C6D2D2BE2500075467E /* SoraApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraApp.swift; sourceTree = ""; }; + 133D7C6F2D2BE2500075467E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 133D7C712D2BE2520075467E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 133D7C742D2BE2520075467E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 133D7C7C2D2BE2630075467E /* SearchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; + 133D7C7D2D2BE2630075467E /* HomeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; + 133D7C7E2D2BE2630075467E /* LibraryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibraryView.swift; sourceTree = ""; }; + 133D7C802D2BE2630075467E /* MediaInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaInfoView.swift; sourceTree = ""; }; + 133D7C822D2BE2630075467E /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + 133D7C842D2BE2630075467E /* SettingsViewModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModule.swift; sourceTree = ""; }; + 133D7C872D2BE2640075467E /* URLSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; + 133D7C892D2BE2640075467E /* Modules.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; + 133D7C8B2D2BE2640075467E /* JSController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1329D5C02D298198008AEDA2 /* Frameworks */ = { + 133D7C672D2BE2500075467E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 13AEE6232D2AAF160096D953 /* Kingfisher in Frameworks */, + 133D7C972D2BE2AF0075467E /* Kingfisher in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1329D5BA2D298198008AEDA2 = { + 133D7C612D2BE2500075467E = { isa = PBXGroup; children = ( - 1329D5C52D298198008AEDA2 /* Sora-JS */, - 1329D5C42D298198008AEDA2 /* Products */, + 133D7C6C2D2BE2500075467E /* Sora */, + 133D7C6B2D2BE2500075467E /* Products */, ); sourceTree = ""; }; - 1329D5C42D298198008AEDA2 /* Products */ = { + 133D7C6B2D2BE2500075467E /* Products */ = { isa = PBXGroup; children = ( - 1329D5C32D298198008AEDA2 /* Sora-JS.app */, + 133D7C6A2D2BE2500075467E /* Sora.app */, ); name = Products; sourceTree = ""; }; - 1329D5C52D298198008AEDA2 /* Sora-JS */ = { + 133D7C6C2D2BE2500075467E /* Sora */ = { isa = PBXGroup; children = ( - 133D7C182D2ADC300075467E /* Utils */, - 13AEE61E2D2AAD1E0096D953 /* Views */, - 1329D5DA2D29821B008AEDA2 /* Info.plist */, - 1329D5C62D298198008AEDA2 /* Sora_JSApp.swift */, - 1329D5C82D298198008AEDA2 /* ContentView.swift */, - 1329D5CA2D298199008AEDA2 /* Assets.xcassets */, - 1329D5CC2D298199008AEDA2 /* Preview Content */, + 133D7C852D2BE2640075467E /* Utils */, + 133D7C7B2D2BE2630075467E /* Views */, + 133D7C6D2D2BE2500075467E /* SoraApp.swift */, + 133D7C6F2D2BE2500075467E /* ContentView.swift */, + 133D7C712D2BE2520075467E /* Assets.xcassets */, + 133D7C732D2BE2520075467E /* Preview Content */, ); - path = "Sora-JS"; + path = Sora; sourceTree = ""; }; - 1329D5CC2D298199008AEDA2 /* Preview Content */ = { + 133D7C732D2BE2520075467E /* Preview Content */ = { isa = PBXGroup; children = ( - 1329D5CD2D298199008AEDA2 /* Preview Assets.xcassets */, + 133D7C742D2BE2520075467E /* Preview Assets.xcassets */, ); path = "Preview Content"; sourceTree = ""; }; - 133D7C182D2ADC300075467E /* Utils */ = { + 133D7C7B2D2BE2630075467E /* Views */ = { isa = PBXGroup; children = ( - 133D7C192D2ADC370075467E /* Extensions */, - 13AEE6202D2AAD390096D953 /* Modules */, - 13AEE61F2D2AAD2D0096D953 /* Loaders */, - ); - path = Utils; - sourceTree = ""; - }; - 133D7C192D2ADC370075467E /* Extensions */ = { - isa = PBXGroup; - children = ( - 133D7C1A2D2ADC430075467E /* URLSession.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 133D7C1C2D2ADF060075467E /* MediaInfoView */ = { - isa = PBXGroup; - children = ( - 133D7C1D2D2ADF110075467E /* MediaInfoView.swift */, - ); - path = MediaInfoView; - sourceTree = ""; - }; - 13AEE61E2D2AAD1E0096D953 /* Views */ = { - isa = PBXGroup; - children = ( - 133D7C1C2D2ADF060075467E /* MediaInfoView */, - 13AEE62A2D2ABCB40096D953 /* SettingsView */, - 13AEE6242D2AB1730096D953 /* HomeView.swift */, - 13AEE6262D2AB1990096D953 /* LibraryView.swift */, - 13AEE6282D2AB2070096D953 /* SearchView.swift */, + 133D7C812D2BE2630075467E /* SettingsView */, + 133D7C7F2D2BE2630075467E /* MediaInfoView */, + 133D7C7C2D2BE2630075467E /* SearchView.swift */, + 133D7C7D2D2BE2630075467E /* HomeView.swift */, + 133D7C7E2D2BE2630075467E /* LibraryView.swift */, ); path = Views; sourceTree = ""; }; - 13AEE61F2D2AAD2D0096D953 /* Loaders */ = { + 133D7C7F2D2BE2630075467E /* MediaInfoView */ = { isa = PBXGroup; children = ( - 13AEE61C2D2A78160096D953 /* JSController.swift */, + 133D7C802D2BE2630075467E /* MediaInfoView.swift */, ); - path = Loaders; + path = MediaInfoView; sourceTree = ""; }; - 13AEE6202D2AAD390096D953 /* Modules */ = { + 133D7C812D2BE2630075467E /* SettingsView */ = { isa = PBXGroup; children = ( - 13AEE6182D2A75110096D953 /* Modules.swift */, - ); - path = Modules; - sourceTree = ""; - }; - 13AEE62A2D2ABCB40096D953 /* SettingsView */ = { - isa = PBXGroup; - children = ( - 13AEE62B2D2ABCC10096D953 /* SubViews */, - 13AEE61A2D2A78050096D953 /* SettingsView.swift */, + 133D7C822D2BE2630075467E /* SettingsView.swift */, + 133D7C832D2BE2630075467E /* SubViews */, ); path = SettingsView; sourceTree = ""; }; - 13AEE62B2D2ABCC10096D953 /* SubViews */ = { + 133D7C832D2BE2630075467E /* SubViews */ = { isa = PBXGroup; children = ( - 13AEE62C2D2ABCD30096D953 /* SettingsViewModule.swift */, + 133D7C842D2BE2630075467E /* SettingsViewModule.swift */, ); path = SubViews; sourceTree = ""; }; + 133D7C852D2BE2640075467E /* Utils */ = { + isa = PBXGroup; + children = ( + 133D7C862D2BE2640075467E /* Extensions */, + 133D7C882D2BE2640075467E /* Modules */, + 133D7C8A2D2BE2640075467E /* Loaders */, + ); + path = Utils; + sourceTree = ""; + }; + 133D7C862D2BE2640075467E /* Extensions */ = { + isa = PBXGroup; + children = ( + 133D7C872D2BE2640075467E /* URLSession.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + 133D7C882D2BE2640075467E /* Modules */ = { + isa = PBXGroup; + children = ( + 133D7C892D2BE2640075467E /* Modules.swift */, + ); + path = Modules; + sourceTree = ""; + }; + 133D7C8A2D2BE2640075467E /* Loaders */ = { + isa = PBXGroup; + children = ( + 133D7C8B2D2BE2640075467E /* JSController.swift */, + ); + path = Loaders; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 1329D5C22D298198008AEDA2 /* Sora-JS */ = { + 133D7C692D2BE2500075467E /* Sora */ = { isa = PBXNativeTarget; - buildConfigurationList = 1329D5D12D298199008AEDA2 /* Build configuration list for PBXNativeTarget "Sora-JS" */; + buildConfigurationList = 133D7C782D2BE2520075467E /* Build configuration list for PBXNativeTarget "Sora" */; buildPhases = ( - 1329D5BF2D298198008AEDA2 /* Sources */, - 1329D5C02D298198008AEDA2 /* Frameworks */, - 1329D5C12D298198008AEDA2 /* Resources */, + 133D7C662D2BE2500075467E /* Sources */, + 133D7C672D2BE2500075467E /* Frameworks */, + 133D7C682D2BE2500075467E /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = "Sora-JS"; + name = Sora; packageProductDependencies = ( - 13AEE6222D2AAF160096D953 /* Kingfisher */, + 133D7C962D2BE2AF0075467E /* Kingfisher */, ); - productName = "Sora-JS"; - productReference = 1329D5C32D298198008AEDA2 /* Sora-JS.app */; + productName = Sora; + productReference = 133D7C6A2D2BE2500075467E /* Sora.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 1329D5BB2D298198008AEDA2 /* Project object */ = { + 133D7C622D2BE2500075467E /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1320; LastUpgradeCheck = 1320; TargetAttributes = { - 1329D5C22D298198008AEDA2 = { + 133D7C692D2BE2500075467E = { CreatedOnToolsVersion = 13.2.1; }; }; }; - buildConfigurationList = 1329D5BE2D298198008AEDA2 /* Build configuration list for PBXProject "Sora-JS" */; + buildConfigurationList = 133D7C652D2BE2500075467E /* Build configuration list for PBXProject "Sora" */; compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -208,54 +206,54 @@ en, Base, ); - mainGroup = 1329D5BA2D298198008AEDA2; + mainGroup = 133D7C612D2BE2500075467E; packageReferences = ( - 13AEE6212D2AAF160096D953 /* XCRemoteSwiftPackageReference "Kingfisher" */, + 133D7C952D2BE2AF0075467E /* XCRemoteSwiftPackageReference "Kingfisher" */, ); - productRefGroup = 1329D5C42D298198008AEDA2 /* Products */; + productRefGroup = 133D7C6B2D2BE2500075467E /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 1329D5C22D298198008AEDA2 /* Sora-JS */, + 133D7C692D2BE2500075467E /* Sora */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 1329D5C12D298198008AEDA2 /* Resources */ = { + 133D7C682D2BE2500075467E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1329D5CE2D298199008AEDA2 /* Preview Assets.xcassets in Resources */, - 1329D5CB2D298199008AEDA2 /* Assets.xcassets in Resources */, + 133D7C752D2BE2520075467E /* Preview Assets.xcassets in Resources */, + 133D7C722D2BE2520075467E /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 1329D5BF2D298198008AEDA2 /* Sources */ = { + 133D7C662D2BE2500075467E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 13AEE6272D2AB1990096D953 /* LibraryView.swift in Sources */, - 1329D5C92D298198008AEDA2 /* ContentView.swift in Sources */, - 133D7C1B2D2ADC430075467E /* URLSession.swift in Sources */, - 13AEE62D2D2ABCD30096D953 /* SettingsViewModule.swift in Sources */, - 13AEE61D2D2A78160096D953 /* JSController.swift in Sources */, - 13AEE6192D2A75110096D953 /* Modules.swift in Sources */, - 13AEE6292D2AB2070096D953 /* SearchView.swift in Sources */, - 13AEE6252D2AB1730096D953 /* HomeView.swift in Sources */, - 13AEE61B2D2A78050096D953 /* SettingsView.swift in Sources */, - 1329D5C72D298198008AEDA2 /* Sora_JSApp.swift in Sources */, - 133D7C1E2D2ADF110075467E /* MediaInfoView.swift in Sources */, + 133D7C902D2BE2640075467E /* SettingsView.swift in Sources */, + 133D7C932D2BE2640075467E /* Modules.swift in Sources */, + 133D7C702D2BE2500075467E /* ContentView.swift in Sources */, + 133D7C8F2D2BE2640075467E /* MediaInfoView.swift in Sources */, + 133D7C8D2D2BE2640075467E /* HomeView.swift in Sources */, + 133D7C8C2D2BE2640075467E /* SearchView.swift in Sources */, + 133D7C942D2BE2640075467E /* JSController.swift in Sources */, + 133D7C922D2BE2640075467E /* URLSession.swift in Sources */, + 133D7C912D2BE2640075467E /* SettingsViewModule.swift in Sources */, + 133D7C8E2D2BE2640075467E /* LibraryView.swift in Sources */, + 133D7C6E2D2BE2500075467E /* SoraApp.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1329D5CF2D298199008AEDA2 /* Debug */ = { + 133D7C762D2BE2520075467E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -316,7 +314,7 @@ }; name = Debug; }; - 1329D5D02D298199008AEDA2 /* Release */ = { + 133D7C772D2BE2520075467E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -371,19 +369,17 @@ }; name = Release; }; - 1329D5D22D298199008AEDA2 /* Debug */ = { + 133D7C792D2BE2520075467E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Sora-JS/Preview Content\""; + DEVELOPMENT_ASSET_PATHS = "\"Sora/Preview Content\""; DEVELOPMENT_TEAM = 399LMK6Q2Y; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Sora-JS/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = Sora; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -395,7 +391,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 0.2.0; - PRODUCT_BUNDLE_IDENTIFIER = "me.cranci.Sora-JS"; + PRODUCT_BUNDLE_IDENTIFIER = me.cranci.Sora; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -403,19 +399,17 @@ }; name = Debug; }; - 1329D5D32D298199008AEDA2 /* Release */ = { + 133D7C7A2D2BE2520075467E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Sora-JS/Preview Content\""; + DEVELOPMENT_ASSET_PATHS = "\"Sora/Preview Content\""; DEVELOPMENT_TEAM = 399LMK6Q2Y; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Sora-JS/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = Sora; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -427,7 +421,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 0.2.0; - PRODUCT_BUNDLE_IDENTIFIER = "me.cranci.Sora-JS"; + PRODUCT_BUNDLE_IDENTIFIER = me.cranci.Sora; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -438,20 +432,20 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1329D5BE2D298198008AEDA2 /* Build configuration list for PBXProject "Sora-JS" */ = { + 133D7C652D2BE2500075467E /* Build configuration list for PBXProject "Sora" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1329D5CF2D298199008AEDA2 /* Debug */, - 1329D5D02D298199008AEDA2 /* Release */, + 133D7C762D2BE2520075467E /* Debug */, + 133D7C772D2BE2520075467E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1329D5D12D298199008AEDA2 /* Build configuration list for PBXNativeTarget "Sora-JS" */ = { + 133D7C782D2BE2520075467E /* Build configuration list for PBXNativeTarget "Sora" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1329D5D22D298199008AEDA2 /* Debug */, - 1329D5D32D298199008AEDA2 /* Release */, + 133D7C792D2BE2520075467E /* Debug */, + 133D7C7A2D2BE2520075467E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -459,7 +453,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 13AEE6212D2AAF160096D953 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { + 133D7C952D2BE2AF0075467E /* XCRemoteSwiftPackageReference "Kingfisher" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/onevcat/Kingfisher.git"; requirement = { @@ -470,12 +464,12 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 13AEE6222D2AAF160096D953 /* Kingfisher */ = { + 133D7C962D2BE2AF0075467E /* Kingfisher */ = { isa = XCSwiftPackageProductDependency; - package = 13AEE6212D2AAF160096D953 /* XCRemoteSwiftPackageReference "Kingfisher" */; + package = 133D7C952D2BE2AF0075467E /* XCRemoteSwiftPackageReference "Kingfisher" */; productName = Kingfisher; }; /* End XCSwiftPackageProductDependency section */ }; - rootObject = 1329D5BB2D298198008AEDA2 /* Project object */; + rootObject = 133D7C622D2BE2500075467E /* Project object */; } diff --git a/Sora-JS.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sora.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Sora-JS.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Sora.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Sora.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Sora.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Sora.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from Sora-JS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to Sora.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json b/Sora/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from Sora-JS/Assets.xcassets/AccentColor.colorset/Contents.json rename to Sora/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/120-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/120-1.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/120-1.png rename to Sora/Assets.xcassets/AppIcon.appiconset/120-1.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/120.png b/Sora/Assets.xcassets/AppIcon.appiconset/120.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/120.png rename to Sora/Assets.xcassets/AppIcon.appiconset/120.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/152.png b/Sora/Assets.xcassets/AppIcon.appiconset/152.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/152.png rename to Sora/Assets.xcassets/AppIcon.appiconset/152.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/167.png b/Sora/Assets.xcassets/AppIcon.appiconset/167.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/167.png rename to Sora/Assets.xcassets/AppIcon.appiconset/167.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/180.png b/Sora/Assets.xcassets/AppIcon.appiconset/180.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/180.png rename to Sora/Assets.xcassets/AppIcon.appiconset/180.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/20.png b/Sora/Assets.xcassets/AppIcon.appiconset/20.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/20.png rename to Sora/Assets.xcassets/AppIcon.appiconset/20.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/29.png b/Sora/Assets.xcassets/AppIcon.appiconset/29.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/29.png rename to Sora/Assets.xcassets/AppIcon.appiconset/29.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/40-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/40-1.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/40-1.png rename to Sora/Assets.xcassets/AppIcon.appiconset/40-1.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/40-2.png b/Sora/Assets.xcassets/AppIcon.appiconset/40-2.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/40-2.png rename to Sora/Assets.xcassets/AppIcon.appiconset/40-2.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/40.png b/Sora/Assets.xcassets/AppIcon.appiconset/40.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/40.png rename to Sora/Assets.xcassets/AppIcon.appiconset/40.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/58-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/58-1.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/58-1.png rename to Sora/Assets.xcassets/AppIcon.appiconset/58-1.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/58.png b/Sora/Assets.xcassets/AppIcon.appiconset/58.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/58.png rename to Sora/Assets.xcassets/AppIcon.appiconset/58.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/60.png b/Sora/Assets.xcassets/AppIcon.appiconset/60.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/60.png rename to Sora/Assets.xcassets/AppIcon.appiconset/60.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/76.png b/Sora/Assets.xcassets/AppIcon.appiconset/76.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/76.png rename to Sora/Assets.xcassets/AppIcon.appiconset/76.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/80-1.png b/Sora/Assets.xcassets/AppIcon.appiconset/80-1.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/80-1.png rename to Sora/Assets.xcassets/AppIcon.appiconset/80-1.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/80.png b/Sora/Assets.xcassets/AppIcon.appiconset/80.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/80.png rename to Sora/Assets.xcassets/AppIcon.appiconset/80.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/87.png b/Sora/Assets.xcassets/AppIcon.appiconset/87.png similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/87.png rename to Sora/Assets.xcassets/AppIcon.appiconset/87.png diff --git a/Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sora/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Sora-JS/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Sora/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Sora-JS/Assets.xcassets/Contents.json b/Sora/Assets.xcassets/Contents.json similarity index 100% rename from Sora-JS/Assets.xcassets/Contents.json rename to Sora/Assets.xcassets/Contents.json diff --git a/Sora-JS/ContentView.swift b/Sora/ContentView.swift similarity index 93% rename from Sora-JS/ContentView.swift rename to Sora/ContentView.swift index 44db28f..01fca9c 100644 --- a/Sora-JS/ContentView.swift +++ b/Sora/ContentView.swift @@ -1,8 +1,8 @@ // // ContentView.swift -// Sora-JS +// Sora // -// Created by Francesco on 04/01/25. +// Created by Francesco on 06/01/25. // import SwiftUI diff --git a/Sora-JS/Preview Content/Preview Assets.xcassets/Contents.json b/Sora/Preview Content/Preview Assets.xcassets/Contents.json similarity index 100% rename from Sora-JS/Preview Content/Preview Assets.xcassets/Contents.json rename to Sora/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/Sora-JS/Sora_JSApp.swift b/Sora/SoraApp.swift similarity index 83% rename from Sora-JS/Sora_JSApp.swift rename to Sora/SoraApp.swift index 70245bd..d9adbf4 100644 --- a/Sora-JS/Sora_JSApp.swift +++ b/Sora/SoraApp.swift @@ -1,14 +1,14 @@ // -// Sora_JSApp.swift -// Sora-JS +// SoraApp.swift +// Sora // -// Created by Francesco on 04/01/25. +// Created by Francesco on 06/01/25. // import SwiftUI @main -struct Sora_JSApp: App { +struct SoraApp: App { @StateObject private var settings = Settings() @StateObject private var moduleManager = ModuleManager() diff --git a/Sora-JS/Utils/Extensions/URLSession.swift b/Sora/Utils/Extensions/URLSession.swift similarity index 100% rename from Sora-JS/Utils/Extensions/URLSession.swift rename to Sora/Utils/Extensions/URLSession.swift diff --git a/Sora-JS/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift similarity index 99% rename from Sora-JS/Utils/Loaders/JSController.swift rename to Sora/Utils/Loaders/JSController.swift index 92bd0f6..946d1ed 100644 --- a/Sora-JS/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -1,6 +1,6 @@ // // JSController.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/Sora-JS/Utils/Modules/Modules.swift b/Sora/Utils/Modules/Modules.swift similarity index 99% rename from Sora-JS/Utils/Modules/Modules.swift rename to Sora/Utils/Modules/Modules.swift index 22946c6..f33a1c0 100644 --- a/Sora-JS/Utils/Modules/Modules.swift +++ b/Sora/Utils/Modules/Modules.swift @@ -1,6 +1,6 @@ // // Modules.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/Sora-JS/Views/HomeView.swift b/Sora/Views/HomeView.swift similarity index 94% rename from Sora-JS/Views/HomeView.swift rename to Sora/Views/HomeView.swift index db6742f..72ecb7c 100644 --- a/Sora-JS/Views/HomeView.swift +++ b/Sora/Views/HomeView.swift @@ -1,6 +1,6 @@ // // HomeView.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/Sora-JS/Views/LibraryView.swift b/Sora/Views/LibraryView.swift similarity index 95% rename from Sora-JS/Views/LibraryView.swift rename to Sora/Views/LibraryView.swift index 1e6408d..11b7313 100644 --- a/Sora-JS/Views/LibraryView.swift +++ b/Sora/Views/LibraryView.swift @@ -1,6 +1,6 @@ // // LibraryView.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/Sora-JS/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift similarity index 99% rename from Sora-JS/Views/MediaInfoView/MediaInfoView.swift rename to Sora/Views/MediaInfoView/MediaInfoView.swift index fb74815..9f901ad 100644 --- a/Sora-JS/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -1,6 +1,6 @@ // // MediaInfoView.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // @@ -50,4 +50,4 @@ struct MediaInfoView: View { .navigationTitle("Media Info") .navigationBarTitleDisplayMode(.inline) } -} \ No newline at end of file +} diff --git a/Sora-JS/Views/SearchView.swift b/Sora/Views/SearchView.swift similarity index 99% rename from Sora-JS/Views/SearchView.swift rename to Sora/Views/SearchView.swift index 873fc75..7bef4ef 100644 --- a/Sora-JS/Views/SearchView.swift +++ b/Sora/Views/SearchView.swift @@ -1,6 +1,6 @@ // // SearchView.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/Sora-JS/Views/SettingsView/SettingsView.swift b/Sora/Views/SettingsView/SettingsView.swift similarity index 99% rename from Sora-JS/Views/SettingsView/SettingsView.swift rename to Sora/Views/SettingsView/SettingsView.swift index f882c4f..a3b059c 100644 --- a/Sora-JS/Views/SettingsView/SettingsView.swift +++ b/Sora/Views/SettingsView/SettingsView.swift @@ -1,6 +1,6 @@ // // SettingsView.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift b/Sora/Views/SettingsView/SubViews/SettingsViewModule.swift similarity index 99% rename from Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift rename to Sora/Views/SettingsView/SubViews/SettingsViewModule.swift index 4cce272..58f4eb3 100644 --- a/Sora-JS/Views/SettingsView/SubViews/SettingsViewModule.swift +++ b/Sora/Views/SettingsView/SubViews/SettingsViewModule.swift @@ -1,6 +1,6 @@ // // SettingsViewModule.swift -// Sora-JS +// Sora // // Created by Francesco on 05/01/25. // diff --git a/assets/Sora_banner.png b/assets/Sora_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..d99b8e7b9055c8a97cb5a5d019b6196f961c9d71 GIT binary patch literal 191704 zcmeFXXH?VK-Zl(~6zNewL}@1U&_s&Tn{<#)=+cFN^e$ZmL?HCukzPZP-g^`2gd!ll z_YQAn<~TEJow?VUXYTj;@UHjd1OFY?-aEg2?O(gDBuH8D1;L#MchJz#2xO!sRM61y zzM!FD#o=I}{u76fHGzh)nJOb8s^*HmIpvFn#z8EZUb24)!sZBI`9$^*HR;z^>Cb^k z6#CEMORS$G35uU1V$+|azdi9EEcx%=KT-Y%;QfOo|Hb?N7;mkgD`acq5L2G3!B76L?0p)n_ni0_)QNxC3U;-V{B{Am zpx+btf6Sskuk0U8{0B?^c0KujfA9YrCFm!3|K0oFk@znr|3AQ_%nJJ#QikStS%h89 z_v;YtA0)beu;gzS+yCzU(+~eZ;*ZhahVgGt{6~AA{pLDoX#e43{$o4-^Q`}1;y+mO zx6k_Dz5o4U{`Z*BIB&)MBIuxpS9n`IITa`T^+W!+ls`uQ!L9zm#DB2lZyWL7y?=Vk zA4vQ$`r9!6?TKH4{?8SSziLqbc6a*^CjNsZXn$9-`S0F8{Y~T-xvOcSHUup5>HeM8 zn&8bABeRLKD}%1SK4prUfgt|=`i~Lp~*j<^dPsXV2X-CaL7CkR$~k5{vyEtHxnB5mbi_Wjbwf>5YkAJ!_7x!!BHYP_u65~a zKDy`PKC^K(*!QA-F8^HcXrDtVbN%g3m7d%eO{dy%gFMq5y0;cvMmxf$#dK8tSMOu2 zYQYEbyuHF^5WCv-+Oe^vRLC_m6THv7&ET8L>5KKuH4B5I_xs~zH^Y`w>Q~@sV6B|_ zP4(jIe;p55WxIHT`Rf}IPTgnKKNLp+44nmT`n5dAk+VC;Q#Dj4ZyRfhK+|uIzRp%6 zZen7ff*EowwF5#ymboD6_aAp%s}>X6PJv0*s@yLE&Dwi}q@QlfAJjSyU+0@byk)2r zhG~y1tsGVlGS`TfVvD?xQ)Aams+m8s4km4XvqJG-+WzUFip12X(jOnp#&L+;4Uh%9 z$kzEYfjL&;ohyIuYlNdoW5SAXH0kW*QA79SU8@cqmCN2)13o$X9P`F)Cv$c1s!gR< zCVItHypS2{g(KiSgZs?^#5@!W<1FLlyphoLHF=^$|{F|mK} z;UgKL+L_loY`v2EPNV%FIXmtf|N2Ls@yXBON0M(mOz2DPt@F8Fr9Z-wQoT=>mik-I z_uWs6dwUgX=d)XlvaNFqnYFc|Sp$UP8{wd#U}?F0pc*Z=3{v{3h#vyywoJaLswBYT z_Fl1ak=o-a08vr-YO?8Bvhm>OD&zsHu#@LuNBP-k<_vQQG^UqzW88xG4+A*U`~GFt zM@}imFAc?=&;<{6w#Jo(1(a1TpKPCRmQars2~`w}F6co)=>f{{aJYp2q^vWzH%n0e|)nK~F|0Rk1W!bu(p@Mf$9 zm~LGU$|(J9EPBfbt^gS2&hUXLA1O16!U3{qMemE>E(?N5nv4qq{b=%;Uw-2bl+Ar7 z3kL-Fy=Ic5je1h8yMNYyOn0@nI6OBC^){+{ZsO)tQT-$QcQ`uYl+Av>H3Nd2Fn*gV zr>Ub0cD9BClu;K~49BtFyZieeN-cXI09mQ>bAYlmaD{yfT(D-Kln+2jA1>Amu%a!~ zAYK;?${2cG^AQ`?RsS7?t@&v-9QHv!LkRk%i;eMn!m^UMca1 zJ}(fwsL54G8tw6~sbW5{YNa5rwD)$Zo6r=s!e!<5(b%7mWEl#Ey;dfmQB$#CDP*lH z(`HLd72v<#+S+~*7G^MGtv_S)(%{|i9{3U0^!MQ86l;F6aURin-F`J6W{`BVcM!5O zZD2E%34uoeaf0ddnCTP*VT{b^@RpvQ7<+AA^29H>hG~U;A`j7h7I=w6@8M(beI-o5g z;)BXJE>DMg?iS!mTGp?;jWL+pdJC<(XwS?{pZ>yd}WLv4$gov?kPvJoCLqnlVel@f12FyTUcJ;R$R<$Z)veCgd<+c zHu)0E3Pg$27lh3)ktkz879tjcEOJsV)fg!WcTzN4lGPWE*E6<9ibm^ebk-HYo4B;- zAPDZ1>^(_X21q(8BcBEDBz6f#&Ch?fw6*Pjyl#)7U5yB%Pk;WK~sYa4AL6MDFm}Fna7re5#)_%n2wbByv=AkJl zKn0T+BAv3TM@7CaBUYlzaK23;4G*{jx<^8EwBCB}t1L}aDZ_Np)jF5H@E3JkYTXg= z2nY{ElTI_`ercAQlMwI)@WtyTW6D9>Bzv#DmRI6@ zK^>4CCfr;iCSMH<#`NgZZvxem@A9jq!Y4Hy`N-+ErMH0tziMk>#R|6%5zQn}feZ#@H%B?Z<>VxF%@;;el8j(wT)3!MG@7pluIXS%h&kCf*- zKRw)4g#{gSZN|p)bFBA-Whp*f+`b9Co0X1}cPYY!;qLo9_B=CYV!Y$HS z3t6X2DrfVnG*X}Q73dTQ;^1U};6WN0MPDTnNY~P}9iu(u-Wpe3G%6{2Z?CTMR@HjQ z5z72ew>uuMP`h{+<%RQ`o9s!cUI%Zz9rQ{nvw=8b1whS<`;1Yy@-{-O_C^-k+vP&6 zLW~tN3u#_{e{JsH#`{5IzwP#II=GUeqe@HBsJ55gQO7!-$3h{7n5b9~B1ppmrZJLF zI^}9SiAqD)jpMeLmqSD5h*~+>yT7~FpCe<@N=-m*w;yHA{^cfnO0w55%I)TNM{0_R zNie49W}^!RwY06sdC7Sfs!`U&^2AJ(XYVvZ@qrDpa2QeJd9K?kp0R-kUy{}8gp~-{j%!il6z`h%~)D6~;&7E3%J(-d%u-ck+##f1Uj0ObXi;s5|-2X}Rpmpy6R|9o?P z-Zcl?Nm~vL7cvCPiprHOM~Lt%z4fZPh=`25IXXPVOWc|<9pc#=wf^18KWCHxzm1La z7WdQE6>{&T&F0i+!rq_5f@D9qR7zu5+>U@~TP>}%SL|(~Oe81crE_ci;EyTmX<8X> z@iK@fJYPB;mlzI!()zlyexOyC{zit`9nGFjpa6%#!`KDgmv@G8>49pG;WUu+@A~x( z=L^l01-wLTqKs)W5E(pm*6t}-v?P0^M|T)C^-U8ht2|0ZRZYup8Vd!Tzn95B=M)@E z@yPvp6rLB&SB(eXn;kZ4tnQMMM#K9@MX&%`8_M%*?N35h$Wig2`%scDtytPqk`xL< z5U0aBJ>s)w4W{U+1Ow`9y;_XJ#4T9Rzr_Fr@~txJpOMSJTw*CLAMB;TN)Er|iakyX z1Z+crk-m5ic6=icsYgW7Js+r?A zT{RH0Mh^`&vW?djS}YP8Vk!%I;IALx1O%bVxFFD1Sg)lwb*UoqnU! znvI|q2vg-7j||Frpb`b??TLv?!--orcJAj6ot=$u9J2^T7EUJr@?zz2 zFFa0muJR5JA`#r$D9=F$Y()#1^&WjGb9LJ*3nk|v6Ju1IAmdgWce=$abi@EVmVp3gyT?LhZY!?NWuc)AGM;WzvT$?-csee; zDO%5n?Zig+aiQ0`8G^Dld1Kt&{grmo!&>L{{cqhtZP$iXnGj?Vk0~x(k8C3$E4o;Z zEGrsLpg?uZTcknuzTR{QqRGIpJyTIkSP+7TEV?+^BHEsHurq3W=3xlko*5raKlVU| zIz@|QNPHc8oGt?~FykGT6?rPQVK=W|UwJ;#T!3x+FaXm6BiiC6?&t@N^pn`>fqh}! z#_L<142_k@*?yI=ww=7cJhh#%p0G3DW!^zW15MnoJkt9OiJuB9?VmKb zZ6xxfXeYH1a;F*CP!G$(Z_DJaFM1ojDk|oo46@%E85(e2Ja^(PK3eT^-Z+1XYv*pQ z7tz05#^7KP+eUg6Cy~eyOU14>rA!wV=M6Z_BG6ZN4=K5~)z`Lna;;bC?go>-YFy5Eoc@z0#Dflh1^KIi4O=dvw)dO@@; z?80XaQ-ODl3Sj{l-`7yF+j{nn9oRkolyS&X;VnOeDjcr4A_dVR8;5P(GA_?~i#^tB z7L7Y!?C6@OfBFRHe+UGDaV#S5MUNOmq){;z0$7i5&7wJctqDj7K+M*PWJLeyuFKhi zeL!ry)=o-AQcqWJEPT7duJ#z8jQ1e2U_X(8#{|Lz;wfY@wqoP@qZsr2Xw(Gnv2AF0 zU4K{gs9MkP6F~xtvXm8^WMnOMfT`0q-j}DR-u(Pmhc+kYW|4@XKhFB6c71Qj!$z-h zXW_DB+I#l}`=D@xa1sKhzh#{3hl%1oN~jWPJKNyUa2&mDEG?IdIYkdaMJrPKmG=3i zgU#$4`-Q`i&|_f|Cy>^7PO9G6u33o z7@-^h7=w_-dITY>l9Ov)gk5&3y*ekWi|eNum}H2-dGu4#GE*)}4ZtFXXk`tdij#PM z_J`9fIDuk!L21yeJRTL6s@SD*=UP-zn^K~t_O`DDv;2vHo`(Oar<0OK{>Z&5?hWzw z+_^U3_t^b5uk6P9B8W#CPSuE(qVIV!=3<@P;Q`41aH>)X;>J}L(@EQSt#>e8VWYb< z^fIMpb|uxxQR3l_^q9t?UQoWQ4;&N(LlM0_1J&yD3ptC6Q)ixNRIo1Px4mT#(Wy!@ z_~P~4W!vo{rnkN|pCzI#dS2N=BodW%?-#X2l1m!RAB~z53RSv%Mll&0NDu-SZUF#I zMc=a8pWHhB?tPB=yAi`d7 z#dI#-2gzC$QHF%sdUlQ-ghb*HTZp#BW`V;o8P7k#ouBuI5}(sG&$Nw~S746qr$&<{sa}hZ?r^Tg~yjb3OGJHZus;vC(q0DT%}^ zQgApsD7N}r&zIMCT{KFH-Y$MCD7YXENApUBx>~FzSnM5_pS3t2G$yB99uA@S!K3sv z+&_%h6#t_&`j~xNsA2A=;Ns-^+#j17x#J78pbQej02gk4X>fhJm#jlQ!}lo~<2KMh zkyA`Qmwzpk6uieQ z`tfyw6eJDRN8O%!f$SD={k|<&(is2TrTz?Y^u1J;hHg~tZV@o*ltUK2KS6QywcdT{ zd!&bfmY#;T1&xni!HzZ4I_p`V*+uJThMSGhsfF1q1@*1_|Xb^eVshrkSx`W1`I$A z!K2IdD}STmvcY>IbFR1p2mB@4bIL6Y z#}~pL&c{{Ta~IoJ*LhBXCPQREOWFu#zE3L)NQ6+Cow4uJeUOrN{`+sT$|J4)a;Qii zR;qSueWKLp@Q}Jw+({B(@NS4q=8gp>1RiYxLRHeY5$tsfW6-Ld)#rYgqBfzng3uRp;KkFXr%I2XPGHkS>(4Ls9;Uy6Ff5rQxdA5Y^a~i0{;(2 zOf|x7l5F3qM!QSDv>k!*iK|Q_5-4(%(0ylWW};6-w&ow*@b}B2ncJ9wrDp z`(DNH^-jj^dxb~m%?z5ULVP+~GHFLCSr#D3hp~jL(FVlK+t;;MHwKNza;f zi~hP>9gl}AC?Zkv)9K2|_Vrpt#mbls2~^w^7fh43i6U|?wqBl#+#2h_ZP>3bwD@1b zAwk2D`nAi|zr^KAN;KxyjtBJ4rSqs>4_f)shQ3s{lM$Gu!o0EnRyhH+EUd|oS z{p`BS?pO3G9&GEX9*xx}&U$LPFF`?wC=e4|y~l08dh6Ic?9pdLwe1Txr^k}r6nyEGho(7kd?9j&=WC5~i(VlT)STb-J0+6T> z7UuOsl3j2o{xet(aL-fykTWxSM15o?{ z$$%8s$@S*hp?U48jWg-Fl12zivO z(*h`YhIk5e?7{#(;&^V@?|ISIjYWtE!EV!HbC(f)2xb z5i?^`a1mU2f&S*?DuYwq{<1tnGy%q<;t3_|IHB8qan8 z%_+ml&W%6zN#n&r1}+(j^^;0iwT8C4SbJ`aIfQ)kk@XDs(|zP=T-3jCUMX}_7^{ES zH>~(6!bwsvs%<=Gh(|_8%s;EB6SzHdunaC~*hW>524ig+TqwvA1dWV3r72=?pxAU< z{H}_fiu5SJ&|HlBfbgM7SJPp%W$z7pn0ooOyPG}v;nlI(xJE|w@2sigPgVSM-Er!O zU6AiW69uhrZ|~=^%5Fad5Ep`5SXn|&HrH^FtTR4=8Sr+3Nsea3IHtY3%=TPM`1~br z@$IccPJ{Ol85Ztv1kJsT^=tpSGlZtT(+1)I4;s0&_sC#hpMCfyma>m#I*)zxYOL7` zJ2onu5xsDW4lX)HFIoUO?zVln_4aV}6kAcz+qkN>metJvkGlM4M4jBvN^h!McCHg^ zUBYyLqDUY*Bxt0E4OQD}tMsREK)ysnEcc**ds>=B!;uY#eqr^SYl+UaKYB_ZEp8~u zL`#Iwr$eXc5xdb;lnW3N;KWHY>Wbko41 z76}N6je&Aco7yV_#kp=%q1wq=?U+f!-@m*0bBEJdB6doN3aCU6mz&cw{=L?QCx98*%Vx{t7y z(@oZrpWDnFqjGCa@YiOnse4W75p`qDq%P1hOZeW~du3qGb@zMbdqEjibqNS= zRAmdVt>?)AFO+qJH0Wd)mJhrQ;uG3G?0>syIw%}Fyr=<*Qih>*Fj^+MdU8ZcO=0vd zph(z-+ZI7dW>1DGvtw=6i1|zqEsvhhc zg66!pcF}$Rtl29eGzG2b={jZy_lC;R6i?RSpS+We@;9?p;HqE#xw8XMpGT!;w`N zwW{%`zR{k2htX2zDT-SV&l<4!W5AcG`|5qIi~j5mSWZNT^}~C@hkN}x-uqpuFT*X) z(nRHCrh>n=*o?2F9tDM+B_HgSwW6b&0w@^sq~HoD2|8Q@B{2orYJuP)ccFC!&{uku z`W}x<>X!Sfl2a$CfvBW!IfOX{)K$MHCUZ|6V|$DRyAg3RwtoFO2opk=D^+YF2$D%h z6$E{x^)KJ-*eaD=?GFu68VpG1{7!KH+~&e3_P1hVZ??CS8y%gGr)zkI=rC~uRczW$ zc4ql`3V~nW8qzHa7Li?bg*2Qk>bnXdi!_{mkunWBA*iP6NEwC*pi}WWakh|v+;h9< zdf5Fb1N03C1nK6TaHKE3d?r0zorrYtTt3*Ic6v)FEuitZ5=95!sJ{#%^RqxN!kg9i zI{!ZGVH+uwvdFlX!kovZa0|tv>*`ruVwP@%_|KXnhf@Wg)yN;;`)eN|dJJ`Yt9P^P ze{plZJ!3md9rHmdEdy|835e2Nh^*^Nan8Pnnot!Xv~WK;+stlu>K`v06es8Ggwue5 z4cl-6i(Hr6C>{=n`6*|B>EJS`o1mHznSVVz1cSjPEi44o(xn>|TeCD4f_xa^fuQ38 zWL5pS`>boPj;&SozRs~Y;mvDNOm(7YWPv7;kdy0*r<6$U3jnl4(L!vhTuRPf_^f?q zNC{Q-QW+RZYP;I(}yDG1xW zo|3|x659w|xd;k7UwvWCgMM3dVM7invGJPJUpAObI@j;3atb~(b4YPpB+5rXY8laA zrIA40Nv3QlBLK=MBkTFd0u(mDErSP=1(C1V%yg3*?42jp-_U@7)#u(rnI308F6p-e zDryWGJ=aD@bqWAV@@&KO5Lh85n52mL*xpwAEvhF%-OY7$W~P#@%Zh;e&R<4Eq|n|? z>B+beOxHZ&=Bi#vLd+;Lw;cx3p&I5G-Y0Aj{^chVs8@njyqim$b04D|89ZzGmGlR` z6D!LaIwiAMsprlv1(3Hwn$I6mpkBJ(Njig1lCQ;|KcC}$_VB(aU_x?(0+9vh#CkR*o1`A8qDLS$&>2~aH~|Hk3}rWvh7$vkGsNY@bG_V$ndn#bX8p{mly7vhc-#Rj4yr{iq4AmQTZg> zBVkMX@-`;oqv_*HFtm5cs>VJ#RKcF!B_w2<^;TCoG2Ui%DQtO>3;eOafS?3XH~Z=h zg(KhCdhsK#EqV~tV|hc6F}-bRIV3|O_m#EF>l}79;5kyP~jFX+7t56uwcATT;9f|P-)jE z>Luex?D+3eAK<@rp$(ubo*>0B{`4iUTn87ePre)smSBueMU(#*CVpH$ zv1zGSLS%O)tQk~QokU(-v{p+Aeq+5f#D6LP*((!Txm$hzc_iPvwFOQ+*$!tthns5N z$6TMsBLZ00Qdr%M(pEK1bd-T+%VhVsq@wfC)pRP=Ma$jk(NT!R`f~zHn{s<|eB#T9 zZx550(E2wi7bAmm`vkP*DEgJht`DmW8_VsS)=@e?eSB+x64!}l$eel&Tw09 zRp{1f&r_&PS?&9oWNh>AC#-H{LOR%K@>jt z6Cx~I%wFkp7nRrFW8by%uDd@6O$s%iKyXBxz?RV_=0S>kF9&V1QlN3N;|0rari zv1t2963>cd06fwyXgG=0^NRlRo#AgXi!VRwxH0G0Kc<8zm!+maf$L&oSiqTKNqOBi z{nFcP#%!4+I?vq~0Xolx9(IRIXo^|dC~E^8HjVQ+t5^H9x!>8&)tm9f7iV5FL0`l{AT?`%#~LH2aEU=N|p;1r;c$D3Rhea zC@oPNy{iyO+w29cjd37YnR2!mcWp1;@>;v*QEG$nM+&_k2SG!+_SqOP0a>Xk70y!$i9vg*Y^cHV(=|f#Tt`^La^<{-1jyCGaSe0?~lM zJ5jU|Hs#OVYsMG2+MSVThzJ%=s3YG(&r`j|<|74bJQ*~p^%%*{n29o5%QQM&-6zQS zjd=10#Z{Y$vNOI(1#HF?O*lF&G^OFR{-vV3vU-gp8&`SROYA4>nj8AJVoY=v25@N4 z>ADA0Fs$WpVKcIy?YEJMOoEg0ERpl+2!+z51FvfSxgWB&Sg!^U(2#*8=cgXRYt{o4 zQs1ti&tdp-2wHJJd{Uluo~E={17aEN-zUlKcr|%fK4$p}!st~9Y}M5L&(jC& zDylhhY|@iW0gHZ2i|rJxv-|bDrKzf{Pq}h^qSvkO)bJH9H}F(ogxgOX1$Pm*FR1pm zC`PO2u4IQ#mNi2VUDPl*;pv5l>F%K3B-5uH;_?~wB3L($FM-O?mC~1s>RWjolzBBT z)yGwj@@x{cvYqfVNL&D&gw#}vpN%(OOP{H-Tqg;(7bg&YPOE$C#)evC$7ag zH?d`R@Y&LzGqM8_xV=!tNoX2 zUdfctctt&lWE!_wU4M#j;d|&SiWiaF&N#AgzS1+K{EPz`ze34Y^)L<}_hT)$qTLt0 zhP#d=;MIZeqO#*E=k3kAs{YLk7gt6339=Ht@x;rx0>WUM2UEsf-&z$^#f4W;XVe{F z;h#%IGSCn6tjQ-*TPE}~gP*6`9B8eJ4-V+zNZo%kIY5YuE=5C{d~Q~z?jI2P(bPAL z?5UVGnc+teIzolyq)&N9w_&qo9Eu@1D72FU|<$N<mIGjD`V zc-qX0Q=~ZdE>90+od%##I+V@Z+&@_xnR@ z_s5Xfv+j?6Tv{O2nsh)WTyPa=t!ueio*x~dF`6aYwTiWWXdLL3gC`-OU~9n(X4syu*bP4Ca8d{By4BABi+)R%;JwBWbXZ>VJ|7H8BD4< zy_gp1t)32v5ygP!A&|QiSQ$hj;F!R41`P>3FD)``Ga4>9$Gsx-nD#cB^HN(Z4ngKe zyj&ER*g4q7!@+lUOhWs8<69VM5mD1c7)?Apt>{Vu z%P*+SETspeFn-8BX+l5r90yQ?Vk5$nd6NDAXLyoEvBg4Xda;I(SHk)n8kd4Ngb8Ohip zrSxseZiHcR2XV~kQ*~yR{)d(3514qnRV|+Ky0f$u;sm2%ZtE*K>Y5e1!Ax#p$-UOe zA&6z$m?A(p$H_N^H{sBx)!O1e<4MLmz-1@K;2jI?%kGmSc%H+_Jd9rB1d2i9=nI75 zBhXQ-MQc2D=fvBR!!>*SX5G5k74{W z9-BpIY|%FuKPWM4j)vGbV9UCsWPfB)*EKvpgC^*16P69ru@PDT^YCMW@|eOYKo<>u z)A)l=xXx~erRXDpQmiIuZ&>7oq8Pd#Pks%?bhvGXd9OaDCI$5D4CGSBfip8YF*z~T zL0?ke?AqcOjHyRK@4Lpu+gV&!C}2GOC=;_b9(n$UdKuSm1LkS{9kj7oF`|JId z;zSy4_W-~*LtShIo60!TfTN*T7&z=aQgD){=}TBs71<~W#FM5DO3L!FI*;|Kxiklt z@qt+DQQuMwRsaD2%gm|*9M?jvt$nsLrleQI{1;{UqHyVw$kz6ztNHq?bl3fW+h~AE z){v8N&$Q0qUEN$?ok=Y8mPs^orHjcEyX(Rxn$jj|A4RoTP`94Yy8!oUNI6zKRSSSj zYpFCt;&cktYWjpWX<>}i>sbUZNTmb^?Q6NwmB&#MlHE6{wWfI&>Ihrp!g{2DwodrL zP{7PXQ?t0Ntb0}{W3$s_HG$J<4oqP}X_($|+axYdlXAAJZip*z49C;cBBwX%QR-0{ z*oa|5Aumt~A1ih1$lJ{FOLG2(y85TB_iq?*(8Nu3dfJmJpcflPU(M+w@t_{hs)(L$ z-Gx?+A-wpK9R{~!262+YO~Xa{%4jmJ$&){hkiVlX1Rfb`C&?Cmc%aCD_3HH);2jwj ziaPXY$-nsC-pFm5)+SYzqtD$aa(0I-1Ac1A{XvJ<)J{El68Xu{$jF!J>9YND`@0bE zUGlvSZ9vxq{k(7ue4jd1sQ#t;zqg&9de&+0J|`~kOi!Nq4jIj4o0!l}N~1x|p6>N~ zrR3!`VcbXsnvh}5zPrUH@STBb_{|6C+K+p%GQGpkhB3-$N69hvkRD)xpA88I7A+o$ z&2w?`4zzGn-+tD%Kmq_aA4^yy!;jWr{2X9+4rQt2glU!p1DrS7gi;2v=B(fGvBMg= z@r@LLpa>1|=odrWj=@BPxP~){zcB5)&4KgaiJzv9zRkqI$DRP#Cngf~7o9_56r~{a z`{Y%sF*a&zEKXNv`ZvQ@&8Vb*6-Do3BKD;pFyegc^X3z%&LVc=@la0nSDurqtw4m} z@G_PDV6}M#@xtmhy|HoxYgyPb<*1&v zs|6>_{*X)y=QC9;u#4uC@zri zhJP=tE#r?TaT^>2u05O)sfmgk)y-nPFLuhcWjxJO8D3+$U)*6vfJptX&{hV{^E$7Z zy!?uLuzlKUd+$FMY4IVD^7?Ev_BFp~3P;(^WVSv)DJqePozuVOfN>}~eos0jOCV6! znE?Ie4=H>{mRojolVn<5K1~xea@?xcYz^rfyc5&*h$(AYTxB~VHcY=y>^QzmAro4< zHq|k1)keMY@(c9n7_HMH4Iw<56KE<`<>k#|&a#y1=h4l(a`m$%gjgPVQ!-4Cikbnm zb)oH_M9_e_n^Gvng$NG4O`fn^-F@1y30nD_Gwc9;t_bO;iYklq!<1HjYfUST2t5Z# zxe8h`o-fG1(gT(qj~#X$8ZmJ`#Sq2v*8&#aAuI2lca!4(EO5Shu`G1DpRsNstkC zbv-58wiXslhTx!-I+|N(eizIQ)t%y`KBoj8U{dR*FyWrXu+yg0r3DhNQPHjpGM+tm1 zr3#<>t#?Yx@_5PKg9cToBW3ha>jS!Y>QOCzA51U6_A7k_M1UvKctdZ0Cl8k)e6 zuso08A4d@J_FwTM@i(ak45bZ?h-D4YYH)+8gnPaw7>SKdG&FuI&uyPw zMS4gRk|c`5B?%8~cMRz-1AcmG2O3JOW31vasPHWgCwrkbmX9tT@ARBU z#DVfYTClm|$^ij&DhH>Jn!sh(H?>RQ-h!Lf^K(&I2@U#RlZk}#Z_i)e7|5Apo{kNz zrq0f~&pFtwqxCLJf3>ToQw2;x%UnIw1 z-qVYbfb>{`K4;_mFiI!!HKRF9k~uvIU76$E2c9Wclc**Il8HT`DdX_-#F#WCL8)>c z&cce6JiJa`{*;uPn?{dm+gLNr;z~H1b%n6dyIj*d@E<0G_VwC=%#QmYNQ8OG(&eV( zx#JVPfwT1E{&%wP(gop9EZC41_%y`j9B5nH8t z%Ur(cz8&$I+tzQ&k*~XtXV>Oj-KV=&$aSbum~j!4m1J(9g_HI}KDvt@WW70w6%%wf zF@t8hmZnTmRiGs#P9+4>ol2#=x2eszVw3G3&vQYS9i z@_U)#EeP}x7s$YPe_+?KWpTW03Xn2?c)FBs8YYRbFopv@3Gp-Bz2G z+}LoraVaikSZw~*rY}@p<-`&Jn)J-pycsqh^vWK;kQ-S2_gXvQXL`{|cziQ9Gjo9? zV?yVl!IYw-?0a$H`K40??b}{A2@=+X7XC!`?WIwQr><4OkIjWfQEwM_&_sxr5i3mn zIe`PDdz}(Z=EPoz{yql`>g!t^5=VeB-2Foa)!0N$cY!fPe8|KMzOxBtM#cdWY_qe9 zjq$$1xm9hf*QTBp&(c(JgPDxTUtqhu*oZ^7HtsnZ&TDh-twiM}%J_bHKQfhwxV64Y zyE5=AjNMf|+7`TLUoQLq2JSw5Slx*tLZDaeS^m(<|Jv(n&|1Dz92 z7MhY*TDjC378vCQA8wi=VOyBe6nMCCJMsZE zd64?kIu!wlu=AO#!1Y2<|F$<>jz-05<7zmE~PzwA6W`2wx$HfOvtWI%z z?2u~9|r#M!1FVi$A+!#E@N?kjd%iX{tRFy?E0~nMT z6~X0T3g*>G3MvcaFLj$AB~c8@e^%mFoj=+M2WNH5 zXW7u?ieo}Pfss&!Fovn=j(CJ5^I~>PDacEZh|>qNr0O!BQ`Lo`od>ohzGhp$bIpEo zF<~YJ_>Ii{xhi!o-`3blMXA}?E(mNMF`Op05V<$ZdtgDTqTIkHnn$&YKvMreA(t5Q z)P)fySlUJYY$cnVw4O;vZaLN%Y?!0KIfAi?td1A2JAg}y&WJcFPz^0Wr)xi5K+!EJ zDHOEJ`jBp@=tWYUJH6?70N1e!>-Q*lbv9*UgS~>s#m5dc3|e&NR`Aky-YAOLc8n)j zG|eMgy4GKk+%ipH5r#7Mmo#gAy&|58Pv`6LnYSnoB#h$nOrP_p&leWFuUnkI;!)ok zMd*9?YYGz%J~MrceTwvFhqpFd{K?4ZP4mzF?-?GaKV7+)qR-4+iY@~hiNw6Yl0kd7 zoza~e^Ip0%1(g~}dQn%$AJL}_j0hQ##j=ZRqhnvL>Cqhk2S)sG=?eR1rrr%$#AWFn zA%*syKk#oT2wpOciOprk^3u?ZQ_Qo%x)&bIx_z7OsjC-0KD4ER!Sr>=qUxZw@nE{l4C?C-)0xzbUUmV zKg&jqyl>A0}Y;@FrC(IP{C z;1TUkS3vaXS29ckBffZ8Kkk2b8;S;4Z&a5wV`Ayo{3ZgJr)1>3bsvpYWCG)sp4Z)~ zeJ!eNfe6Y7(R)_`+~j5ac6#yn>)YZj7J1x+rkDQQdL?8b?mMvd{* zwIkkw_0gJQBM9&oE6KJ7Z?-Sk!$Nq9X9anwJS;HDy^|=9^@go#B@qz~P#cKpaeWUQ zV%qMtrU0mknF*G$p&DgWl9U`NjmiyX{MZZsL>v+uqmcKpz3;s!Qw_GWDDj*-`^3mo zCxro4b~j7L?8LiHTcWAiv@%(3hCT$!>Jt^_kpyhL8u4QB-`Aoz6ZXwuHUz!6Jvued zm)l!KA$&NduzR}K=b;M4dgIwF4cQ#;qx7)@@m>PNXgc!)NXgX?%Hmv7Lt{LCy+CX(`V$O+Y5) zbs2Vu=zWu+BNDNshoez?2DFO=P(I@{bd0(ciMv^jAAD5a&_Ftmm(c7oRA%riq`BY9ZE`xl}XgE6FU=lLNH0$itqK8ycU{%6`Ae_ zNk}+q%ab4)YxgHDz)e)=BqqSYq_8Ib<~hhf-B=Ac5J(jr65Gc2(U!}Mic?%Wp&+z? zXlQEbWX~CMbg{@iAe0H3_sOSAtZAV)_W_z3PeW6HZ(e@BlV;&48S#7vNe160Xv`<$t_y1w*EW_IFmbD)&g#yKjw`gz=G`PDJiWQfVpuwTI z6=|^o!QF~WaV;*zDemr2+zJ$UbIv~dI{P}$`)Pg8`cG!&zJD`IX=(14GO6!&>Oy3U z9c|BS_Tu-WVQO-oOgp>!Soo9s;o;Nff*0`Onhrqu-|A~KQ^FE5GOP5}>(W%Z%BQcJ`@w?*yx z427U{9T#M?FVSmd{Stw-Jl*=M1e1Lgtnr&YdaLT(%o%&8i^lEtDYczX4KQ{CiH)G( ztyc_NLX2NguB^-?9KNCgr_iBbdM0AzA~mN3^NRq08NSN}PeAYVu-r~vVtL|gdK^Tv zDq2JX<>pV<&eya6NB1o|9Kv}J@7sgLq!Oq13yXZG{N1Jx{j*DWD6pZn(x0%I?j3TY5pZaIHJ3W$F_BLr!s2y3?ROff$4%i3lrFGr<%;n(^# z^)S4oOE$KC&GifY;a|g~HgVzK%KB$6xK0Oc`J%pk zcRC!b7T{|5JDl7{6O7VtA-*L;zF~Otf1GAJWR~kFt^kINIXnR^xYLeK6>6EG0$(OY|+VCseg| zPungmT+KiPv6I=9gF@gPMUiyuB&FP#zdw8(_`qM2@L=(wZ(-P81*q8Uh6_ab^3|>b zW{{rO0PfSngrk$A(+^DKmr!*7eAYdCc)-@W@^#|+Wy-mwFPbKrC`-aG`b{`{?5p75I(I96a}I^d3BP7bq3_q+C|7{v+PzZ zMMMEm$O3oke_FJWMdqYy7MQ&)sD64$C>uqN-m%+Ol*IW_o_OE3%5eHlp}h@PddhpR zg)}kEapso%v&8RSDJw(W$I0gv+}-%Kr<%B@v~2D42TGzaFeARYM6K>)P&t;P7v0*yRB& zlXLBahBrv?KP#yJc3A!$###SLS9o47^xH-xV2$oCcvWOiEjK z){YuyLP8(YX-z58`=u_B(gSsye5fVMyqJ*p4|k4uNhI%el}-&$le`YHyI&vJlAa9v zec>=2J&>KJ9vdqGZp+WraK{eNFEV8&EDPfeo9;;!NYEv~@}di*4cd$EEH-auQH=k3 zsI7HOG2f>&IB#Q+m=sef=-t;HsBwOmIy1|$ccrVJYbT-A#prGSY&Xwwhmm+b>BjUH zoEAb4Q22d(K9u!qJx8NU?vCPpi|ym(mvS6ehO%mbn8)(T!l%m#=kC~l_q_i;k-9@C zL>|3^@b6Vii~r%uvC?QZNQ6J~*{7ejZG~fqe$-z)8Lx4`eTa12o%PRuhc)#LdgY8z zUM%-=2T9hnl9Z$;{#RE;j*clWv2#emAKw9>39jsvqv0MsM~~JNQ?ZwckVMVNP5V`* z5rxkbsyeQVrRb3(MkFX~Kxu$fFQb%IC>V)$Fb%gzpjBNr%DZH^9a+5R=kcb1a^K=0byku0amab zDA|@8>y2lh_+@DxY7r|Q-@r#;X!!O(z!k!u*gj8 zOY3o7{#E%fOhkN(LkL*efw`zXvWa)mW3Er30nux;{h_V~K*~YWHl++`9u*m~m<=`j zL^Npi9WUV`N}0^jTh^&=FhVeAI5jOv9@R;6H82$LPEHXH0`(DHU(YQ~^g$L4RMILq z!a+gy#n-{#a*MT-3Rtq(O(W4i0jry0=Xo7!;TH9(kn(p@KyDiD?ShpL*XDhxi}LtV zF}P&Rn(u%SqR4PC`F-^fVf_6dO3Utgf=$~&em}&x75*__4y-Z+81d<(YMx%{O;lVq zepPB|S+ovcWYitHEw;EbolLjA$g{iOa@FWeZB2C{$F2Id!R<~<3^0$3Q4fV7i@Y$+ zjW(o0_i4LF9U3PI*s7*d@w8Dw#RmrNI>?fPOcMhuqa^2QIf6Pz#FQL*KagGP>3^_` zVtvODDh+p*LxqlEd;qQL_Z9pW)$)5DJC?9DyRxR4rQAL*B(xpXly&Q3UI7b^;9Hn3 zxto2Pb(`Nwqx_0ZY3Lu)Q7l68F81M}9SN&SO)4Nn#dV?j7p@}>mx2uJ6Yx`yK%+=G zJfPpTHI-L@F|Ol#O>kc|^Fjp~3+_q@9dCb0^KwfKOA3Bi3izcNnyG<8*GD#rbICzX zPj(!uw(h8KIB+5?dy zW^VwFK<~=N5ncSHw7XF6fOIA&%XXGN->4QAIPH(oK%#Cp1=kV{?lz}wT7%diTF7!1C^Zmb5XKHDZg>ltqMi3nyXOg?eKg*8G zNJ^_Zbk1&n`+tJ7#?ngL)oW4+m=t@Pv#^*bU11s(KcnBL*?yfLc4=dDb84()Zq0JP z@J_gJBpwMRB9L+gf60OC=;sMt{Q*z9>1)9CH@985o%X)Z;@fY~tRX?^Rk5r^9(_0C zq2u{dWFDKWQ4zK|3cF=nJ z$GgkvlJoN7q<`nIf1k))HvS+HaB1-3#pA$H`LhL`?CQ5cktiOGJ1zHRhx~igX6)uD zbe1#kAAa9^{GqMmaLwA|{5si^=2SB~;Z@p(f|9Fn^`!-bZa!k4VBP{I$Bsr64n7-* zvXZDI!`Q31)+@{aI=6%omY)4L+O+RlVhQut{-D8HfQdF6pc-w&;P^I2pu*e6;Z~Sse zR>|>3V~k1>)ie(|OzxnS;5fEaG=X^VG8)3kK!Ujxr@9A=vn7MSe&XuaC%I%QmD<_o z7Yig^kl~*Bs(QyvRA20;-{iN6Rx(X!j3zc8Ig!gCTn)!5Dq}*x)g0)2m8?3l9HZeb z32F>?OX=qEr-sS0>aQ%hNO1H`DT{}ylj#W|g65jjAhVkKoo(76FF{z=4^(&7x`wnw}^6+$2S!YF%#^8mmhbI?eSkFXHi|qVe1|&XjVnHFN6tnC9k{ zaU6KEuJ^sfQf&H7O_y_KJbKB~!Zb&ptX$(2$-CIr(Cz zROH7Kh%NY#qe;yH1@zhJ&C+^Q=2w{lBW|&R^owYMat`YAbysL4jBrWG2?KaOHF;Ah z0yzDA#5O-w?}v$j1d;^ebiEH($={(ha$z;d{?7LKHCMF6&+*uq>fdkms2+p-rnCW* zp$QB+iTgKtMrXxtKs2vbeoGzg`R^r50A+w&*Dyx5{rv^UOQz1Hxv4_2AuB^@m7g@{ zqr(S3SXUBd2cX)n(OCOwrg&0Z{MB0r+XGo6(I5Ys0XXjc4{Vr31H1~RdU7!^Kq{D1 zy;SLgpK#TteAKdXB>KtFzkCuc6_OYg^A6q39N*WZ!ItPS;$Yh3^pBZw)*mRI#nmJ= z&tAji`*>05y0;mOLR$=NjH^}mm6+Q<4B4Hg&X*_0w(d7kkYB%uR|KZj5F z6qep5M-=z;^HnA_A?DvK-dfl*hV_9sjB6qJ=S*K66fBzobk)tOb>oHtd5zjob|uuL z=q7s{D z5uo$tw4YWD7VgnCt?az}d-3CMNyiV(A7gT?ZFpJfr^Uqv%@MTSQSpyKnuU*Bj#&HG zBw?}t)P|0);#EH3P-nh<3@a~>R_!BiwT9SZOF*Khd`z+uw5H(rKVP8JW5ctAhveJC z@@ca_c#tiJh{hq8#gzq?PM4YKpyL0bg!hz2RG5Bqo_b6^vr4N_kne=ye#r|1r?2Nu zL;@DKbLv}lA9{v|2ZL#R^GF>k39`Yt0939imd?$su!RSiz9?peIVoV}8VEvKQ%;wv zjxHK5d6tf153jE2zEYK=KRQY}`^rhA^|FLzLqB5k5D=flRbXC}{U$+xkK;ECGOT04 z#0%yJV^JswwT&f21>6Sc>Y+)e8tBCHZ*9b~Tw|uulYnJoFuc!p;<>>jux8c75R1cS zZtmZp!jkhb-y_#d&2S>%RzX3{_3-Sj(G)`b$YM8D$M7E^Eu}es$pw|nm>|q{UzJ-^}SqP z05CJ_yp)K-89Bm}cEtMdy|nb{=KMhG{PmZ1g@1a4H?ADyYmfC0N%fF+OFqOmz1%J- zz`Tg=*|P7k@>auEJvPUWqAbyTw!ag1CCTl~6c__VE3q0>bP)8ym8DcAh z0v8gX%YOQfz4$y*YN;NRzA|!%0&Jg?AU~KFFOSvH0J4zi(oO#%EhPSUlnYfM_d|;t zu^PUvs8}_181ueQh1907asb)Cu2AIUJ|>Xj;kH**G>!K|=XixvGKMS2Q&cBYeJ6uR za0pR-l-+3(n9jfKNPX^A)tK_F63NP$fNX?T_nkfKsK>%<+jlTI_ zAWCEV2UYfn8i#H3JN0gaW5WryJnpxKk-RwtAROhQn8rPYjD`WhZEP}qj`%E%6!T2X zxwA{iF1fc1(F<4FRAv+v`p_3&rM$f=9=kh#lh0?eTU49O(jBut7MU#zw#{ViV1%=)?iXc z?f1np>jO*{;-23di>v#AlY!UKtweQ*oPN-c?_`^oZKO_vMR?d$LrTDa<(+o%h@Ms} z?8shik&y$>&66Ixq`9q1(8z?6@5sYHD*?8Q^u`LV=G`DSx_T3i+51{I8H$VExFu8q zv%(^m`&WZ1i}m^k{F`CGAXc@TbYQJ{i_}(nzRYNe*Ds|6J8lJ8ABjeVH)JDS=t6CI zxD)&e?-@a!oMP`@9uwHh?pVApcvsy?ga3(cN{fmwBiq~xO#w#nP5G|TfLYtdAboz` z+`;61g|ooUS^#9SUSWH*Xc!8(E}xDOsNemnN_y@Rn=IL{^0j32cUtT4M+?-&0-iK- zY1;yINwfs+FULy8&~{Zz@TS2z4DiXog=vj0r#gEPU~Qj>Y~Za-0d>i#E@9I$xQAiS z2z}p0Xm+_6e3txV?&6rMwK95PjW#AGCoySS(|jOlqTQRKDdrpA8Q_;Solwmk4G*77 zVhD(PRf!D?WwUHOCFE)gj;OGC^|QcS!pHg`T1|jY5v(_t+40m?eb@fI;BEmqYAc03d{>mYUinh#FBl%?yn=U$+`n z>&g~)kF)S+LHU%Fln#caX%;?q=3ci8t`l41MV?pZP=O-6>!0_V2fv$N$j6Oql@2Y; zrE0NU*|h$>`!ioS1KM=85j{GpD=qD=ODKU|`9|Yv=DS$xBz^X@JGzXE&N4P27x6N4 z^KrC;!LBZq(28fX-hTWJ+7_A5)pr)|i;8zFI9OjYvRVGB7r(jsVS$%cL2$SneL+-(LuG6C49Ss!3n&1D z<5E}6T;pByM!7O34MidV#W3{!pcilM8)Ci!V$GTqYcr-*_)4uqL8Wa;-XI@Db59aG z^-3f6k0K$ItIr+K3D?_n{)&$Y?ss{Jt|q`l7Bhinia5dRt{+q{drNfHE_1jNgQH|n zX?W%J1ynCCRxTgW2o7x}~7eiViF z&cTPZ2cOdiiWkV*U3udxxStak{H$U|p97{C0BwIy2fj9>#!90foo6X7QD_{{{+?A( z`@Jpk2G7et_}=8t;Gd{NYg^mHkciFM?@<2F2HsSv&Rlh$%^L)7ysU-n)JqP77Ym%) z-@mcLW?`VdvN)i~DYACfF10HI!7byh77g*L|iInXdIa z7?7uKd>WQ-f4En}b05txZa(eM9~o`BALaMvVxz8o_FbVo4Q;`WZTxrkb4zs07}mv! zjk6fORo&+UrTh$_wMt*GDEc994aV2@}oY;t*KD(WZ@(oKsdQ~xDF?izc zIol9BhbJtgj@avs+lZsWXmwz3D)i(0`v`<9-9_=w+E1uRnF-ak)&Q(?I|B@k%&%sR z>EM3yawg|Xnn`GE>$DX69wZHCzAmcOJ;18|GZ?R?(i#`b-Phr#^njgsDX`l_e4!S2dB#RW=nhZ>H`W_L`Km~SN{-wqApx~nSS-^SXw zJ#VKo*!ZuF+qS;{@M30s_IYIVvG%=U*nX|5Qcz$)lq4Zp-uV~KKHyh}Q_xpTA7#pK z@$oK+Q}yNX9jcSp2SU3$ZTCp#m{CpSb}MDFl=`v%=gQ3`QMAb4wKz4gswHuswH)k` zJ!jd)ul%B(3D+HQ${q*fwx+wj=jd0CK{nhZE}`zb~^szEaDuNP^| z6@T&nnVHK!%Ptl;?r|7>*#qo8DQREJNXAwh|LV+az z-@KB7_*&&~-R1H~FaNbtgla}4$Uv|XWznz*ljjqWew`1a^I2t*dy7mbK)tWwE4Eej zk1f9}KefUc!MbC~tj>Ts;_3mJ5& zSiBc8ptqoJ`|wt8iGBdjWNp3>iLSI!zD^qMO8%f)H={GeFz*upt6DJ0lnX{Ye zyOZ*n%Ih@e*@=n1v2%?YmEPdz?<^-fAa9o=WKE|-^_|5?sBoV-^!W7B0 zuyEa(18E?Snp@5*8T`OIoWxpHONJrbb{oYL5s2tr;H3%V$pF9m#K*7POHpm9m-rkE zNU-v`uoE;fdQp%Zmt*K#h$Fe+`mGm7y_3eVYQB1?J0vRSeU6Ngr(M)ElBUqrTb~lr zrVA@!wEPVo*aNrLRx+G`x!~`Tm}I`lLJ&>cwb;K6s+A-T&c#2nA~tHN3g= zAus@TMo-#H$J^^WT;DT{j~_8OzcS`mtH((?T8Rm6-}W6DYUjK!xobBvdNA+K$=|Sb z=i;Of`&Xa*R_i|)&H9x0ozIvi{he$#Q}$mfprV^%18mN!R??o%eHIBu@OqVZ7)?CB zM2pBP0o+9x%nc^S+4_{w-WM9+@+R^b>}BHp1k~r06cNSA8F)`yr5gKq-dp-z-HrMA z_;457!>Np$s}0_N3&w3ML8$H?Q$6oCynV*!jg7r+Q<Y@6YGH(Ss?IJ-Px+GrT>&7Zu4AqnPVwQW;0xH-v2kAXo)q;njBU zRICM*H2f>|j{UPa=3mNDf>aYhSliJI{^#Ufupr1Y#~H5(NtVrh>zVlFR-ORM66?LA zc%TYG8IoRLul$zVhIuhhi$Zu(!1?0Klq$RH8tM;xmsEOtB}{`NVBTO!B#k7D9gCqQ zWDwM^0q!DaTFCf81E+s+iM%Df=SYArPL!>WYd)2U)^$nsq)ZGxiT-SX^2cU zJHOuk=`n#95$INP+)tN0s?E+kUQQ4?s7>&D{m*6p2LkmadpM}+ffT~u?!YHS_!`@c z{*S~+!%Z;;jnk_ZX05YdXpd|6b4kkI!k56F3(F=&n*jVZ4Ww|A*rA8Uz!C^Uc-KMp+@LIzkFb(K!QBlx9Z5n1H?Hm#*EBi zCUr!XIkhT!3bG$)*+8+pEIgiU{535}*e;arKD2ofswHM-vT9H|%sja3lfs%%h6Al8dq z8iN=bAK4Kj5krd-(Zpz|(w|+ylURwNhsqE3$Q4nf8Yu54$p-f^uGoF_WbWKKe!C$Y7LMLn$^vSEN?E}mpzy0>P;eDJdm&z_n;mV9a><8pwa_!gwvQ}D|2%7 z?Ivw>VC)Qw3L8{r(oSD+>*I=8r-_pskpJR|aj{=IxsePxX)4?e)zXuK>zeI9*X% z+XFCugG|G-Kh9L`vGQEwR32Vv(_66`-y^ku7zN_BzCRdgWX9Ei4CllnyLcJTcoBlz zL=w?N7`t^&eY`+tufD6YWPrOpOAp5dsa!V^&SbEP>P~y zvMnk`=DpD-XC+!LluHf@5_!_^v-CSSvtV8aaJRn4qYj zV+Y7a<)Yd~t||L!IXKBx8HvG3q|{5kFR#nc@Y1Gcm91MZ~TX)?Et3D zA7m%_c)XlZ2S*8D4?_QCas2&HAWESok3@-q_W=#LmBDD%1%Io_p)G_ENZa$;EHa;y zBj~P4Y_h~sV;qXEnC=+roXoulVR^@-F=6|@$>WXhe!{@m<3XLt?Nr~@$h!*?MaBKn zNEb)|I`UuExEV26E3GsjNa;LUTFQ2_?7r&mJL~SV>+W~&?)S4n{CbYQw6qjkk9@I4 z{ZnDl?*5z9Ws#<>fh&==y&%%1V~^%Qn{(ab>R7};E+xD^DyHh&jZPGK2Vo;7rYTNW zxz#}4e=$T-reBLN;d3O(bT8<7!fNJT4y(J;pw?tBN*8E?j(&TItgpp%OCM2Jx=Yxn zs3?ZjW0=#%0D|H4a8N=!TdTz;Het;#I|C)pLN>HWsfT*+@PTf-A2|atLP4n+tS6ubseUQo zSw%AT#{8GF~b1>rvDm9B>3Nb3@d3YL%3?~SVLX8WnFF4)ic9BV&68EbxIiWRzj?{WDP+cjr-;rCG}l*zL|o zq~cXh9s<^>j1783$ ztQH0~VajTG5@moFQ&CU zPqwZGcAX0est^QHj7rb*N}b^j?R&YEb-(G_wDwHmfcorIf^#2)5VjI-&&#}Mw9IiK zj|z?a)~nXJJTomvQ>s=1mz1S|;$UePD2%ax?9*^sz#(jmY?tt?AIigk)zP}WNoCG* zsSmLzO$@OgjgOxBV)wPSrFgl-iCnw6Wl(t4L8`K)kgK)7j&ch}O7?9num6vto{u}5 zME+GdpFpq6FEmOXe{OHD*8Er+PS_Z4$xKLDPWuNqA;7{y?onj@*cuh(koq|c09F@FL#yXh`tE*8#QlSnl^&a%X$YWf&-1JbD z$y6!ouMfoUBZU3WcOCw2{N$J09Dput{f>{b=(~) zBYd?GQdk@M(y?AXugnVwtfoOpSpjR`ZgIt6$Nu~1khPJ7gSg+fQfi# z1+7U^J7m`h!Vg4Yb;-SdhNNogskhzW2NaT%UccTeZ4D#+jM&pVite0}LAIeXc5}^} zy=iDrEYzG{FW3BVhC;+W(ael=$Qw!EYHA?g%+j&5(bB8iM^Ru*>80a|7&O&uNKe5Q z8`%($`gz@Q=S4PDjq|G2^`@jS)wnc835!zk#OC}32m-n6C2jJ`XqFw#V>*pC@Ktxp?jZRR4d0P05miOx644<*N{(-}6}Nc<~34cXU4-YB@ z#rJ7GRb?&z&GSEA`0i)nZ~J{-JpH*wg2sgKmbnxG9y6DyV%z}K)AP3T+40j+`$NOy z@#+Jzy-5@QxHG(Ouh@!lDkc3Yf&Z&h=x<~Y-`}obXBt}Hh^y7aF}+U!HU^?+=99y} z^$zmiFjDT%5aPkMiO}q~i|s$cY@8xulVeZM%2SVvZOd>r+yuj&vDEcsKqKyDaY%X` zNtVxVl|A^vU;M1MHi+s|p}f8+Vs-wQmO%Ini9XkEseG4DJJKmW_b6*v`Lv82(pJ^x z$v_Y)suZwum<1u{Z^#+$-q>0EDx9Tf0Qz!qX)<_;BI$HOma5vRUaKt?e{ z5sgz4S%)my2u;u+h9O9&a*CHMCs5m9;4ko;QK7)XHz_XqF;`XWPxY%^Nzo#X?gBWo>4 zw5?PPsQZc*o%9{RvZlI6zMUmYIPG^uKyXOo1DrXc@6ss4W|Es8fHE=g+Kayc+l<-r zAk|pyS>ELt*X`Kj#GgX{t3hloqt+^(5}SkO5=44NOXkZH&`Y%MFL7a;n=w(EqN0Em7DV9IYb7%}^(Kx*n=bF{i}8_l zkc`n}{iT-zUsOpjB2Y35eh|JMQ*e95sHDPpaK&z4@vBcRpfZICV8}SYtguAfdo=L3 z+po&yW#~eQ#J9G67(G_N&v=toaq8#d-x)i@a5Uh|YztZ)jIQe>A2;@=f?Wx%3d1=m0N4- z38r0-ouG+cIo*o#IhD#Z9Q@1$Zu`LBD2oLuZglWb!~3?-VK@vswv&&cjr%!3bj#h; zTaGWkGo(w*REqO0;H_U(h5=FVwgD*%MS?Oa(tp-{Ii%~r8cjeJ{4HH^05Y$oC} zXNdqTaM1pCshCcRw+P}8?PC2ME*j%CcLNDdt1jfHlq`GmV#X;WrnQ7DC*X3fo zAXc6KZi>Nzs_ajjSRo}-lg87bnWk?W4pH=eVWH~Uj0wWZ# z-y;WwvsuoH9+a#sl|S{Xo&253YCIpJZeOa^3j;;skcByVM^Law>Mf89xF0Y56uXXX zUw8Op+rGKjcC;?fIk%^(fa+tb1Nf>oAwVApXt<}_4cfi<6ZPW>Benec6eiM36ki!z z>)|>4v>{rE^HMQj7u&~_JCjunA%CuA-y=f1wE;C#?z-`kWuQdgv9cUwWeDhyxX}Rv zSb4*?-EdH+WU+;|F=~I&9Wn;)+UB@U!W0=2OqvYpG~rrsnRgUQrt0q8{px`d@>R)$ z2YRA$5=G#E=rHJfd@D++ZDJs*e>j?dvXrdB=eqYy?P=mT>mi|=>qlc(N8_me}CaUcHFN%sTj>70?x${&G7vu|tgaUy#yl=<#C!(g z4l@lIuR1hP19u^WT1z%Ji0VI>K{d6)0vv|acn!LtP{8Pi&QTYX}c-}jSK zny#N2%#;old;%KV-Y!ig>Bq&nNLql!ND3__`CX%lH5RMLKD< z_6&K>n7ZjNVGM)-^Wn~(?kCQjm;5Ir0P0F&fnHs_HN zJNEcdNL-wqXi+ozS&_3@XL-E+m+Xt!@nn9^!~FMxBELU{lA$zjKX2#+IhnTo`V-P; zpjQW{B!vDU3hI2~dF59irOWWFWPptR&{eU8eJz<{`m1YprFcTO{4>6X zB_?@)m5}Bd(0=gFtH_YA7J)G+7H4<~Nog@v_~1U&B)gWLSR!?< zUiBBoqd-r)_LKd>wq5VG!;?S4k282aYxA9^00kjNGne$HQJ!rBfH^JNR@H#mk39?e zlSh3j6J#!s+`Lvl2s3oe-2Y^{e7(Xe{djGtt3)PI&A|=sV_wJ6%Umlymkh~a>B7g1 z#Anr^?EZxj^wvI#wldr`V(XluzEfR~7&J9>U_e|_mZ{hHyqR=xu@l=U5$6v0(89I8 zRI*%h?kCj`c4vKS(^7T@mH6QPo~x~EyHuqRF}Nz$7K8IEc~;*)XWgsdO$==s`gfh_ z6LOrVKc3~0+u?dEzZ4JK-?CjaPo-}=ZD#IH%m4YW5mok1tb7$Q3qx?)B`!cPus z67dy&=0h!lmXN?qv`gU*u@N1y&J)+ zP^#ZGXYeAuYwvGd3>xq_zr4@<8%uqg;ooiYgcLich=zuS5E@F@Cfn0*UwO5&>_eWPp`2^}*hC zUZM||-(Mq>>fCLfxUZeJrHN@}Rk^!Mo*h1_izYvZ1Q|Do8>-2$5E&%{OasC7CzWd% zu_WV)Wq^_i{RM>cfQ0nej-pp`Nx_o61nl*@Mj}c^#+E`EVt0Gp;@9TlckWL{{)^_( zq6^wdv6pFYi{iD_gPXk|^*r_3VL(>3ist33b!^W|{gwORG$Vdt0eTuN_R8G`Gcj}5 zPxA_WQgbxe^RPNHbCmu7mH)DzwNw&*<`QE?c3jB9I$%Rg2C3NgA;P&%wIH z;7v)1u!{p_EDy+P&1;93$OJwRGqt^6pa100c!}JYc&Ht601X$PwE{|SfV+jy1L z$HSYO$CZqXOvU7CP>3q->dbBvRVauX^ELJB?A05Wlie!pt+EfGi+a3#Zyh&O8MlIR z9epjxtiU^2Frb0MZM)BF+xhD0?^&z(C6kHAV}5zF$*}x899LbCT0hUBSq_bAmV)WO8=Av^`Pi6EBUrTU|qF|ms{@mq8M$<@nQ z(eu-8H>1LMfTD@CNdEochgfnfN-!q+8jJmT=LMC?=ra?z{P&$8E*6ehCT7JsKyM#7 zP3R1cj?{snNN6>H^phb_vQLj{;Ao^LvM_fKACgrX)55kw*2$hn)MlUAiiv_*$-y@i zqRpHVjND3B@-QPatBC_m57;=s05p4JGw&uzISnnYCH~N?^Cl+8ZyYXNV(imJ?I#B$ zt9WjLzqb`+h?acIwMKGc!%}utILNiSR-R1*pE)TPkCgnYX75EGI^UZ#{ z8O?L=HU6*V>WKFYhTh>GDgU%FGt;d~AI$FFZ4)!{%*)3+D^S7|ot^I^N~M#M$OHPA z*zz`MBX1QRB@`ZmDCM=&AH_@v3y%X!g`vbDo^@YN*glH-+wA&37AJ8zyzRI9o|KxH zUIRMjM1$05hCpekM{HFfL&R*N4KrxUevSj>p74?A?*eJOLHxT@ilueb`e&V5rM_AF z-tFTWA!mVx~^e-#Ez&CMFx2_T7y z*(KD0?Y9fLD*FLZ0Etoh^ZvZ|7kl|Xo*0mRp3i_MXr4ssVj6~@>|M&B>MkImGjIGk zjXj7PRaz%=(EN7RgkzyeLwBQ~!Xq}POaN_zpZ=W86sto4C^>JUf*G@qOibm-f`F1% zBY~$rT;L_4scDYHKudBc`vQ_Xi+#JJ7t6E8a-?(Ql*-V}z4sN}1r9Ilfp$$(8u~<) zzuu0dNy5kgocbJdNMeuiKTgD#rl2Dv<*qN>u8=`VeSlZ5i3(W#N(f#~_iq26yT$wu zWtK$lrvt4=qxB<_13!5cO@PIXNe<{nBNi7il?4!z1@#bY+IOVNbN*?vB)^0*v+6tE zHx54|vw2^*V8bw0XMm7o+O1q9yOwV?`8&M+boGqu@$x(T_iGjJy5{kjmN$b3x5p%e zPl6zhG25HX#Gg73zxRDCI_QTUJBt6V5q49NCW@3r=^Zu6sunPT`Sh?lR11_8 zQtK~S7s=3p28w(s&0rGUn0Fxw!FFVCaBN=ar^KF#H#b7>qtA+ZCLx;zm=)W2MyQ`0J;%DaF>k{%LZCwrs$zkF# z?tUQc;B9cT+Wj4Mbv#@#Gs0OBh(qJlMGh75=BNDFV1&*R zNrM)1Rwk|K98}X!6ZAEacurQFV(~-b;07bX4mHbm&@2rlvL8`kzO`U4a6l9*x&h(u z5QDsI13-4D9?8b2GeJHpSH8g~+pdpJ+ZA+@grxi*8<6|34_35tUFB=Q z?rrxPwZ{LbNREw_fJNWhy}j=pRu*5+DZ1iv1y_=Pq5gfLfZOc$av4Stoi6A*xO#4u zn1pg{%0V6!Q#G9@v}`qydRX`Yv?97JkZqS;F~7WPDdzVFX`uFf_p#W$>oZ0WKp;|I zgok?-AYD@B)^=gfDO~LLm~?#n`gsp;gDn4UHNUr66^GUp)Ollt!Rrd%)+eYE0@kY8 zo|6S)921gd8bz|qCqfNhNG=vFj)JO-<7%`AR11=lEsTYKfeu|L7t&9$-RzC#mmgzR#&ort!s=kbOrHsyWhx2THIam%W=MZI_Cy=9e~ZK_g`{ z2S-L2RWmU+*&6TXTQul)}~|HVrDuY5P|goRJ$H{|hG%>ll&YiJf}DGQUaYs(*V z5k*&g>C0!o&jAfZ^ZygHL{HRT<{oUl^ z>HMDap-tTPXnOWWgDzjI5C7Og3}~gY*lc2*zw5U_Z+RgIzb+ zB~`1VSS}0z2~%^k@(U^FVTbz(q7UbFmj{`g$F?!a(1YL+RgI+Yh)Bum*yAZ9My!6p zEOGy1hr6`LyYG+Qcg0LCM4Vy*5xBlk+PNEoL&Iswj5Q24svkTz)Xu#NGK7OV{U-j z`uP)YeS~+vZr97CWRyr;sRW(_VO(C(c>4k3TC05Wc%CD(txjTD7I>oXM!vZH6?0d|vvBYpt8~fx zm)%ei${P66b-TpaBcu2=9yoYA8aS{N%XSNtMv)S?b9|} zbJP%>vvkc0MzrmmB!XlQ^Z)Pnu)d5ph#BBwcYopl_kn}oV)D#ZGN%=?w)snxR}Z33 zaM+Qk)QkT`q4Jf{PA!+-s6POn+bL)jF51*#C^k|CdN;iMNpBgbxiM&Q#pGwd`Sf5; zY2smK4z@dLYLj>8pf=}yqq?KAY6(m~y8q0zb>h!0UUlHt+Z6bWc(P295i77NR^k^$ znlXj|Wtrc0ccNnHm7m|H#H0?JFXwRyPh29~=RuFuI^k)XBPWZc1J~6S&1$`Ur@8Y} zaL|^J)5pD_;?Wl(WqKtZj`NG=p~RSh*#n3r3+-Y|60ArR;V?LmIE`pU;8#-p1Zn*$ zeByH3&Q6uj9!c~=Fk_-jbw=cx>GRXj?*<7rF$HrnTBga2X*Zy}1Jd+t!E zAZH`3=XL#$R)cfCXydC(ua$chF^`qah?sOdnm_S?I=Eu&cEEMS__TVTI~bjAY6ds_10EK^P?*sS{aZV}`i zjo!9J>A-?|o2dpbAX{LE18D?7_0H(f>!l%Q_o#Pg0sw&L4AUUTf#SfCSnGwx>d{Ai zuT&e{e7;7Bx&l6}lSr@Ke)_A?me+B3MQWP_qa`{Qf85T^T5hbP{~udl{nrHFwmoWs z3_(y@fs2jqMjDYW>698EFj_$ARvJc2DcvnKN$Hf57$Gg)4coity|4Sep7(RVKkX0L zc6`tCIFB$JyEW_9Qx+oiN?Lpdoin#Ou}Hp5Vpe+hjwWEtRD|1>WHeg7<$c7=^6%gA zNw`tTOXTyMSQX7SZQ|#};)vl;C3JK_m=?$jCsc}St!1Bt_5Rwrq0 z?rd)6*tgjcH&gP;vn*I$**&x*uheB5Ik~KU?)lEXp?-u8K)2JO`_RV$>jTU=#kQ7=}Ou2_7(9iZ4&p(6q(+riVEpWSg$P5 z0`cjdM@+f!EflXu#*JO|d4yheKRMATHjibEO(aRwWs75d8sA>qB&X?w*vFtHNy=Ky zX`7WhLcJNyPuq;Q~t zVJwL*4g5Ro=V}?=my=>DrP}CVAcamv>6;?29I(zLf=>7+8<8t8A8HFr>WGhb^(qc6 zauPZ@C@RuNOT|^OOp7osZnw*r0*AH#XPwl4U*kUIxEsha!et$iWy)o?ajr5i_2sR1 z(TSx;LN_UZ@wA}V%xQLz9>Uk#@7r97dRv87xVabBvX5#r=@_tUe0MjPm-}DlVV4Ol zzO3aBE=L;9&RGM7^cL&{FkFdaQ%vqFulq}r3CqOPOwn(njs87%Vx1QLC-paj9wpx}BaZii2Zf7wF8{`Zq?J<-&mj6V_TE^;JfI!jS$ldSn=ct z{^*x3b8P}EP0|B(!dY;FjHajdAX7x;jFtm#MG0AA%0^`G89NsTax=u%xAc%W>zI+< z|KQzoJrG;f<=fimx&+*mj#*i-NyLwoT}D6qmr`B@HydT!=QxfrC32+l_%NmLgMdci z{E61h%(7B%^li@dEgIF1xsubMjF1>^XM=Bnx52|9kp>ynBgaQNV&imivcxRmpSO4m znpA5PD<fhSVL4j)A0}GAXm@Cp7g?^9qQm@Af=VkX*vlxwoFf~RT^Tq#!)=|&3)_0w`Fdl0|Q+uAE!geiNU^JmIC(X z<*H||?1nJIxB$juh6xgwCxR7(s!@Ec+g7B6;aZ(~4^hxKL*rUCNB`LFE}_L~@3a<& z7NAZOGa1REl8bH#IPbsrqJMv4SS9th7{?jTQ^Ksj@4t)@$#h&sA^?Z4n`I(tY zp$S4i<@)G>#{tO8MsupLjLJ${rzoH`Mb)t7w_H9H+&g)ul0$W`(Y`gv?Z4W4fNCmD z;x{L0%;6=Ml@_WnjnbCLd3N>j`DpuT!kq*$RGN#X&>XTibGE?T-0rziVpnAjm!3RVSi0IlA{8yCEi_A2Hd*?GX zqrkO6hAvpRjiS7hYRET6MmNWFw~Oc_sk_U7KQEVc8Z25)aSD12R|~IQ{Y(zp_y+~V zKD^_lYs)uzWqHU3P4H#ZcaKw}>Ed(ED zke$fk^EFft$RTnyVQ99!f(HE%EBxjyCsshGY{Cw#@`rA)qg`u@W$ajoq+qBj;uU1X)od|asti! z2Yvh|KnyZ@P3_IOn9aub`t^Th%QkIk^O;T-1XwwoHa@4tC+L7zKc*aI^1qGOUFq3V znN#l;(%m2qi2q238~-jtn{NY9jRh$>H>qf(w@^u|eBOt6l8`{uv^?`G8+9qwbli^a zRN-!GVSEjl12lTwM&ku?V)6C<)R0`q(vzNzFRN}}eE-rhBBIWL$c$0bN?yRLK-Qrau)`YKfCa&&k!81QQg@8TF^Aehy z6LmN!uo?hu3NeibDABz~*P-{MZZ%L1%NIW|tnl!a|46024nH!SNVtb8=1exMywy+m5_S5q? z;WY*2g{zI`W_i5(YfWB~7>waRzOD@dwsq_=W& zA~+sE)UNMjE)@OXp+Zsj8OUp)q5`>nuBb%HA-?2GK_G3dS+sg5%lR(k`r=O>I(Uc z?yCD@AU!)D$xGd?u&*r^CjXEcZ|+PiFi3fj^k)?mP!lNgQtF#bZ(uyuSi7wf<+?u% zM<-nuLZje!VPsazVAe2BL7Nz7ypj;gFeYVbtw5hybO z7e~A->^T$WtuRGgAlvW5oKXY9+5R_nqFYH5!Y4*0es4+W&)KPu%!@+Vy)Ikk%`{AR zf0-UE?3eC)Yq3RdBAA2jJ4(NxN5{M5y9hrXO&+uEr$o zZZRc4ZobKOspWv#XPTRAm%TbZ9NDB8bTd=FkGA_{VpE)~ zgh^K_OHFxkOZ2Z3jO>5v4POtONfb`{-_FjudXT388vX!+wzSVEgXL zbG3)o0@BPDpx~51tTFB>&6+~4nQ5>zyoRG&IIt!@W*@B4Fi7lcvq_9{+EQygH@LErGNx! z++sg{6|J~w>n#j;zT!k+$pU}J&+!07^RR6P;-h60N5AR(j+VCTeE#(%CgSUnVX7^N zl=4seA<8}R`9**S0LRve$I`Wdzo&SDB}FegOE0semuXP2Cz4;sDfshLD0Z~W#GQ{3 zWe6ud)DUQ=q%1F%_gCXVr6)Sa{*EnSGXOW-itfaim$6wPn`>t~IJ&zdoJCs2<$KuB z${$_K&%&pXkC!zg=@Au0_!e;-vAmk;tggFHa^utvrcZtiSJ3w>2U?@8XSn9B9c z*Xx|k%=>X)c~<-9M~W&hl!3TH@p|iSFZa7FAIW}leuBhKEoe9xNBhs9q;69=$;c)d z83zue1VRk32`?SeF!-Quw(l&}ifYi_J^h8iu!fqR;Mczg_w4F0L9mCDww_NPpz7^+ zR2|`p*g?re^y#+|jHwiFu2X9|fC961ij`_vhI2=~OcWKD+8V{g>vA-kdVU=1UVO;KXq$P{*7y4%rjU+u`z))3uLL|EG2 z{`velB+BlSQPh(5<~2iaE~vh`XK06xY%l_W>0L+1aUs+B|BpE%l6iS`YFMj z!$ij&Y2fJUo-fxKonN0uY)KJ+%;#Ltpari4oxi5EvNL}ZOYwZoKjo|%=pqzY|C>A7 zC5*qML||tjBZJ&Mg_>q+Ax$qkQC{8MiCs{M2nG}2sl~&3PC0(;61RJVQ&_YCNI)JlCGDBadlYav83=LnDK4jcRz|XvYmJF@#LX?z~SJu z$KEzR`$%?A>v?=oI4G=D{#!uV%omF}=gSKWA26rLL4-rU{83=X z&94B6Z$W7IX~QNOGDn|r5-v7*h~Af=yB{7+pYweEWK`a=WEL2N`5&{@6?STC^mD(c z@IPa6rXGlq6$%8z!}zsp8Y?vRIV4+Nn$2bz2`+MEfWaUGo9ejnaa7fF=p}Qixk?}i zyf9*yR`NLIq{&ekl2acJ6(48vALm2D%l)R z;KA9Rt;9X^@?Gx`HzGgHUCwc}IswK{`3=;DhtY!2Do;%w?0b1>WViBr9SqlbHDwom zmc`a&5P#p;AOnhzMSb8u{Xo-|!qd+eQlKhjLUpGbS$^%IPD}btkrsOMX#W&OXgC}Y zG2+Wp1s&@y%>10yX@6{6V~DzJ4{Se)YB8nSj>I9{b4TT8Z~ITV+bT zwx2j`uDGV@O=h%bbPy=k#zWi=qeyoLMyhHoo`Zbv7aN{hz>&s~K$0K4=0gqnNhULU z^A()PIYdqi6Q*ePqnrkIsM>OQbLAF-UBj5P%K-RYVLK$IS4!x!7sV?D%UFu>1W=8i zosu56lF>p)#Pr{H_H<7S%BilH$sV^ zKn=0<(=i!YS@>f6{ZVxK@=dV3TXUP<Rj02?^B zl+l3WPnJKs4wJ!1d|;|tN49c)$^-`gR=vls7puA z7lIhn2}w+@2ODPKYR+7*MseMZ)7^iiXum@0RTvTEC&kW+vVW}S3(WVw;&UOASjpC6 z^lBJ+#oyRmmzUiiCmY2vB&M!{lRVjJeDrUmvl-IJi30 z?=A0XjH#P7&YM{R%(9YfnyAMXllyL&tzdjo(Cs^QU*Wj6ZY7Q)5rAKDVrK9qqy`52 zAmqpZx|BexB+=B( z&7%v#hhmaHW7vxLGopD(D=W9J-hEd)Qs~PPDO5(4o^BNjE;bLjQSLsc61h&V%@2HT zkplni?Q?4ycm4tMkZL=y@cOp0*;0n&_tvXBu0_#;EKWf}YP_)OfnP^M$+7AUfIBhI+DLK7hYHb*}gN4iE!a#f~8M%7btilB2ATh<_ z;Zxlq#)X(E9o1n@M}V}4shD%PR5G_~?)y1Qc*GoNgS46F7Bt?X_&qh6lik>xnNJwF zr!0AgrSFSS3E;@!d#je+HwTLk<0pQfRlFplqNfS^!sj*9R$}S%DnStt4joezE;##| zdpvHlwv^-@!aMV`B09gothIjcD@cXq|MLt_&q)c19@nPZX~G?qPIv7Uk3t_m*M$QZ zfK*UMm;vvO3im|sc_0LaH33(rBY}o0N1l67kMO)F2{DkwXik6>)*t#}bq}w~D$p0% z8SbO6F!g74R|?h~R=A3l{7RXvLQ-qpcV}cLc)P8x-E(JgT439{s=SPgT?yj}W>0eA zxH3Z?t$4YH+H0GAs~Zq@2#in~h)Fs})T$frD>#>$`5O7}F;zKI_v^ulgp}$X+FGRU zhq8JQ2V5`GWdlh9Q+E)~IB>U7)&l4IUt9Ml-1iHjTjCEDSD-aOsCTBKY-ZrW zq1bSzXk0{^jV-NSG%U0s7fqY};v#jM;BXnR*pIGpLBgVUv;x^1>@7r2qAk9<_d9B&SJPQj+W?7dc^Lp#d8$#jJ7_a zQ3F$Sq)6>F1jp?ScEj0xtk#% z;ZM&J^wL|(+6GX9283W5+fpxwp z!@N+s6((e^*TkY69F7AH*(&EUjO2^sM;QE~@jt#<5qvO5DqqhY`)niF>LjQ}LPLs| zuD$C`+Rzir+M?Zy-9smCscJ!8o7kIYkKSITgtF_;BNvb6#qZa z+1*=!yXA#w=aKZ3sd@lrMZ$3@VX==j=&XO-O%#ODq%O3_Z)$67ey_6=0Dsu7+MSi} zqI~^ayJ-4@MQmV->!K3caWve%P!eS(X>z~49AG{4Yw@@L!)hIsEL^Pv>k8)^rM@lw zY*Vvl)+(-&#W6w_GTqHWSJQ8deo!CR-&uaok|S_Qv#UJi-m@U&p}$dHs^R0o+WK3m zIfhcF`Mw86Ui?6Y5X=jBb`~bFUFF0n`MrXYHJXPy?YYIzBcy$YM^>B^s>$qjy0LW~ zvaI(cEI;qea;K|+i=6UZzcVGsoQgfdBxnJtl3h~d+!P?8E#dR~8RE3#l&9&?uG;2P z0zdH~Ig2@}+%{9Uyq20xuSj>RV4Qzyws>>XvWKeJ0z?49Fm>3&v_y9#&n$p^udzIP z<#V$~>KgTLQDxaJmH0CLNcUp!gwCL*LR@~Q$BiTwlI z^9evq^a{77BCwb38N8qaTO*zan5Syjez;jz!*uQ7dE;U3=Ygz!5JvqjqVjQ*FNAqN zC}(RIzZaY26tm0?9p7!?Cly?l4 z)f;j+yV!&3POjw(kN`PW6SC%@ELt6MOqCTk| z`7f38r+;!GLiq?l%aZ)3y#o=`qN#9llSAwbg=FytC2d6jr8HlEA-d!**SS}cPW*6# zd9EJ~kDmXOHcF1NvWGC5|Biv;h~=4H%$I{qTyl55>5jFuRjKe^*%+Fw?IwLAc+jp8%>U~O zsZrK`K6P{Ffir0hlM5CrI;-?~w9ePFlrk7QNTN=dbgJOYgIrB`+^pTBn;gMm<@+U`uP&a*lY3 zDw^G5@le9L$3j3|lq#f@NJ{z`Wk?UNUC*}NIy8p1Dna|vcVcN-JU*dIydC zN!$(mZx3?jM!ome&eyjV+dc~X1wjUqQ0I~enr}9hiHkKll%xQN-o1ZI;HL8j{fSp} zq;hfo+sAan(ueWy{v^OC--Cjwd-)o5mb7>sLcq3xp=7>-PtlEYS7Ws`Qjm`LpcUEl zSKTZ_n!Oy3EdQ3J|2eTmyJaJ+%2#b&)cx1tGp4X@j_Q8!qj$VxHu_w=}+7KXb4EyN%#f|sgA=RJQ9V6AWG zY0mAYaQkr=;aIAcvbWsm^EA3k>{-G{DjtqMHn0M@gRfn!yeH*l5#sKN2;}0@fj3*@ z;cIHwgRi0dY$TLNzu!GlB0Lo#G$cQD9AV6nA?!O+l%+>>3EIi^7)3s{JDaLMS*Txy z4NkMol-0bMwTYK&_ogl8PIy;;uZ?RZ-R~jcXC;W*7QcsF_F{Y&Kox4qCpfTiNaN(a zHdNf;B{q=gxD1!1;l|avu`k7O0iip|pMUl{F$HGse`SLG#nGw4S4D$t4m@#3wX0~H zEcu%JkdsC@$vX9wQMX)r-n+wz35|b);Xf-~%{#lS)3N9n3B;lk$fPBeNVbqfaRkFi5J?F=tDd71V1E%)(e7W{gV z%f~C+e%teJs`5Jd>nMTe%jCJKtUVB#6Nj-146o;>8Zs|y{;)a0_w@bErB7r)bKNX2 zJ3$9N#?*A=qDD$>GR4R+$s*!q>fd8{eyTA*qmUWHIWVUM4Y9D{Tn2UZ*8ko$y98+ zxR@wryfC+NpgzOj?D62!f^3hpJN=DU?1M>sjsxMGy*~+pA~s)Q;xQ47`0ERGKK3y6 zJm#{6FHeh}vX4ziPRc0fQ2l^~1`Vi!Rz! z$G}035YR%x#K*zj_S6`ksHuG^-iRN}+mCC#SeXVn+W)2f`GrE|LA;KqjNPglqsj}9BGRSirH6vxpw*T2 zFdS)@N}r1QgF%gDx0|v1%l7u`O&aPLCi;l4AXpVo>#(82eW}7Ux8yfTPdrg=Fs#Em zH~G5%*J_nBd*yrrn3^DkoAx1)$SI*`{MBg+%K^Wg{RBW^_ z=tr zwx6%^V zAKYkcN$81an2FBJJ%y($)(xALDY2-X#^EEG*B3nvxSG22HABV?4wug(gL8l4w7UzD z21?|3d5-Kq_4>7>%c#gl3AO(&wOvnqgI1@p%p4|Z9U^I@d6ngS65WJRnqw4)%{qr@$cssCLlo_E=M*gfasb*c+}WsL?2xXsWmI* zq?wnNn;C@PUK-OKaq>tXFwme?b1)e9#%tBse}lX7c1K@9zg%)%`IKatL#dK)(P&J( z1hsNnww0B+tIACXO0uk-*z(%tc4n=bOJ(w5Bi!PkfdabSBDeXzT&w?3qO4%^qffd% zCfq%p*^piLw+Ne0ma1dEA5hy!y)1-9lUKS=#3#ROL`rPulPzQPnAe$G;&tP16<>H$ zc!F}iVKq?Ejxd}{2_NNgW^PgNY>>lusk|=Zjhj7~&tXo^?%5uf-+@@Z>o}l2oz5`DEI>8svQ}s zO}_%|p6J^<{pwe;hpCRN33z{g^j$5FZH7&756>`$jz`EwM&d(#Z48*_UYy@+VNpLO zAon>sNzAwd9xZSsTb-6{S(|Rv@$KZ@;N(Cun1sjVFPvFG$TwxuPZ3HNdy}K4sw0}Z z`CuQOE9`2jB*1J=vzJrkuv{S_UrLQ;P~XpwLnqFkM>3*vA8cyEV+URNF#7?o`rnt~ zfA%Dm0vnzuT6Mfp#QN=&LOdrWBSCZIZjH8rnya{3h(UitC=j9tB@mxk}miR~Phm9`!- zc;%CppxwST+2awFk0jPCVg}O_ST6G>1|$B+@TCA?bAgWYj-H2;v8GE>g)ptpWBs9^ z;UZs*fP}PSIP0mG&IkPzX?p8wrT1Dbf(4j8-9MMZs{rcr2^SjChY_)+*k-DR@+th? zocRy_QZh5Lj9jW}pnsmN@4R3HV_}2%It(EilwWaqMFu*)_~V=VtO1|5$STax=gWxQ10Ptlpep2tulZ|Ry%h0{ ztGkxdGL@OF@!)7&VCSgeQak7UG9ogANvo`oqyf~0PqNHo;j+{htXZL&+0KRTXg(*@ zC{cL$>^l}|$H#^OspjVIo;mhIf!2ojAfq#ECVJZ(k4-9PpIz>@KRw*#yO|Rqhvt!= zUCd2}g4uc+I?kwYaq7MmyS}1!byoGP>@!ufMAY@Pwl=rE>Yq+JeNwrwm?vPb-$Y2X z@Y;S>P*K^F^I?B+DCl(UZ9cYb(jLdN6HUOJ-#Rsz^sG@Qgd9x(UZ#PuBC7c03MD^&9!rrA$J z;(l8EdSjuDf{!$6=`YOFb$f_IS-X>-WSfZmOQ|bR0!AYG^8_nJ)6!B_%(KQ_xQ=tj z`{>sDsN>7aTV8lt|AMx={>FVeHEypE%gUo0+1Gc=^4B%BybO@yPL=Th%op4Sk8u6F zR7sBI6rcQG30C+C{b#0g+jlp!D79uTk_Q+8F9nGpJJO59m=^C`ZTwLqwB{EW~x#n)Faw_N0YOGNylrcC6&o4}|Y1Bxn zi(kDw;P=8#Em89z9KiGHq|NhYEh91jQ8v5$)ErF1s}O~nOHFc@+^^RTIBCDX8hUe) z#jY2PYWL#73xUXPIKW}P zWgGJc`I|~l$~2W@h>~`bkFA5F0bWl;nkLG}Q@nqzwu|2L*agG-+=VIPjj`eko{Mu-4#|6on zMQnY6N?^VPd-?|P-`vgrvt*AYNMVlje4GB<_PoTqQ;rmXan2g?UI_NIPq9nJ<|2az5Nu6${w(g1P zRlP~ps=e3bM)ZECipQk5CA|AHM{{L^sZQve=%C-Ef|#tS+Ov3-2e<5tzci8&4Ej9k zsBfjj*gVfHn5A6Gs-vlaG_)5P`||iH`vB*Jvi_Qu8+9_jo!o|ziFUcJRco2+Q-{|- zKD-bVUYj3fn=z;J1&74BANffWW;43f+wewZ4nl1KSOZyE=Vu=0-L{KuL(@%}2{41H z6RD6#s2M3R)nyWrb&Tl}SCRI6f=pDli!}rEr#TnDXn{{dtu>7(4t)6jUBATe7GHcf z)W)G_U(jmKG!a+Cn4SbB`??JQ^DXDN%%2Lur4pCJ=Ia(o->8IIX8x@m{f96R$z@Lu zzh6rvtIEt4Qsz?x5^KcOkDuYH~dW0W?EjVctH&9`wKP8?cm zzs*6NTRHpORvj)hm$5`<*5xzY5WoTlX~lL9CCX4=Pj}SvDr><=wvBt!d!*?$w-eXl zXT1cHVcVxG#djZ`7-;@rWxtWri5@Gw?&rZ*&KP2*DPU z!dLNazu4tWlIhYOKmnMtoby@c(qj#+{hsN&YqP0B2n}!^<6DNhF>lPR$C?nt*SnO> zSTc$Rg_Xl_SS>Jr2S>3cFZQhGuVg2>Br!fwAU>Fh|5B%|ZX(ouCU^OlQQ)<`GJ5`P zTNMX$zVa&1v)1Hcl0Ks)<$q0}|BITIV{zB3y3Dw}%revs#FfV;q?ZY177%R&hjaw~ zG>0(4n}>!(=0)0Xl% zY&F(;ZN5n`X0YO1;W{j0tz@2{XRATf0;laTw3 zn0GP%NH9gV7P|lX{KGCtk&^kX?j3Tm=g`#b09NwEJrqQ3ld4)ZBZj(K^WPN?*nh=+ z^Q)GF*ed16Q83Z_qfBmEfhlGldMxUzi#h+_ZACAaR=#v1iATdDoNvB_*@9@m`eYwA zQ@roAKU^?*U9MJY5g1X*Zu5|3;< zpZxuF@>M_pIPiu0T<;xWs$QJvFKa$P?e-L^qhU2`hT>9{87E$%og>UepiUx(_Y<4@ z3NI>x&}U3!yi7SHnhbh1HG1YSlQI)mAWIJuFyUe>soYhN*x74r-%mBW>e|}MguD`U z%?I&s8ymDKdRJp(78~+H{#iKactm2VYaLTm)9>lDsJ-vwoPC$+bDJMJ7=+}$knSH& zz|wC@Jb|smnz;Xwl=-nr92(S_{cXm|Epi`G??YVC0M^u=X6#;!8;)*3ysGdLte^Jo9 zDLx;&nzF6Dz0N@&3NO3uc14wc95M(G<*ZT^-&((OPd!&RQ)?urWa&m#qEGBii#+{5Z2DAMA->4o-dCPd1lTF?f#&iV!PEmT6#(tXZ6NURp)M!D60n?Q>aDhjW zdCBe^Fr=M*lAp_>rR>X(-)R6O=)ht0PeS;dPEAkGD!A`*xhYT%bmUSq(uDF1U#icJ z4nF(9G+h@K3Umqr)KCiHQ$cYQ)g$H%_m_q)OjXs!cUMr33Eenb$Uqr*UAh3$;h=Ih z(R4gchnK*{LPa@8rRO6}Ox2T~B)MhAO1NS7qe6vYk-z17q;daB4Z$24F%axxGwm~d z_Rb;%ip4jpi2qQesxw>;7=cxbg%h6ecvLcE{4rR%0g@6J1Azt#e2zN*2FFqg3?2C~ zXdX{05|cSEa(uo~!~OlD%yVYj>c+1cZDJp~ z-sbyn?3_qLCWi#zFnYFh1xlq;LPOZop96Q}F&o@|CEp#jVxTxI##`m*+@?l;%Xy{A z1-uXDeyzsZ8?UzPI=$aT`tO&PNgC?vj#5>RFzVws#PGT`)L{*rt2!;d+4l)>9-_Nw zKwD?GsW(F`2uKuHzw*!a!owUztw2o*5~eyngWua-*p={MAy{CNk3+o;kImO$E~BdI z+p&nVWSXXJJFDsT-$)AB(<^(@$_qr2I3!d7h zFn`x$A8kLlp$WLL^*`3mxf$;7?@*N+3N{k4MdfuW*IuuGSGy&aG$1|ZWBAP zRLxbf5fW8GAIFJw0;yEGgfQVGyMFXJ-ou3^U>snE`li_d2Wm@gV>E>iU;3k%PVdEU z&uqOizX1qE+i6z&eQ2MQ`UIn!lMFs^PSLyr*fIBksqt`xET@85a`%Aibv&tgM-;La zm!4_}Ag{TmjL|iSHM2+Ohmp<4lcT)}&eqhla;JZ#RKSp(Q=mYB_vEVeHEGQV-WClUVkKS+6cu^E$0Fn*oE zXe=V94g+su6OLEO@?&hV0lGC859Sy3w{-Q@M91 ztA}WN{otg;{r-NB*@D)dokM4jS~sI14?d`tvt(4#FJ{?A=DgK*`Wvq~SQ&FT=Un<= z`e8R8SH25G@!A8ih~YI$0*)TEd(GPwVG}-J3Uirir&aEfpY5f`IyfjUYSYs2AI++$ z>`nGzp|T47Y59n$WO?13k>`MI>`60Z=9HDXA?&B-m}*zHv*PaXdVa&9<>hlD&eG3G zn^CkRz1TQ7WY&OU3n6#?eT4nRG(ZX9NzO;$nSVBBz1BW>5}U+90N}o*Pw(krdFf%#nAvdIw{1=H#h(xr30k-U8BbJHa-mv;tRx6Y%r{wPc<$7 zRz?&Euq*kCia`w1D7jKMg^6?tefc{m&0ks2rM@ULN8f z4FCoaudIOU+NDNX=O7u){@WLK<3t;DOFGyi*zqwK_aviG1m8Ea0{@nf`Hbs{?PE{ql3lIuala&4(% zzAdrDPMUQ@isNU;3?mN!TPFOOpqDPJO2VNO&$N8+xk+lImmswnOXM?FHI-RK+7G)a zvGvOT9|5Ebt`6VDi`ycmUNass_5)@mA?ywptxj!u0|o%DjX!%RFYq&wnKy5SFt#E# z3>0wH%Ev7^nU#~i&8#Bf;##|weKn@-HZqcFQmhViF_ehXyj}X$k zYxBmIt0KF4ZqW$PMB;Z`!%lz z50YOU@;Oi87H<2_4FMSTDh86**bHBk>Xt1Xh0mb-F=1sb-y9&%7AdS>s@m3K@nHD8 zEpN85B|{B=Ar1e5=}-V9q`C%EQh_OJ>qzteYi%wGS+cxE8M@cwL@Z$A&&?1RDyLgx zODE=Oho;<*y@}fndifOw2H*hyq}`_@>>FmX`vIg~r`)~6$`44#1K4SVDZ+qEd9Le3 za4fKd31M1npz`1D_J78x|G`eIhwrz~&N7&o&L6tDofV3~I+cDVYoRkuH6@kzUICZH?Z;C7 zwuei8qFX)DSk;`N(bn^VV>DrlyNy*HIQLGla-mj)o=PYMw@qu|bY-U6DLn?*`(HDhu=*}6xfO@_a z7QgF6Xa{gD8eFijWTfWXmVE_U%o^pi0Ma@^ti(m$+ekW)ofX?g;sg|T;FHLMRD-E3 zsna*bk~7mCd3k#dB<6*C_c&OUypL)pFfIcZjgblo&tH{LjPnLB_@R?}&&Q!vDVmWA zE&VPa$OvV~ry`}e`6mPN->29Rn2I;c*Wv5M1LNMl(fxCHd`&2)G`9ASWHl})&A_G{ zfdF*iNH3B9SwRvc5CCNepB(dmX`f=+3`3+pVWJT7FHbfb++gd>mUg+`x<+y?f#A*kkHQoPvpKxt9Aom zV4ma;Q}cJrRmItEzFc4c$fQxK6*C^3`b;SPWt@Wd<&_Q}e5d6(l^yEf5Vh&mz9%Lx zFOMr(%RL$XbBy+Zlw9DS1B_nem$q4@t+T5S&4D6OQZyFk1ejac-~U`uJO(jXk%SzO zNO+BnJB#5zx-Eq{3B<1koHWEdU4M^V;d(GBnTwq9yh$7B$F~`&{4B=iY12qVPr!#U zbB}v&hge^Ktv#O3HE_{OEr2J~pM^kEB!j6+Mkk^g`Kg68=%shE_X9!-_0tlr!KFbKf9bd{cw<(wL(c=m!T5dmc zo955UH9?o3G^M_F3id@hdZB*q2JEq$U9)vq>f6kcQ-YtjvZ8zQe6}jxtsyWSaQoKM z*>d~B?2EhvY{qSw8O|_Do|nRPcHPd1+8c~8-sUq}_`^`B|5nRMh%q4nqZQU$*H%-^ zYPDO=kN!ive4WoM@fEG46zY;M#5W6|#7XI&hGsXHJV(FFzRTTpo%l2r3Nxm@8+ftz z%$leA4jp?Sb)H(S&3{YvyG_q3K)#%~TLF&*n4;fQ zKUO>&PKh-3UeMO=SHiz+rv&A24-r#r^hH@3D?h_%Pc1&tVyp@S9B7X86%CcY1MU8~ zhuzze+({9%x!Y_qGcoIJWP)LK=C7jE+?}>32JlF+X$Ue@9EgIs7(m*UX-ge z^>-0S+~#92wPf^-gE1U0H~@hVi5FQA^a#MzitNxqLOUIq8%jow+3%xL^_E?|9Rb#e zgeI?>HoeXEhJ1B${G-(XzL*aO?m71l0*(+FLXOzrXX!HzFJXq*E)7Jq3$^c@C64Fp z?-I{0nw`ecE1mH02v)3&+kr}#vi`aO4EC8Hjc9H#opdlmTO`!Rs;ww|E_elF;BWv9 zu1#BY{m%{@HCdkQIX!o;p0>TwPGg!VD9r`?;^%j|hHrF*4irm_M2h+v@~t!es=G@b zJ`y&7E8AQd|Ba^q>plUl>#)um4JuG6($giN@4lOW(EQj?<8q9bzNh)!x$6km5YJZO zmNRNm5yr&vSI110wk&8eO2c_mx+iEXH>`@yQaxb~af_I=%_ zg#kl9zWZ1~46pEt7KBwc(;nLsD*lB;zgIX`5Kg{S)mEH?x1s3MNnT}+5U}49rs{G_ zw2lIyEE~`2zTeOH`W$kyF%r;p=KkWrijlwmtRHYVb~miyw9v#`0Di`b=#aewDPnh= z_7o-|5StAgrn_?)?mp}X%0x+kXo_UxM+@lA%P@y#IMU6yIip`Ocg&`SJq4f=2*V+L zm0LR3@Dg(g@RIV7c+V3;?k`Fz_s=J?cWW=YRVryo0!S5rE?Eb?SAruSo1E@YY> z<8Wc4Qu?thKLKavdp#h2683*L{C|Xga_p1!=swIX]x6AU~hqxo?hQ4~|FMOazx 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 Iqfhj|0MwPlk^lez literal 0 HcmV?d00001 diff --git a/assets/banner2.png b/assets/banner2.png new file mode 100644 index 0000000000000000000000000000000000000000..a46bc4fb4bd0170314159fb6b29fd4399e858b59 GIT binary patch literal 227786 zcmeFZcT`hp7d}c?AfgVA61t)yqK3fG`>3GO1e78rU??h`&^w~y3?V@QQA&c+q)0%T zv;d+BHK7_hC?)jJ0|^PgSm(QU{qFj{`~SenIwxnHWW8nYXFvOS_nW`28|xq76Xs)M zV>@v5$|W;4wtZ1-Y+Ne)d02O5dz&t@PV6u<{Xf}?38HhXH^Rx zq(04cd5V=_+=!k38-f&nd5adQz0+!ftx)6vAL9I zH0rQVV564#SN^A`A4l(V%w$`MF?5nuyVZU8e{0rtws&mag{rqDdH$C}{6REF<3af+ zZ)WZ&>H|LL{4WRl1V`hWng6A`tY?A_@$j)}w_K`B&FUBZpT_kNCwCM-TUDym|I~ro z6S_iY*mfla2k#*)VEjmw)O-SxP+-E|Avw<<(5N<|xTO=UuCVRL4GYhUe z^(~!tE&BM~VH*pD4t0r<$0>|4N;th&o6+kPxkruMTY@mBAy~%O8�qFUQ82TV8ux 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%0DixQ4HY^H&}zem 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%0D3>1zz zA1B%&=RwsBiLLRZO%Ly^ak7VhzDOw;DEk)^QtIBDy6N)RMsGgpzqK$@7$v`Ej6Y7kHb0GEJ*5bYMD!W-Xg=f>abW^S6{t@r zCnA#bi78)9LL6&tn7`a|VQGKYV$I%{44({W8|Bx|nz;71=rT0XU7-GT_#+_XQGJ@n z%21=UBd%BNR@Jdpexae>c1BXR9qo^MA(B!rd&efN&)$Fsl~pA`fs6x@ANk=|9-N6^ z?1}r2B#3@B-BjMmlqnRpo0Gd;wZy zhJ`mNy4oHAB&ZmYg$vOiU2+zqxvd^Lwb;CIVAB9F4Z4hY6AHN9e|C0|-^v$+2!y{| zXR~rEimjUl2@LU}jrJ^EC2Lt>);(*h^4iZ2CZt40wagG@zz!Y{RyfUbsjA7i3g-L@ z;`_p#JnRtj-so&inF#-cl>E4S{FD!ijM~ubu zuVpl0Q!0x?wVYgeQk5;Tz4#<)q2-Ut#_3v1N`Yu}5P>zvtV;aQqnrS(P#xzEy_MYI)}NIt~^7-H`sg?T8Aqwlv>} zZf^FNX4!;2=l9+A>oW)|OR&5$m(-~fcznykU?2tGXc<5Oi0pY|ksk7K>ATtwN#*!v zgE2`>IT1E`h^D3&_dPH`oK2p94higJSSq$AzUko0!=++*uJ0sXH*&fyGzC@_i`8?O zk$O1p0@emUV|xco+C-4n$m|j@tRBsNB+irCnTK+GGJE>4jSZ}^Nl;OH%9JAH5 z>;a9-F@4^n-MZ2!k8j+$i52w;S??v4gyhD_PuJNOGO;>Sn5h;~hTegm+bz-#hNZ-# zMMag3=9}Lu49jL)x$08p?W|v3`cC<$G-&I#Pyg*=1lD)}=!Nq! zoyy=H9mUFuCjr&nz~tueqZmt;a3BiQp>rn32HuTj7_yrYGyR$MWU1`hWN-NbSxkp? z>>G_tTpeKWj(}UV{>!uFj$a_-?uT3by7*)0w9d&ag&_iG@(@VFN`t1z#! z165{h@Ru5dS!fAM(qvwYyPbizf5~xxSOUg z5DM>y4`9S5KRa-T3rO~v-L*}kH%dr=?a^A6U7!sw5(vo`%{V7AdKmo85{w3((7sNs zZ*S@z?H-b@)B1LUFWl5^WM^1+3xDYKKjZv)1t=%2xt&NNs#U1h`8aJ?=nNh*D!3o0 zWH)QfR*D`ICX(T9Xe&ePHDW*-@ij4c^7ENb{HB4;AN{X>$8_`THDoEIyU$8FIG`3; zD|6#oIA@M9fvJrz;Nt7P`~*^ALI^vUAP!*;4%Y3QqiJW$3wY4wj3UcC>qYTX zW87-?;fvF6q<9f)5uh4=W;xqGeMfKjk`SJ1&yct9V!AneGuxORXW~~Y#GLZsr3R75 zH^oj{KU`!?itEuPAEcIYDpY^DPW-vm;%)u@oh8tksuYjPAqD)(6?Undrs4dxxC2k| zJ0h(Nrx6xvclBQR?sGR4!V=Fz)U65CnAo}RgU_*~5P$!FuTOG~_ze5IE!;B3LHhjU zw^|v^XG$mqrtTdhz&xgy1|M(xxn^ZsE$=Yjo^iLHvUQJI>DF`{=BxcE=C#9t?*g0K zTzGQ+X%!t$ye<5F%3xm=jpMB1X@gKv@*DXQooqv?2g^<4NSWf?y`ghaUcR(EoZ*r`Z+ppP$J~vq*N|zB0%EGT12(l z8!53-9bYjvn<|sAbazeXm#7RhYjj}v6QoOjeZ%T?H^gzv26&OlvSoSc^?o9@rePzB zwKpL+&+j(sz*owQg|Cm`eeQKqK$^7^rt%Y~ngFfP;<>UwD2DKehu$i99-c9SpSg03 zq39-Kn)dhr%~|`cXdlFsLOAd)y>mhOu$)@pQoT~`03T}5@rMGq{FFxkFAEor zT1O{up^*1~Op4u_kDVT8Iq9sO!U(;}0XaHu5h8E$wxTVTiGO92^V>lQLnrLBBad3E z7Dd!(t^o2L86OThu48Kt2tnA#7C;oE0)O!(46KPA!nIb*U z%|Sun&VAXbfX#!@7WzBU@em>?cxUZ&&f1PKfS52yW4Zi;93C#p#>A=|OtJOW+&^_- z4LEcz^cRu*&G*XG6wGs>cWsiYKp1o5r7}1nzSW8QLew15G)l47YuMG&90J19BB83K zOPlKg`bgYFhkf6Xpe=hgUh;L_r?sl(9TR+Yyz^v1B=QikSB=*@JDtKsCmfFYAHKLU zm+1e(zN@VaMMlxJE=kq#4(Rk=QcAH(ebwfnrCRaMd8b=MM~ywD2!*aOYdFF+SLfm3 z2ZQBjuLJt4S71x8I9Rm-k}l2zG>d4(J>`rYwwU$4AwlzHV9!pmwA^n@jqivm6v8AK`~QWqy{S3N{eYlhy&f zzP=T;uR6&WidKLD*20PEf;_DK>MQpKt}j<|CCX{_DbQ#gC?(FCZma0FYPo=n-EU0= zE=HNQUE%-sFsGBb*I?*mOP5z-lTrsyW7m71^0d`TCbFS`on7D5@}6${B;mS?L&hln z|BF(8N?0v|QR1B%`!fOG`8+-5l-hm zIM|x^2ywBuuqpS&!COL)#QC-ixeoSblHG;Uazwmvt5f_3F9`9geuS(B{y5Ge)t1YD z0r2^YiklRzwmVSaqubgm(VAsE!LY(9 zLut%&htk~n&;-#Qq7L6g^7?+#k(=FTghx2=OTAS49!h>9eZ{gU=ioSxC#34x{k!EZ z4*LDwf$TD`nQ304yTwB7+&|oiR@laPca6fFUmP2>{Ld(Dww3`pk^V7TD6XZ(0Hp%1 znW?=P)2pT5zg&zyXgCyu57u4s=bdu;8Gg_A6*tV6Q0~Doll8f*w%qIZ=2Hcd%biljN|v@ET@#ud2ma)0Q`iz$hy z20%Sd#oJ-rhrd^L(3=JPM$23`PZLYp80mjJ<=>n+jv-(FsJz1aX#akqw|QnB_CYQ7 z8Fej-5lA;_Kkz(V&hmOCBSQs^599Qs69bhgeiLle>NV!~N++%JBEWziQiFv58PqaJ zYBX>w<1(eagWC&72byjUsE(hidCj$K{r`(ke?vJNtA+TkZ&zCPfR*_!DwM(O%-p`i zaB|(=088gitJhkijL+=#RW~t%7SY|7zOfU#q;B zY4RJgxt5HRU0$l=R7h>T@}H~JlU#+FBARbtbX3sdjfBbj7l!~QUeZu!6D+#~$i`~a z-2Hu5j6w|q5Ts(yL*oIQ1D27_on)?RwWUi71{leYtS>Zw%6Tpi&LvhG*FS;)G{Q#j zW>zOW$oDG()YUphKBdM+|s?Xv2 zC$8l?Li`S{BlIW!Mdm$5{{1+(8MNkK7A2qpz?ZJP7K6rVuH1zj1|H8$hqYbLj&fB! zd5lRVhy)5;eQuT;fp2YDVLqf*pq#gFku-VzbWNh-tg~L1lFdA3M!NmrI zu)THvCG?N1p5lP=I3IyOgpg;;wov?)QVXpTzx#gthb&nen6n<{;Z zy#G1QxD{DXcR=R#7MKRPYKX4eAn$b?!bNVCsia+3_DZ81;o%RL2A5>X{gL2Lyj_uX zw#0(E+q2 z#LLomOIp8AlY8Sw8r0Q%0^6A-w$|b><0l`Q9+oERudkz-d#o<`(o-;#6H)#|6xRh# zIML%hqpwbg#6#9GwX~^NdD2Dkem|?>c5qXb)@X)l@9V_sBv*Kj`T_--lq^ah0Dc$vZ49;3&E}pMb(}5SERkID3XaT}M+P z{9Xkw}dtL(qMw`R;*X60AqOgKU=nKvCa)!`d39A(JabZiSJVHIv>Ye zYgq1By1sv!cN!4Wqm6I=;g4e0nW>H4>^oYRK-xb$82@@Kro!JiB5nW9z11=4xX<7m zPFPZDH9hL7Mc&i}vL)0>;enWyI!;HFiwyx;DNLgCzh5n7J*r{7&nzWluyBtm07MbS z_yfHMR1KXcjc62`B|ThPsbhUT3)?oujRS5iKPn7{*^uNpVF0L`D>q)U>ruCEuceH@ zE2<^o$OkqFHtX4WwMlUe11DhmiVWL0AY0P7!LswMbz`b*!S`Y1ewNc~)Na4&^#`i# z32c+=*~c)h(j>7tFU!BEwTPU--9FiB_W{n6I zz+Xp&AOA9mBdSkKer1c~=U%K_#y_q$ZP2*&Q>#HZ7 z4>DslW7qrJb%|{-yEk5%PJrRWriAuhedR{&W(!@bDrc$6#<^XRvQt@9_y4lWe*=XD zzT7w8JW-{m`KYp%_+Z;B{9;WviV3Q-C%YG3F?!fL;44$H!|GmfBEK@luPh63bIUOw zzV!S!XE*Ch(?J2T9-b%j#ApDQl6CHiJn?#+*x~gR6?@^>e*Z7L_Sg5rURtlsyLuu> z#YzSEQv4cPEx{?45IpSp{Xnr>2jST37CUXTR7l?u35u2sM@Q?A?V3JPsa#SsSxyv; zOZhye6Ro^uj;(hs0Z`4dp*~jjB;>It{G0$8Ln84BlI!&h>ywMw(sX9AeWGk8@96Wq zqecwkl=ck$(DQjOcVMGY|Gv{EW(wzz*0b)(t8nd`+ElPsaD39k=lpwHBD-NgjdE@u z#^hT3&7M2!h9UXj9uuqGbT1vuCIEt`sr)lE5ufj#>Dd42(aN^nqnU|o*3OZ0=RMeX zM6OZKJqP2sv`KIdAE=h9NwID{fBm z%sxgcrNzlV0hhbg?d|rb>~LbOtyOZM9_P%&n(S7c@l-M~a+Ax3q#wLsp+Gn~_eyEY zy=F57q{@9|1(dR>BdndD*W)rPI?|o@OBH!z??I^OgVG+bgma;osf+idFSI>K^L;vmaw^DsA$3}g(GuoFO88;o6`=qI!pkj@P1d$hc8;JLmvx%VlwJa*cLUj2N1E_*V4l)W7# z%Sj@Ah{BP7wNn-e(hw1i1g{*D^(s?18!7|toGYow3fs<*Xo`9Xs27Z5<;Ti>`usFE ztquV0<_5)6NDaz29I|(KY&6>uSaX+@@ji!MCkAjiSpE>aq{WY*2u*3f#$xA7&~)B8 z-jbbrlk%v{E}n%%O$%5CY_*Banamf@k39IngL!zq;%}IcE#2V4*LPUT=!`b+bgcDC z^*}&?nk#n_koGs-9$RH8+KEXDWDO_4F_mnV-lCXS80p$8{Bc#*M@R&xmw7gtgYlb# z=1|6K_F<%#I4&Wo1xmk~W4oZ>u65$iiQ%@FtQBRC9j1$YXi=r4RsedNP*T8B&;SMx9rr59G>YxglqU>orAI_gOS7tJ*ZyI?zelCy^n0YLtyw{92Z;U;hs@Y5U_@}KjUCLw- zWCz*9R&sGle#LmB>G0F!NhBgE-Rz>^-#wSQnF!cd*Sjg z)GGohcpiOCP>2yGfN%IFmn8}1#YoE5L3ikr)bCNt~Tcv9M4QHZ=iWa(>nvX7>-WmUWORy>EGNo(b>c0xIs44ojD0 zsQY{X+}w@$)1bky;?bE|pg;6A0!s`RqNYkTG6Hh<4p{NwxO+K6DYm3qGn05}Q%5ZM zjg9RVn|aq15?W6l_`c_p9gf@3^*h0nZXo>3vDQQa-zNxzAuCH|T%4o%(p2ae z%GE_W5sa+^$N3ZDXnpd_y9Z0@>e>5~Ux?$RLD8e)i6~>Q{Agf`&Cplx-J!zkJhE6( zFR{*YTTGyz`9}Vxv9ISH+-kzprpflnR>Kxt{?4^_rJoPu%l055+aYx5o-9y z?vV~^b77+g-xJ4sz?ijptOwqaSzOyEw?S%zBZEp-O7+Wn;hvY{%$i2cqMqhW$(wa?a}lcm^ki;G>Aa}<}cT#+!s4vRV0i0F7)8=gvktckWURuhhrj=P@NpIYECaQ{GG=KyO5 z-D!;*us5$3Hvs&4u%Zil(_L!^otj>sZQ7B=I_)zxzxnjRL%pT{G7n#1RLxDhW-)$b zAo(G6_T6CaiH+@w{1wtQ2P>W32PK{B1{`bBGPkll@BUx`_vUxL*JC-6lGo2Z`u5rv zfzR6w=k`(RI7|%3CO3}7AXjk4c(0`zVv6)n{wmQ{Xm7UP-N8}^Q+$>ep~-u}SmN2G z@127=H*j@ijavnYVpOvf6w!CWpwVT(gf@V<#>RU3>t8%^jJbeOP!UVg4hE!Zd=9{T zuJSVRHankevmiAu&nGfwzWFAnXNz1Xh(LA>e7$#+y0uR~ojn8i&`~|iLSpw%mG-#(&*IN>eD4n0s<_-JJse{+u~+H{j5K*r9l;!^9wLFdtI`%*y9qj^@%^%awncxYQZuu&p&IE!1w z9*#m!-o?g%-y;NUM3&P}jZyUhAp;YS_05;3f$xB)?o#6!s%zUA#0QO|%3cyphM4_^?*IB_c7n+VtOhO* zX#holzkzfsWJ4cvnbjr2I^|u|k|X_Yu)WJNT`B_)KK7yg+!xnt!XaL_5HxJuSqXkL z!-tnfMJyqL)s;pzG}#$^xldyiFS3wV+Wl#-JU%~p;J=#Ioa{H^4~!oscNf;)LpDuF z*ekva$=*c#czyj#X>56pXfEUU#V*&yZk^zf@#HoKuY`+H3(rEz;zbbSj|$P42M#NO zOTg#YcxCQP6P0&FH8G`@IJ5WWhz(k3`-DVk3_A+ZIG{usz9b7n?urjx9-`K~3gccF z^#Dk*QXZMu z)jPbGvcJq?z_%TqD6Cz>TRFSZK~fBt57;H|d;Au)XQ-7w&7u3Oy876Ch_Ce~Je2Nr z+OIO#8@`VODwk`CYIc6RO1q6ij(Z=W%N^R!^A9-23t@hE;BP~v5r}fydRc5s@R;BD z*Q4D;f+*x*h)&+C2D7@+?0$##xWrLUR^Goh)TBnbmGJWHpr2Kc++-oYxAY&<$%h71 z)Tm#Q?(PdV+_o z@44pNdz*p&WAbvk$T(t57D6IALX$G+aGzV;6s&pE3d{%W>E7chAylY(mj#612#{L^ z=A0|5?!+^$_DVhst*Tix#aPK~XldO6hp&&)2EiJN7z^m^g|u>^QT-=8Ie(? zH`G@9$>L?nn^MARDH}|RDn%+>p{Ny@zsfCCw}fr$4hssw4yg|xp{bAhGnbymU$Jr8 z?ZM75*N9#KEHXuIAe5ar9?Eu#n%V%$re@i(uE3Ijq!2fll?>wKHNBR zaHmCf)p&V$-1R$Lk9pYB0O_NB9BV=U+s(CJMvh-+@Heio6}xuw2(f|zE;rgj6GI6~ zu*l-4X0a=D2l+YqBKiW5S`M#%!b&}M|LLsdX%9>pbU~bj9{jF@{+BJA{$)!uQnvgJ z*Wd!h<;6-nJ1*F?9n0CyA@9ZJe9=OH?WEmfu*+Km;R1BS+o@%T`8C&mgc!qHKHh+x_hHuhQ zGEuV&Eb+cbrfsdj&Q0b9iNyZ#Z*BK;N?p8H--lf$Z`I@qp;u&&qFIaP($*Y!385Q| zZ<}mR`v!6xPDq)8E!Bn(mz=H?G~YeA&oj_xj@Vz}_-oxnyTzA#eY})DjZ3E@w93&i zfB%5!Yj4@5#%t7p-TwQNim$gbpu|*|mk`8j-SQL7+3j}|gfzzrpVqfY*5N{UFb5-( zXNu$Q8PLbDG-V^-B4Det1P-BKWD@b~pQ`>WMu+tRA@M%5=(%(0M7mW8pC} zRccL1Q>+$to00!2R@H3ZZsadD)$3mZFDpv=PXHqlvt7=ao$5GVjC8e~S_ZVEyvl6~ zB+;zM==QgAWoN5UM8Ya&^w&%;0YhLNNARrYzMqtf=^w!=35$+qwS%wyGJ+g?l~S#p z&dd5@pr>D1k7igUAVX`26@<`=sCRb91J@+9x%LW(F*ZVs&S_vxP0~d>3nX$wic3)S z;a!*pR$9gBTY8b)t3F5~Oq(x34+7le203!C#V%oO&yfO^5fR4UEo4~^jqPuLcI8Pi)I(3y*OX{lM2XKCS##%7v-OPy!47X- z`uY7{=}3aA?#y^KEc|JEY=!U&_sqOq_veEz1VB8+sY$)p`wLMON`_8r%_6b$} z&D+dW3jw$}nq%RGND8*K5FaMzkhX@EISp4Y6@hE6U(tm3 z8?IQ`IQwV;kJlX(X7aSX2045WGXW>3SkjImsrnZyv%_`VY6-v-^B^PE02OWNAr^>J zH6gm9edS6*CTzk+fbW%Z$n~t=+$+4Iz;DzGn!b$pAl<)&gw^8IZ%VI=M+q;*P0thc zscVgxcS5V_0y(C%*$*eDPP1*zV#uLAa+Maru-WvKxd{Ysh5~UL-V3x*&WKXl+p;FI z!ClGDED-5&W7dI*OXt%r7`Yl~=#pYj&90pv?Xev~BmAs$`qPsW>vigbCsVIa<2&|0 zJL-i{dx4%a;2xE26H*OL^#M)PRJCZVmbEZ@kl$(VJVi9PCyE{wP0`}l&+9H zf10meN)X)1HVb&#&7F5Lx!yKv(c~&B{-`C|A@=&Rq?kCEYOxyUY1w2hmAc$>)H*VD z?hZ6hd13Q{#NG_H-A6F42qYw}TsEHk5U_AxndyN2$GgNt}}* zR7PJ40u!M^X|&$XJs^p^A>iw`v&;J6^u5dPxD$8bcI4eiR!Rni-rV5GtP(uvXv&+4 zYI*QjCi0F9H?gXwQvEIy)u+$M@?#nko-Yi2Xbu^+EM3gzU8rid96k6s_*x9?pxJuE zp{9x;e=!{#SR#o-?p%eUrWYG8`EkS;%MHkWP*>i@!D+_u*v8`v)6Zp+?yeQT8`tV= zN5heyVDa-SkEPURWe064XrqcBhx|nc z&(BF~QuYcI|B`wctmp-v6E^Y?q8sO4nlekxstO(Bi-=k~?Y9FqOGP*^7Cf(hmbuX< zxgtszUGIICD$@(%H3p75zjC(U8I|VETAY<`zF-R}R|XXNe;#CbkPA)Fw9m;1;;v=L z>YMm}Ic+x3p*GWJ;$5O-7q|dOyD(v%M5AqOm3yGJ%?6qD`0Rksh;PdcWNhcTod8Xg z?5A6DQqL`nYp4*$r0)lOJ_8RPlRv&0M_U6M9sPQk`nY^SERAFPt#!S(AodReZ-S!sIkB_e~8bukojP0Vme!Q{qlrCVb zl9Xf10!jkKG^gTG&P|A}F9g<;b$FraB--M|EanhVqMvh-4J|sGCAFb#cLdZ2;zO^a zfR^XZ4xEy*&c#zq*V$?`^tZvij0Tz_J1!Ghv~q%Se0}noS)syTdYhlW0iY3{O2(nJ1waqoDjlUw!HywirVeHA=f z0Qw}6iyd%|c@|-K$Oif3ef#^vH{3O9)9mo>nS|PY+juil#*|nJG#T6Gh3b3tt|UKC zlk>pXuNSsdu$$WbY=*jP88mz3(D}0*w<~P6$>@#O1$kYbo$+wx$R%6x$v;Y!P_cIY z*7dNPTj{;<>!TDzhqIoa^mto6_`|GDkpJSx20!!htfHPsKu;Fuo~hxbBZcmz#?`Q~ zMf{&7_PNQ0^R=IuxY@j63~v7l{6jO+YcAX8q41UBSZ+yjF=F3iz(FM|f_Q)=0X4dv!LpwS1zbT$Y)^ese*j8o*`g`^7U%hBZ@hntC znTIPZ;zY|p%w@#Hj@DKs+%hJ8Dki&R7r%nclBJK}g zz6%hGm9&5gv zXcg!kO2228(1$TgdumH$Z$%)i?+dX0Tu+k(;>1i7JBK!ieMe?Czc+HS=q-#|NrL`S zpI7M`G}bvpT+y0N(%5bNU38=8K;ow%$nQ~n@KfSS(Krcqp?V0$2{y3U85aG4W zh)=0J;M!AN_w?EFEN&9s@#qeyS6a*7@Y0$&YB0!QKBdMqtf0~$Dtl2jX2#g&gI9iN zx0cqFBO7RjBPPu5e1&w<=9`K^@p<>gzgBAPw-?=kzhpcfl6nHEDJ17uJ&VZe-1-?& zZ0L!lfW?SuDb1a=#o{s7=iKw6Oitq->|i%F_KP z(YfOoMW^-o%J063=Pe*T)<-er4=CBgZJjeKqFze*E%RNK=1nEW*gDwKzT&kK`NqZm z+;`Mes>Kv^Wg~=$@PZCdm)o1g%VqHSZmr7pJOr|$c`ifAWL9k#L7ifNNA1H+8ZJMK z(N8{aCOCUBWAVoprWxHb#aivn@`a!U_rzK@$4NdLfChaZD0_~5fQVD*CB%D;e&;TW z{}x+1LujnTrcw`>R6ojkNr*wZt3H-b%BzTZ{s=AwNr*$MOJe_ zs-tlOf0h~hfhvi2DFTfsA26<6RAsgX-qO5eDHe}Sz4pZi)@yJ(>?Gso_{qVE$%UaA zmb>gjqwK)cWJH5dj zLDwNI&T0k2?`RxHhaaoO_KK2l2nN3+Q9K#9g|eE1Nm`IIH4hG1b}699DFv+R6B-S4>(NOq__&1BS$I-t8>D0LaLw zUH*2O;J(7P^)##54%n|o7s1c?p;wA7g>>dedg3EZyV}w4o%ND)Hx0jT;HR>EuHw+o z0Pq!fQfG*poHhPbhDP$OPfwh2J>?xfaSR~)=XA2CL z#k(-4ANjq5Rtb1EIrVEV^SCC?0T>&u&RE{!`rt7D_pgcU_{cCR9<}e zuYKSimE0A%KJcyLT=Q#9TI11=cO(FOR6@b}W=yyT2(XdwHqwJN_EB2z#A%G`LnNPH zE9%WR@@dk{XA3IW~`gC%0>1v1#!l*lYK|7zy+bmunAaSa#$>5r>5@TEw*vQ(yq&E1U+SrPoA z!Yjl5`$JOl^_0a#U%5yL+8g7p8Zy~A=ZY!`9A4VsvOTw_1UOZxTo(9SKSg^&%SgV_ zek9=Ojc*`CW4Pe8V;aZuzyQFSx9|YJj5OV{jY#iQ5bd({Zk!9BoX1_}Q4}y$G=22? zYt=vRvfO{XMNcu*bu(?Ae3e8dd}kXZ8TSrUqIG$-g_2B0#9e*QO}# zq|gpc=5Uufsh=_X-f|NXu0rY5!ZKK!H+bRYW5AgLk^JMu`mtlJZS=y1&JzEtYh~EZ z*KYeBwvwFVi|8dUVJ=wIF$PgH)=>lQ^JzJFzvIifGHDyPQAP4kzi+Jnb-%L$oNha5 zOB^jkV5Eox(@8qNGYGXvn1{Zu+0{UXu$t-! zmt|axfVl84qSNfNJG5N=-Tm&npNxIHm>&VgU*vunKd7)ab8^*jQL5w87*Gz{zs4NX z%+S)!@LP{Y8?@7oxH4jn|mYQsJGioh#~!5hZ| zP(N9ZnaYn3RMyLqg>ybn8;biD&#s_ER_;-oXM#XeAc*f%zrC~;ho)+!nkv$h&k0hk zn&6j^D$yk!-Jj~>R_X~R`%SABv`Kya@a4?9!@ae$h137>o#=lQiZUGqkOp`Y!D>u3 zC%jV_+~B0B_yc{m74~S#e6fi{c$-C%7hxDFf&UL%?;TGC|Nf5?84(U;9^(vA$f`K@ zIGm$I8b*X7MLvIZAphD;9p_%AF1QPSgB}St!$`#FRe5 zQA6!w>s#9uz{dA9e0WKrocx60^%sWmt0SK^+G6>{kWzpUY^q)~ z?uQ0E3bdW{wtc{?`h1~xzAP7pFWDd$6S5xT%`N-z-~|ur%tm}*20=g&`pM@u=WZ|zEmCOQ}tZW!Rs1*2oT57YCTT^$dY-F{NHHtucmXz{sVR3ODMZs7{W z%hR!vJYZT}8FwcGlQ9264LvbhKKYB$O_9}57<@D4ad)ekxk{$kZYM=Dyzv4LLBaFc zoT%qLZjOrk?~EA)Uepfk+dQ8oqxMUFHD>uMf1{oM1qT0Jc}`frqH-0lxDBpfD2!qpJ>$7L_}8s(zOFyQg^-!?fGDH)7Bn zwWt$B!TA1~1XXy_0mnsVSyq36vHcdnBRm$Ut7c!MOR3i5M9=`W)=hZ3C@iQS6p?UKd`Awg^ z@_=8XozpS2N+T*Z7|h$!>&Jhdox`-)}edn|-D z_08~-Q0TqhvJuf(=T9_1p-=g9Nfk_{qfbU3a&1=O8MNnf`qSF8UFRC1Hs|JEod&$z zK#5hKq==p4{Je_*mI`ahnD2wb5^9~hJ}Wb+!#S@THf`ih=s+IpwX+AH!qq0X|l!C{BE*Uw$q3)6*Hj#h~_pI0=yI94}6#a zJcmW*?yL?I#{4e6_}y{c)o1;@#KcKf+YE-FUPY(_SDE+|rXfb!x!ORH({L0B$kDk$ zU}9!Qd#cGAx++GdYUmSynyzb4o*)Eg0xE2O%F6_E=yZv+$0>|HNxJs|*0bNcU5jGo znU!ke*>JcT&41GDvari-xASfmZc6<4DAU5K^>}2=BSi_Wl^mm|q{pvM)4uqM6#LPS zSPW(A3x%_2S6>7->Rehj-YzdeId#Io%QxoEQ98IsYG02S`7M|z4Z!$B)^+F>)T;*~ z$%fOQH9Pm6xYr&P?4;u=YB9SJ>^^32dOVZed+ing`1W-L!t29Z)5~(UY2HPxnkOpRSGd z$yCb?UwyM#>a{o56EZDXQ(La|ZS2pHUw-}j$gN^S6peCK$1WZ5yZ?FN>(F+x|$+Ci> z%RL#{_^z-N0KgFl@q-^k+$1!>C!@zt_11kqGn%{fni2dSppA=FEQ58jf27Q_4R<+RK`h#*fIikFvx_ zc}-!OzM8_F=H$}a+R2?)q7ytTvG-Eerg zW$q@FFOK)_^NZd{mHsYn>)N$%H`bKzM2ON?K4&;fv;NQ`Tm=n(&gaEh9Xa@OIiq_N z4Yvc~tBa}*h_$WlZ{+}5?W%4}c2M4Yc8=P`SQn-7Ce=(o;X{I$)hMfR&DE-cdT9R5 zw(8U)-ZKJ)E;xz4TL~ug-1ijC&xyHZ4Bpyb0K@NIM}FdnhY=6SlMQ(dlihx~Cbb(w zqWuk}d5~k~lumQ#>-87q$(t62d-#?5&fZZ~?ZfhbXYBJKNsSu?`&>m=J4*0FQnt

    1pD(J$`8a}Tn=VA{rOrqKgB;g*EM(*+8G`AhF4ZE^2J2cl|(rzZ# zwZFj?5!Y~y2R@ctKvtNV!-@%<1*9|aweg|?YBRX@B7$9|E_3n)%V<`KZ3sk%Jbl%R zRZHbiKwb>b_7?>BkqNott<$3>>Em&x%34Xj?e8wAX)i+T3Q4g|njDK(@Nu(9WUhiG zK(F1IsgC0bPBgqo_65-P!g34uB=6g*uvBa;Q^IRkLxZWSuP-e3A_wC_fOjvpLCrAH zvd`3*I;|}lF{4b{vm!>teOw`7lEVgtHk{W_8VPL3A$Fk6Vn1>Vc53d_EH&^XpD%p= zs^n3raHHe$z^f?F70s@q#!aN~6@s>bJKTLPGlHQ;xIs*K@0@~M1Z?z%*d~KuK_5vy z`PvEDrIG-&CDU*pu=gw}z3FD);?tm!)K}{-3j&h}?EBL{m##0)|BQ1K^P5fX zA${$4orldLkNEM_XdqwsF8BHs1QP%7%4YeE=HF=cJGd2!r<#(-_80Hp;v2t4U4MHG zsve3E9mpGg69iF=hWWr=7jFhFso1h6htLVhexRkUViRkgFQ}nEg{bywh(#vtNUFoz zjTpE6cfR5wH{jiuT_T1$0n8~(j7>D$o4Jit!N;A-f(0DT*Sm;;eD;iDi*2>vKoV0t3vY4_QC5Xz^QGUur9A8p$oEr~B}sTrPVJlfIE;23n5e zi4}+w^u=d9`#8kcAJL{;ujIwPo;H7tzHq)Do_*%~1wc{Yj$>|jzzzZOBVcw2-F5Bx zD;-Pu`jNU<<*V&{V?EnBs$z-JX9G0WdQJ&mxUXxusLNi0;!X?a9eU2uNW$qOwV4g9 z85n9>L;y|Z2;OXFP^G_z>clEajeVLt;Qykja*A!-|2zhiJed)GC67c|NF_o3V=FC&zqpDy0ak0v`=uYgxRs6mP96WbC~tPw z@B^I#SE8E*niy-V)prNY0bx~)1SsK{*W3=#yRmMwKwX)$bNYF)=Lj=%uXTG~diY$B zbuZ7UJh($u-y>^GV1U3i2e1PiP^<<6B|_(rg=6evUEFoCB#(0ZRxfoy@bQXim6URq z#$t62=B{8ac(ntRd%&@Ly2t@8@STYdkj(NScph;Ea$frc1Y~*k$m_gBc#qL{JeqI< zLO!Q=^dXXvYk$*JQC@ehrd^?0!aGE2j;ZP5i_?}IFUZ18-z=IT7q=QA0pBMTgTo3| zRL8wYPy83o-;a8HQ|KOR2+zP5Sg3b$8@EP_BPVMl)0Z=It9m}|vO8{8YRO9tbFljo z(sD*`hw!p;K5g$rOz6+SaORm0B$7>HB!_x4`i=>+T-I8COe)@7;2DuQGk$6t*eF)_ zWL~^JTnICw4~pJNn8HLJDvi%o`u4Rl@XFNULeA$Xc_w6|uqa9XFmkIFtA{L+1j;O( z1$+mpS$|Y^d2vMIGS{@qhCIrg&g)+#?g?GG|C>+vM@CHVSKx4Lm&iV2c+7X{_9qLf zcl!56*FI@5snaLngc2MGEXC5vgsefJZ0rRMTM;NMN{6vCaaQ0gw0=pFw&y|oWU4}| zO*zZPEPx*OW}DKsW}EnWFfhTdO#-!VtW^;)q*E(;HQ6Nm4tP#+Npu9zK8FrXSVzYSGhkavIh}d+NwUSQJHK1sGj| zUj`7o(|O!t{b#P606DJHX6p6DBRVD#xxJ@CJyrWq*twm?{lFdbuAKh$#WSVFO4Hg= zjOrT$m+lYjxdcbC!D650FuMwWHQ>>wXrPcXG%W3J{YiNZMKdS4MMpr{+H%T|y_-B! z8O>BVd3F*Wcz{d-N>|+ZIWrs|37Vs(r9X3ngz1SgZ^;m z!P6gtYjbj@@wKJ+BTIod0n<&=e_+o048yOEZD1zmP+vr0?OfMyO#BA{V?s{Tfyf;4 zNO;1XLYC?uS=y@f$FxFigpH`J7Y**KI8ES&m(nX6B_pVRV$Gjx%Op>#N#EuH# zvC1*KZ{9(T^4fpulW%Qc?Qh&iJSv?Vmc;{MzSHPVggH8pKtZV#9L%^94bul7w10uL z_gV@q(Aj)x#l}g5HwJ3MmmFew?I^WEEm(L+ITF89HS&C_@{fqn z9}L5{|E9$oUL43fIYYD({a4iOw@p+<(%Kr}tR@`6K)^9%s8sRKhDiTeAa_pe(<_DN zikopw=5Hei?{tOGm%4dAsB}{vh#kG`mYTyZM(G#QTz8NdyLXy4<`e`$c|8(2?I!F4 z_^vg?&nhCo!GjYw`XTc;%JlwYTP^DkETP(P(7>_I2yy79IeBq#8m4TFV_7g*MNixr z(IbE24LG$*dOvR+o~$E|lpt#l<)eQ@03XxZXa_CL!ZAt%+MJ=IyIFwOG9vw=OiFHh zq^6v$5h1dv0A`jfOTQLZU4)Kf-x$Q#+UmX*ut93oPskR&U$-+zN{ZBT=h7OipeH}P zN@mrw*G$?#-O2L^e0VRw!+)4`zaca#%>kiUt|IEx(yfih za|yq4yx1Mc2qq25O&_yeaW-Kaw;snT-MRBMh$SS%f`jh`B}$W5hYftZ(=Lq%)+%)U z#5dY*B>O1*gpk?ipL)DXH%8=VkB4L&7X%Gq7SUHMZ8<{Mj51Q$RW*6;XWIuj-;KH8 zN<-(KrlzY4ev{1ck(<$W!roSl0`0oUyr<(V2x{rW?H1?h91f(7XWLtjzD<+go0qq( zgd0KvFkv_qxielH2qAu(T>9Fiu5#J__2YE8Z##_!qGcELl^j z<7xh*cW>#e`<>R=Zwj#b56$z!X{nTdDq^ptcu;SiT_5zP`%j3Qa*NAx33P?QRX zpm_3ToJx{LGFe18>GR;(#veEHnwtlG7VEv>ju7!TTSm}vKC__N8Uhm-oZ8T6h6q>X+BIzUO zJaiv|+LN$VRj1ElaVCg*143044mzS&$0)CdG>cYCbEEc@E7yp*)yW%iN+K_%?maC) zk;*Sct$sPPGH929NJ@!-RHs{>22_4cr~o9Bno%TXiqy)&%xOkc1^(W${#4%27q{`R};8 z%J0`m9YOvtR{vAzIl=0}4QW>-V``B!g*5revpjWND9WOYXC7n>4eVyRXls|>sdWf; z$NN8h!S%hh7LVhFMwh%YJ2Y~8*tE$tmrukobcQ;Dtu`{5H4E4mZwB=tRO(u-s}gvj zXaa6I5<8)EnjkpBU zyk0Ht_q;vO{9AI=)0L259@EhFH0&nqRr|R?VJq^T&F0#-+J=yrk`` zDiLL2i-*!1CV3wjELt*PW`~QDb&D|cm$9a`&6UW1pD^rK9EY0zs_V-*hh{+ixLxS9H%Ddx_KHx;RK@ZwIg+4pT+ zbo%l`a1Erd___0xtUR-8wc!aEI`$>G&$R*32h%+?M-=jb0o(wGpBXxU{O{IBZ#hl* z9Qe}BCk~VGMX64~@c=i`S-;LI(o#7hz`(iR%8Vwsusf7y$70Zx$)qqNyydyF=#CV> zOP*S)bw@rwrY_37en9r<7paj z2V*Os^g0Hind8HfY8q zIuv2#u*7lOhB$#?UYHZen51T8g(^awQSP3`1q=?{e-GOhm7LU!9T*|x907^%wk?wz zlDf(Yl)^vd+EB#SQW#q&JH7IUEvk*d=O_g{@lLNtWmgnU9zitFckJ?HG7%c|o8S#!Qa3MSyerzxyq+{bKbL+h})a_kEZn}fM8 z<@2(eRUBgN36;lBxE#O19n&9y=XLJgq!1go_4W(@SUXjz;y0x7|0~S%H%mm^3+Cd1 z353#}ZSje7fAdvrBL?D~_>NjE)?7B5NRDx<2{?~_ah_t8G2QE(a$ki$$u8B{QQa&PPdyL)#x~)WV$!0xuyO9E!EkmR#4_ zo&(yL(i$U9t%XmUFKtB0>P_=1GfB*bUT2fBN`bg+u15uFJ`X2AD}BFM$U-q zB##HRJo=_-CFVq#@~e!cdCaaDE*5)ozCiL?$Z-~#+mHLtNYuuxy&$k@&hd#@L*?~+lG`F}qA7gHq|!n4=n8iys!=sX|w zyxDfHbul?b9aB*oMYPwI6KP4Z0e)hNN#aZYIm-uU7ywV)aJvb40xO_$K=;mv(^Xpx zNf*PeUpr-G`wBs{NWL26m*>hO8JQ8b2Bn`ema9!_<31)bH?yCuH)Gxo64X9Jihgw- zBpM$OEtGLq=>wWOGRoz(_m9&yqP!Uh?{^nF=Z1X;#c*o%O6GD1u}ZhF_c$4<={I=k z;im_R1Li#FWj1&Y7x>`idjflg(;|WLLHsu4z3bC0kN3L22TO`174MDRi%4!>lNbK_ zLV;{ar6K%NGf<5D9W6Q^S}$2ED~z72>?-^F(XYSgxFZXA%^djJtcIIY?=h!v+|U#GSRhWnEtN?b&8Ov;**AD4Bo3Vd83nzpe21sDdWpUJooUJJTs%#0y@B{6*?9 z*a`v7sCx(KLr1}}sBb%WHcswE#nl%XM3qT4h^Xt`{Fybpk9HuaWTSw9y9rTmP)_nE z1xOK1hJvYH&{6@csf7&zO!zHSG^b;K#QgnnUkq^`S z)8;TWeQzRzW6#g256+R@(Q7l6&MtW0HRLNx>V3`h`kb6WN zzc_UEzc}r;FI3~C+gsD}F?Lp5ZAnr$A=|Bnc_iJvGGJ1f);AIiepdDKRXqE4Ig zB5)#bR!2~X)CF(RTJ<7HUvWTOlpCB|?xt4ooy#Pwy+h~TaLt(9*c#5-d_tXnB3}Ve z*JbEq?lJa$E(acCH87SpP&{pnPijt&GL0>%0JOL>-Jz9s4^KVX@9jJ0eq1FZ8}NSQ z=Zu%lry$C}MMs*wGvn!fm#+uTRjV&;A(ldkCVT(7_O)O6l*hK}0i-I7qRQyEUqre7 zA6!g_(k56CppkCiC=MVHH&Po%@;eku8r-E01_~cVC9v%I>FP$?b3TCbU%xP+%+<0; zO+Wd^&J7+NxJ{zFApZE*lquAf@ZMPyx7DeJ#3;6JQSSOD7R0NmbkaO#j8t8*m1sa} zRMlkm8bM{PYs80IjokPmM(=}*0FKli=(dJ9#_18*96^jaZ~3!9l41{{TbP-d@{l>s zkp9|nbhzn+@7k~*SVHH)QufRd08yCT;9Q=*gZs|(&C8H)r>QKVsx+7LCHS0}t8lWw zH#KH*^gd+HorIYm@tbfb2CN{497cfM+<;8P@1TCTl)!y}SmP*N>$BubO*;a=_oI=9c; zX|>9y1A6Kbf$xkXuWb1doe2fGz_t9qFFCB88~X2s*Cne{50b7$4Re$+!M9uuo1<2_ zbFd|{lp_3>fJX?R7A<%6Mb}!8+_VbRyF`WK{bqZf5!xAbHd9`g( zV*ORuy)wtbGMyV}$-zALSH~}8@@Vba^|J=7dii42L?L@E39iml@Wm|U5#JsMg0$e> zb^s~yGe2Z4XUiIfe9=NN9* zBWF(HIHPS@Q&f`|_yMmI7A&m}D@|;KeWFW5t#~5YO!G}$><7&=%|CQ~jf$dRkD(kDZx}Il!&*Iv2fFLrQ!xdU-;9%gkqnH89 zrk=Y9C=pgY`%aCzD-P|A-iQs?0vjM2s*{NnlROAJPCL6(S5>E|bf>>|YQusYjV@S$`~Jai-gDqT$jk{B?UURX+MM2gd=dg?aWCN3vq=MFJ8`3Fg= z8=`NM>cW_E_#r=j|#`C_`)5SQKaM;5Y=?Nd2YL4FG&qp#=N zo^&9Q-eGlTOHA-$=3wq>UxBuzBc+gG>cmlN^4DK^ckEW zK^paf2BzJYBpqs{e=HWvyHPuqlJv<60y9P%Qx1k}BZvQ6GWg}5I9uK`94OExZ&nWL?&l?gztr_zC)bV33z6Z;9?xT_D z1pLPKqD-F8r@BiiECZaGPkV7OC`8fYA&7bP3E5UN^-e#yv{uV@DVal76+LjL2stVSUsp*O;rd_TpE9cOK9;tU{+vnhw; z1196nz?A4cOao5F=E+N`Wtm3{>sOo#oEP@t=8(8}s;qWHqe)_U{npgnMDYJnOjrJs zqFtC#E_oz;Gwsg(Us6neHuw*iLm#LW{!b`iZ_}!<-YUF z0>P%Iu$~{CYYjzt2!I2MUBKPt`>r&hSbxb45n=C4=G-{H4Bbgk8pmbwEPyhla^6{# za&qI>p?+@5=iLmBnuxB!etb%wX!cnvQO~{f)s^Y~QWP=CVK!&=X0u73lzYy`bG4$K zIN4Ya+=tys2Qihm+uWS(l`ouz`q zLsNmujh8C_w&&)4HSU;atX5n~+A zOlF?lS9x-C*o%D4YVk%u_UrBahQ5sO(<~u9$Cbz8G@gpRDCT4{xF;V zIi#iEEwp#K?tkI-7sG@4CVvj|&e(GE@ru>V8yVcApAZVc`Sk6@MR9#12-+5^C>~QKSVig5G&TI0q*n>e|~;8e*8d z=@l@FMW@<{^kxMmjk!fxd1bpQwE;I6@E|Es)$DqYyI*NHCI<>hosyZd{&b8L-D1cU zQ}vR~lOgyA{H+5Ec&NcGHm;%(eb#E@R;{cJE#?#V4IWU?7oSyI>ko;jFXnlly*5U( zvr&|JJ<8d|5xg+kRmwSs9iRl`|~W74&skx`+V(AzFdv78&{pt9Gag*2{# zuuTB3yh{d;N-LYRPfhqhVBj0dUgAj@Ci`&(NvzZd+`g!6Q#tMs@bln1d{ zv?4oediZNI?%}%1Kt@W=M_-SJ&H)_HE!cd2xVb=9p39r>jbIlx_Yip!%Fu#(Ozig6 zNQ&`9-&Cw55%3_P5dQAI18Tw}SzfG3`~mc2wO!)Vpw}vDvg#X}fg*;E@$m;7MHRx| z*!DDsZ*2GBx4$_D<{r$mn-!wJ;)G() zXS?BHaz?`aXmUb==E3cZusArkn!~ehNJqjemPBHjHK&i1+ZgtF4t_Nfm+P3Oz%%=< zScv-yb@AgD^PI0WW#O&_KBex4u!c8JKkbf{1$BAcOgJvvrFE%W+tNMnuy9A{><;l( z$G zH&=v1x`@lVZ9c*aEe}+?~3bdi&+cK*mWe%I$~YA2o7u35Pi@FYc4Imfz_L#J?_eVCvGvX1bA zbO0hRmh~S4iuq)-b@3b{O68-{Bi`0H%P3lviv4& zUa%9ur=f=9_276A?}8wT;7IJDbH(>b_L=HR%`<5Yxbx=PDPqYH{xwB!U7sf2H9hqW zvcIQ5I1P?vl@brRKdYNBoMb7Zb^~`0e!BH?v&a(ZOT7r8f0VijXWq!xI!dEZI-duW z$O>QWQ*)_sCSjTeyxfy?&LX?uxS(T?7p||!SK8hUku^+L=QJc;9uP{vSwSyS9wC;7G*o13yOTVw$6L6HvB%sJ+YQAM4MK=F;D$()%0%U1yyp zP?!gn5k3%Xh0c6++0dcj6Fu6p4$+T&hE6BR$2GzB1};;UlJWsSbtW+Gz|+bS}Xq zogF-PTL88IYtqRADNnmjpa=@6`uedKDgG62mT+t12~3{@qYt*iN+bc^ILrQfoQzEc zE3VpymNAFpi)B;$>OtnFRbnhq7iubTY%m`h&q&Y*i)^KBk}|2O1%AIrwlR@|%k?2B zS{x_&ScZ)hi<@Z-Cnd+3uv|(aqa_yL-9d}H&(MHakmt&iVACPuS+4rldko>yb)bNS zQ>F&==NdOp#`3@ZaO@<@#d(938heIEuXExOI7|HMzs(0wAeTobnaju`(FeW4H>?y* zyi64s2Vg#iLREg{t5prU-rXPl(^hh&&gECW2uoOaN~M_oyZIp|#P62?8NJKNwZG^2 zH=pj1ZP|+}(XorJ*LDNBz~W&^7%};n2OgmvWAWY` z9~&pen(JBNmunyE(tlLnixts7f}Gh((_ulL4)CO3TG$b)R8Dzr*|j}qdzDDya&wjj z#p!g%dKach+R7%(^UN~wl{f?JD%(dOUGl3d@16>R_TX_3H_vhTh6i>U_mOxg_d?iI zbs4Y9ZQOWODo8wURO5be!(1x{^`WPLROEmD#}5U?g64vWnw(3Gm``dXUH52e2SjOb z^XG%9e!PossY=F1Tpexu8+E`GSv?@(;7!%{8~g9Jnkp3jPjDjq$4xx;`hVTTEbq(# zPXs@hGdfs*MuVs_ce9D$PxRJ>iS1*l~lp*e*wLaDS^1ww@f-7#0cJ z!l-HMx3<5buCSj2%C(OfYt>p^MxGBBX=VBLytz83LX8y^H>pq|CsgfG;kR~5kTsI~ z8*))s%slm};Mg!vX31ASx3OfK)d0EkZ$Rdcmuy%taVC`X)OBoN(@w^L-65AWcajKk z!Ic7l6<6TAd~;Vn2f3@?No>&BJ#*yKa1)gw6ZG(X#LbP@$YblVj%S2NuN{i*cq|1P z1Q}bVnfyJRpVVlW+IzH$|NnbjltI$C2NuEcwW4vKNzB4?MN;+D9+%S^Z z{?_$Ozt7PD{^%f5t!7trCujqyFy3|h>(DLEZ_HlfAv4df)Q%s<@5~#vHQ~%yqWtG2R)~|3V29~O`J}w((d)-UNsGdk6^c9@EQw>rV{G#?C@848)`cK{V3&%hFu7BOa)G<0FC%_gs z2pjuuTj?>aw0J&Y@bW;UWUJZD+?^x=?AQjjZ|zFL&fa7J{*B2* zCk<$Sp2?8SXGN?S9^yI)@!;Skfbz3!@+^}2)kR|w-P-sI4@8M}b>3I`&gY%gGB2bRxy?Vti6Z^w z>pe+)mM}*j(kk}a_1ry$4CK&Skcu0sWfnq9|##9*<#okAW_IVMC?3JL$8Q=O7yh?>|JcP<}eSkxkTk3XK z1A#Ya$T>gjOEmgxEf)DiaX?sSxic~DKn$8WcAa-20cm*3)E1-WeRDqxKaJQHN@KQQ zDE=ud$Gb;pRtC6_9UdqE+|t|kln?ACFOzN0!1LiId@0GBnQlkLi8Tf=6R#D${VC01 zd_`Do%mI~hq7G;pZ_?JtpeXn&siJwQJ{P0Znz$qf z?AOi18hly@b7e1+DSR0kG~zkwdv%IQKn@Az{mubMKq5|9OdKPPRofqSFyDLEZzTiC zGE@iKO7eg10G-sazg)3(RKC05H<6Im_2WGu8P*Br+ho4SRl2x#OfpOJ`M4AQfmb*H}9R;>z8=Wr37l8g47qF zl5n;f+*HOn(W1?H@$;-#eDpSI|KIbV&I|pHb|^YdV<81MX2AwEq}X{d-#3f~wgurm~$r^3;Xx3}3;F<8#Uq#d5n44VXGiscKy zY*gkQOuN1_QLGsIP)aW2&Xo%a=;Xb&dohm1aqyySKy%bh<(rNa1xn_t_gjwC7=7~K z>p{{TP|w{(A~I26){GDmcX7BEw1~C0+PYXdaGHpBKx0uHpOAJxz*!g^C@AeNhS{wD zEOHakck2_`p~@0w()TwDZ1MWlbI%E&?Eb%~5=c)6g1}zFUO7>zpy``F9>M6xkq19A zw$aFTSfk}-gyQ)COKj;TpwCWrM33@4YqIsXT@*x zYd&q@18~C{UVN3B3%t(zC~S6yN$ zrw%TtU%-mYOc4SX;23%V67+s6PwkDSn46bYQbLYR8Vt8~&isub1j4_?Vj=ZB+(Q zKHg0{`0}KDrOcVa3+37y%jePy<{*4VaGo>SOSe_K|7CNZc>>kV@jMO^dltR~iU)4h z9UYILwJ8GldB}Wyaii&*Dmp0#4DXAveG`oP&fCAi-60axdyzzfbSz^cbkRnP)n-E# zOcwPM4X__;O8s56!8}DvX7zU{l?&TRy`;y@B0m#KtXAHNcVnUBBikdk1(F-S1mMMq z!Og{@|Gqv|r~6lr++&-vF#9ZQ$u+F3`laMi(Do{-BZPSFc z%O70QGUK|Bu2Rd|x0z5cYra%*mQa3@OheCOC2tT>A69 zk{ALL7>>2j&b(JjmlIO&@V+n{@A2=qc8O(x-*L5$eVr8rX7lc|GrEEuPPc|ezGJfN zkE^)BhT1KBdhpT!oJsTQ;<+x$`LCPujO6k>2Z`M!zLe{7Xd?RMno~E*X$vOSC`YT_ zpQlmdcUkP*ILozW2IS=UaD|@*K}Kp&p~@ys6SQDW3#G|mgSW;K?ZjT+J-N$5Zlkb+m{xe zXj(G9cdYQW3TUV`&aBk9_|swbab5S52^;}ELO!h9FI{`7Jbdl5Nt^UfiTcrYi5V}) z(0I^rS2f)QLt$CN_Xwpc|Ga0Hm(*K_?F$i?9pr?SGnb~x3jZF=E*t+$Dx*yYEj#k+ z;$^l6Y>VY#Ih$EGEW%SrsUy#?Fqjl|5@v`OO!{)?OPo|!*WYemB~;?%IoOhD&aJ`% z!LL(U&c_~L)jXYPW`vwd|u@>%w}z(AHe~IV%1` zdALPyt0&h__h;R{e&Z;OMy4Q5fX=?b9yqXr+cdpA{lheIwPxP`V#Kco4M-_n_s-uP>}3I*v%EkGu4u=*Hd%T$q_3*U=^Q)lilAF_*Le~!a-z*-Zu@$tb3^CmtAQM^pZcD%q46+`6Hfap8av;|E#i<&z zj|8{p2b4#29Z%~G+7bNe;8e?3dI~=lwkFe2W}|fVFN)Ruv2|EhmP?-DJ93HI<$pe* z;=l_Ajn0tfTnX`wYotn2HgIhAWv;v!S#dyz0Ud}Ar#3x^#|(=qRT+a}Rj`^6slG=^ zK3$%<8#yC8iQcL*!CaQ(sFj}w-~AAWi&oUGlG|eJ!ErvCM7+ocz)D5W2wiJU<}s#Y zAt?Dz8Z*=MK#?`#TS^PQG@-z^WY=YwR%V zbCte27j!rm6sTBP~8RGaANd<>haOUhYmlQgh+Qf!dJyOGlYsVjz>6_$W-eMuJ;w5Xqs1y`2%=Jx@mJd z+8L?|DE@2fzhMtpLEA@+K1dtCej$0@if!pe!itaa`8kE8P7oV^ST*y$GIF(Lbj=K?cB47~NtcDc)x zRTRzWxQ*bwopN*Qi`P!#j(xGL86iIP==1G(r2PEwl4J1u^l@tghqCRkrmn1;_@&JN z)L`nH?~~(utM#P;V{iU`-v={d4@79NHI+fj|KrQ4=-&e3pLyy<^9FoFN7>aA9d-1L zisUY)Xh-LQ8pZmeic=q;mosXxDORcZ$g}-d%)OO%zK=4P7S$f7HAXb;`xC3Invc>( zR%ZjR2ZTCeDdX%fT^pu1^9-DfE1GCewOBbZ_BRhat_TqR>Gx1l)4Hk$nDWH`X{!C@ z+gU?Z6Lp@3E5^ob@2>FkzVEYB8m))f57pCnR@WrfdeuCs+GOJ}7R1h}ZeHPE9J_W` z>NTv>*SgP)h1PtU&SmHIT|X-aaZ|~`i1_Q9{#Hvx7dw3IdmDD@(GMocFMV?U=T(n< z)}T>DP2b5eyt+J+F&eKu``h#VzH}9HI&3fYD-aJ3f-MyVGT6=4y`~F-y*APK6w>!h zI)CYHGi3$gp3ijdK9;UzRkZaoJ%n*reo)OJu|&$qf@`mPA?SofkO!8A)8!7?(nYX` zj;p1SDgsZLlG%B(e!LVeK5l}Oe_PH6m(3|J}UyQ%HsqSB*?!Nr&qr0ji zoE~r=RnGUeC*=QQ>)Yd*ZvX$^+Zg4XN;$_JNur$3t3)SfMdVO(Y?i|uau`E*4u#xQ z&LmPf%()Po4wNv*jX7+koS9wUcr&*$^?x~`WYiQj*` z(ssU{L-e>RgFiwQu_JK8>YlJNsq{xD4trBcq3#L8InPc=jeUGoZ`yQeu!`m2L{E*{ z+Rmt44ncm0~5bcX9hNfmeXR90fT7D|$V%8!r=hRP2X*t*;jUlsr)KPA{J zc;Q$V$X?4EXJiBIa2J>02kJLuKl^Jb4{IDimM5IX2wXVshon}u$?^0uLIL!PW5xPw z0w(pkC+bx598dXP*>^L%7-_#|vYOwVO6TvbZ>@eebuS@&{$ZoL0BWtVdoPhk1b5sS zXj-5**4Q_Dn?s^_G@Rr~9rBrF#FJH*xwaeW-N_LpUItRX7t~FKIRO` zCCJ?~kq6aEuIGLRR5}bx8FRzZiY%?XlKH8u;!-?qQ+~!Jci!fzMPu$<=ji;Eg8A0) zsY0H^#c*h4>KUA_2$3vsWX3+tANJ0EoqeIn>v*$7{`MelsFBPYtU z8xqs4R7E87Fek2+R(SXt^zt*a9~15TM@-A6W{l99Li45nziWT_U#>l_DI0iRW0%>> zghT$9Zasg0FwL@5k}5j>wypcBVBr$_MkTM4$hF-0$@S^N>GEhUfGF)_(B_&FMYze; zlai3jWo8nlQ=F5n5mN}*8i#?p+&HftZ@bGb3dYdR-8j6Zy{akA7G z?|1-eA?{Q|^&8Y~%a(R);AgFU7J0rzX?c~)Px101q)<;uU0G)fZuDS?b4&YibE*gH zy3dlAN7!Q>jIoc7N=?I`Tx!k@XFf_@eMs-qE0Y-*_DLR6rJw(WN|)0$g@K+ClJU-8 z+3Y7|r7npJKiX-N1WZ*;y_`BU{T>=_soQosG~oH28@miOmmi{7Hmlg^8585i)QrM1 zd6~>$tS!R{#~32P)Ooh?u03HQz6C=pa`VAZ&t&1R%};JZ&5^!W2Nb_ECf0n2w+-jx>Tf06o1xx> z!_&Fm&sW{h_06wJeC_CY^cgPL&&JU8dR&C}JZvf~zp6Iy^k$OUgN?RVb?xNbzRgI& zM%p;y%I~ejUjGreX-hq=*rb|yb>BbMy}l)$$?GQKTok7JMi<}lsWmt@6(x0OuOYX; z3&cwIO$qsn4&?zm0eAX(Si_{w%n%P3uJpluo}fGLxuV-{$KVQ^j5wo`nmZy+e$L7% z67rJ2y}_ro2eipXem6w+8FqqIkl#Tzh9r{0UNXFc2oGxH>32coJXxSexnO7WOD|{< zUsdHNerNxfVwqa&E96^U&sUc}y~}bcv9Y6s$?9UXxk{9jA3UxPbZKqqSeo)9Fs)9h z5qHfzG&+8-QDZquoEPB1(B?8a&%7!~^S&T4@Y}w{1^my&oi0p!e-vhCcVv1?r=PUK zfhHO}ARSW4iy*d_kIMLYuH6n@x;-GFw=RKoSjN^Iq7c~aZza)oM)d(>w69)aTZG?rol@4s_SU>$ z^E;!_s@F#yg-kLCC+y{XW*5>zSQ!G>PARt3K7|*O_TTk@4_U6N=6qZu7k?RwY7^^h84eWnjw0Ix6Uv~Dlaww4B- zo>J>XLvJT-we0qI)v|5BJ%yL?7jXCQhe#L1%p>Z`j->U+_yU4Fj_~b#-1>2E&1KoyVpHh3>8fMA8YSuyK1&r>=kLHR z84$nhg^Dqgu?C8{N+_+*z$-e|t=qDZpQGf0EPpQFQOn|?9_agUJVE*~U5661i zT7%nBu_(;>P^EVVt*A|jI=jzC%*t3=1f+zgM5tW~D+jjQMpmOzt z@o`%&eK_*bxm~jsce9RokXf&Cesybw5mDGNo zhb`Sxc)o#NR?wH=H58kLSAgxj>BvKbFRZm7hs!~ziJq86_F%W3yTCPsRR6;EJZ@`V zmB91}MaM4=<1$SIY4T(mx*1uG$?a9o7?n1LB2T#3GG$m&{(xxdhAw~2Cq z44W=Lthh#F%q%{jU8!Lhr5|iFl}~H(Ev+pVok*|Y42w>(@$?!&<=n%&=0qs$y4i0) zOLQQ*6ppr3>=9&B^Oe`{cb{+-2!eK3pc!3q--a}w&PPv4`i)62{@r=nqo2%l$>RCl zHxc{d+p7aE{0}jcjl6FR0Qxy+O-|U|gBlIs@vhI5P5?d8Jt((JhtH?n5L_PGARG`H zu2k}jF;5BY@skCefr?q^w#6v+1o~eEYLDCd`|sc_r!;@9Z$eE$c3?o$EzJDq^Iq&1 z(muxIK;_2))rPwU|JZxd+t zmIWjML7?;(Q~&uaM+1Mh`?A2+)*Iu^H$438A1p2PsnWCKCmttmNyTrPm{n2oYv{ka@MTht?ICAl|oU|*G{w

      adse=QVtPB7RC^Tug) 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

      FlQ`QQXjZ*Z)M-1V)e|Q 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�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 literal 0 HcmV?d00001 diff --git a/ipabuild.sh b/ipabuild.sh index 26606a7..e9ea9bd 100755 --- a/ipabuild.sh +++ b/ipabuild.sh @@ -5,7 +5,7 @@ set -e cd "$(dirname "$0")" WORKING_LOCATION="$(pwd)" -APPLICATION_NAME=Sora-JS +APPLICATION_NAME=Sora if [ ! -d "build" ]; then mkdir build @@ -35,8 +35,8 @@ fi mkdir Payload -cp -r Sora-JS.app Payload/Sora-JS.app -strip Payload/Sora-JS.app/Sora-JS -zip -vr Sora-JS.ipa Payload -rm -rf Sora-JS.app +cp -r Sora.app Payload/Sora.app +strip Payload/Sora.app/Sora +zip -vr Sora.ipa Payload +rm -rf Sora.app rm -rf Payload From a84bdf6a5842a82a235cde7448a12f92aec57346 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:29:30 +0100 Subject: [PATCH 15/30] uh? --- Sora.xcodeproj/project.pbxproj | 18 ++----- Sora/Utils/Loaders/JSController.swift | 48 ++----------------- Sora/Views/MediaInfoView/MediaInfoView.swift | 10 +--- Sora/Views/SearchView.swift | 16 +++---- .../SettingsViewModule.swift | 0 .../{SettingsView => }/SettingsView.swift | 0 6 files changed, 18 insertions(+), 74 deletions(-) rename Sora/Views/{SettingsView/SubViews => SettingsSubViews}/SettingsViewModule.swift (100%) rename Sora/Views/{SettingsView => }/SettingsView.swift (100%) diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index cf26c32..245421c 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -92,11 +92,12 @@ 133D7C7B2D2BE2630075467E /* Views */ = { isa = PBXGroup; children = ( - 133D7C812D2BE2630075467E /* SettingsView */, + 133D7C832D2BE2630075467E /* SettingsSubViews */, 133D7C7F2D2BE2630075467E /* MediaInfoView */, - 133D7C7C2D2BE2630075467E /* SearchView.swift */, 133D7C7D2D2BE2630075467E /* HomeView.swift */, 133D7C7E2D2BE2630075467E /* LibraryView.swift */, + 133D7C7C2D2BE2630075467E /* SearchView.swift */, + 133D7C822D2BE2630075467E /* SettingsView.swift */, ); path = Views; sourceTree = ""; @@ -109,21 +110,12 @@ path = MediaInfoView; sourceTree = ""; }; - 133D7C812D2BE2630075467E /* SettingsView */ = { - isa = PBXGroup; - children = ( - 133D7C822D2BE2630075467E /* SettingsView.swift */, - 133D7C832D2BE2630075467E /* SubViews */, - ); - path = SettingsView; - sourceTree = ""; - }; - 133D7C832D2BE2630075467E /* SubViews */ = { + 133D7C832D2BE2630075467E /* SettingsSubViews */ = { isa = PBXGroup; children = ( 133D7C842D2BE2630075467E /* SettingsViewModule.swift */, ); - path = SubViews; + path = SettingsSubViews; sourceTree = ""; }; 133D7C852D2BE2640075467E /* Utils */ = { diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index 946d1ed..1115934 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -28,7 +28,7 @@ class JSController: ObservableObject { context.evaluateScript(script) } - func fetchSearchResults(keyword: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { + func fetchSearchResults(keyword: String, module: ScrapingModule, completion: @escaping ([SearchItem]) -> Void) { let searchUrl = module.metadata.searchBaseUrl.replacingOccurrences(of: "%s", with: keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") guard let url = URL(string: searchUrl) else { @@ -53,55 +53,15 @@ class JSController: ObservableObject { if let parseFunction = self.context.objectForKeyedSubscript("searchResults"), let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { - let mediaItems = results.map { item in - MediaItem( + let resultItems = results.map { item in + SearchItem( title: item["title"] ?? "", imageUrl: item["image"] ?? "", href: item["href"] ?? "" ) } DispatchQueue.main.async { - completion(mediaItems) - } - } else { - print("Failed to parse results") - DispatchQueue.main.async { completion([]) } - } - }.resume() - } - - func fetchInfoContent(href: String, module: ScrapingModule, completion: @escaping ([MediaItem]) -> Void) { - guard let url = URL(string: href) else { - completion([]) - return - } - - URLSession.custom.dataTask(with: url) { [weak self] data, response, error in - guard let self = self else { return } - - if let error = error { - print("Network error: \(error)") - DispatchQueue.main.async { completion([]) } - return - } - - guard let data = data, let html = String(data: data, encoding: .utf8) else { - print("Failed to decode HTML") - DispatchQueue.main.async { completion([]) } - return - } - - if let parseFunction = self.context.objectForKeyedSubscript("fetchInfo"), - let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { - let mediaItems = results.map { item in - MediaItem( - title: item["title"] ?? "", - imageUrl: item["image"] ?? "", - href: item["href"] ?? "" - ) - } - DispatchQueue.main.async { - completion(mediaItems) + completion(resultItems) } } else { print("Failed to parse results") diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 9f901ad..6f20a7a 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -27,15 +27,7 @@ struct MediaInfoView: View { .padding() Button(action: { - var finalHref = href - if !href.starts(with: "http") { - var baseUrl = module.metadata.baseUrl - if !baseUrl.hasSuffix("/") && !href.hasPrefix("/") { - baseUrl += "/" - } - finalHref = baseUrl + href - } - if let url = URL(string: finalHref) { + if let url = URL(string: href) { UIApplication.shared.open(url) } }) { diff --git a/Sora/Views/SearchView.swift b/Sora/Views/SearchView.swift index 7bef4ef..42fd3c4 100644 --- a/Sora/Views/SearchView.swift +++ b/Sora/Views/SearchView.swift @@ -8,7 +8,7 @@ import SwiftUI import Kingfisher -struct MediaItem: Identifiable { +struct SearchItem: Identifiable { let id = UUID() let title: String let imageUrl: String @@ -20,8 +20,8 @@ struct SearchView: View { @StateObject private var jsController = JSController() @EnvironmentObject var moduleManager: ModuleManager - @State private var mediaItems: [MediaItem] = [] - @State private var selectedMediaItem: MediaItem? + @State private var searchItems: [SearchItem] = [] + @State private var selectedSearchItem: SearchItem? @State private var isSearching = false @State private var searchText = "" @@ -58,7 +58,7 @@ struct SearchView: View { } LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) { - ForEach(mediaItems) { item in + ForEach(searchItems) { item in VStack { KFImage(URL(string: item.imageUrl)) .resizable() @@ -73,7 +73,7 @@ struct SearchView: View { .lineLimit(1) } .onTapGesture { - selectedMediaItem = item + selectedSearchItem = item } } } @@ -117,7 +117,7 @@ struct SearchView: View { } } } - .sheet(item: $selectedMediaItem) { item in + .sheet(item: $selectedSearchItem) { item in MediaInfoView(title: item.title, imageUrl: item.imageUrl, href: item.href, module: selectedModule!) } } @@ -131,7 +131,7 @@ struct SearchView: View { private func performSearch() { guard !searchText.isEmpty, let module = selectedModule else { - mediaItems = [] + searchItems = [] return } @@ -142,7 +142,7 @@ struct SearchView: View { let jsContent = try moduleManager.getModuleContent(module) jsController.loadScript(jsContent) jsController.fetchSearchResults(keyword: searchText, module: module) { items in - mediaItems = items + searchItems = items isSearching = false } } catch { diff --git a/Sora/Views/SettingsView/SubViews/SettingsViewModule.swift b/Sora/Views/SettingsSubViews/SettingsViewModule.swift similarity index 100% rename from Sora/Views/SettingsView/SubViews/SettingsViewModule.swift rename to Sora/Views/SettingsSubViews/SettingsViewModule.swift diff --git a/Sora/Views/SettingsView/SettingsView.swift b/Sora/Views/SettingsView.swift similarity index 100% rename from Sora/Views/SettingsView/SettingsView.swift rename to Sora/Views/SettingsView.swift From fdbb3e1edc9d4af29fc739a4693d5fd2669bcdee Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Mon, 6 Jan 2025 14:01:21 +0100 Subject: [PATCH 16/30] added mediainfoView UI --- Sora/Utils/Extensions/URLSession.swift | 2 +- Sora/Views/MediaInfoView/MediaInfoView.swift | 130 +++++++++++++++---- Sora/Views/SearchView.swift | 34 +++-- 3 files changed, 123 insertions(+), 43 deletions(-) diff --git a/Sora/Utils/Extensions/URLSession.swift b/Sora/Utils/Extensions/URLSession.swift index 6bb66c1..7f3b1cc 100644 --- a/Sora/Utils/Extensions/URLSession.swift +++ b/Sora/Utils/Extensions/URLSession.swift @@ -11,7 +11,7 @@ extension URLSession { static let custom: URLSession = { let configuration = URLSessionConfiguration.default configuration.httpAdditionalHeaders = [ - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" ] return URLSession(configuration: configuration) }() diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 6f20a7a..81f6c59 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -14,32 +14,116 @@ struct MediaInfoView: View { let href: String let module: ScrapingModule + @State var aliases: String = "" + @State var synopsis: String = "" + @State var airdate: String = "" + @State var genres: [String] = [] + @State var episodes: [String] = [] + + @State var isLoading: Bool = true + @State var showFullSynopsis: Bool = false + + @AppStorage("externalPlayer") private var externalPlayer: String = "Default" + var body: some View { - VStack { - KFImage(URL(string: imageUrl)) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(maxWidth: .infinity) - .padding() - - Text(title) - .font(.largeTitle) - .padding() - - Button(action: { - if let url = URL(string: href) { - UIApplication.shared.open(url) + Group { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + HStack(alignment: .top, spacing: 10) { + KFImage(URL(string: imageUrl)) + .resizable() + .aspectRatio(2/3, contentMode: .fill) + .cornerRadius(10) + .frame(width: 150, height: 225) + + VStack(alignment: .leading, spacing: 4) { + Text(title) + .font(.system(size: 17)) + .fontWeight(.bold) + + if !aliases.isEmpty && aliases != title { + Text(aliases) + .font(.system(size: 13)) + .foregroundColor(.secondary) + } + + Spacer() + + HStack(alignment: .center, spacing: 12) { + Text(module.metadata.sourceName) + .font(.system(size: 13)) + .padding(4) + .background(Capsule().fill(Color.accentColor.opacity(0.4))) + + Button(action: { + }) { + Image(systemName: "ellipsis.circle") + .resizable() + .frame(width: 20, height: 20) + } + + Button(action: { + }) { + Image(systemName: "safari") + .resizable() + .frame(width: 20, height: 20) + } + } + } + } + + if !synopsis.isEmpty { + VStack(alignment: .leading, spacing: 2) { + HStack(alignment: .center) { + Text("Synopsis") + .font(.system(size: 18)) + .fontWeight(.bold) + + Spacer() + + Button(action: { + showFullSynopsis.toggle() + }) { + Text(showFullSynopsis ? "Less" : "More") + .font(.system(size: 14)) + } + } + + Text(synopsis) + .lineLimit(showFullSynopsis ? nil : 4) + .font(.system(size: 14)) + } + } + + HStack { + Button(action: { + }) { + HStack { + Image(systemName: "play.fill") + .foregroundColor(.primary) + Text("Start Watching") + .font(.headline) + .foregroundColor(.primary) + } + .padding() + .frame(maxWidth: .infinity) + .background(Color.accentColor) + .cornerRadius(10) + } + + Button(action: { + }) { + Image(systemName: "bookmark") + .resizable() + .frame(width: 20, height: 27) + } + } } - }) { - Text("Open Link") - .font(.headline) - .foregroundColor(.blue) + .padding() + .navigationBarTitleDisplayMode(.inline) + .navigationBarTitle(title) + .navigationViewStyle(StackNavigationViewStyle()) } - .padding() - - Spacer() } - .navigationTitle("Media Info") - .navigationBarTitleDisplayMode(.inline) } } diff --git a/Sora/Views/SearchView.swift b/Sora/Views/SearchView.swift index 42fd3c4..84eb00e 100644 --- a/Sora/Views/SearchView.swift +++ b/Sora/Views/SearchView.swift @@ -59,21 +59,20 @@ struct SearchView: View { LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) { ForEach(searchItems) { item in - VStack { - KFImage(URL(string: item.imageUrl)) - .resizable() - .aspectRatio(2/3, contentMode: .fill) - .cornerRadius(10) - .frame(width: 150, height: 225) - - Text(item.title) - .font(.subheadline) - .foregroundColor(Color.primary) - .padding([.leading, .bottom], 8) - .lineLimit(1) - } - .onTapGesture { - selectedSearchItem = item + NavigationLink(destination: MediaInfoView(title: item.title, imageUrl: item.imageUrl, href: item.href, module: selectedModule!)) { + VStack { + KFImage(URL(string: item.imageUrl)) + .resizable() + .aspectRatio(2/3, contentMode: .fill) + .cornerRadius(10) + .frame(width: 150, height: 225) + + Text(item.title) + .font(.subheadline) + .foregroundColor(Color.primary) + .padding([.leading, .bottom], 8) + .lineLimit(1) + } } } } @@ -117,9 +116,6 @@ struct SearchView: View { } } } - .sheet(item: $selectedSearchItem) { item in - MediaInfoView(title: item.title, imageUrl: item.imageUrl, href: item.href, module: selectedModule!) - } } .navigationViewStyle(StackNavigationViewStyle()) .onChange(of: selectedModuleId) { _ in @@ -185,4 +181,4 @@ struct SearchBar: View { ) } } -} +} \ No newline at end of file From 0d9ff05bb69a79b8fbc53e5889fb151ee44e127a Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:53:36 +0100 Subject: [PATCH 17/30] does even work yay --- Sora.xcodeproj/project.pbxproj | 16 ++ Sora/Utils/Extensions/URLSession.swift | 32 ++- Sora/Utils/Loaders/JSController.swift | 42 +++- .../EpisodeCell/CircularProgressBar.swift | 36 ++++ .../EpisodeCell/EpisodeCell.swift | 119 +++++++++++ Sora/Views/MediaInfoView/MediaInfoView.swift | 193 ++++++++++-------- 6 files changed, 352 insertions(+), 86 deletions(-) create mode 100644 Sora/Views/MediaInfoView/EpisodeCell/CircularProgressBar.swift create mode 100644 Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index 245421c..b424ad7 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -21,6 +21,8 @@ 133D7C932D2BE2640075467E /* Modules.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C892D2BE2640075467E /* Modules.swift */; }; 133D7C942D2BE2640075467E /* JSController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133D7C8B2D2BE2640075467E /* JSController.swift */; }; 133D7C972D2BE2AF0075467E /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 133D7C962D2BE2AF0075467E /* Kingfisher */; }; + 138AA1B82D2D66FD0021F9DF /* EpisodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */; }; + 138AA1B92D2D66FD0021F9DF /* CircularProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -38,6 +40,8 @@ 133D7C872D2BE2640075467E /* URLSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; 133D7C892D2BE2640075467E /* Modules.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Modules.swift; sourceTree = ""; }; 133D7C8B2D2BE2640075467E /* JSController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; + 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EpisodeCell.swift; sourceTree = ""; }; + 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularProgressBar.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -105,6 +109,7 @@ 133D7C7F2D2BE2630075467E /* MediaInfoView */ = { isa = PBXGroup; children = ( + 138AA1B52D2D66EC0021F9DF /* EpisodeCell */, 133D7C802D2BE2630075467E /* MediaInfoView.swift */, ); path = MediaInfoView; @@ -152,6 +157,15 @@ path = Loaders; sourceTree = ""; }; + 138AA1B52D2D66EC0021F9DF /* EpisodeCell */ = { + isa = PBXGroup; + children = ( + 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */, + 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */, + ); + path = EpisodeCell; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -233,12 +247,14 @@ 133D7C702D2BE2500075467E /* ContentView.swift in Sources */, 133D7C8F2D2BE2640075467E /* MediaInfoView.swift in Sources */, 133D7C8D2D2BE2640075467E /* HomeView.swift in Sources */, + 138AA1B82D2D66FD0021F9DF /* EpisodeCell.swift in Sources */, 133D7C8C2D2BE2640075467E /* SearchView.swift in Sources */, 133D7C942D2BE2640075467E /* JSController.swift in Sources */, 133D7C922D2BE2640075467E /* URLSession.swift in Sources */, 133D7C912D2BE2640075467E /* SettingsViewModule.swift in Sources */, 133D7C8E2D2BE2640075467E /* LibraryView.swift in Sources */, 133D7C6E2D2BE2500075467E /* SoraApp.swift in Sources */, + 138AA1B92D2D66FD0021F9DF /* CircularProgressBar.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Sora/Utils/Extensions/URLSession.swift b/Sora/Utils/Extensions/URLSession.swift index 7f3b1cc..90fc6fa 100644 --- a/Sora/Utils/Extensions/URLSession.swift +++ b/Sora/Utils/Extensions/URLSession.swift @@ -8,10 +8,40 @@ import Foundation extension URLSession { + static let userAgents = [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.2365.92", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.2277.128", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.3; rv:123.0) Gecko/20100101 Firefox/123.0", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.2; rv:122.0) Gecko/20100101 Firefox/122.0", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", + "Mozilla/5.0 (X11; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0", + "Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0", + "Mozilla/5.0 (Linux; Android 14; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.105 Mobile Safari/537.36", + "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.105 Mobile Safari/537.36", + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1", + "Mozilla/5.0 (iPad; CPU OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1", + "Mozilla/5.0 (Android 14; Mobile; rv:123.0) Gecko/123.0 Firefox/123.0", + "Mozilla/5.0 (Android 13; Mobile; rv:122.0) Gecko/122.0 Firefox/122.0" + ] + + static let randomUserAgent: String = { + userAgents.randomElement() ?? userAgents[0] + }() + static let custom: URLSession = { let configuration = URLSessionConfiguration.default configuration.httpAdditionalHeaders = [ - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" + "User-Agent": randomUserAgent ] return URLSession(configuration: configuration) }() diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index 1115934..e15bf23 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -36,7 +36,7 @@ class JSController: ObservableObject { return } - URLSession.custom.dataTask(with: url) { [weak self] data, response, error in + URLSession.custom.dataTask(with: url) { [weak self] data, _, error in guard let self = self else { return } if let error = error { @@ -69,4 +69,44 @@ class JSController: ObservableObject { } }.resume() } + + func fetchDetails(url: String, completion: @escaping ([MediaItem]) -> Void) { + guard let url = URL(string: url) else { + completion([]) + return + } + + URLSession.custom.dataTask(with: url) { [weak self] data, _, error in + guard let self = self else { return } + + if let error = error { + print("Network error: \(error)") + DispatchQueue.main.async { completion([]) } + return + } + + guard let data = data, let html = String(data: data, encoding: .utf8) else { + print("Failed to decode HTML") + DispatchQueue.main.async { completion([]) } + return + } + + if let parseFunction = self.context.objectForKeyedSubscript("extractDetails"), + let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { + let resultItems = results.map { item in + MediaItem( + description: item["description"] ?? "", + aliases: item["aliases"] ?? "", + airdate: item["airdate"] ?? "" + ) + } + DispatchQueue.main.async { + completion(resultItems) + } + } else { + print("Failed to parse results") + DispatchQueue.main.async { completion([]) } + } + }.resume() + } } diff --git a/Sora/Views/MediaInfoView/EpisodeCell/CircularProgressBar.swift b/Sora/Views/MediaInfoView/EpisodeCell/CircularProgressBar.swift new file mode 100644 index 0000000..57cb55b --- /dev/null +++ b/Sora/Views/MediaInfoView/EpisodeCell/CircularProgressBar.swift @@ -0,0 +1,36 @@ +// +// CircularProgressBar.swift +// Sora +// +// Created by Francesco on 18/12/24. +// + +import SwiftUI + +struct CircularProgressBar: View { + var progress: Double + + var body: some View { + ZStack { + Circle() + .stroke(lineWidth: 5.0) + .opacity(0.3) + .foregroundColor(Color.accentColor) + + Circle() + .trim(from: 0.0, to: CGFloat(min(progress, 1.0))) + .stroke(style: StrokeStyle(lineWidth: 5.0, lineCap: .round, lineJoin: .round)) + .foregroundColor(Color.accentColor) + .rotationEffect(Angle(degrees: 270.0)) + .animation(.linear, value: progress) + + if progress >= 0.90 { + Image(systemName: "checkmark") + .font(.system(size: 12)) + } else { + Text(String(format: "%.0f%%", min(progress, 1.0) * 100.0)) + .font(.system(size: 12)) + } + } + } +} diff --git a/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift b/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift new file mode 100644 index 0000000..a24ff25 --- /dev/null +++ b/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift @@ -0,0 +1,119 @@ +// +// EpisodeCell.swift +// Sora +// +// Created by Francesco on 18/12/24. +// + +import SwiftUI +import Kingfisher + +struct EpisodeCell: View { + let episode: String + let episodeID: Int + let imageUrl: String + let progress: Double + let itemID: Int + + @State private var episodeTitle: String = "" + @State private var episodeImageUrl: String = "" + @State private var isLoading: Bool = true + + var body: some View { + HStack { + ZStack { + KFImage(URL(string: episodeImageUrl.isEmpty ? "https://raw.githubusercontent.com/cranci1/Sora/refs/heads/main/assets/banner2.png" : episodeImageUrl)) + .resizable() + .aspectRatio(16/9, contentMode: .fill) + .frame(width: 100, height: 56) + .cornerRadius(8) + + if isLoading { + ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + } + } + + VStack(alignment: .leading) { + Text("Episode \(episodeID + 1)") + .font(.system(size: 15)) + if !episodeTitle.isEmpty { + Text(episodeTitle) + .font(.system(size: 13)) + .foregroundColor(.secondary) + } + } + + Spacer() + + CircularProgressBar(progress: progress) + .frame(width: 40, height: 40) + } + .onAppear { + fetchEpisodeDetails() + } + } + + func fetchEpisodeDetails() { + let cacheKey = "episodeDetails_\(itemID)_\(episodeID)" + + if let cachedData = UserDefaults.standard.data(forKey: cacheKey) { + parseEpisodeDetails(data: cachedData) + return + } + + guard let url = URL(string: "https://api.ani.zip/mappings?anilist_id=\(itemID)") else { + isLoading = false + return + } + + URLSession.custom.dataTask(with: url) { data, _, error in + if let error = error { + print("Failed to fetch episode details: \(error)") + DispatchQueue.main.async { + self.isLoading = false + } + return + } + + guard let data = data else { + print("No data received") + DispatchQueue.main.async { + self.isLoading = false + } + return + } + + UserDefaults.standard.set(data, forKey: cacheKey) + self.parseEpisodeDetails(data: data) + }.resume() + } + + func parseEpisodeDetails(data: Data) { + do { + let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) + guard let json = jsonObject as? [String: Any], + let episodes = json["episodes"] as? [String: Any], + let episodeDetails = episodes["\(episodeID + 1)"] as? [String: Any], + let title = episodeDetails["title"] as? [String: String], + let image = episodeDetails["image"] as? String else { + print("Invalid response format") + DispatchQueue.main.async { + self.isLoading = false + } + return + } + + DispatchQueue.main.async { + self.episodeTitle = title["en"] ?? "" + self.episodeImageUrl = image + self.isLoading = false + } + } catch { + print("Failed to parse JSON: \(error)") + DispatchQueue.main.async { + self.isLoading = false + } + } + } +} diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 81f6c59..47fcb0b 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -8,6 +8,13 @@ import SwiftUI import Kingfisher +struct MediaItem: Identifiable { + let id = UUID() + let description: String + let aliases: String + let airdate: String +} + struct MediaInfoView: View { let title: String let imageUrl: String @@ -25,104 +32,122 @@ struct MediaInfoView: View { @AppStorage("externalPlayer") private var externalPlayer: String = "Default" + @ObservedObject var jsController = JSController() + var body: some View { Group { - ScrollView { - VStack(alignment: .leading, spacing: 16) { - HStack(alignment: .top, spacing: 10) { - KFImage(URL(string: imageUrl)) - .resizable() - .aspectRatio(2/3, contentMode: .fill) - .cornerRadius(10) - .frame(width: 150, height: 225) - - VStack(alignment: .leading, spacing: 4) { - Text(title) - .font(.system(size: 17)) - .fontWeight(.bold) + if isLoading { + ProgressView() + .padding() + } else { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + HStack(alignment: .top, spacing: 10) { + KFImage(URL(string: imageUrl)) + .resizable() + .aspectRatio(2/3, contentMode: .fill) + .cornerRadius(10) + .frame(width: 150, height: 225) - if !aliases.isEmpty && aliases != title { - Text(aliases) - .font(.system(size: 13)) - .foregroundColor(.secondary) - } - - Spacer() - - HStack(alignment: .center, spacing: 12) { - Text(module.metadata.sourceName) - .font(.system(size: 13)) - .padding(4) - .background(Capsule().fill(Color.accentColor.opacity(0.4))) - - Button(action: { - }) { - Image(systemName: "ellipsis.circle") - .resizable() - .frame(width: 20, height: 20) - } - - Button(action: { - }) { - Image(systemName: "safari") - .resizable() - .frame(width: 20, height: 20) - } - } - } - } - - if !synopsis.isEmpty { - VStack(alignment: .leading, spacing: 2) { - HStack(alignment: .center) { - Text("Synopsis") - .font(.system(size: 18)) + VStack(alignment: .leading, spacing: 4) { + Text(title) + .font(.system(size: 17)) .fontWeight(.bold) + if !aliases.isEmpty && aliases != title { + Text(aliases) + .font(.system(size: 13)) + .foregroundColor(.secondary) + } + Spacer() - Button(action: { - showFullSynopsis.toggle() - }) { - Text(showFullSynopsis ? "Less" : "More") - .font(.system(size: 14)) + HStack(alignment: .center, spacing: 12) { + Text(module.metadata.sourceName) + .font(.system(size: 13)) + .padding(4) + .background(Capsule().fill(Color.accentColor.opacity(0.4))) + + Button(action: { + }) { + Image(systemName: "ellipsis.circle") + .resizable() + .frame(width: 20, height: 20) + } + + Button(action: { + }) { + Image(systemName: "safari") + .resizable() + .frame(width: 20, height: 20) + } } } - - Text(synopsis) - .lineLimit(showFullSynopsis ? nil : 4) - .font(.system(size: 14)) - } - } - - HStack { - Button(action: { - }) { - HStack { - Image(systemName: "play.fill") - .foregroundColor(.primary) - Text("Start Watching") - .font(.headline) - .foregroundColor(.primary) - } - .padding() - .frame(maxWidth: .infinity) - .background(Color.accentColor) - .cornerRadius(10) } - Button(action: { - }) { - Image(systemName: "bookmark") - .resizable() - .frame(width: 20, height: 27) + if !synopsis.isEmpty { + VStack(alignment: .leading, spacing: 2) { + HStack(alignment: .center) { + Text("Synopsis") + .font(.system(size: 18)) + .fontWeight(.bold) + + Spacer() + + Button(action: { + showFullSynopsis.toggle() + }) { + Text(showFullSynopsis ? "Less" : "More") + .font(.system(size: 14)) + } + } + + Text(synopsis) + .lineLimit(showFullSynopsis ? nil : 4) + .font(.system(size: 14)) + } + } + + HStack { + Button(action: { + }) { + HStack { + Image(systemName: "play.fill") + .foregroundColor(.primary) + Text("Start Watching") + .font(.headline) + .foregroundColor(.primary) + } + .padding() + .frame(maxWidth: .infinity) + .background(Color.accentColor) + .cornerRadius(10) + } + + Button(action: { + }) { + Image(systemName: "bookmark") + .resizable() + .frame(width: 20, height: 27) + } } } + .padding() + .navigationBarTitleDisplayMode(.inline) + .navigationBarTitle(title) + .navigationViewStyle(StackNavigationViewStyle()) } - .padding() - .navigationBarTitleDisplayMode(.inline) - .navigationBarTitle(title) - .navigationViewStyle(StackNavigationViewStyle()) + } + } + .onAppear { + jsController.fetchDetails(url: href) { items in + if let item = items.first { + print("Fetched item: \(item)") + self.synopsis = item.description + self.aliases = item.aliases + self.airdate = item.airdate + } + self.isLoading = false } } } From c28a47a2f49b01de23ff2edeb7076cd7651d8512 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Wed, 8 Jan 2025 15:57:57 +0100 Subject: [PATCH 18/30] added http support for "unsecure" sites --- Sora.xcodeproj/project.pbxproj | 4 ++++ Sora/Info.plist | 11 +++++++++++ 2 files changed, 15 insertions(+) create mode 100644 Sora/Info.plist diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index b424ad7..3a71482 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -42,6 +42,7 @@ 133D7C8B2D2BE2640075467E /* JSController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSController.swift; sourceTree = ""; }; 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EpisodeCell.swift; sourceTree = ""; }; 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularProgressBar.swift; sourceTree = ""; }; + 13DC0C412D2EC9BA00D0F966 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -75,6 +76,7 @@ 133D7C6C2D2BE2500075467E /* Sora */ = { isa = PBXGroup; children = ( + 13DC0C412D2EC9BA00D0F966 /* Info.plist */, 133D7C852D2BE2640075467E /* Utils */, 133D7C7B2D2BE2630075467E /* Views */, 133D7C6D2D2BE2500075467E /* SoraApp.swift */, @@ -388,6 +390,7 @@ DEVELOPMENT_TEAM = 399LMK6Q2Y; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Sora/Info.plist; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -418,6 +421,7 @@ DEVELOPMENT_TEAM = 399LMK6Q2Y; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Sora/Info.plist; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; diff --git a/Sora/Info.plist b/Sora/Info.plist new file mode 100644 index 0000000..a8da192 --- /dev/null +++ b/Sora/Info.plist @@ -0,0 +1,11 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + + From 3ebf986424a12ac9a1b5c0c5be68f34f8566a4a2 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:33:01 +0100 Subject: [PATCH 19/30] im so dumb i swear --- Sora/Views/MediaInfoView/MediaInfoView.swift | 32 +++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 47fcb0b..4f03612 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -32,7 +32,8 @@ struct MediaInfoView: View { @AppStorage("externalPlayer") private var externalPlayer: String = "Default" - @ObservedObject var jsController = JSController() + @StateObject private var jsController = JSController() + @EnvironmentObject var moduleManager: ModuleManager var body: some View { Group { @@ -140,14 +141,29 @@ struct MediaInfoView: View { } } .onAppear { - jsController.fetchDetails(url: href) { items in - if let item = items.first { - print("Fetched item: \(item)") - self.synopsis = item.description - self.aliases = item.aliases - self.airdate = item.airdate + getDetails() + } + } + + func getDetails() { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + Task { + do { + let jsContent = try moduleManager.getModuleContent(module) + jsController.loadScript(jsContent) + jsController.fetchDetails(url: href) { items in + if let item = items.first { + print("Fetched item: \(item)") + self.synopsis = item.description + self.aliases = item.aliases + self.airdate = item.airdate + } + self.isLoading = false + } + } catch { + print("Error loading module: \(error)") + self.isLoading = false } - self.isLoading = false } } } From ac66da899cb646bfcc744556ce93e08dc5fbeaaf Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:07:31 +0100 Subject: [PATCH 20/30] thank god man thank god --- Sora/Utils/Loaders/JSController.swift | 30 +++++-- .../EpisodeCell/EpisodeCell.swift | 7 +- Sora/Views/MediaInfoView/MediaInfoView.swift | 88 +++++++++++++++++-- 3 files changed, 107 insertions(+), 18 deletions(-) diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index e15bf23..c54f029 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -70,9 +70,9 @@ class JSController: ObservableObject { }.resume() } - func fetchDetails(url: String, completion: @escaping ([MediaItem]) -> Void) { + func fetchDetails(url: String, completion: @escaping ([MediaItem], [EpisodeLink]) -> Void) { guard let url = URL(string: url) else { - completion([]) + completion([], []) return } @@ -81,31 +81,43 @@ class JSController: ObservableObject { if let error = error { print("Network error: \(error)") - DispatchQueue.main.async { completion([]) } + DispatchQueue.main.async { completion([], []) } return } guard let data = data, let html = String(data: data, encoding: .utf8) else { print("Failed to decode HTML") - DispatchQueue.main.async { completion([]) } + DispatchQueue.main.async { completion([], []) } return } + var resultItems: [MediaItem] = [] + var episodeLinks: [EpisodeLink] = [] + if let parseFunction = self.context.objectForKeyedSubscript("extractDetails"), let results = parseFunction.call(withArguments: [html]).toArray() as? [[String: String]] { - let resultItems = results.map { item in + resultItems = results.map { item in MediaItem( description: item["description"] ?? "", aliases: item["aliases"] ?? "", airdate: item["airdate"] ?? "" ) } - DispatchQueue.main.async { - completion(resultItems) - } } else { print("Failed to parse results") - DispatchQueue.main.async { completion([]) } + } + + if let fetchEpisodesFunction = self.context.objectForKeyedSubscript("extractEpisodes"), + let episodesResult = fetchEpisodesFunction.call(withArguments: [html]).toArray() as? [[String: String]] { + for episodeData in episodesResult { + if let num = episodeData["number"], let link = episodeData["href"], let number = Int(num) { + episodeLinks.append(EpisodeLink(number: number, href: link)) + } + } + } + + DispatchQueue.main.async { + completion(resultItems, episodeLinks) } }.resume() } diff --git a/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift b/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift index a24ff25..d69506b 100644 --- a/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift +++ b/Sora/Views/MediaInfoView/EpisodeCell/EpisodeCell.swift @@ -8,10 +8,15 @@ import SwiftUI import Kingfisher +struct EpisodeLink: Identifiable { + let id = UUID() + let number: Int + let href: String +} + struct EpisodeCell: View { let episode: String let episodeID: Int - let imageUrl: String let progress: Double let itemID: Int diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 4f03612..afad4eb 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -24,9 +24,8 @@ struct MediaInfoView: View { @State var aliases: String = "" @State var synopsis: String = "" @State var airdate: String = "" - @State var genres: [String] = [] - @State var episodes: [String] = [] - + @State var episodeLinks: [EpisodeLink] = [] + @State var itemID: Int? @State var isLoading: Bool = true @State var showFullSynopsis: Bool = false @@ -132,32 +131,57 @@ struct MediaInfoView: View { .frame(width: 20, height: 27) } } + + if !episodeLinks.isEmpty { + VStack(alignment: .leading, spacing: 10) { + Text("Episodes") + .font(.system(size: 18)) + .fontWeight(.bold) + + ForEach(episodeLinks.indices, id: \.self) { i in + let ep = episodeLinks[i] + let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(ep.href)") + let totalTime = UserDefaults.standard.double(forKey: "totalTime_\(ep.href)") + let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0 + + EpisodeCell(episode: ep.href, episodeID: ep.number - 1, progress: progress, itemID: itemID ?? 0) + } + } + } } .padding() .navigationBarTitleDisplayMode(.inline) - .navigationBarTitle(title) + .navigationBarTitle("") .navigationViewStyle(StackNavigationViewStyle()) } } } .onAppear { - getDetails() + fetchDetails() + fetchItemID(byTitle: title) { result in + switch result { + case .success(let id): + itemID = id + case .failure(let error): + print("Failed to fetch Item ID: \(error)") + } + } } } - func getDetails() { + func fetchDetails() { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { Task { do { let jsContent = try moduleManager.getModuleContent(module) jsController.loadScript(jsContent) - jsController.fetchDetails(url: href) { items in + jsController.fetchDetails(url: href) { items, episodes in if let item = items.first { - print("Fetched item: \(item)") self.synopsis = item.description self.aliases = item.aliases self.airdate = item.airdate } + self.episodeLinks = episodes self.isLoading = false } } catch { @@ -167,4 +191,52 @@ struct MediaInfoView: View { } } } + + private func fetchItemID(byTitle title: String, completion: @escaping (Result) -> Void) { + let query = """ + query { + Media(search: "\(title)", type: ANIME) { + id + } + } + """ + + guard let url = URL(string: "https://graphql.anilist.co") else { + completion(.failure(NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Invalid URL"]))) + return + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let parameters: [String: Any] = ["query": query] + request.httpBody = try? JSONSerialization.data(withJSONObject: parameters) + + URLSession.custom.dataTask(with: request) { data, _, error in + if let error = error { + completion(.failure(error)) + return + } + + guard let data = data else { + completion(.failure(NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "No data received"]))) + return + } + + do { + if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any], + let data = json["data"] as? [String: Any], + let media = data["Media"] as? [String: Any], + let id = media["id"] as? Int { + completion(.success(id)) + } else { + let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Invalid response"]) + completion(.failure(error)) + } + } catch { + completion(.failure(error)) + } + }.resume() + } } From 4ae5517cb8bcad2b18fe09998e950bfd9589e01e Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:50:13 +0100 Subject: [PATCH 21/30] little UI thing --- Sora/Views/MediaInfoView/MediaInfoView.swift | 50 ++++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index afad4eb..861139b 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -7,6 +7,7 @@ import SwiftUI import Kingfisher +import SafariServices struct MediaItem: Identifiable { let id = UUID() @@ -63,21 +64,40 @@ struct MediaInfoView: View { Spacer() HStack(alignment: .center, spacing: 12) { - Text(module.metadata.sourceName) - .font(.system(size: 13)) + HStack(spacing: 4) { + Image(systemName: "calendar") + .resizable() + .frame(width: 15, height: 15) + .foregroundColor(.secondary) + + Text(airdate) + .font(.system(size: 12)) + .foregroundColor(.secondary) + } + .padding(4) + } + + HStack(alignment: .center, spacing: 12) { + Button(action: { + openSafariViewController(with: href) + }) { + HStack(spacing: 4) { + Text(module.metadata.sourceName) + .font(.system(size: 13)) + .foregroundColor(.primary) + + Image(systemName: "safari") + .resizable() + .frame(width: 20, height: 20) + .foregroundColor(.primary) + } .padding(4) .background(Capsule().fill(Color.accentColor.opacity(0.4))) - - Button(action: { - }) { - Image(systemName: "ellipsis.circle") - .resizable() - .frame(width: 20, height: 20) } Button(action: { }) { - Image(systemName: "safari") + Image(systemName: "ellipsis.circle") .resizable() .frame(width: 20, height: 20) } @@ -192,6 +212,18 @@ struct MediaInfoView: View { } } + private func openSafariViewController(with urlString: String) { + guard let url = URL(string: urlString) else { + print("Unable to open the webpage") + return + } + let safariViewController = SFSafariViewController(url: url) + if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, + let rootVC = windowScene.windows.first?.rootViewController { + rootVC.present(safariViewController, animated: true, completion: nil) + } + } + private func fetchItemID(byTitle title: String, completion: @escaping (Result) -> Void) { let query = """ query { From 06cf7b9733bdba35e2ffbb08cf04aded42a56ad9 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:14:02 +0100 Subject: [PATCH 22/30] im cooked --- Sora.xcodeproj/project.pbxproj | 12 +++ Sora/MediaPlayer/VideoPlayer.swift | 98 ++++++++++++++++++++ Sora/Utils/Loaders/JSController.swift | 33 +++++++ Sora/Views/MediaInfoView/MediaInfoView.swift | 36 +++++++ 4 files changed, 179 insertions(+) create mode 100644 Sora/MediaPlayer/VideoPlayer.swift diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index 3a71482..d2e0656 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 133D7C972D2BE2AF0075467E /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 133D7C962D2BE2AF0075467E /* Kingfisher */; }; 138AA1B82D2D66FD0021F9DF /* EpisodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */; }; 138AA1B92D2D66FD0021F9DF /* CircularProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */; }; + 13DC0C462D302C7500D0F966 /* VideoPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13DC0C452D302C7500D0F966 /* VideoPlayer.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -43,6 +44,7 @@ 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EpisodeCell.swift; sourceTree = ""; }; 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularProgressBar.swift; sourceTree = ""; }; 13DC0C412D2EC9BA00D0F966 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 13DC0C452D302C7500D0F966 /* VideoPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayer.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -76,6 +78,7 @@ 133D7C6C2D2BE2500075467E /* Sora */ = { isa = PBXGroup; children = ( + 13DC0C442D302C6A00D0F966 /* MediaPlayer */, 13DC0C412D2EC9BA00D0F966 /* Info.plist */, 133D7C852D2BE2640075467E /* Utils */, 133D7C7B2D2BE2630075467E /* Views */, @@ -168,6 +171,14 @@ path = EpisodeCell; sourceTree = ""; }; + 13DC0C442D302C6A00D0F966 /* MediaPlayer */ = { + isa = PBXGroup; + children = ( + 13DC0C452D302C7500D0F966 /* VideoPlayer.swift */, + ); + path = MediaPlayer; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -244,6 +255,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 13DC0C462D302C7500D0F966 /* VideoPlayer.swift in Sources */, 133D7C902D2BE2640075467E /* SettingsView.swift in Sources */, 133D7C932D2BE2640075467E /* Modules.swift in Sources */, 133D7C702D2BE2500075467E /* ContentView.swift in Sources */, diff --git a/Sora/MediaPlayer/VideoPlayer.swift b/Sora/MediaPlayer/VideoPlayer.swift new file mode 100644 index 0000000..bc85c25 --- /dev/null +++ b/Sora/MediaPlayer/VideoPlayer.swift @@ -0,0 +1,98 @@ +// +// VideoPlayer.swift +// Sora +// +// Created by Francesco on 09/01/25. +// + +import UIKit +import AVKit + +class VideoPlayerViewController: UIViewController { + let module: ScrapingModule + + var player: AVPlayer? + var playerViewController: AVPlayerViewController? + var timeObserverToken: Any? + var streamUrl: String? + var fullUrl: String = "" + + init(module: ScrapingModule) { + self.module = module + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + + guard let streamUrl = streamUrl, let url = URL(string: streamUrl) else { + return + } + + var request = URLRequest(url: url) + if streamUrl.contains("ascdn") { + request.addValue("\(module.metadata.baseUrl)", forHTTPHeaderField: "Referer") + } + + let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": request.allHTTPHeaderFields ?? [:]]) + let playerItem = AVPlayerItem(asset: asset) + + player = AVPlayer(playerItem: playerItem) + playerViewController = AVPlayerViewController() + playerViewController?.player = player + addPeriodicTimeObserver(fullURL: fullUrl) + + if let playerViewController = playerViewController { + playerViewController.view.frame = self.view.frame + self.view.addSubview(playerViewController.view) + self.addChild(playerViewController) + playerViewController.didMove(toParent: self) + } + + let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(fullUrl)") + if lastPlayedTime > 0 { + let seekTime = CMTime(seconds: lastPlayedTime, preferredTimescale: 1) + self.player?.seek(to: seekTime) { _ in + self.player?.play() + } + } else { + self.player?.play() + } + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + player?.play() + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + player?.pause() + if let timeObserverToken = timeObserverToken { + player?.removeTimeObserver(timeObserverToken) + self.timeObserverToken = nil + } + } + + func addPeriodicTimeObserver(fullURL: String) { + guard let player = self.player else { return } + + let interval = CMTime(seconds: 1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in + guard let currentItem = player.currentItem, + currentItem.duration.seconds.isFinite else { + return + } + + let currentTime = time.seconds + let duration = currentItem.duration.seconds + + UserDefaults.standard.set(currentTime, forKey: "lastPlayedTime_\(fullURL)") + UserDefaults.standard.set(duration, forKey: "totalTime_\(fullURL)") + } + } +} diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index c54f029..4737f61 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -121,4 +121,37 @@ class JSController: ObservableObject { } }.resume() } + + func fetchStreamUrl(episodeUrl: String, completion: @escaping (String?) -> Void) { + guard let url = URL(string: episodeUrl) else { + completion(nil) + return + } + + URLSession.custom.dataTask(with: url) { [weak self] data, _, error in + guard let self = self else { return } + + if let error = error { + print("Network error: \(error)") + DispatchQueue.main.async { completion(nil) } + return + } + + guard let data = data, let html = String(data: data, encoding: .utf8) else { + print("Failed to decode HTML") + DispatchQueue.main.async { completion(nil) } + return + } + + if let parseFunction = self.context.objectForKeyedSubscript("extractStreamUrl"), + let streamUrl = parseFunction.call(withArguments: [html]).toString() { + DispatchQueue.main.async { + completion(streamUrl) + } + } else { + print("Failed to extract stream URL") + DispatchQueue.main.async { completion(nil) } + } + }.resume() + } } diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 861139b..17aeacb 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -165,6 +165,9 @@ struct MediaInfoView: View { let progress = totalTime > 0 ? lastPlayedTime / totalTime : 0 EpisodeCell(episode: ep.href, episodeID: ep.number - 1, progress: progress, itemID: itemID ?? 0) + .onTapGesture { + fetchStream(href: ep.href) + } } } } @@ -212,6 +215,39 @@ struct MediaInfoView: View { } } + func fetchStream(href: String) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + Task { + do { + let jsContent = try moduleManager.getModuleContent(module) + jsController.loadScript(jsContent) + jsController.fetchStreamUrl(episodeUrl: href) { streamUrl in + if let url = streamUrl { + playStream(url: url, fullURL: url) + } + } + } catch { + print("Error loading module: \(error)") + self.isLoading = false + } + } + } + } + + func playStream(url: String, fullURL: String) { + DispatchQueue.main.async { + let videoPlayerViewController = VideoPlayerViewController(module: module) + videoPlayerViewController.streamUrl = url + videoPlayerViewController.fullUrl = fullURL + videoPlayerViewController.modalPresentationStyle = .fullScreen + + if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, + let rootVC = windowScene.windows.first?.rootViewController { + rootVC.present(videoPlayerViewController, animated: true, completion: nil) + } + } + } + private func openSafariViewController(with urlString: String) { guard let url = URL(string: urlString) else { print("Unable to open the webpage") From 020b792f482d89a52972489411c743f29bd71c22 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:16:45 +0100 Subject: [PATCH 23/30] no results found display --- Sora/Views/SearchView.swift | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Sora/Views/SearchView.swift b/Sora/Views/SearchView.swift index 84eb00e..bf82305 100644 --- a/Sora/Views/SearchView.swift +++ b/Sora/Views/SearchView.swift @@ -24,6 +24,7 @@ struct SearchView: View { @State private var selectedSearchItem: SearchItem? @State private var isSearching = false @State private var searchText = "" + @State private var hasNoResults = false private var selectedModule: ScrapingModule? { guard let id = selectedModuleId else { return nil } @@ -55,6 +56,19 @@ struct SearchView: View { if isSearching { ProgressView() .padding() + } else if hasNoResults { + VStack(spacing: 8) { + Image(systemName: "magnifyingglass") + .font(.largeTitle) + .foregroundColor(.secondary) + Text("No Results Found") + .font(.headline) + Text("Try different keywords/titles") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .frame(maxWidth: .infinity) } LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) { @@ -128,10 +142,13 @@ struct SearchView: View { private func performSearch() { guard !searchText.isEmpty, let module = selectedModule else { searchItems = [] + hasNoResults = false return } isSearching = true + hasNoResults = false + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { Task { do { @@ -139,11 +156,13 @@ struct SearchView: View { jsController.loadScript(jsContent) jsController.fetchSearchResults(keyword: searchText, module: module) { items in searchItems = items + hasNoResults = items.isEmpty isSearching = false } } catch { print("Error loading module: \(error)") isSearching = false + hasNoResults = true } } } @@ -181,4 +200,4 @@ struct SearchBar: View { ) } } -} \ No newline at end of file +} From 9f1d8f8c4cd46dfcc95507ea4f7bde402b10388d Mon Sep 17 00:00:00 2001 From: Hamzenis Kryeziu Date: Fri, 10 Jan 2025 18:58:16 +0100 Subject: [PATCH 24/30] New search results method - Async JS with promise handling, custom javascript fetch - New search Method - New optional field for module --- Sora/Info.plist | 10 +-- Sora/Utils/Loaders/JSController.swift | 117 ++++++++++++++++++++++++++ Sora/Utils/Modules/Modules.swift | 1 + Sora/Views/SearchView.swift | 16 +++- 4 files changed, 135 insertions(+), 9 deletions(-) diff --git a/Sora/Info.plist b/Sora/Info.plist index a8da192..6a6654d 100644 --- a/Sora/Info.plist +++ b/Sora/Info.plist @@ -2,10 +2,10 @@ - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index 4737f61..33479fb 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -20,6 +20,46 @@ class JSController: ObservableObject { print("JavaScript log: \(message)") } context.setObject(logFunction, forKeyedSubscript: "log" as NSString) + + // Because fetch isnt available in JSContext, it simulates the fetch api for Javascript. + // Performs network calls with URLSession + let fetchNativeFunction: @convention(block) (String, JSValue, JSValue) -> Void = { urlString, resolve, reject in + guard let url = URL(string: urlString) else { + print("Invalid URL") + reject.call(withArguments: ["Invalid URL"]) + return + } + let task = URLSession.shared.dataTask(with: url) { data, _, error in + if let error = error { + print("Network error in fetchNativeFunction: \(error.localizedDescription)") + reject.call(withArguments: [error.localizedDescription]) + return + } + guard let data = data else { + print("No data in response") + reject.call(withArguments: ["No data"]) + return + } + if let text = String(data: data, encoding: .utf8) { + resolve.call(withArguments: [text]) + } else { + print("Unable to decode data to text") + reject.call(withArguments: ["Unable to decode data"]) + } + } + task.resume() + } + context.setObject(fetchNativeFunction, forKeyedSubscript: "fetchNative" as NSString) + + // Define fetch for JavaScript + let fetchDefinition = """ + function fetch(url) { + return new Promise(function(resolve, reject) { + fetchNative(url, resolve, reject); + }); + } + """ + context.evaluateScript(fetchDefinition) } func loadScript(_ script: String) { @@ -154,4 +194,81 @@ class JSController: ObservableObject { } }.resume() } + + /// Use Javascript to fetch search results + func fetchJsSearchResults(keyword: String, module: ScrapingModule, completion: @escaping ([SearchItem]) -> Void) { + if let exception = context.exception { + print("JavaScript exception: \(exception)") + completion([]) + return + } + + guard let searchResultsFunction = context.objectForKeyedSubscript("searchResults") else { + print("No JavaScript function searchResults found") + completion([]) + return + } + + // Call the JavaScript function, passing in the parameter + let promiseValue = searchResultsFunction.call(withArguments: [keyword]) + guard let promise = promiseValue else { + print("searchResults did not return a Promise") + completion([]) + return + } + + // Handles successful promise resolution. + let thenBlock: @convention(block) (JSValue) -> Void = { result in + + if let jsonString = result.toString(), + let data = jsonString.data(using: .utf8) { + do { + if let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] { + let resultItems = array.map { item -> SearchItem in + let title = item["title"] as? String ?? "" + let imageUrl = item["image"] as? String ?? "https://s4.anilist.co/file/anilistcdn/character/large/default.jpg" + let href = item["href"] as? String ?? "" + return SearchItem(title: title, imageUrl: imageUrl, href: href) + } + + DispatchQueue.main.async { + completion(resultItems) + } + + } else { + print("Failed to parse JSON") + DispatchQueue.main.async { + completion([]) + } + } + } catch { + print("JSON parsing error: \(error)") + DispatchQueue.main.async { + completion([]) + } + } + } else { + print("Result is not a string") + DispatchQueue.main.async { + completion([]) + } + } + } + + // Handles promise rejection. + let catchBlock: @convention(block) (JSValue) -> Void = { error in + print("Promise rejected: \(String(describing: error.toString()))") + DispatchQueue.main.async { + completion([]) + } + } + + // Wrap the Swift blocks into JSValue functions + let thenFunction = JSValue(object: thenBlock, in: context) + let catchFunction = JSValue(object: catchBlock, in: context) + + // Attach the 'then' and 'catch' callbacks to the Promise + promise.invokeMethod("then", withArguments: [thenFunction]) + promise.invokeMethod("catch", withArguments: [catchFunction]) + } } diff --git a/Sora/Utils/Modules/Modules.swift b/Sora/Utils/Modules/Modules.swift index f33a1c0..d22a985 100644 --- a/Sora/Utils/Modules/Modules.swift +++ b/Sora/Utils/Modules/Modules.swift @@ -16,6 +16,7 @@ struct ModuleMetadata: Codable, Hashable { let baseUrl: String let searchBaseUrl: String let scriptUrl: String + let asyncJS: Bool? } struct ScrapingModule: Codable, Identifiable, Hashable { diff --git a/Sora/Views/SearchView.swift b/Sora/Views/SearchView.swift index bf82305..8a0280d 100644 --- a/Sora/Views/SearchView.swift +++ b/Sora/Views/SearchView.swift @@ -154,10 +154,18 @@ struct SearchView: View { do { let jsContent = try moduleManager.getModuleContent(module) jsController.loadScript(jsContent) - jsController.fetchSearchResults(keyword: searchText, module: module) { items in - searchItems = items - hasNoResults = items.isEmpty - isSearching = false + if(module.metadata.asyncJS == false || module.metadata.asyncJS == nil) { + jsController.fetchSearchResults(keyword: searchText, module: module) { items in + searchItems = items + hasNoResults = items.isEmpty + isSearching = false + } + } else { + jsController.fetchJsSearchResults(keyword: searchText, module: module) { items in + searchItems = items + hasNoResults = items.isEmpty + isSearching = false + } } } catch { print("Error loading module: \(error)") From d3fc29d8ed9f2f0dc6e11b1d43ff929c90293c90 Mon Sep 17 00:00:00 2001 From: Hamzenis Kryeziu Date: Sat, 11 Jan 2025 03:44:58 +0100 Subject: [PATCH 25/30] New fetching details method - Second method to fetch details with async js code --- Sora/Utils/Loaders/JSController.swift | 150 +++++++++++++++++++ Sora/Views/MediaInfoView/MediaInfoView.swift | 27 +++- 2 files changed, 170 insertions(+), 7 deletions(-) diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index 33479fb..588add5 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -31,6 +31,7 @@ class JSController: ObservableObject { } let task = URLSession.shared.dataTask(with: url) { data, _, error in if let error = error { + print(url) print("Network error in fetchNativeFunction: \(error.localizedDescription)") reject.call(withArguments: [error.localizedDescription]) return @@ -271,4 +272,153 @@ class JSController: ObservableObject { promise.invokeMethod("then", withArguments: [thenFunction]) promise.invokeMethod("catch", withArguments: [catchFunction]) } + + /// Use Javascript to fetch details + func fetchDetailsJS(url: String, completion: @escaping ([MediaItem], [EpisodeLink]) -> Void) { + guard let url = URL(string: url) else { + completion([], []) + return + } + + if let exception = context.exception { + print("JavaScript exception: \(exception)") + completion([], []) + return + } + + guard let extractDetailsFunction = context.objectForKeyedSubscript("extractDetails") else { + print("No JavaScript function extractDetails found") + completion([], []) + return + } + + guard let extractEpisodesFunction = context.objectForKeyedSubscript("extractEpisodes") else { + print("No JavaScript function extractEpisodes found") + completion([], []) + return + } + + var resultItems: [MediaItem] = [] + var episodeLinks: [EpisodeLink] = [] + + // Call the JavaScript function, passing in the parameter + let promiseValueDetails = extractDetailsFunction.call(withArguments: [url.absoluteString]) + guard let promiseDetails = promiseValueDetails else { + print("extractDetails did not return a Promise") + completion([], []) + return + } + + // Handles successful promise resolution. + let thenBlockDetails: @convention(block) (JSValue) -> Void = { result in + + if let jsonOfDetails = result.toString(), + let dataDetails = jsonOfDetails.data(using: .utf8) { + do { + if let array = try JSONSerialization.jsonObject(with: dataDetails, options: []) as? [[String: Any]] { + resultItems = array.map { item -> MediaItem in + let description = item["description"] as? String ?? "" + let aliases = item["aliases"] as? String ?? "" + let airdate = item["airdate"] as? String ?? "" + return MediaItem(description: description, aliases: aliases, airdate: airdate) + } + } else { + print("Failed to parse JSON of extractDetails") + DispatchQueue.main.async { + completion([], []) + } + } + } catch { + print("JSON parsing error of extract details: \(error)") + DispatchQueue.main.async { + completion([], []) + } + } + } else { + print("Result is not a string of extractDetails") + DispatchQueue.main.async { + completion([], []) + } + } + } + + // Handles promise rejection. + let catchBlockDetails: @convention(block) (JSValue) -> Void = { error in + print("Promise rejected of extractDetails: \(String(describing: error.toString()))") + DispatchQueue.main.async { + completion([], []) + } + } + + // Wrap the Swift blocks into JSValue functions + let thenFunctionDetails = JSValue(object: thenBlockDetails, in: context) + let catchFunctionDetails = JSValue(object: catchBlockDetails, in: context) + + // Attach the 'then' and 'catch' callbacks to the Promise + promiseDetails.invokeMethod("then", withArguments: [thenFunctionDetails]) + promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails]) + + + // Call the JavaScript function, passing in the parameter + let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString]) + guard let promiseEpisodes = promiseValueEpisodes else { + print("extractEpisodes did not return a Promise") + completion([], []) + return + } + + // Handles successful promise resolution. + let thenBlockEpisodes: @convention(block) (JSValue) -> Void = { result in + + if let jsonOfEpisodes = result.toString(), + let dataEpisodes = jsonOfEpisodes.data(using: .utf8) { + do { + if let array = try JSONSerialization.jsonObject(with: dataEpisodes, options: []) as? [[String: Any]] { + episodeLinks = array.map { item -> EpisodeLink in + let number = item["number"] as? Int ?? 0 + let href = item["href"] as? String ?? "" + return EpisodeLink(number: number, href: href) + } + + DispatchQueue.main.async { + completion(resultItems, episodeLinks) + } + + } else { + print("Failed to parse JSON of extractEpisodes") + DispatchQueue.main.async { + completion([], []) + } + } + } catch { + print("JSON parsing error of extractEpisodes: \(error)") + DispatchQueue.main.async { + completion([], []) + } + } + } else { + print("Result is not a string of extractEpisodes") + DispatchQueue.main.async { + completion([], []) + } + } + } + + // Handles promise rejection. + let catchBlockEpisodes: @convention(block) (JSValue) -> Void = { error in + print("Promise rejected of extractEpisodes: \(String(describing: error.toString()))") + DispatchQueue.main.async { + completion([], []) + } + } + + // Wrap the Swift blocks into JSValue functions + let thenFunctionEpisodes = JSValue(object: thenBlockEpisodes, in: context) + let catchFunctionEpisodes = JSValue(object: catchBlockEpisodes, in: context) + + // Attach the 'then' and 'catch' callbacks to the Promise + promiseEpisodes.invokeMethod("then", withArguments: [thenFunctionEpisodes]) + promiseEpisodes.invokeMethod("catch", withArguments: [catchFunctionEpisodes]) + } + } diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 17aeacb..b50c1af 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -198,14 +198,27 @@ struct MediaInfoView: View { do { let jsContent = try moduleManager.getModuleContent(module) jsController.loadScript(jsContent) - jsController.fetchDetails(url: href) { items, episodes in - if let item = items.first { - self.synopsis = item.description - self.aliases = item.aliases - self.airdate = item.airdate + if(module.metadata.asyncJS == false || module.metadata.asyncJS == nil) { + jsController.fetchDetails(url: href) { items, episodes in + if let item = items.first { + self.synopsis = item.description + self.aliases = item.aliases + self.airdate = item.airdate + } + self.episodeLinks = episodes + self.isLoading = false + } + } + else { + jsController.fetchDetailsJS(url: href) { items, episodes in + if let item = items.first { + self.synopsis = item.description + self.aliases = item.aliases + self.airdate = item.airdate + } + self.episodeLinks = episodes + self.isLoading = false } - self.episodeLinks = episodes - self.isLoading = false } } catch { print("Error loading module: \(error)") From 166767a10cb4fa3f923183af43c4d38ace76bb77 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sat, 11 Jan 2025 17:49:18 +0100 Subject: [PATCH 26/30] clean up --- Sora.xcodeproj/project.pbxproj | 2 +- Sora/Utils/Loaders/JSController.swift | 34 ++++++--------------------- 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index d2e0656..3eeab4e 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -78,8 +78,8 @@ 133D7C6C2D2BE2500075467E /* Sora */ = { isa = PBXGroup; children = ( - 13DC0C442D302C6A00D0F966 /* MediaPlayer */, 13DC0C412D2EC9BA00D0F966 /* Info.plist */, + 13DC0C442D302C6A00D0F966 /* MediaPlayer */, 133D7C852D2BE2640075467E /* Utils */, 133D7C7B2D2BE2630075467E /* Views */, 133D7C6D2D2BE2500075467E /* SoraApp.swift */, diff --git a/Sora/Utils/Loaders/JSController.swift b/Sora/Utils/Loaders/JSController.swift index 588add5..a66e068 100644 --- a/Sora/Utils/Loaders/JSController.swift +++ b/Sora/Utils/Loaders/JSController.swift @@ -21,15 +21,13 @@ class JSController: ObservableObject { } context.setObject(logFunction, forKeyedSubscript: "log" as NSString) - // Because fetch isnt available in JSContext, it simulates the fetch api for Javascript. - // Performs network calls with URLSession let fetchNativeFunction: @convention(block) (String, JSValue, JSValue) -> Void = { urlString, resolve, reject in guard let url = URL(string: urlString) else { print("Invalid URL") reject.call(withArguments: ["Invalid URL"]) return } - let task = URLSession.shared.dataTask(with: url) { data, _, error in + let task = URLSession.custom.dataTask(with: url) { data, _, error in if let error = error { print(url) print("Network error in fetchNativeFunction: \(error.localizedDescription)") @@ -52,7 +50,6 @@ class JSController: ObservableObject { } context.setObject(fetchNativeFunction, forKeyedSubscript: "fetchNative" as NSString) - // Define fetch for JavaScript let fetchDefinition = """ function fetch(url) { return new Promise(function(resolve, reject) { @@ -196,7 +193,6 @@ class JSController: ObservableObject { }.resume() } - /// Use Javascript to fetch search results func fetchJsSearchResults(keyword: String, module: ScrapingModule, completion: @escaping ([SearchItem]) -> Void) { if let exception = context.exception { print("JavaScript exception: \(exception)") @@ -210,7 +206,6 @@ class JSController: ObservableObject { return } - // Call the JavaScript function, passing in the parameter let promiseValue = searchResultsFunction.call(withArguments: [keyword]) guard let promise = promiseValue else { print("searchResults did not return a Promise") @@ -218,7 +213,6 @@ class JSController: ObservableObject { return } - // Handles successful promise resolution. let thenBlock: @convention(block) (JSValue) -> Void = { result in if let jsonString = result.toString(), @@ -256,7 +250,6 @@ class JSController: ObservableObject { } } - // Handles promise rejection. let catchBlock: @convention(block) (JSValue) -> Void = { error in print("Promise rejected: \(String(describing: error.toString()))") DispatchQueue.main.async { @@ -264,16 +257,13 @@ class JSController: ObservableObject { } } - // Wrap the Swift blocks into JSValue functions let thenFunction = JSValue(object: thenBlock, in: context) let catchFunction = JSValue(object: catchBlock, in: context) - // Attach the 'then' and 'catch' callbacks to the Promise - promise.invokeMethod("then", withArguments: [thenFunction]) - promise.invokeMethod("catch", withArguments: [catchFunction]) + promise.invokeMethod("then", withArguments: [thenFunction as Any]) + promise.invokeMethod("catch", withArguments: [catchFunction as Any]) } - /// Use Javascript to fetch details func fetchDetailsJS(url: String, completion: @escaping ([MediaItem], [EpisodeLink]) -> Void) { guard let url = URL(string: url) else { completion([], []) @@ -301,7 +291,6 @@ class JSController: ObservableObject { var resultItems: [MediaItem] = [] var episodeLinks: [EpisodeLink] = [] - // Call the JavaScript function, passing in the parameter let promiseValueDetails = extractDetailsFunction.call(withArguments: [url.absoluteString]) guard let promiseDetails = promiseValueDetails else { print("extractDetails did not return a Promise") @@ -309,7 +298,6 @@ class JSController: ObservableObject { return } - // Handles successful promise resolution. let thenBlockDetails: @convention(block) (JSValue) -> Void = { result in if let jsonOfDetails = result.toString(), @@ -342,7 +330,6 @@ class JSController: ObservableObject { } } - // Handles promise rejection. let catchBlockDetails: @convention(block) (JSValue) -> Void = { error in print("Promise rejected of extractDetails: \(String(describing: error.toString()))") DispatchQueue.main.async { @@ -350,16 +337,13 @@ class JSController: ObservableObject { } } - // Wrap the Swift blocks into JSValue functions let thenFunctionDetails = JSValue(object: thenBlockDetails, in: context) let catchFunctionDetails = JSValue(object: catchBlockDetails, in: context) - // Attach the 'then' and 'catch' callbacks to the Promise - promiseDetails.invokeMethod("then", withArguments: [thenFunctionDetails]) - promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails]) + promiseDetails.invokeMethod("then", withArguments: [thenFunctionDetails as Any]) + promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails as Any]) - // Call the JavaScript function, passing in the parameter let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString]) guard let promiseEpisodes = promiseValueEpisodes else { print("extractEpisodes did not return a Promise") @@ -367,7 +351,6 @@ class JSController: ObservableObject { return } - // Handles successful promise resolution. let thenBlockEpisodes: @convention(block) (JSValue) -> Void = { result in if let jsonOfEpisodes = result.toString(), @@ -404,7 +387,6 @@ class JSController: ObservableObject { } } - // Handles promise rejection. let catchBlockEpisodes: @convention(block) (JSValue) -> Void = { error in print("Promise rejected of extractEpisodes: \(String(describing: error.toString()))") DispatchQueue.main.async { @@ -412,13 +394,11 @@ class JSController: ObservableObject { } } - // Wrap the Swift blocks into JSValue functions let thenFunctionEpisodes = JSValue(object: thenBlockEpisodes, in: context) let catchFunctionEpisodes = JSValue(object: catchBlockEpisodes, in: context) - // Attach the 'then' and 'catch' callbacks to the Promise - promiseEpisodes.invokeMethod("then", withArguments: [thenFunctionEpisodes]) - promiseEpisodes.invokeMethod("catch", withArguments: [catchFunctionEpisodes]) + promiseEpisodes.invokeMethod("then", withArguments: [thenFunctionEpisodes as Any]) + promiseEpisodes.invokeMethod("catch", withArguments: [catchFunctionEpisodes as Any]) } } From 76d23e2da0643b67a61cd3baee71a0b2673a4503 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sat, 11 Jan 2025 17:51:06 +0100 Subject: [PATCH 27/30] update thing --- .github/workflows/build-JS.yml | 29 ----------------------------- README.md | 20 +++++++++++--------- 2 files changed, 11 insertions(+), 38 deletions(-) delete mode 100644 .github/workflows/build-JS.yml diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml deleted file mode 100644 index ff780f2..0000000 --- a/.github/workflows/build-JS.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Build and Release IPA -on: - push: - branches: - - Sora-JSCore -jobs: - build: - name: Build IPA - runs-on: macOS-latest - steps: - - name: Use Node.js 20 - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Run ipabuild.sh - run: | - chmod +x ipabuild.sh - ./ipabuild.sh - - - name: Upload IPA artifact - uses: actions/upload-artifact@v4 - with: - name: Sora-IPA - path: build/Sora.ipa - compression-level: 0 diff --git a/README.md b/README.md index feccb3d..a30dca7 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ -[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) +[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) -A modular web scraping app, under the GPLv3.0 License +A modular web scraping app, **Still in early builds** under the GPLv3.0 License @@ -21,26 +21,28 @@ A modular web scraping app, under the GPLv3.0 License ## Features - [x] iOS/iPadOS 15+ support -- [ ] macOS support +- [x] macOS 12+ support +- [x] JSON module support - [ ] JavaScript module support ## Frequently Asked Questions 1. **What is Sora?** -Sora is a module based web scraping app, made to work with modules only + - Sora is a modular web scraping app designed to work exclusively with modules. 2. **Is Sora safe?** -Yes, Sora is open-source and does not store user data on external servers. + - Yes, Sora is open-source and does not store user data on external servers. 3. **Will Sora ever be paid?** -No, Sora will always remain free without subscriptions, paid content, or any type of login. + - No, Sora will always remain free, with no subscriptions, paid content, or required logins. -4. **How can i get module?** -I do not provide any module for the app. Search for them on google or i dont know. I only created 1 module to watch videos of my school. +4. **Where can I get modules?** + - I do not provide any modules for the app. Search for them on google or elsewhere. I only created 1 module to watch videos of my school. ## Acknowledgements FrameWorks: +- [SwiftSoup](https://github.com/scinfu/SwiftSoup) - MIT License - [KingFisher](https://github.com/onevcat/Kingfisher) - MIT License ## License @@ -48,7 +50,7 @@ FrameWorks: This project is licensed under the [GNU General Public License v3.0](LICENSE). ``` -Copyright © 2024-2025 cranci. All rights reserved. +Copyright © 2024 cranci. All rights reserved. Sora is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 6bbe269469ddf9cf82fba1c089054bdb5081fa61 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sat, 11 Jan 2025 17:51:26 +0100 Subject: [PATCH 28/30] Revert "update thing" This reverts commit 76d23e2da0643b67a61cd3baee71a0b2673a4503. --- .github/workflows/build-JS.yml | 29 +++++++++++++++++++++++++++++ README.md | 20 +++++++++----------- 2 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/build-JS.yml diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml new file mode 100644 index 0000000..ff780f2 --- /dev/null +++ b/.github/workflows/build-JS.yml @@ -0,0 +1,29 @@ +name: Build and Release IPA +on: + push: + branches: + - Sora-JSCore +jobs: + build: + name: Build IPA + runs-on: macOS-latest + steps: + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run ipabuild.sh + run: | + chmod +x ipabuild.sh + ./ipabuild.sh + + - name: Upload IPA artifact + uses: actions/upload-artifact@v4 + with: + name: Sora-IPA + path: build/Sora.ipa + compression-level: 0 diff --git a/README.md b/README.md index a30dca7..feccb3d 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ -[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) +[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) -A modular web scraping app, **Still in early builds** under the GPLv3.0 License +A modular web scraping app, under the GPLv3.0 License @@ -21,28 +21,26 @@ A modular web scraping app, **Still in early builds** under the GPLv3.0 License ## Features - [x] iOS/iPadOS 15+ support -- [x] macOS 12+ support -- [x] JSON module support +- [ ] macOS support - [ ] JavaScript module support ## Frequently Asked Questions 1. **What is Sora?** - - Sora is a modular web scraping app designed to work exclusively with modules. +Sora is a module based web scraping app, made to work with modules only 2. **Is Sora safe?** - - Yes, Sora is open-source and does not store user data on external servers. +Yes, Sora is open-source and does not store user data on external servers. 3. **Will Sora ever be paid?** - - No, Sora will always remain free, with no subscriptions, paid content, or required logins. +No, Sora will always remain free without subscriptions, paid content, or any type of login. -4. **Where can I get modules?** - - I do not provide any modules for the app. Search for them on google or elsewhere. I only created 1 module to watch videos of my school. +4. **How can i get module?** +I do not provide any module for the app. Search for them on google or i dont know. I only created 1 module to watch videos of my school. ## Acknowledgements FrameWorks: -- [SwiftSoup](https://github.com/scinfu/SwiftSoup) - MIT License - [KingFisher](https://github.com/onevcat/Kingfisher) - MIT License ## License @@ -50,7 +48,7 @@ FrameWorks: This project is licensed under the [GNU General Public License v3.0](LICENSE). ``` -Copyright © 2024 cranci. All rights reserved. +Copyright © 2024-2025 cranci. All rights reserved. Sora is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From bb9bb5da8832a1286986df6e6af4e6607733cf77 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sat, 11 Jan 2025 17:51:52 +0100 Subject: [PATCH 29/30] Reapply "update thing" This reverts commit 6bbe269469ddf9cf82fba1c089054bdb5081fa61. --- .github/workflows/build-JS.yml | 29 ----------------------------- README.md | 20 +++++++++++--------- 2 files changed, 11 insertions(+), 38 deletions(-) delete mode 100644 .github/workflows/build-JS.yml diff --git a/.github/workflows/build-JS.yml b/.github/workflows/build-JS.yml deleted file mode 100644 index ff780f2..0000000 --- a/.github/workflows/build-JS.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Build and Release IPA -on: - push: - branches: - - Sora-JSCore -jobs: - build: - name: Build IPA - runs-on: macOS-latest - steps: - - name: Use Node.js 20 - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Run ipabuild.sh - run: | - chmod +x ipabuild.sh - ./ipabuild.sh - - - name: Upload IPA artifact - uses: actions/upload-artifact@v4 - with: - name: Sora-IPA - path: build/Sora.ipa - compression-level: 0 diff --git a/README.md b/README.md index feccb3d..a30dca7 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ -[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) +[![Build and Release IPA](https://github.com/cranci1/Sora/actions/workflows/build.yml/badge.svg)](https://github.com/cranci1/Sora/actions/workflows/build.yml) [![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white)](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2015.0%2B%20%26%20macOS%2012.0%2B-red?logo=apple&logoColor=white) [![Discord](https://img.shields.io/discord/1293430817841741899.svg?logo=discord&color=blue)](https://discord.gg/XR3SrmUbpd) -A modular web scraping app, under the GPLv3.0 License +A modular web scraping app, **Still in early builds** under the GPLv3.0 License @@ -21,26 +21,28 @@ A modular web scraping app, under the GPLv3.0 License ## Features - [x] iOS/iPadOS 15+ support -- [ ] macOS support +- [x] macOS 12+ support +- [x] JSON module support - [ ] JavaScript module support ## Frequently Asked Questions 1. **What is Sora?** -Sora is a module based web scraping app, made to work with modules only + - Sora is a modular web scraping app designed to work exclusively with modules. 2. **Is Sora safe?** -Yes, Sora is open-source and does not store user data on external servers. + - Yes, Sora is open-source and does not store user data on external servers. 3. **Will Sora ever be paid?** -No, Sora will always remain free without subscriptions, paid content, or any type of login. + - No, Sora will always remain free, with no subscriptions, paid content, or required logins. -4. **How can i get module?** -I do not provide any module for the app. Search for them on google or i dont know. I only created 1 module to watch videos of my school. +4. **Where can I get modules?** + - I do not provide any modules for the app. Search for them on google or elsewhere. I only created 1 module to watch videos of my school. ## Acknowledgements FrameWorks: +- [SwiftSoup](https://github.com/scinfu/SwiftSoup) - MIT License - [KingFisher](https://github.com/onevcat/Kingfisher) - MIT License ## License @@ -48,7 +50,7 @@ FrameWorks: This project is licensed under the [GNU General Public License v3.0](LICENSE). ``` -Copyright © 2024-2025 cranci. All rights reserved. +Copyright © 2024 cranci. All rights reserved. Sora is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From ffc3821010255290944e822946977db4a66fa2d7 Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Sat, 11 Jan 2025 17:55:40 +0100 Subject: [PATCH 30/30] yes --- Sora.xcodeproj/project.pbxproj | 44 +++ .../Components/Double+Extension.swift | 30 ++ .../Components/MusicProgressSlider.swift | 102 +++++++ .../CustomPlayer/CustomPlayer.swift | 282 ++++++++++++++++++ Sora/MediaPlayer/NormalPlayer.swift | 77 +++++ Sora/MediaPlayer/VideoPlayer.swift | 4 +- Sora/Utils/Miru/MiruDataStruct.swift | 26 ++ 7 files changed, 563 insertions(+), 2 deletions(-) create mode 100644 Sora/MediaPlayer/CustomPlayer/Components/Double+Extension.swift create mode 100644 Sora/MediaPlayer/CustomPlayer/Components/MusicProgressSlider.swift create mode 100644 Sora/MediaPlayer/CustomPlayer/CustomPlayer.swift create mode 100644 Sora/MediaPlayer/NormalPlayer.swift create mode 100644 Sora/Utils/Miru/MiruDataStruct.swift diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index 3eeab4e..ba4d147 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -24,6 +24,11 @@ 138AA1B82D2D66FD0021F9DF /* EpisodeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138AA1B62D2D66FD0021F9DF /* EpisodeCell.swift */; }; 138AA1B92D2D66FD0021F9DF /* CircularProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */; }; 13DC0C462D302C7500D0F966 /* VideoPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13DC0C452D302C7500D0F966 /* VideoPlayer.swift */; }; + 13EA2BD52D32D97400C1EBD7 /* CustomPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EA2BD12D32D97400C1EBD7 /* CustomPlayer.swift */; }; + 13EA2BD62D32D97400C1EBD7 /* Double+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EA2BD32D32D97400C1EBD7 /* Double+Extension.swift */; }; + 13EA2BD72D32D97400C1EBD7 /* MusicProgressSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EA2BD42D32D97400C1EBD7 /* MusicProgressSlider.swift */; }; + 13EA2BD92D32D98400C1EBD7 /* NormalPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EA2BD82D32D98400C1EBD7 /* NormalPlayer.swift */; }; + 13EA2BDC2D32D9FF00C1EBD7 /* MiruDataStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EA2BDB2D32D9FF00C1EBD7 /* MiruDataStruct.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -45,6 +50,11 @@ 138AA1B72D2D66FD0021F9DF /* CircularProgressBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularProgressBar.swift; sourceTree = ""; }; 13DC0C412D2EC9BA00D0F966 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 13DC0C452D302C7500D0F966 /* VideoPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayer.swift; sourceTree = ""; }; + 13EA2BD12D32D97400C1EBD7 /* CustomPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomPlayer.swift; sourceTree = ""; }; + 13EA2BD32D32D97400C1EBD7 /* Double+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Double+Extension.swift"; sourceTree = ""; }; + 13EA2BD42D32D97400C1EBD7 /* MusicProgressSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MusicProgressSlider.swift; sourceTree = ""; }; + 13EA2BD82D32D98400C1EBD7 /* NormalPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NormalPlayer.swift; sourceTree = ""; }; + 13EA2BDB2D32D9FF00C1EBD7 /* MiruDataStruct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MiruDataStruct.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -131,6 +141,7 @@ 133D7C852D2BE2640075467E /* Utils */ = { isa = PBXGroup; children = ( + 13EA2BDA2D32D9FF00C1EBD7 /* Miru */, 133D7C862D2BE2640075467E /* Extensions */, 133D7C882D2BE2640075467E /* Modules */, 133D7C8A2D2BE2640075467E /* Loaders */, @@ -174,11 +185,39 @@ 13DC0C442D302C6A00D0F966 /* MediaPlayer */ = { isa = PBXGroup; children = ( + 13EA2BD02D32D97400C1EBD7 /* CustomPlayer */, 13DC0C452D302C7500D0F966 /* VideoPlayer.swift */, + 13EA2BD82D32D98400C1EBD7 /* NormalPlayer.swift */, ); path = MediaPlayer; sourceTree = ""; }; + 13EA2BD02D32D97400C1EBD7 /* CustomPlayer */ = { + isa = PBXGroup; + children = ( + 13EA2BD12D32D97400C1EBD7 /* CustomPlayer.swift */, + 13EA2BD22D32D97400C1EBD7 /* Components */, + ); + path = CustomPlayer; + sourceTree = ""; + }; + 13EA2BD22D32D97400C1EBD7 /* Components */ = { + isa = PBXGroup; + children = ( + 13EA2BD32D32D97400C1EBD7 /* Double+Extension.swift */, + 13EA2BD42D32D97400C1EBD7 /* MusicProgressSlider.swift */, + ); + path = Components; + sourceTree = ""; + }; + 13EA2BDA2D32D9FF00C1EBD7 /* Miru */ = { + isa = PBXGroup; + children = ( + 13EA2BDB2D32D9FF00C1EBD7 /* MiruDataStruct.swift */, + ); + path = Miru; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -257,10 +296,14 @@ files = ( 13DC0C462D302C7500D0F966 /* VideoPlayer.swift in Sources */, 133D7C902D2BE2640075467E /* SettingsView.swift in Sources */, + 13EA2BD72D32D97400C1EBD7 /* MusicProgressSlider.swift in Sources */, + 13EA2BD92D32D98400C1EBD7 /* NormalPlayer.swift in Sources */, 133D7C932D2BE2640075467E /* Modules.swift in Sources */, 133D7C702D2BE2500075467E /* ContentView.swift in Sources */, + 13EA2BD62D32D97400C1EBD7 /* Double+Extension.swift in Sources */, 133D7C8F2D2BE2640075467E /* MediaInfoView.swift in Sources */, 133D7C8D2D2BE2640075467E /* HomeView.swift in Sources */, + 13EA2BDC2D32D9FF00C1EBD7 /* MiruDataStruct.swift in Sources */, 138AA1B82D2D66FD0021F9DF /* EpisodeCell.swift in Sources */, 133D7C8C2D2BE2640075467E /* SearchView.swift in Sources */, 133D7C942D2BE2640075467E /* JSController.swift in Sources */, @@ -269,6 +312,7 @@ 133D7C8E2D2BE2640075467E /* LibraryView.swift in Sources */, 133D7C6E2D2BE2500075467E /* SoraApp.swift in Sources */, 138AA1B92D2D66FD0021F9DF /* CircularProgressBar.swift in Sources */, + 13EA2BD52D32D97400C1EBD7 /* CustomPlayer.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Sora/MediaPlayer/CustomPlayer/Components/Double+Extension.swift b/Sora/MediaPlayer/CustomPlayer/Components/Double+Extension.swift new file mode 100644 index 0000000..801cc7b --- /dev/null +++ b/Sora/MediaPlayer/CustomPlayer/Components/Double+Extension.swift @@ -0,0 +1,30 @@ +// +// Double+Extension.swift +// AppleMusicSlider +// +// Created by Pratik on 14/01/23. +// +// Thanks to pratikg29 for this code inside his open source project "https://github.com/pratikg29/Custom-Slider-Control?ref=iosexample.com" +// + +import Foundation + +extension Double { + func asTimeString(style: DateComponentsFormatter.UnitsStyle) -> String { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.minute, .second] + formatter.unitsStyle = style + formatter.zeroFormattingBehavior = .pad + return formatter.string(from: self) ?? "" + } +} + +extension BinaryFloatingPoint { + func asTimeString(style: DateComponentsFormatter.UnitsStyle) -> String { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.minute, .second] + formatter.unitsStyle = style + formatter.zeroFormattingBehavior = .pad + return formatter.string(from: TimeInterval(self)) ?? "" + } +} diff --git a/Sora/MediaPlayer/CustomPlayer/Components/MusicProgressSlider.swift b/Sora/MediaPlayer/CustomPlayer/Components/MusicProgressSlider.swift new file mode 100644 index 0000000..8bbb950 --- /dev/null +++ b/Sora/MediaPlayer/CustomPlayer/Components/MusicProgressSlider.swift @@ -0,0 +1,102 @@ +// +// MusicProgressSlider.swift +// Custom Seekbar +// +// Created by Pratik on 08/01/23. +// +// Thanks to pratikg29 for this code inside his open source project "https://github.com/pratikg29/Custom-Slider-Control?ref=iosexample.com" +// I did edit just a little bit the code for my liking +// + +import SwiftUI + +struct MusicProgressSlider: View { + @Binding var value: T + let inRange: ClosedRange + let activeFillColor: Color + let fillColor: Color + let emptyColor: Color + let height: CGFloat + let onEditingChanged: (Bool) -> Void + + @State private var localRealProgress: T = 0 + @State private var localTempProgress: T = 0 + @GestureState private var isActive: Bool = false + + var body: some View { + GeometryReader { bounds in + ZStack { + VStack { + ZStack(alignment: .center) { + Capsule() + .fill(emptyColor) + Capsule() + .fill(isActive ? activeFillColor : fillColor) + .mask({ + HStack { + Rectangle() + .frame(width: max(bounds.size.width * CGFloat((localRealProgress + localTempProgress)), 0), alignment: .leading) + Spacer(minLength: 0) + } + }) + } + + HStack { + Text(value.asTimeString(style: .positional)) + Spacer(minLength: 0) + Text("-" + (inRange.upperBound - value).asTimeString(style: .positional)) + } + .font(.system(size: 12)) + .foregroundColor(isActive ? fillColor : emptyColor) + } + .frame(width: isActive ? bounds.size.width * 1.04 : bounds.size.width, alignment: .center) + .animation(animation, value: isActive) + } + .frame(width: bounds.size.width, height: bounds.size.height, alignment: .center) + .contentShape(Rectangle()) + .gesture(DragGesture(minimumDistance: 0, coordinateSpace: .local) + .updating($isActive) { _, state, _ in + state = true + } + .onChanged { gesture in + localTempProgress = T(gesture.translation.width / bounds.size.width) + value = max(min(getPrgValue(), inRange.upperBound), inRange.lowerBound) + }.onEnded { _ in + localRealProgress = max(min(localRealProgress + localTempProgress, 1), 0) + localTempProgress = 0 + }) + .onChange(of: isActive) { newValue in + value = max(min(getPrgValue(), inRange.upperBound), inRange.lowerBound) + onEditingChanged(newValue) + } + .onAppear { + localRealProgress = getPrgPercentage(value) + } + .onChange(of: value) { newValue in + if !isActive { + localRealProgress = getPrgPercentage(newValue) + } + } + } + .frame(height: isActive ? height * 1.25 : height, alignment: .center) + } + + private var animation: Animation { + if isActive { + return .spring() + } else { + return .spring(response: 0.5, dampingFraction: 0.5, blendDuration: 0.6) + } + } + + private func getPrgPercentage(_ value: T) -> T { + let range = inRange.upperBound - inRange.lowerBound + let correctedStartValue = value - inRange.lowerBound + let percentage = correctedStartValue / range + return percentage + } + + private func getPrgValue() -> T { + return ((localRealProgress + localTempProgress) * (inRange.upperBound - inRange.lowerBound)) + inRange.lowerBound + } +} diff --git a/Sora/MediaPlayer/CustomPlayer/CustomPlayer.swift b/Sora/MediaPlayer/CustomPlayer/CustomPlayer.swift new file mode 100644 index 0000000..79bbf00 --- /dev/null +++ b/Sora/MediaPlayer/CustomPlayer/CustomPlayer.swift @@ -0,0 +1,282 @@ +// +// ContentView.swift +// test2 +// +// Created by Francesco on 20/12/24. +// + +import SwiftUI +import AVKit + +struct CustomVideoPlayer: UIViewControllerRepresentable { + let player: AVPlayer + + func makeUIViewController(context: Context) -> AVPlayerViewController { + let controller = NormalPlayer() + controller.player = player + controller.showsPlaybackControls = false + player.play() + return controller + } + + func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) { + // yes? Like the plural of the famous american rapper ye? -IBHRAD + } +} + +struct CustomMediaPlayer: View { + @State private var player: AVPlayer + @State private var isPlaying = true + @State private var currentTime: Double = 0.0 + @State private var duration: Double = 0.0 + @State private var showControls = false + @State private var inactivityTimer: Timer? + @State private var timeObserverToken: Any? + @State private var isVideoLoaded = false + @State private var showWatchNextButton = true + @Environment(\.presentationMode) var presentationMode + + let module: ScrapingModule + let fullUrl: String + let title: String + let episodeNumber: Int + let onWatchNext: () -> Void + + init(module: ScrapingModule, urlString: String, fullUrl: String, title: String, episodeNumber: Int, onWatchNext: @escaping () -> Void) { + guard let url = URL(string: urlString) else { + fatalError("Invalid URL string") + } + + var request = URLRequest(url: url) + if urlString.contains("ascdn") { + request.addValue("\(module.metadata.baseUrl)", forHTTPHeaderField: "Referer") + } + + let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": request.allHTTPHeaderFields ?? [:]]) + _player = State(initialValue: AVPlayer(playerItem: AVPlayerItem(asset: asset))) + + self.module = module + self.fullUrl = fullUrl + self.title = title + self.episodeNumber = episodeNumber + self.onWatchNext = onWatchNext + + let lastPlayedTime = UserDefaults.standard.double(forKey: "lastPlayedTime_\(fullUrl)") + if lastPlayedTime > 0 { + let seekTime = CMTime(seconds: lastPlayedTime, preferredTimescale: 1) + self._player.wrappedValue.seek(to: seekTime) + } + } + + var body: some View { + ZStack { + VStack { + ZStack { + CustomVideoPlayer(player: player) + .onAppear { + player.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: 600), queue: .main) { time in + currentTime = time.seconds + if let itemDuration = player.currentItem?.duration.seconds, itemDuration.isFinite && !itemDuration.isNaN { + duration = itemDuration + isVideoLoaded = true + } + } + startUpdatingCurrentTime() + addPeriodicTimeObserver(fullURL: fullUrl) + } + .edgesIgnoringSafeArea(.all) + .overlay( + Group { + if showControls { + Color.black.opacity(0.5) + .edgesIgnoringSafeArea(.all) + HStack(spacing: 20) { + Button(action: { + currentTime = max(currentTime - 10, 0) + player.seek(to: CMTime(seconds: currentTime, preferredTimescale: 600)) + }) { + Image(systemName: "gobackward.10") + } + .foregroundColor(.white) + .font(.system(size: 25)) + .contentShape(Rectangle()) + .frame(width: 60, height: 60) + + Button(action: { + if isPlaying { + player.pause() + } else { + player.play() + } + isPlaying.toggle() + }) { + Image(systemName: isPlaying ? "pause.fill" : "play.fill") + } + .foregroundColor(.white) + .font(.system(size: 45)) + .contentShape(Rectangle()) + .frame(width: 80, height: 80) + + Button(action: { + currentTime = min(currentTime + 10, duration) + player.seek(to: CMTime(seconds: currentTime, preferredTimescale: 600)) + }) { + Image(systemName: "goforward.10") + } + .foregroundColor(.white) + .font(.system(size: 25)) + .contentShape(Rectangle()) + .frame(width: 60, height: 60) + } + } + } + .animation(.easeInOut(duration: 0.2), value: showControls), + alignment: .center + ) + .onTapGesture { + withAnimation { + showControls.toggle() + } + } + + VStack { + Spacer() + VStack { + HStack(alignment: .bottom) { + if showControls { + VStack(alignment: .leading) { + Text("Episode \(episodeNumber)") + .font(.subheadline) + .foregroundColor(.gray) + Text(title) + .font(.headline) + .foregroundColor(.white) + } + .padding(.horizontal, 32) + } + Spacer() + if duration - currentTime <= duration * 0.10 && currentTime != duration && showWatchNextButton { + Button(action: { + player.pause() + presentationMode.wrappedValue.dismiss() + onWatchNext() + }) { + HStack { + Image(systemName: "forward.fill") + .foregroundColor(Color.black) + Text("Watch Next") + .font(.headline) + .foregroundColor(Color.black) + } + .padding() + .background(Color.white) + .cornerRadius(32) + } + .padding(.trailing, 10) + .onAppear { + if UserDefaults.standard.bool(forKey: "hideNextButton") { + DispatchQueue.main.asyncAfter(deadline: .now() + 5) { + showWatchNextButton = false + } + } + } + } + if showControls { + Menu { + Menu("Playback Speed") { + ForEach([0.5, 1.0, 1.25, 1.5, 1.75, 2.0], id: \.self) { speed in + Button(action: { + player.rate = Float(speed) + if player.timeControlStatus != .playing { + player.pause() + } + }) { + Text("\(speed, specifier: "%.2f")") + } + } + } + } label: { + Image(systemName: "ellipsis.circle") + .foregroundColor(.white) + .font(.system(size: 15)) + } + } + } + .padding(.trailing, 32) + + if showControls { + MusicProgressSlider( + value: $currentTime, + inRange: 0...duration, + activeFillColor: .white, + fillColor: .white.opacity(0.5), + emptyColor: .white.opacity(0.3), + height: 28, + onEditingChanged: { editing in + if !editing && isVideoLoaded { + player.seek(to: CMTime(seconds: currentTime, preferredTimescale: 600)) + } + } + ) + .padding(.horizontal, 32) + .padding(.bottom, 10) + .disabled(!isVideoLoaded) + } + } + } + .onAppear { + startUpdatingCurrentTime() + } + .onDisappear { + player.pause() + inactivityTimer?.invalidate() + if let timeObserverToken = timeObserverToken { + player.removeTimeObserver(timeObserverToken) + self.timeObserverToken = nil + } + } + } + } + VStack { + if showControls { + HStack { + Button(action: { + presentationMode.wrappedValue.dismiss() + }) { + Image(systemName: "xmark") + .foregroundColor(.white) + .font(.system(size: 20)) + } + .frame(width: 60, height: 60) + .contentShape(Rectangle()) + .padding() + Spacer() + } + Spacer() + } + } + } + } + + private func startUpdatingCurrentTime() { + Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in + currentTime = player.currentTime().seconds + } + } + + private func addPeriodicTimeObserver(fullURL: String) { + let interval = CMTime(seconds: 1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in + guard let currentItem = player.currentItem, + currentItem.duration.seconds.isFinite else { + return + } + + let currentTime = time.seconds + let duration = currentItem.duration.seconds + + UserDefaults.standard.set(currentTime, forKey: "lastPlayedTime_\(fullURL)") + UserDefaults.standard.set(duration, forKey: "totalTime_\(fullURL)") + } + } +} diff --git a/Sora/MediaPlayer/NormalPlayer.swift b/Sora/MediaPlayer/NormalPlayer.swift new file mode 100644 index 0000000..2c92496 --- /dev/null +++ b/Sora/MediaPlayer/NormalPlayer.swift @@ -0,0 +1,77 @@ +// +// NormalPlayer.swift +// Sora +// +// Created by Francesco on 18/12/24. +// + +import AVKit + +class NormalPlayer: AVPlayerViewController { + private var originalRate: Float = 1.0 + private var holdGesture: UILongPressGestureRecognizer? + + override func viewDidLoad() { + super.viewDidLoad() + setupHoldGesture() + setupAudioSession() + } + + override var supportedInterfaceOrientations: UIInterfaceOrientationMask { + if UserDefaults.standard.bool(forKey: "AlwaysLandscape") { + return .landscape + } else { + return .all + } + } + + override var prefersHomeIndicatorAutoHidden: Bool { + return true + } + + override var prefersStatusBarHidden: Bool { + return true + } + + private func setupHoldGesture() { + holdGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleHoldGesture(_:))) + holdGesture?.minimumPressDuration = 0.5 + if let holdGesture = holdGesture { + view.addGestureRecognizer(holdGesture) + } + } + + @objc private func handleHoldGesture(_ gesture: UILongPressGestureRecognizer) { + switch gesture.state { + case .began: + beginHoldSpeed() + case .ended, .cancelled: + endHoldSpeed() + default: + break + } + } + + private func beginHoldSpeed() { + guard let player = player else { return } + originalRate = player.rate + let holdSpeed = UserDefaults.standard.float(forKey: "holdSpeedPlayer") + player.rate = holdSpeed + } + + private func endHoldSpeed() { + player?.rate = originalRate + } + + func setupAudioSession() { + do { + let audioSession = AVAudioSession.sharedInstance() + try audioSession.setCategory(.playback, mode: .moviePlayback, options: .mixWithOthers) + try audioSession.setActive(true) + + try audioSession.overrideOutputAudioPort(.speaker) + } catch { + print("Failed to set up AVAudioSession: \(error)") + } + } +} diff --git a/Sora/MediaPlayer/VideoPlayer.swift b/Sora/MediaPlayer/VideoPlayer.swift index bc85c25..1d00cd9 100644 --- a/Sora/MediaPlayer/VideoPlayer.swift +++ b/Sora/MediaPlayer/VideoPlayer.swift @@ -12,7 +12,7 @@ class VideoPlayerViewController: UIViewController { let module: ScrapingModule var player: AVPlayer? - var playerViewController: AVPlayerViewController? + var playerViewController: NormalPlayer? var timeObserverToken: Any? var streamUrl: String? var fullUrl: String = "" @@ -42,7 +42,7 @@ class VideoPlayerViewController: UIViewController { let playerItem = AVPlayerItem(asset: asset) player = AVPlayer(playerItem: playerItem) - playerViewController = AVPlayerViewController() + playerViewController = NormalPlayer() playerViewController?.player = player addPeriodicTimeObserver(fullURL: fullUrl) diff --git a/Sora/Utils/Miru/MiruDataStruct.swift b/Sora/Utils/Miru/MiruDataStruct.swift new file mode 100644 index 0000000..c50e75d --- /dev/null +++ b/Sora/Utils/Miru/MiruDataStruct.swift @@ -0,0 +1,26 @@ +// +// MiruDataStruct.swift +// Sora +// +// Created by Francesco on 18/12/24. +// + +import Foundation + +struct MiruDataStruct: Codable { + var likes: [Like] + + struct Like: Codable { + let anilistID: Int + var gogoSlug: String + let title: String + let cover: String + + enum CodingKeys: String, CodingKey { + case anilistID = "anilist_id" + case gogoSlug = "gogo_slug" + case title + case cover + } + } +}

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%0DixQ4HY^H&}zem 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%0D3>1zz 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