From 8578bf8fa339c81c00086ad191ddb6f052eede1e Mon Sep 17 00:00:00 2001 From: Thomas Asheim Smedmann Date: Mon, 20 Dec 2021 14:47:46 +0100 Subject: [PATCH] Initial commit --- .gitignore | 29 ++ .../project.pbxproj | 360 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../Base.lproj/Main.storyboard | 205 ++++++++++ .../CircularView.swift | 17 + .../CustomInterfaceBuilderView/Info.plist | 66 ++++ .../RatingView.swift | 122 ++++++ .../RoundedView.swift | 92 +++++ .../SceneDelegate.swift | 52 +++ .../ViewController.swift | 25 ++ CustomInterfaceBuilderView/README.md | 3 + .../project.pbxproj | 373 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../fruit.imageset/Contents.json | 12 + .../Assets.xcassets/fruit.imageset/fruit.jpeg | Bin 0 -> 194999 bytes .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../ContentViewController.swift | 78 ++++ .../DialogTransitionManager.swift | 190 +++++++++ .../CustomPresentationController/Info.plist | 23 ++ .../MotionEffectsViewController.swift | 96 +++++ .../SceneDelegate.swift | 58 +++ .../ShelfTransitionManager.swift | 207 ++++++++++ .../ViewController.swift | 199 ++++++++++ .../VisualEffectsViewController.swift | 148 +++++++ CustomPresentationController/README.md | 3 + README.md | 11 + 37 files changed, 2751 insertions(+) create mode 100644 .gitignore create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.pbxproj create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/AppDelegate.swift create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/Contents.json create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/LaunchScreen.storyboard create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/Main.storyboard create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/CircularView.swift create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/Info.plist create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/RatingView.swift create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/RoundedView.swift create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/SceneDelegate.swift create mode 100644 CustomInterfaceBuilderView/CustomInterfaceBuilderView/ViewController.swift create mode 100644 CustomInterfaceBuilderView/README.md create mode 100644 CustomPresentationController/CustomPresentationController.xcodeproj/project.pbxproj create mode 100644 CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 CustomPresentationController/CustomPresentationController/AppDelegate.swift create mode 100644 CustomPresentationController/CustomPresentationController/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 CustomPresentationController/CustomPresentationController/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CustomPresentationController/CustomPresentationController/Assets.xcassets/Contents.json create mode 100644 CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/Contents.json create mode 100644 CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/fruit.jpeg create mode 100644 CustomPresentationController/CustomPresentationController/Base.lproj/LaunchScreen.storyboard create mode 100644 CustomPresentationController/CustomPresentationController/ContentViewController.swift create mode 100644 CustomPresentationController/CustomPresentationController/DialogTransitionManager.swift create mode 100644 CustomPresentationController/CustomPresentationController/Info.plist create mode 100644 CustomPresentationController/CustomPresentationController/MotionEffectsViewController.swift create mode 100644 CustomPresentationController/CustomPresentationController/SceneDelegate.swift create mode 100644 CustomPresentationController/CustomPresentationController/ShelfTransitionManager.swift create mode 100644 CustomPresentationController/CustomPresentationController/ViewController.swift create mode 100644 CustomPresentationController/CustomPresentationController/VisualEffectsViewController.swift create mode 100644 CustomPresentationController/README.md create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bad48f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +**/xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +**/build/ +**/DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Gcc Patch +**/*.gcno + +## MacOS +.DS_Store diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.pbxproj b/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d12932e --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.pbxproj @@ -0,0 +1,360 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + ED29E78826EA5E25001242EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED29E78726EA5E25001242EE /* AppDelegate.swift */; }; + ED29E78A26EA5E25001242EE /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED29E78926EA5E25001242EE /* SceneDelegate.swift */; }; + ED29E78C26EA5E25001242EE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED29E78B26EA5E25001242EE /* ViewController.swift */; }; + ED29E78F26EA5E25001242EE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ED29E78D26EA5E25001242EE /* Main.storyboard */; }; + ED29E79126EA5E27001242EE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ED29E79026EA5E27001242EE /* Assets.xcassets */; }; + ED29E79426EA5E27001242EE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ED29E79226EA5E27001242EE /* LaunchScreen.storyboard */; }; + ED29E7B826EA613D001242EE /* RatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED29E7B726EA613D001242EE /* RatingView.swift */; }; + ED29E7BA26EA6152001242EE /* RoundedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED29E7B926EA6152001242EE /* RoundedView.swift */; }; + ED29E7BD26EBCA79001242EE /* CircularView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED29E7BC26EBCA79001242EE /* CircularView.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + ED29E78426EA5E25001242EE /* CustomInterfaceBuilderView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CustomInterfaceBuilderView.app; sourceTree = BUILT_PRODUCTS_DIR; }; + ED29E78726EA5E25001242EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + ED29E78926EA5E25001242EE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + ED29E78B26EA5E25001242EE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + ED29E78E26EA5E25001242EE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + ED29E79026EA5E27001242EE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + ED29E79326EA5E27001242EE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + ED29E79526EA5E27001242EE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + ED29E7B726EA613D001242EE /* RatingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RatingView.swift; sourceTree = ""; }; + ED29E7B926EA6152001242EE /* RoundedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedView.swift; sourceTree = ""; }; + ED29E7BB26EBBC24001242EE /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + ED29E7BC26EBCA79001242EE /* CircularView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularView.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + ED29E78126EA5E25001242EE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + ED29E77B26EA5E25001242EE = { + isa = PBXGroup; + children = ( + ED29E7BB26EBBC24001242EE /* README.md */, + ED29E78626EA5E25001242EE /* CustomInterfaceBuilderView */, + ED29E78526EA5E25001242EE /* Products */, + ); + sourceTree = ""; + }; + ED29E78526EA5E25001242EE /* Products */ = { + isa = PBXGroup; + children = ( + ED29E78426EA5E25001242EE /* CustomInterfaceBuilderView.app */, + ); + name = Products; + sourceTree = ""; + }; + ED29E78626EA5E25001242EE /* CustomInterfaceBuilderView */ = { + isa = PBXGroup; + children = ( + ED29E78726EA5E25001242EE /* AppDelegate.swift */, + ED29E78926EA5E25001242EE /* SceneDelegate.swift */, + ED29E78D26EA5E25001242EE /* Main.storyboard */, + ED29E78B26EA5E25001242EE /* ViewController.swift */, + ED29E7B726EA613D001242EE /* RatingView.swift */, + ED29E7B926EA6152001242EE /* RoundedView.swift */, + ED29E7BC26EBCA79001242EE /* CircularView.swift */, + ED29E79026EA5E27001242EE /* Assets.xcassets */, + ED29E79226EA5E27001242EE /* LaunchScreen.storyboard */, + ED29E79526EA5E27001242EE /* Info.plist */, + ); + path = CustomInterfaceBuilderView; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + ED29E78326EA5E25001242EE /* CustomInterfaceBuilderView */ = { + isa = PBXNativeTarget; + buildConfigurationList = ED29E7AE26EA5E28001242EE /* Build configuration list for PBXNativeTarget "CustomInterfaceBuilderView" */; + buildPhases = ( + ED29E78026EA5E25001242EE /* Sources */, + ED29E78126EA5E25001242EE /* Frameworks */, + ED29E78226EA5E25001242EE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CustomInterfaceBuilderView; + productName = CustomInterfaceBuilderView; + productReference = ED29E78426EA5E25001242EE /* CustomInterfaceBuilderView.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + ED29E77C26EA5E25001242EE /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 1250; + TargetAttributes = { + ED29E78326EA5E25001242EE = { + CreatedOnToolsVersion = 12.5.1; + }; + }; + }; + buildConfigurationList = ED29E77F26EA5E25001242EE /* Build configuration list for PBXProject "CustomInterfaceBuilderView" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = ED29E77B26EA5E25001242EE; + productRefGroup = ED29E78526EA5E25001242EE /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + ED29E78326EA5E25001242EE /* CustomInterfaceBuilderView */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + ED29E78226EA5E25001242EE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ED29E79426EA5E27001242EE /* LaunchScreen.storyboard in Resources */, + ED29E79126EA5E27001242EE /* Assets.xcassets in Resources */, + ED29E78F26EA5E25001242EE /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + ED29E78026EA5E25001242EE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ED29E7BD26EBCA79001242EE /* CircularView.swift in Sources */, + ED29E78C26EA5E25001242EE /* ViewController.swift in Sources */, + ED29E78826EA5E25001242EE /* AppDelegate.swift in Sources */, + ED29E78A26EA5E25001242EE /* SceneDelegate.swift in Sources */, + ED29E7BA26EA6152001242EE /* RoundedView.swift in Sources */, + ED29E7B826EA613D001242EE /* RatingView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + ED29E78D26EA5E25001242EE /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + ED29E78E26EA5E25001242EE /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + ED29E79226EA5E27001242EE /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + ED29E79326EA5E27001242EE /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + ED29E7AC26EA5E28001242EE /* 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++14"; + 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 = 14.5; + 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; + }; + ED29E7AD26EA5E28001242EE /* 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++14"; + 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 = 14.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + ED29E7AF26EA5E28001242EE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = CustomInterfaceBuilderView/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = ios.example.CustomInterfaceBuilderView; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + ED29E7B026EA5E28001242EE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = CustomInterfaceBuilderView/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = ios.example.CustomInterfaceBuilderView; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + ED29E77F26EA5E25001242EE /* Build configuration list for PBXProject "CustomInterfaceBuilderView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED29E7AC26EA5E28001242EE /* Debug */, + ED29E7AD26EA5E28001242EE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ED29E7AE26EA5E28001242EE /* Build configuration list for PBXNativeTarget "CustomInterfaceBuilderView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED29E7AF26EA5E28001242EE /* Debug */, + ED29E7B026EA5E28001242EE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = ED29E77C26EA5E25001242EE /* Project object */; +} diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/AppDelegate.swift b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/AppDelegate.swift new file mode 100644 index 0000000..ec83885 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// CustomInterfaceBuilderView +// +// Created by Thomas Asheim Smedmann on 09/09/2021. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AccentColor.colorset/Contents.json b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AppIcon.appiconset/Contents.json b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/Contents.json b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/LaunchScreen.storyboard b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/Main.storyboard b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/Main.storyboard new file mode 100644 index 0000000..29efe8a --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Base.lproj/Main.storyboard @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/CircularView.swift b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/CircularView.swift new file mode 100644 index 0000000..38297a7 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/CircularView.swift @@ -0,0 +1,17 @@ +// +// CircleView.swift +// CustomInterfaceBuilderView +// +// Created by Thomas Asheim Smedmann on 10/09/2021. +// + +import UIKit + +@IBDesignable +class CircularView: UIView { + override func layoutSubviews() { + super.layoutSubviews() + layer.cornerRadius = CGFloat(min(bounds.width / 2, bounds.height / 2)) + layer.masksToBounds = true + } +} diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Info.plist b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Info.plist new file mode 100644 index 0000000..5b531f7 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/Info.plist @@ -0,0 +1,66 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/RatingView.swift b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/RatingView.swift new file mode 100644 index 0000000..60ab909 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/RatingView.swift @@ -0,0 +1,122 @@ +// +// RatingView.swift +// CustomInterfaceBuilderView +// +// Created by Thomas Asheim Smedmann on 09/09/2021. +// + +import UIKit + + +enum RatingThreshold: Int { + case low = 4 // 1..<4 = low + case high = 8 // 8..<11 = high +} + +@IBDesignable +class RatingView: UIView { + private static let dotWidth: CGFloat = 10 + private static let ratingLabelMargin: CGFloat = 1 + + private static let maxRating = 10 + + private let container: UIStackView = { + let stackView = UIStackView(arrangedSubviews: (0.. 0 + ? RatingView.dotWidth * 2 * CGFloat(RatingView.maxRating) + ratingLabel.intrinsicContentSize.width + 2 * RatingView.ratingLabelMargin + : RatingView.dotWidth * 2 * CGFloat(RatingView.maxRating) + RatingView.dotWidth + + let height = rating > 0 + ? ratingLabel.intrinsicContentSize.height + 2 * RatingView.ratingLabelMargin + : RatingView.dotWidth + + return CGSize(width: width, height: height) + } + + override class var requiresConstraintBasedLayout: Bool { + return true + } + + private func configureUI() { + translatesAutoresizingMaskIntoConstraints = false + + addSubview(container) + + container.topAnchor.constraint(greaterThanOrEqualTo: topAnchor).isActive = true + container.bottomAnchor.constraint(greaterThanOrEqualTo: bottomAnchor).isActive = true + container.leftAnchor.constraint(greaterThanOrEqualTo: leftAnchor).isActive = true + container.rightAnchor.constraint(greaterThanOrEqualTo: rightAnchor).isActive = true + container.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true + container.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true + } + + private func updateUI() { + if let dotView = ratingLabel.superview { + dotView.backgroundColor = .white + dotView.constraints.first(where: { $0.firstAttribute == .width })?.constant = RatingView.dotWidth + ratingLabel.removeFromSuperview() + } + + let index = rating - 1 + guard + index > -1, index < container.arrangedSubviews.count + else { return } + + let dotView = container.arrangedSubviews[index] + + ratingLabel.text = "\(rating)" + + dotView.addSubview(ratingLabel) + dotView.backgroundColor = rating < RatingThreshold.high.rawValue + ? rating < RatingThreshold.low.rawValue ? .red : .white + : .green + + ratingLabel.centerYAnchor.constraint(equalTo: dotView.centerYAnchor).isActive = true + ratingLabel.centerXAnchor.constraint(equalTo: dotView.centerXAnchor).isActive = true + + dotView.constraints.first(where: { $0.firstAttribute == .width })?.constant = ratingLabel.intrinsicContentSize.height + RatingView.ratingLabelMargin * 2 + } +} + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/RoundedView.swift b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/RoundedView.swift new file mode 100644 index 0000000..c46b51f --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/RoundedView.swift @@ -0,0 +1,92 @@ +// +// RoundedView.swift +// CustomInterfaceBuilderView +// +// Created by Thomas Asheim Smedmann on 09/09/2021. +// + +import UIKit + +@IBDesignable +class RoundedView: UIView { + private let borderView: UIView = { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + + @IBInspectable var cornerRadius: Int = 0 { + didSet { + layer.cornerRadius = CGFloat(cornerRadius) + borderView.layer.cornerRadius = CGFloat(cornerRadius) + borderView.layer.masksToBounds = cornerRadius > 0 + } + } + + @IBInspectable var borderWidth: Int = 0 { + didSet { + borderView.layer.borderWidth = CGFloat(borderWidth) + } + } + + @IBInspectable var borderColor: UIColor = .clear { + didSet { + borderView.layer.borderColor = borderColor.cgColor + } + } + + @IBInspectable var shadowColor: UIColor = .black { + didSet { + layer.shadowColor = shadowColor.cgColor + } + } + + @IBInspectable var shadowRadius: Int = 0 { + didSet { + layer.shadowRadius = CGFloat(shadowRadius) + } + } + + @IBInspectable var shadowOpacity: Float = 0 { + didSet { + layer.shadowOpacity = shadowOpacity + } + } + + @IBInspectable var shadowOffset: CGSize = CGSize(width: 0, height: 0) { + didSet { + layer.shadowOffset = shadowOffset + } + } + + override func layoutSubviews() { + super.layoutSubviews() + + layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: layer.cornerRadius).cgPath + layer.shouldRasterize = true + layer.rasterizationScale = UIScreen.main.scale + } + + override init(frame: CGRect) { + super.init(frame: frame) + configure() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + configure() + } + + private func configure() { + translatesAutoresizingMaskIntoConstraints = false + + addSubview(borderView) + + NSLayoutConstraint.activate([ + borderView.topAnchor.constraint(equalTo: topAnchor), + borderView.bottomAnchor.constraint(equalTo: bottomAnchor), + borderView.leftAnchor.constraint(equalTo: leftAnchor), + borderView.rightAnchor.constraint(equalTo: rightAnchor), + ]) + } +} diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/SceneDelegate.swift b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/SceneDelegate.swift new file mode 100644 index 0000000..0f2d12f --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// CustomInterfaceBuilderView +// +// Created by Thomas Asheim Smedmann on 09/09/2021. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/CustomInterfaceBuilderView/CustomInterfaceBuilderView/ViewController.swift b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/ViewController.swift new file mode 100644 index 0000000..771c2f0 --- /dev/null +++ b/CustomInterfaceBuilderView/CustomInterfaceBuilderView/ViewController.swift @@ -0,0 +1,25 @@ +// +// ViewController.swift +// CustomInterfaceBuilderView +// +// Created by Thomas Asheim Smedmann on 09/09/2021. +// + +import UIKit + +class ViewController: UIViewController { + @IBOutlet weak var ratingView: RatingView! + @IBOutlet weak var circularViewWidthConstraint: NSLayoutConstraint! + + @IBAction func handleRatingChange(_ sender: UISlider) { + let newRating = Int(floor(sender.value)) + if newRating == ratingView.rating { return } + ratingView.rating = newRating + circularViewWidthConstraint.constant = CGFloat(newRating * 10) + } + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } +} diff --git a/CustomInterfaceBuilderView/README.md b/CustomInterfaceBuilderView/README.md new file mode 100644 index 0000000..f6d93f6 --- /dev/null +++ b/CustomInterfaceBuilderView/README.md @@ -0,0 +1,3 @@ +# Custom Interface Builder View + +A simple example to showcase the use of [@IBDesignable and @IBInspectable](https://nshipster.com/ibinspectable-ibdesignable/) to build your own custom Interface Builder View. diff --git a/CustomPresentationController/CustomPresentationController.xcodeproj/project.pbxproj b/CustomPresentationController/CustomPresentationController.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ab36071 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController.xcodeproj/project.pbxproj @@ -0,0 +1,373 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + ED4F37B827355D1600B47391 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4F37B727355D1600B47391 /* AppDelegate.swift */; }; + ED4F37BA27355D1600B47391 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4F37B927355D1600B47391 /* SceneDelegate.swift */; }; + ED4F37BC27355D1600B47391 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4F37BB27355D1600B47391 /* ViewController.swift */; }; + ED4F37C127355D1700B47391 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ED4F37C027355D1700B47391 /* Assets.xcassets */; }; + ED4F37C427355D1700B47391 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ED4F37C227355D1700B47391 /* LaunchScreen.storyboard */; }; + ED4F37CD2735608E00B47391 /* ShelfTransitionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4F37CC2735608E00B47391 /* ShelfTransitionManager.swift */; }; + ED4F37CF273560F300B47391 /* ContentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4F37CE273560F300B47391 /* ContentViewController.swift */; }; + ED4F37D12735BC2600B47391 /* DialogTransitionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4F37D02735BC2600B47391 /* DialogTransitionManager.swift */; }; + ED8F4199273AF44C0080C26F /* VisualEffectsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED8F4198273AF44C0080C26F /* VisualEffectsViewController.swift */; }; + ED8F419B273B06BC0080C26F /* MotionEffectsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED8F419A273B06BC0080C26F /* MotionEffectsViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + ED4F37B427355D1600B47391 /* CustomPresentationController.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CustomPresentationController.app; sourceTree = BUILT_PRODUCTS_DIR; }; + ED4F37B727355D1600B47391 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + ED4F37B927355D1600B47391 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + ED4F37BB27355D1600B47391 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + ED4F37C027355D1700B47391 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + ED4F37C327355D1700B47391 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + ED4F37C527355D1700B47391 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + ED4F37CB27355D2C00B47391 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + ED4F37CC2735608E00B47391 /* ShelfTransitionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShelfTransitionManager.swift; sourceTree = ""; }; + ED4F37CE273560F300B47391 /* ContentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentViewController.swift; sourceTree = ""; }; + ED4F37D02735BC2600B47391 /* DialogTransitionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DialogTransitionManager.swift; sourceTree = ""; }; + ED8F4198273AF44C0080C26F /* VisualEffectsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualEffectsViewController.swift; sourceTree = ""; }; + ED8F419A273B06BC0080C26F /* MotionEffectsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MotionEffectsViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + ED4F37B127355D1600B47391 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + ED4F37AB27355D1600B47391 = { + isa = PBXGroup; + children = ( + ED4F37CB27355D2C00B47391 /* README.md */, + ED4F37B627355D1600B47391 /* CustomPresentationController */, + ED4F37B527355D1600B47391 /* Products */, + ); + sourceTree = ""; + }; + ED4F37B527355D1600B47391 /* Products */ = { + isa = PBXGroup; + children = ( + ED4F37B427355D1600B47391 /* CustomPresentationController.app */, + ); + name = Products; + sourceTree = ""; + }; + ED4F37B627355D1600B47391 /* CustomPresentationController */ = { + isa = PBXGroup; + children = ( + ED4F37B727355D1600B47391 /* AppDelegate.swift */, + ED4F37B927355D1600B47391 /* SceneDelegate.swift */, + ED4F37BB27355D1600B47391 /* ViewController.swift */, + ED8F4198273AF44C0080C26F /* VisualEffectsViewController.swift */, + ED8F419A273B06BC0080C26F /* MotionEffectsViewController.swift */, + ED4F37CE273560F300B47391 /* ContentViewController.swift */, + ED4F37CC2735608E00B47391 /* ShelfTransitionManager.swift */, + ED4F37D02735BC2600B47391 /* DialogTransitionManager.swift */, + ED4F37C027355D1700B47391 /* Assets.xcassets */, + ED4F37C227355D1700B47391 /* LaunchScreen.storyboard */, + ED4F37C527355D1700B47391 /* Info.plist */, + ); + path = CustomPresentationController; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + ED4F37B327355D1600B47391 /* CustomPresentationController */ = { + isa = PBXNativeTarget; + buildConfigurationList = ED4F37C827355D1700B47391 /* Build configuration list for PBXNativeTarget "CustomPresentationController" */; + buildPhases = ( + ED4F37B027355D1600B47391 /* Sources */, + ED4F37B127355D1600B47391 /* Frameworks */, + ED4F37B227355D1600B47391 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CustomPresentationController; + productName = CustomPresentationController; + productReference = ED4F37B427355D1600B47391 /* CustomPresentationController.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + ED4F37AC27355D1600B47391 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1310; + LastUpgradeCheck = 1310; + TargetAttributes = { + ED4F37B327355D1600B47391 = { + CreatedOnToolsVersion = 13.1; + }; + }; + }; + buildConfigurationList = ED4F37AF27355D1600B47391 /* Build configuration list for PBXProject "CustomPresentationController" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = ED4F37AB27355D1600B47391; + productRefGroup = ED4F37B527355D1600B47391 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + ED4F37B327355D1600B47391 /* CustomPresentationController */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + ED4F37B227355D1600B47391 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ED4F37C427355D1700B47391 /* LaunchScreen.storyboard in Resources */, + ED4F37C127355D1700B47391 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + ED4F37B027355D1600B47391 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ED4F37CF273560F300B47391 /* ContentViewController.swift in Sources */, + ED8F4199273AF44C0080C26F /* VisualEffectsViewController.swift in Sources */, + ED4F37BC27355D1600B47391 /* ViewController.swift in Sources */, + ED8F419B273B06BC0080C26F /* MotionEffectsViewController.swift in Sources */, + ED4F37D12735BC2600B47391 /* DialogTransitionManager.swift in Sources */, + ED4F37B827355D1600B47391 /* AppDelegate.swift in Sources */, + ED4F37CD2735608E00B47391 /* ShelfTransitionManager.swift in Sources */, + ED4F37BA27355D1600B47391 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + ED4F37C227355D1700B47391 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + ED4F37C327355D1700B47391 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + ED4F37C627355D1700B47391 /* 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; + }; + ED4F37C727355D1700B47391 /* 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; + }; + ED4F37C927355D1700B47391 /* 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_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomPresentationController/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + 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 = ios.example.CustomPresentationController; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + ED4F37CA27355D1700B47391 /* 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_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomPresentationController/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + 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 = ios.example.CustomPresentationController; + 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 */ + ED4F37AF27355D1600B47391 /* Build configuration list for PBXProject "CustomPresentationController" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED4F37C627355D1700B47391 /* Debug */, + ED4F37C727355D1700B47391 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ED4F37C827355D1700B47391 /* Build configuration list for PBXNativeTarget "CustomPresentationController" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED4F37C927355D1700B47391 /* Debug */, + ED4F37CA27355D1700B47391 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = ED4F37AC27355D1600B47391 /* Project object */; +} diff --git a/CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/CustomPresentationController/CustomPresentationController/AppDelegate.swift b/CustomPresentationController/CustomPresentationController/AppDelegate.swift new file mode 100644 index 0000000..0ec1b7e --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 05/11/2021. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/CustomPresentationController/CustomPresentationController/Assets.xcassets/AccentColor.colorset/Contents.json b/CustomPresentationController/CustomPresentationController/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomPresentationController/CustomPresentationController/Assets.xcassets/AppIcon.appiconset/Contents.json b/CustomPresentationController/CustomPresentationController/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomPresentationController/CustomPresentationController/Assets.xcassets/Contents.json b/CustomPresentationController/CustomPresentationController/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/Contents.json b/CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/Contents.json new file mode 100644 index 0000000..a5a6554 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "fruit.jpeg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/fruit.jpeg b/CustomPresentationController/CustomPresentationController/Assets.xcassets/fruit.imageset/fruit.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8010eb24e336548a7ef58a7b399f4f90dae86e17 GIT binary patch literal 194999 zcmb4~Wm6nnkcEK+2<{L(xVr@#g1fuBLvUx1;O-h=aCg_ig1c)V1R0#b3=js%zExZM z1NQW{d%kv6-#Y#Dzs-NY5O9^`6y*>Q5fKm&|0{%lI|z{oA5c(GQIJ2NqN1XqeL%+~ z#KOeDz$C>dz#*h0qo$%HqoDXi&&l+OmYt4*f?0@#otuZBpP!mZSo|}u7$+Y;FCrQm z8YTwjM=Y$5yfhRvy#H_g8$rPPfQ*2&_zsa40SOQB9UkJp9|!^n2uSY`{}aOh={+*i zI}}7zgb#@S>-^t40>ZoZh)BpN2&n(I5isBV=ifNg0$x< z#?scHDD!lVL*m)#{4uI4x2tp}05TQMR-DRaCeT}VMtSjYnDWWc(`~$zDncJ3+pUa-9}Sg4 z0Xs)!+cI@2uBU#@9dSao*2ToC%(*=sYiF{56b54cdlaX6zlCp`b9B47?BXeJ=ojT%Hpu>MiBXZvu^PTShOo7U1bmDa%? zwXy4PRrk^y^nHz5cSs;|tar^-s{}21y5@s6c0>t}q=bGARZ;=^d+HI;7gE0Vgp5rX z0Kghx_>3XwsgPp}ZEPG&t_V-@$y_MY)D2uJ2+{k8fGYqYm(pt4n)gQgJM1h!wq)2Ws5%ojBP(yT(T33(H;hP; zJ=9Xu!!6`&w6fq$-+3l(Xh%fjxlWoQA|y;eveY!@V1VgDm7UI@Fca;(@$~#QhoqJ#vbJ|#gl>u@{))L1QI-wPQCdkjEu*Dyw1mF&X6>am%w8r1zY;7x-be7`i(2m}Hri z>b>^V)mGUc)~A7Z8(@sG@#o2OmbEJ-X>iD9>S~=wx!z)tlx8tE)Sq>8n-Uz9Or#3M zJ?QE#Im(INV(_C^>cB#*gY;rOCtg_HM=vn6+=wuPTJsS8P}tf!5E{s_Hnv@yCD%sO z%(x?kR90POZ3G(Ivn6m#h?i{1IlwTkbjPqB*dlddKm+;a5~x{FKlE*or!j|fqgWEk z{*3j0KjzP|y1)q-1QA~5TO~v0TxmD4Gv-my&I~f*3!iP_{KaMY(?SsSv|U(!o(2<= z^-Ro0BeoNKm~k(Hv?9Jl?v<8nJIk9O*1Z>SYA|iwpxM`Buy0LXmoo|nFlgEA(YY@8 zxELi)QNp>X4rVs;4pkF(JveADJd7_z(45G9vT47Wm}q!gB{U1xde(cvAd``3eMcOMiny7O|`FbQ-8oKd&^We?$GB`qp zm{Uq2a!s0%Fn4eV-7lyxh-B4+<@xHJ%2krNrA2mcXZ|dNm5z{@q(b@#+a@`ej=pAL z9*8=#Q45)-@Dl&tdm4;YF}vQ1T7b^n+~=X?Sm$ig-O9w1~8usT75JZEOi)8=|@;o^HV-YwKYb z1tf#hnl2Y>v!Jzy)dKsSKy*_DzuQETb272e$vEH!deGB^I4Mnd5x6A6SM9FJGJ1CL zO1uc84f&D5WqoSP_#(veY-nqN!y@-{&wEU0=e1eeyxC}ALaQoz&oK+Ds_3bn#mfc% z9{Oo!RBN5O&~898$-p!vm*`dpM_^RDDU@+>>uN+jAVc^YnZX3i)IQ1i=|m{!OOdFS z)rOBaZO;-m?~St=@IH;&Z%}Vge&Dgk#dQ3fnTd?n)9P> zOVR1>mBzDaV|p(mHIklT_@h#P#=_~VvAN2*0R0#7s_)x*(Z#NJO$Om^Pd?czGo+z$ zg-ruq$&xIAV!KbkOyi{+s2~#Lo}QB-u_{0DY1u>e zXK=LOHiY@;@8K#>I=?U)D%M{*X$6#?`Mt(Ao;>@lX_q-bNfsXwzHRUg{XYaA?z1qa zxx%lWssXNr;t(ige5Pyr*}e0JH<>KP zu30uhK*H!M<6&dCY3)nWwH%#-M?zuBBuPPQ$u>b!ChWAcZCL{NhXbE2&1oFw;)CoL z@%-D11WLQ%knhcyvX6lyR&x<; z2IqiQR>!d(N54MHx7s8?8tV@u?%VW85=M9AOhYN^R`04<>rU%r7#TO?HFsSd(4_A- zebXFI$S&(Xa~VK?Mzih3>iWJ+loSRxwgB$-0|oustCn(r6kUT_g^+!j0NqWfsOgnJ z&qbJDoBopV7yPD#lhTCgoxT+D`>NY}b6;>qGQQ?BY4SvW?v>X~B^Y|3?$}EFxO@EV zkq+j3QD0USefQyKs=u$_+Dj^jQtK}^TYGTM^PSauv0mR@Rf}^S3 zi_%piiD62IVKmpWh={iF24`@35!*`t#oCjpJVjzRNA5yfy^={5>LcJ%-sQQYX}2)4 z!p6|9Ih20*??9Id0mDUb^yDsH!j2=w7Di8Lg%~aQTinYQ+~+#*&$P)re-D}+^$j?U zjk@o?w722gk1O9b{~QLy=ho*=82I`3x~o2QDZ@X6oI$-eYf)w;vy#|lE<4|^)jzmN zv8UNL2(Z2zJ-c2wk+L5+%|oY?#sVuphAM+4a=QF^4iuFK=tbHB*j6XwcrVxY9@=L8 zk==z%it9`yxAe`KC*bIRNQOgTVkpstTkB*5Mu=@Y#eQ>aOy72n4)69dpG9!e;ks4q z5NC><<@}xP<8tz=!tcLc7Ci{|;UbFy%9moESKC2$Hh=%nT50;crzQ`83k{3I5M%97 z5byAxXn`hx$KfO$rI|86<{v5c$R%+SrS&#u=HW=n%1QJ2aKb^j`3l;vn#5D;uU~S*NRdnH<)A?eekT1J8w-FNi z(gF8>Nweg^)}rE#R_wtZ61>ur(H@!j+W{t;i}&sMqZjidSh&>lfUcf|FEHazlgG>6 z(UHJYOu%bhUYJ(zarNIEMT2a$W9PLLEKucCb7(L~#PyU^on&gj9{G&wh;8B=NghXU zm2SdVOVG&8Ab*UETWF%yqUVzzW4-$4^$*{G&9-@8({Hv={4eqCr!qtsVf@FU35Lgfqd|r+1(Uwg+d&OD0cQ|pA#8SoeL%l0!+U$_XBB`^)N<$Ac%kkJc zpjNe4*N4ZvR7~4a1?MaA-l=EtIL{9WYZm>*%kx3-b6alZJdi4fVQ1*kw`EFq&7%&g zRKJEhnE4OkONdh&s#9yj(zS{esm>DJ`G_4`+RDJHxVeko0F_rN9pxf&x-xk36qpbJ zlVEkYw0ad$AQ!97q1Ph*)?s1+AMJp;ee0&uWdn3nR)=k%62Q*X<`sa zpvfba)f#8r&T{-_VdcqF?vcMvvt77`%~H=6b>{*67}dl|e`NNd?PqbW&RtN3C5=t% zDh>XP^=*o+Hsof(+(NI^K&+LV6Zf$b|@3afrQ9M$a3t_h32YOK(@LJJ#27P@W zT{-7IZEV^loKWXtj}8aPrdr{wS>9iGHyv?=pC>$@=TgNsb1*tBvDN@dwYQKf={!r( zJ5-z3CVVadqURrOcLZ4%z%=NFk>&wMyEfj|z^=QTMK?(jWygtp#)BZ~JJ0;jtH!+|Utyn0iw;@saqkAk(# zDn zz|pJbGH$=WE&R=LJ2m6)EhDaygky(($S$~K%&Q`G35o+uv zGaHHGmqp3=l2$)WNF1{O17sYAWE64fiPM?9=pm4gpXE#i$~mm+rmxtW^Nqb%DYCdH z?k5!M#*K0;&%#jojFE^PR#!a;+AJtz)h>K4N}g$L2zUg*lr*obuU}#EA)SoMHw z0)&hXA4Oh7x~nP=_|}F+?^EgJQVPS@dpkIK=0~h{R7^z%P=GsJcHni%;0sPuW<>Rd zL$270XV?gC!`SAadTefvUa{><=^!(z@sg27dEnUb^8?kR{rnHVemL8n-|1rrWG|(HdO$+C z;IR<+-_X-u$kJ3v`?$bpC){Dq$|P4`GUGFBy4cDTK}^}7GAAxS6VnmqQy}C_G~kq* zGx7s3N{+tT&4WRV_*?oC9~?*dc47ERT{u+7mUctOQkavD#F z`wfLlU8%eS3tZ|2C(mOM;Opfv%zG4^ZZN=yi#6Ep0dEYMr`wEG^igl7l3A;Q>yn=vV;?OGLF;bP|Tk-xiN@+?n0ct88*tBeOV^vhb+)O z(BQcM4&3is2o!%lgZ0cm&mo9NC@$PGeXaUta*<`^$i`Pq^ACZ*hu)RTG;{NF79TnX z4)Q}20?nG1LSQwTOI`VniDYBLM)xR#OYC|W2YI(!eyI>^vdV(65?XtA)I`i0zjS^`2t(sxi@dwb857&^S_7oy5)QQeH)VQ&-R<$v;Tp2l|}qzK~A zH+6=uk9#TL=bNDZSo@mv_cMX!z`OP5e)yif>^}scB+HI&BvD(_S-Jf}9Zym}#ReLd z@#}Z5-=mz^`F-tOmMoGVBo19HWF0uFKZ>A_pu&{-U0`F}E~hTz^H59tRPHQdmd@ zb(x6@8=LbutzbvyL`ZuU4o0Xl`OkK zkdD#74{J=-@KIv!uZ-1sfx7q(df7+sxnmku0;-RV_oHr;?zW^^@5Qo-)(WaG{gS(# zR}B*6o4Xg@JKS@OU+LkUFmNSK{dw%xCXvW~%)%P!=77f)6(_RJF zd+pNqt{@1PJ(Kuq--{oe7&C1v8RN7o(#DQzDRNheH4S*Xq!z!IKev87_DSwrM)My? z5vX#~SCn3xpk45yCP#(2Qx2vW1$;^j=J0FY)Rl1x3P^zW)TIJ@wYuUg2Sb5N|y zhtj!3@5vvIoCe5|4T>@ceh;R~z)9PDb{isS(yO$8I&L2fxaO5SrwWSiybmmm9dYUC zVXCvK9v5IUnylZNS5EzIizSSb&_UN#4%d)6*k>vv0G}O7>S{b{@zEMe)3PGiyz@E4 z!|jGo-~Oy(jtD>eyd<2RP4<5FB7`#PYu&GX*r%<+ngC3d&6 zWUsQ0`_vRvF=FSE)Znu>=W5?$n@9T^a+xaG@_a={e;+R>w*kElA0dW|EHe7w=fx-e zrFG8iV1(tryqU+^Yc9|MV-~E$W&1YRx~rE6E%O4~DZmOfx3mKID9$4HoiC#^)8DwU zUn!61lo@`lfz?j;q=-yIjDZrLQQKQ-FXQy{j$CI z!ZpJrjVD9Y?w7W^HVz(@qN#T3v?3(XM*fCc*5WcXD;gBv@-63;jNSIc?LmTg8I^Cf z^%--VO5sPexd;@=k>=&p>za--(~1kIQiE5mGE6XgIMkTjvE|#{v&LhG|487B+r-b^ z;cA0?Pu2HBF0YC3>701Jb%(S88zrAR5HV@q!IfxR>@7NGct+qgb#h-IDLQ$M=;XaxPc<&kYszWjm-zGcKYSYqhf1x!HVtT^YCzp({yMqwN zXbTG~QY=Z?GF8%UrA>^8G(g00CybHQ!V9s3hHaU-%A$HG?s$2Wc5&&Vyl_ff1S3YW zmN}=%Z}7%Bb&0CG6hr7$qr{SD?{O~VPo%Z##01QK-D&2HeWL%4wX zOOY`R${-^GY*H z-E&4Ybclwc%7nC1EOtw8obiBU>!fyWZKd(`SG@h_I%7zaiL$lh)|VcI86eU>RIp3< zIf#e9_VdtZ+kHF~WX^I8!UhSD4>_6xdunIQEBoVJ>Q)Lua{EIwG78(AbJyxdt#lor zl+2gvmFoI8?gHI~OEM~{j^p|nzj7~xYXmh&lgO50j)IPQ#okd=4hl`Zs><3+S1&a- z8c7kLpCBh0e;PeUwyLb-WU&n_pj_klJ0sSDQA=>I=DOM43vgZvXOg?@Zwu3yHsrx? z&tc_raETyT0tY8eXwM#z;?(qOCT`mC6dK-&9e1Ks4p~5P^Y<(Ocs@5&M4vFgStlVm zgHbtm5_*4D4c!#*g97rOQasyW>dcF0o*P_S6;vpql)V#AlQ+Da2PjYCQd0$WMGb=B z)Pg>NqR$_5KGb=Rs({r&_5BV0bj?<^ewWzEXf1@X0&8EKApYtDR{4cN1T z(mp;06&<2e&vIT0Z3&mWg}jYzCis#5YeeKux@UWPtYZdrgjm)~)5>dy)+6?TVcUJH zOlL|LgEUR=jax~<6>P?ak?&ja6YnWh(J;39<;y#O9Z>trlMB~L;t^_k@lb&Vn=-L% zR)q6ujUQsZxwXHX#q-Vj!=kG+4A@Fe}&SAufiiyghWd0!iWJN@us90%3{HN4ot z&&%#_SqemV*_<&3v8YQ*Ku63ZESWSvTK0bkX1v&cXTNrE(2QHY-QcSszg`@;~RT_-_;6yd|U$Ttn%S3`#>9zD{Xfr=ohpxfJid|TOs;J zETwugHr~AGel>@AYYs2p7pp$>L!&BwOkCA7NH(zQbCQXQ^7;18_wk81)9f@M1=|vJ zFc<0cnQ@4N-_q?=~b|x2td%cX$BtRNzvy6O5%GHai zxb8|-gD<8q5|-s<(*c>$`#TG=2t5b1u;O*Jw)hnL=zY=A+?rgu6X$a%cgH0!u~%UW zWd^DqNjdJ_flTv=QVnatO5GjEY7}s7g^}mxnkzAev)0VhOB>!l$YPL%L~JHB{wLfa z5`Ctm-Z5p>7y|}+c!@Uf{f*0RXb&q}wKIV5I-)M5=Dwpg7!Tjb?@5bv&;x#qWY-#=><^n_nP6$pF+fJG8z9lA z@1TEzw0Uf?+3Y*pRI|@%sG{&m5Vt84&fo>>dj_!^Hb)RPOfE+1ur z?1hu7x<+P`)C%bL4CWJORNbP%eX{%?i5<^$j!YiI{|{H(Gc5s<|8oNjK<)$O5wlY)IN9U&v{gm1oQDG1A8V{H3a8#JE9y=PD4n zT?un#H<~0NQ_1ts%4}L%x1l`m`&*bUFX5K zQI=jlEGoVRCe{W$g+k(1jJUcKq&I!KjZ8w3NMeF$X@kJ|DleS`=ln77ts8D*?>D4@ zPAMy7XyP~yG4}34;MXV?CogLJ!Fo=E=#P?kg$xrFhDcb-B5b^ym_;-?_3F9reJ(Fl z3X+s>WyVQ;%sQTiJNe%tM%p*@#5U$bl>*+88D6Iui9FzV-ivMDPR9$uNy4RW;b&XIQzHFGFH$ax0gQ=wX2 zk96T42k zsT$+YlX*S^wjU+u0lAqj!moOir4Hs((bndRy~<3%14bxx7gFW>7Yk6cl&zVg8(3z7$Hfm!ItlVA_CS_hk%d?X=w{xsK;p+ zStW<(Ii*d}5#Uz^1fns&{$&NeU-PE{v|DaSU5`aWD!t;yb~EsK98ZExf~a&HGcGD z!!>t@%eHD#YEz-v+q@{&@EdT48d?Z5pk`3p1wKE_r_o6j}+aF!Ch5XvnAxd z#e}P7Q5c%OOB}rn6XNigvfCo{eK!w1Fm8=OB?g+5EvNi^>_JO$PCA0u$7nt20!bcv zT=lwXd+z6#TWfy%FjEy?>KgGw)svbof+}Eprm7(oWp}-*nM$b}Vo!|u{h~QeTPOb6 z=M>ue#)_kVEXmPmd#CF*iXA?evts_au=UB2yg+VR#+45w$qiI`?>nCHG&6qj=`Wx= zD2d?t!kAeH;g)Mm5i)4S}p0ytgE5#v5r7gnhXgjnFbz0W>K#J%hH z0wqx_W?To-b*?IHVXrY;ZZJW;3VXkaw05oj?U(gGH}(b%9wk^lfwPsv08uS}6+R28 z^S>EDP1B3dELNj8kQEWYOZ+xja3tiO>TL%k1(Zn0WMdrTL?NxZ)Tf-S3e7z@8`*c%T zKZ7~K#wM{lmDAWe^(3ym4R2W6b+;iCT-%<3NU7*rcB@G$StG$g3=9=_E>E&=YM(Aw z{W@K3q(=3(D3VXzFgqlDhJ%`1($V9qmx;~3Ofl-#pFR`ShM-8wi$ktnSu)!IJNi3? z^wMGGB^&w5RI7CDy|K*5xa>Q18oY8xD#o?P@QYxgOkU=Kerb$7^tuLRSAiT z%_cw7-GZTfZy<=@q5k?P<^Ui#pX^kCgXPwa!;?~WK{c7hSFo}V+e6(3;(x=xIkyZE zAi83)pxZvp(X#5JUPSHA(J}$UdTj&Sf=);*t+d|9RroaCPsQrOllk&LU;Q_&t zjA>^?l5hN*Rsvdjf4J*m)XT!ogI6GRf&Q+Naz3(pWmNC4E`pIYP>U%^P=_xiB>=1K z=_igC5b(N=#z^gE_dR-U7C;T4MQ0zQ2&&2s#L4J_mY+5x4HB+2Ci&&92aPa^9(d>^E|_)R?1= zUS)orHHKB2u@y`ky{G9((Xaw7dC;3H^%s5_=Z|wD<)&|#J|_B+sa4mYC-Kg?y@)A* z%ovIQxIYl?m0Tm5)sh01+Bg`WA4MdX;~0_Q6j;XSrWi_0cJw4%ofOYD7dl;hvK=YX zV~><+;WE>9HNf(5GIFYyI~Kmb-Ppxm4`)mvSoF*pdgp|wdNFZLb!bHA0xAm0nK@&4 zdT?F7hD=WcL?hXSb9-rdKlusr$*%VeovueK|MAVE0it9;o)(RX_ORWpC;ZZh#n|g) zs&n1{xO*cT=n=8zQ*ow&*}64fi8RWHq$TGCKP{aKfFpKTEZy9lN{AZ!9A_j%O`?R> zK2rgD6WFfr@Iknq5tMiU*E0*%|8jne8aGv<80C21jxJmt-g%zN=J5{5suaqp7OVBX z7+Q$m7RGIf9(8xcEtf6>zp*jjExRULg{nEY(OF_~9&Te%u&H^>zJxv2{Hdd<my}w#_dDd`@G!ty$YB`ea%C+;v_BG!VGlo55 zo};qZhpX>PQzrDNW}E^!;iA~%OD;h(LD$gEWIX+KsAe^tjG0cxN`Du5je$i+$Lh3a zGXS4h#kZwKM6ku{ynQ;qU|zz$NEuN4vm?>?HIs*L2UCP0u4i63f#W}|jJmr2#sop&2oy|3h2{Z$7 z`i!hbs$8cZTt=B<#y;R+etqUv8Iv2f8^n}f1GCml5ttax6VaUd_!V_gT9%L*?6>O7 zPkkNK@ZV?~!7~~2XEF616>EM@HT#--Csai>eY;SGJ_qv3P99A&TW`~wf@7Q%m3?ch zM2$u^+iA|BZ*KNHL+PI7brwihuonkrldrk|K1{!WhK$5-C&r=iby?1^&9AkZv=()W zcMT==vzA<~?X$%RkF+f`QKa(6$DiQ0*3~!_j<(?5uvftB(V?{`|79AG*M#}@Q6?6M zTHyjx`hYZGX#sbcB+WLr0Ym-fL)x8D3Z88G)~{0KW=srnrmO^QBbB*xnTnG5JM`LZ zLhv3#xYL2U?`CmmTOzKFMq$}Pcf%p9uKaa#2Ox35ykUSoOG(U@C2r($paA7!vU#~$affj!|m5j z%z-S)LPlE$Yq2|4Eqk-{|6yk8m4t>XUEMMh6xrS+yGDrw1am&Nl zdXAzcx~>Z(?^t{lbgci^b6UByA!+Ll{Q_ox+!P{8)|`yoie++;?{GJ{?9_FpNAt+! zrmgZ9W8Ng~jJiJ0O6BP%BKwSh{;*3rPbcL2KHnYjPv;<)ge zo~b}_?%G&B?WduSxjbs1ub%pV>b^c9U)^>0oX2}S+A8`;3V{U4GtslL1CD=$g-we(CmE5#et6_3y>x{7`}jWb~h3~HP3+r zCj8V-tZrOb$R(bjE6z^w*t!n-~ICOc0MN=5U!nAQxz1_O0Nz{7rjZMQr%t zlxI<)o>T^@r{=+LSu0Qv46-it@u&MR&mLd;O7xp$3xsk#wR-mggh1=iHVRzGS3dUR zU+>{G9^(7{D}r@#u+fg+ff7Alp-R;40)_Ez9=|f)e4Byj!sqpq4*~~WiPXdzt8GvQ zkv!uI%^vOKOWO@u{#3YKoYahYFX1yFf;m)h@9FoIFRAD_LDK9X0FO)O=^HlmcMR9`mvM8z3gkieu~4>gI_5` z8~u5ve{Eo(Gg-u$L~r2JQO8suNDF*ia(naj&&zXkLfinp#TP5ef^k;Y)@dygph2}c zONL}&2W}t}i)E~+PpGdW`ZHNhYPD77*_t7%+yz1Z{`kB#sBCr}ZZ0d2_BUjXy}*Ug z)cu&!nzi(b2yBx(szt<|Qo{RCa(G4)VUTsX43x;ZVd>;BHD#JcD=B8D7hl~{QuW!_ zn%Tw_NpW~A5@0ZYm9szLl41+#+3hQB4wbHav!p08(LN`=A(}!5qAr+0VDB8hO4^n1 z9q^%*jajgjGJk4zy5rzLzM(6cYMv*IuutR=${sBJhrkLqs(9GF9x1TnWzaNJE72x{ zYiuTJB9c`MnI!A~aio>&nMS_vU=4URm48&Zr2JSy^_i@bHg(N=4sH7K0KyX4(^z&k zGQB4#H(6eRQO&Z0mWmJW$*zwoh7iZ$;$}tKik%QIy3h0!K~=NK>x_4US60&?hqm7j zVWwTExb4=tqp!%_xYt1>rcmt*vNhOFJRTH=dYr{r8UEa{R9t5gFQi(N1i_qdI+c*XC4X~7CTuVFuH>l)*lNi9SfiV`chXyR=*5Zr`(I9F zSVyt6XqxjW^KYGAvU4Lf=6_^e;JDZ{fcc7W>_<;856H^T=Od5v`HQT0{fZC0{dn#@ zC*{!GuK~Z=*PI14Xp^)Th+TEckP;h3R3?E^)m3udYOt1Vg|&l7Bp=;djhw7=5jub@ zxW|!%kR)Umo+{+6;x*gmO_^PM$>>LU_dk*sVRMAj%B91eIbMkhQz%GO`zzXC|8X5w3ekIA<44?qd}Xs_ApF z0NOxmB;UcU;j8Hgo?)!MAt)W1xgz#A;xFgKEWgtI_8^%=D=^<{Ja`K5O* zm$J@ufZm%9X|ua65aaAySS0mbZ_`>2e#S7?(y?OcQm1QvFV`j=pZFXen!zW*ai(5; zOLJ^nC)P;)e(=rIey8pdJXF^N?l^V(TJo)=1Zd{urxR%z^y*Fy`AHLOZrblo8#bA& z&F0-AFY_qTGV9)*Q5Ma+@$;6KNMv4HN`tXm{PJ$!Xm-r%Hn4Uz+MTGUE)U9pl=fWfSK>rx#0%zoo5`ru_VRb ze{f17&#$}9@F-WZ+$`8gM*wS09o4nldXx~SZurjmJ`ZQE1<4qE3mFjq(FA%D*yrF@ z;7cl{w}<7biuJQC)vvJE<5yM>esIdkik+v)3ahiMkIwB|SS=c;i$;=wW$wvK0yPc) zo+HR)uT48~wr1pVXM9trYZ1B&r+IoUS~-pp1?}emTJUj9O9WN6vR^CzAutJmYyT40 zsgZR~5d3`^u;+2UO<~HkD?3atU@kQqC2}^jPO6*vp(eiVuWS87 zNAire+V5_uz6^xU?9vR9DUiegWz`R1&zFPM&EwVqi)c-ZIbLwzS7GIwCTd(R#v_9k zgZM)cKsC0(1J@sBqWJ<26FT=zFiA!nMMk8dy1Ee!&#*Y;0|-mBCx}_L;p55Jgb`l@ z1JgCN&b9joJB+(~S0??E086;=uV*SDSW%E()K?Z!*%!pM)bn^C{rat3=ea(Obas-@)knD>?5{pekur^4 zZ0^$NHQTQHt%?}Ukxka*;>X4>GREb=6ypH=yMp;k-1(4y$0bft&Rn6&je)jxGg#Aj z`$(~K>2I5!?baft@dFC?1c~voTwqh;G)^VY_8vr}>_y)*w_5s3{14?X4JraWZ?_w_pBr8@i^a$K~+Z71d^C;8d$+ zgWxoP5F^EEfUclLS)b>JS5@1S9^ap zuK0+M_Ph)V{O{3LkYsVB>5M;WUd!&9KVkJt)|1n+3lp}@47E}pM1&*~_L@6aYV$p> z!EyVkGJ-0`*YbBl3yZMBT1SZyexZ*^jS;WbeqFJ*0H)2%lX}Y&udCgl@{>f*WpC5m z9_{RYV$=YZ9{;kB&Vll@{Ft0R0&Y|ep#ZwN)rGD7$InjfU!2m&CgNeqH2N8IctGOK zUM};OE4V;WC^Up%=S3s03%8{*_l>t@Q!^rJW)|_t$Rvq2uhtW!H`1NoBtP!Fmt_|7 zhpDPeBiJ81n95Z1EAyz%DWdV+aPyM&~aS1naw8nuN} zy85!k;tl)z|CpJ@c{G9-eMaKkox1I>GR1YJCOoD>P<&qGxY3fb}-Ch5z?itkzHCOWgQ+$h3?Vsy-r>{vTo>PQKUe zbc*<_17i`X==0F98UMxIFxATI>--#9V-<&%eADt|TI7~ei9vn#@%8z{~{*P5Cru8-&0AO7w=b43KreB9b6d;|$W zWFbg!D%4Oh5_a9I6D7G0l_BkZoXk`1a;G((>OPgiy590|wO`8i;&`iP^AH;qf9J@~ z%ae79-GU%0R!s`y$OB7N9QObjf|7Ou8cnk8K=~p#6;1ww#s^YdjvwDHD|d{D7Q1rZG=a5g6GQjPe{ROYulo!8kZdx9+}XRuHk(--D>D-CkfiVQc%V+ zZ2k!u*u~f0Iv6Xr%gfH%#E~LXAwckDs+EubrU~*p!l)Hi zim-3PS4sLc;8`Lo2(6_gH$>=TEdzWD>CMN!jG(lY2WD9w{L`(LbQS;CdR;VKz}GAN z&di^4b*=ID3f(VU0D+a`fiBW}-5-25tkY}Xyh_)1ma7IB&XzZ77W_H>A>;>AIsDvG zW*}^Cz7fNtY3wR7g;j~+drS=w3J~lW^nIaU+sv%#7&8kKYTVkE%6$4>=#7Vt~hdin=ZoU7Ov`Z(N z^c3kL+L>M_JG1Sr-}7t z1#>I>IuJZ%x~+w#Ec4Hz%x%8{@e0ofGIy5$qadV~vE)|Ef7E_#F$cqcDm|Q^v(FzW zR9t)rzfHtu@=A8N5|@XX4_=;HO6>)l!KGHeC=EKEDO6I-v8;&@) zMUS*Yh?NX{*aIkB2W5&Q6()FI$o-d%^FKmzPPo859+#f*qp|;T4XeWEo49K=2^ID8 zx2lGu;1utGJibwG zCBIDY+$>!xa?oj~aVuGDOAW>V?bhPPV7OXf-0NLe<@~FCX)XnL@xUa2=q8gQ$gT5@=kz7Xr@YEG=Icy)aU*SC2Qu4G=O5eu5Xz2U7USK2DA^8V zrSN&dROWsk`!j>i;MM32S6WJrtSJ<$G?yS#-rko$rhzxv2eD3|`m}gB);6>~#mi%G zrItP0yVWnwnTw1jwPBX0j6G+*&IF7?T8+^c%h9-Ee5PXI#i$;4WEc1Z;Hrge!q|A` zp!FA}Q_dON0qS_uA&;@Khs2~_+T2JHpI!3i^@4U~68*dXNYQ!#f1bNSuB%Op2d+RlRCGuIq@;5?Qr(3i)(G3s8Twc1w4o+C^_BAy@GXxii zZW%{M_>3D)S2YW@>dI9WMK_LBPFKyI9s53HA4}+TR8qcU9s_@!Az5@o7QE=}j66Ee zvUMe>9&lb8WDg9ayEmcQ9jW`3LSdiMj;4?ZXA>pke9VkLTYQ}0+&6r|m7Ggpv|OL%#a zCI3mtL0@Qk97<|p>PH%7k;GO;ct%Ka;ruEJeKt7`l}$Rzf3_AP-9e$7S_+y~*iSw6 z^ZL{e^|^CT(UkvgflPIfg|sf*#7(jyHh&^A4C2^ql9{;hI{gxuAY;qMvQyW=!fp^7 ztDrdFto3$$|E=at?6=gb@Bq@GV|P2$jjgyEZlscNZEYOtV4A2wZH#((;3ouw6$v+a@vK*UhyY<&M}GK zEfdE!%zyfhLgh==b&o4{6_p$GML(u1{R+L5sB>o;D6f7p8@#j59XVvuGt{%MN3{eh z?!^&!P#0J{shCzcZF7rCXk^rGSZ4AZVen9UB<*Pkd(s-1m#D>ndCyIDp2U5iB*@1) z=@KZ_S)zxNqP3a%tG3xmZqO@#%i}MU?&5YB)`x*nP$28D zEX(7w1!O9684rrUTE}|r*%7-gU?|nij(Z-37ozLgj4M=GX974A6B{$dGc+0e@0~JB zey>44)f)t>bNp_sUC|nYEyfYE2s?|hwdwI0qtJZD@~q%%bGDr!Ji_U566T+5+fF4W z5ZY|!h?bZ+iZLugT?r)T_MDUqv<1{^ZjL<#?&e zp870;0)FFI8u^O#f+S_OI+S4OJw@X`s|w&K|D7{fp<#om`PpN=8U z%JOWXJ4;SYn)iARf?j*Dx*RwRZy(>6ecSz%7&Ghpm#QJ0iPTNP^{y3;K(QA!ne9p@ z>qXSdG@_WZVmCDwy%5QrRgU7`m%w$Exy&ZT7wxsizHv}%MT48?p}28LKU@d@4*-Th zdA|)$pEg^nCVC7#$ID`tKog|Cz6~r?={ETswx3WUoby+iW;wUi*rcp;on3VXmIuVl zA3KTBXZsyqpD(m@`z~Kn-&A=|OzVgm#xAUg4n;13Pr2`#2c&m_%}J_|eITgPUAIeM zGh+!*O=uCp2&~HamexNT;TteTp%589N2LWmPo+rcGK*R#OId_vIPd49&mU%-7152E zLgq?Ve2RKply=L-Lz~hVknGGx=4954o`Vb^{+&i}W^XD1G1ym zdRpZEV5?Ftp}mHaVZnEyQqPx^Yqdk3`4P4PI|v5VTYF>#-6T4>XNXAJAv>?z2 zIN7}hLGG^;t4pc-o9}SMYE-`9R@WEG)kR9ElLV`cKMcz1TNj^Qp3{;h)a-MCs{Zpd ziq@rtrT4Bv9fqt=@P^SLX@u!{45uF_P+e35^nc(#K+ zlcUV&lpVUP-lzqv=GX`S|)=*5qnR1l2(ioDK^vsQ6vs4<1Z*#mReP7HaH-_}3`333CP* zDXj8$eQ>&gP38W(=gBySRpO zM4(f|5q%Am+H!l~O_$T^gKRxL=WDf@hnaV)p{5`zxUvaE8Sg^OH%zc+u0ELuDj~j- z%BcI^aiCDaPHmyd$wfiW97Ba1GKa5Nx>dGc*wXpVklATwxpY_dnJr9=2w@_q2Wlg;39#)!9EfuIE^6aL;4r7d(B5sG76fryKmYlKg z9${AI+=j6A`W*}h43BS{)EbROSyfo{YcqOieSKS zGGWy)ktx>1_2zd9Zo0_6`|dxt`cdzrwpSRes+i$+vg3fdMkQl44Fdp?6V#&SMysfTNexPjzuH{$ zpQ*cdjIws#WrLNYRB`0&1m98oFq16PCaXK`b_|YJwAxyvqvsM0p)Y^2GQ`~8pQG~M zNzU`alUmZ`4OBC)Su--eqGcJrwtLQfZwQ$%+n#D|f3C8_3+#@^=Of6H`j?pnmTvL; zOzZNtP)g`J;1fm9vigXtyDGa$dl`gQ$UpzY03r|o0s;a80|5a60RR91000010ssR9 z5fBmu6Cf}YKo$Sm00;pA009C5{6dxM2PQPEyk&TxHr71r>-GAADSg&hV zo{vyHl|yYR^w^g@^;ju@ zmopy)d?R?zkTvsDRHig_;KzoQ$LN(d8wF>vn}nhQRgxq2?d|s0XlAnOVovCH-*V=% zItZ}|Wyx3pu-1sl>%(i)8-{xw-U*E?HCYwe5~m?yN2wH0xcKtNd1Z_Q zSyJA$FY&Gy^BiM{arz4&J;S^Znw5uDniF-fa4m<7-UL*xzATp@f>0dA1S}z|dZOJb zYnV#ikuj4LV~VWDv5+FN*F9F@lLS&$l@Xj8>;8L`l{Y(;2EA8~m@8g|U~izHRq7D& zvt%V$w_(GqQmxv^c+HwsNFd_DazO(FSP;b)rn)^p%+)lYt}jZ}V(`3Oj%x;24C|3Z zSS4+uDSBn1;6zo)3rgdz8e!@iEP$tA*`dR(zuS5oTNyyzAPClQ;6;KLYbsF|EYO!sc+$iZqPovuHO6Byg>Xcj zo@NokKs5GhlB!i=RskRn)TbKJnAKjw-Rz%X9}0sN{8#*A;v2<2GQ(pS+#?PINwLb4 zE;OMNB@9S|P&+dlNGd_>W??~G0Y!`|>0MQ~YL*fJ{h9tc^@=QAqq7#=uB!36>*H2q z-{G#H$6gh?cBuA>Ynq6rHyN>72KE>4*fqujy_uI10aESVqSm(GlS9>;xu{4Vn=d-} z*`0Z#6;qAxW8+0Lyi($S1L3uNq@x$r)ybF>cfm6mTd-ouSM&9$F0e&C!7Y0%q`JMH z%h4>zmJ}PJ<>Rm)p*ouR5vv8r82DgKpMePt+#WoJ7r0m@wQ)s*$Q#*W8mmK*#nwQT z)m==-A#AeE>_u(cY)RRe9qDVX6sp^@v0=R|U)UZ5Bj5x#9Z`+?DF=@ugDi$LS=XtR zWG#eL^*%|u#Z|7lf?Jp0X3fQdb~e3`O{(g+xhauGImZLhjW4$qhwP*_)UjpP3e6ni zg+Iu(z9?-9>uC$WM{k>?$u4P~2>a~`4 z#aKUG?|Vj4OK=Z-R2&oeh1Rn? zP7B!2DwF^@$d0DE#3AB-qn+?3wb!9Sx`w|~RVcC%`vDmFOoo&ay~Hsiwli8xFfBpp zHk)dd#o&iW0_vQ6Tv;&GE}A?~^ysMobY!}WE0o6khdL0P?51*PYV1ZaWv$ym)>!Qo zwzAWYD}o3^*4C|!b|di3X#_=BOYlF$Ap6%)2q|?~xd6=(!1@EI63epkiIq(Vyaj1g z_1_ghV77+KIP#dVLmh2urD0~--p92{*f=Er0Em8qXopLy#LwIytOMWxCh{`#bGXoz zwUExpM5QcwzLnOJ$!p`xV!XU~^imf80C=^c!H-@#xrPt%kHmbDdOdaL;^*(4y*l*Z zwpW$9=}jJnsp_gK!a}0iV#jS8X0k1q(uP<#WMgxfr`qcFqJUOy+OP5N=YM8cnF*4p z*uGwzfM)j#cE2+-$nSL46${RUBX(G4x}~%SmB+H@;aZyzuLgSkIVx($Hm)Kp1A<`x z08j_ua?>F)luE^AJeczT0QJX|e<^pFY~s+x6eK9=Y0zrhf?(i5Eq8u#@1c~AH0bK| zrA0NMOKsg?gZ#&l2hrlmn*^#CF{5zY38-Z?iuPvQJ20$(*2QxDP%~R(GhAY2BdOmV zN|Yg0Lmtl1K?nJa6WQ2J{aD$6AObfJ5;%%Fv{BTF*iNk+n2haRkd#(?EaWO+oCe3n z%1c#)Z-WW!%+6nMKu7sZGRs5z6o@9dF{W(n9U*sdHry%g3Rx9<&FPins3~DFNq2q| z9Wd#~RLhjvW)tG0hwZ-Ij4W8ZP&im1gZ!B{e?>NfR1kcbV9gH{_a}oZn^V<8r*KU6 zC<0ifvNjmn_m-8@Rw~pH6h>d*{$F29s!XqEV`JrAl5(;Znf-5d7p84jEFa|0z38bb ziU+{p#-2sE>`wXJV??+}2#*UfWHFT1+;568s;j60K;TVlU2^ao8^yL-6)Yes4)t7( zl5lPR01=FGt3#v<2O8G~G4f0UeibUKlJP8y8JyQWU6wLfILF6SP^+N_D>XF?%EjpB zxog&x*34o|bW2vs)PIXaJ!@Y@v1d{8OH77nVE7QKRtD=)3v~8u8kjvMEnRPdW73Ee zMVjP9<#;iMb~6U0Y88o16;>lk)|M=ge~7}JGLg;&`q$2Fu>5PRGJq`hsFhgmq3xB7 zbgXo?uGh+Ir5At)&^&4p7-iRO>5%2;v{{QUZ{(u7X&>S|0W7ciF)_Z3@>jwP6Rw%z zdSW1pI{yGVVvH5>qsOKrP~JWHykpj|MS>5YCb-iH<86;CAf^Wh_FHSAcAN^4-B~#41V=vO0h+@ zHCIuLApGxdaQh#LjC`I(;(---F)DmoW7TfH_jv0EwfDPt}8Mu8SA z91o!f!3U2dk9AM|32I$M?9>%u1m6D4$hNKoJTwzv@92{=a+$UnOayRY|3W~*@{{X7Y+Ok&A+sruQw(~_|`!N<5wYRz0akAMN*&ab+ zqKhCX%8sI7ffg;i_fsdu%eEla^{HnDYUiCoIAxb_PX`*-%)3l;?+ zs|e630&7aoc@mkAbA!NwYv{%~M!o^DMpE5WH!7BS-t<(&ok1?;Yf6z)RaN+G*>txK z9vGqluEG(i?Jl*7BQ+^n`8ySM6GAXZCZdmn9<@s%(&ZpMah^DWFW|+FS**0zXwGjy zq0F`<&2~XX*{Z6wT8{|ndjT?PX!6cS1gb(Ngz4IMGsY~lgIF3#(5**M9tQ$w)WsiAQkXV^ek}2PGU5(jjtM*wEqB0h|yp^$K%J>d{!hsZWn_!T>emp8tTN<*Ha4E z{=pDpA(p^*zTLZaELob@xt1#-?0DA5c+8T6Z3=CGfD}%s%vw{CbgHaLn2i`sYIX}% zq{fUW5EI5S+)QCy0HW3xoM`H{hj8bU7Apuyh zd^3o((=sNN`v9?zc11*FvnI@U^<={sHv^7{?8dNm@mZ|zwQ3KNYSgG{>#o0I*|l1f z%Slx(zXWwKZ~{Ru2G3`+vo(1}Sz6g`q@vc>rFDA})nHAnk*aCQolFFkRhkOQ%o%4( zC9R2(pJ|Uaf)MXo*ub!LvKH4E!5cI+-tOrH>!HCov4^KlTFKS99F8=zCTty$BfcY6 z_ED2pTEdikXTGmm1?n@WT%p>+8mq z%&6l*QdT=|389cI=tYb^2-h3po--VR1on1I3KmS4$FiBGiz=Ea()7n)N>)^*xYs3R z6o#YU->2=sc;LdyFtqh8d?vfpNh$(jUB;-eoU zWF$u6ZmR3?#rU%9Z{szRF~ZcM0Lm*-H3-Y5n6LpV119A6R(+^?bY$VsENcksw>Mn` z9B;Bpth6(BFfo5>sO3<@4ieJ0f#{a&t3zV66zBhp#*5fU2BpoT$B)s zSVk=o)S>_ey6|J8ium5$^`N@oapT=)S}AGnF)6JAX`=JKH@)xSC46L9Ob2~{u3Xs0 z%4Zk^p**iRmu|2=n(4}WN=thmkz>C7H+}53LMd4e7K%x($49Kv6 zB~T4?=v79b3MqK%5tzbI#$ie}S|S6U;!Zc4BOZYoA3nOYb@J$m#9px|&g6H&P`+QNVbBjoVSl>Hr6p=GAK zRC_yiE@qdUXF|!5jwunKPOAyofT-AlSzfCtja_pqCfi_&3K`mC+~TQKy}h7;p}=ld z2mtsz-T)AOCevlMyX;VxAln+RW3u402&6=(r5Pyfme6=MR@`iG+-Pv5Qlq|RWtKxX zvpenHv#<>*MRllx50L~|M>be27CEZ+B7BC1=1F)~)xOYl;L zi#8yJX=b60wIy|yw%caCeL{9HrkpB}u3xa^LHLinh&}`me3;y{Sy8;2*b4fTMC+p~ zu`TylRoUpw#>fU_;|K&(5-51FDNIOhV(RtTT9&Z1FwU@%EO6At{RiQaLw4=#rZVqC zn_A`T>-A`rk90?Zb?DWEWm(y*A_$L<jJm?!(Pyz=-`yD?fUh306m{zL%8SIU z0j*0_>Wq_6iLGi^mydUD!MW?LYg1FHLav=X{{Y)_gdB*a7;ry5{8-((7#E``uw1V@ zhEoD{ddzs@^+i-zfrC;ba8%S4K~XiSptY|9;6d;vp$0T($h89}O5;}5`r?%+!VUmG zp_z6C>|j)l3RbnIL;nCumM%*5uG=FoT!@hXm5nT9BSJ9OUa@CFvXD3*i1{Jq(Sco8 zSr5ahnu<`5-Pxadg%ubH?6UPjYF_F=4Pj|vX1Lc7D%HX(o~21x&~RY|%xQ=qi^ib* zjA?vVjb{MPmDmdr6sZt?xwfww0I8LO!K|lBt$>);GsZ70l?8!oWl~fmro3ai-|?~j?CEh}r*@G>2w zF_uzQLI#8w8)gJQv6+iTF(Nv*0yCj!?g=BEo(b2Fbt>Ni55U73WCe$SXLz#Vfc7?C zIh4Cu?*5N>aQ(M8ZP#6URRqzR0FI!A1(^)Ul!}l|>~IBYoGT-k#FsO$dA;j{#yyI_ z>=-{Y46#_K(cr4a3o-HU?hoGFr*T!{n2^Qds~K!_11eTA=aOu8 z{>;a4&Pjx*teM&fU85MMfOibu$%bKGr;v0H;CLd`?pQ+y00L&-vbBb>QDGjNFR0jA zy**jlQeCQ^-oD1k2e3M^urBfw8zR=oxmL9TZm^1Y1!*2U_}}^G#ed2F0GVzqCwn{| zRq^rz1Hd~Idz<+(=22e+O(az@jPhr?jlpfU(6_4NlD)O8TL=HY%|;1vyxG) zTP)J7a)PiCg;ddl*IMhXb=CNHc>e&RNyoh`7Ay0U}&i^ub$F$lPeY% zNxNk$Ws!2MOgVc5DpWGs8)dt8dkvn-mmzMbDUQo$7B({=FOP<+t@jPvw|()f%m+>h z>`K(QwZ*h#CF^G9_}@D*QLc4huI#YE9%!y5jb2s@VzN5)v{bItD_WMAuG3vjZ4Lh4 zYRK-RgbCDsi=g=uJwKId*HA|uKPH3 zDpU&^BWO|uc8PW~*K4KDRNU3oU{z4ifntLSb+vjbR~1XrnKTG!>kkG~9dS1OU6|~oRMgOk3vcsIEL_ZL=>f-OhM@JchBC!l zf28EKzCQ(4+jqd4&=XEF)heiP2NhY7jg?9*vbBK9(#rtsY4zPrhp(+FajK$)9@U+_ zmF3$;r-rOXKd9lSlBmL}3}UOT3OCb&v&Z4ax1Dl0(VnZCq}RZdzD7OBU~sclN-^2( zRb3fnc8cJaSyh(g2*DT~P1Ruxm^4HCZA`wq)@x}PxTa#uX3DVFqaK`-^uH`Rnso;w zg@}BXF?!%V`&4^8XV_sKtV(P!Eou_F{{WJto8&i+tV8}MmnR#H4n;@U6ShV?R>D*l z@Hh}nXhoV>c+}S#=M>zTRR%}eO|w=RJ$AV%ES7;iVB@v-_R(E(2ZW{{$6rD$X_F5J zj@63Zx4Iaa892#R32nbRn=v7Y!AYUUq30P`d2Dav{%-2x5+kaJh_*bsR%!(egM~2x zU*=ptPmiuK`vIoDk{O#j0Ssx=)T=ExZ)@V#f#$R(fZz@`lO0?E^Ps!-R{8ao>FevT zcwP)vc4Re+QM3#LqSCcS$Ts3|e)@^qU3u-;Lo;EI3ET>x1xAY$<5OuofuZsgiqf$E z06lu2jALN7uDyMJzgMr*==6Ghexplc*-~%@iCW{k+qvT`jr1WqFf=fHEHe3hWV@E^ zj09$|(7kF~+kAKJG_VO!dn>UcuC!-pel=OLWvEq7y?O=f*IMh>uUo3ID{V!c-r{-j zHi+D7osM-i$l%7EZbwloCLj^sVIr+-XFD8r-xWf+6{)J_dl;XfcUWnXphExyTH~&| z>N?zt1nsl+iD=;dW8$$aBa14#4_X{3#l|?PNMN>WjwUF=eq{*Y*()!5Z2+8{2^g1`Y&R#S|`@G;qokuTy8ela9KW*$HIVP&pic zsR_=_ESFbpc8g2*@9g$_JF~MhVBLLs=X0b2R|#2k*gqTJHB6((B=92eU>jkm(5PIP znM4`AbyhA(uO8}d2ZFlLPMvrynV)rlpe~oC{`SoN)yVdHJ*L9tylu$VuDI74X&s|88l%>@lwQWnI`ZjTl#Em}*ofyIs!Iy7 z5}-s2D|Ssq90++4dEYg0RWkcW>%Xf_t?c6TR^GNPQcEdaa%WawTG)=GBOKd`&bG{) zip_87p0~6NWKh$l#mRj3I@tse!2~~&FRhy=EPs)PWs0nvWK|MrrioV!(9L`p>r*~G zVPckk+myb;J-C?`vYgxl7-cosg7=Sq!ZmMucBNSq_k{ITwXvn*Vx~B1H0khp6HAU3?2Mlvq!4yK zG$H)Vx!KKW@Iz4phG<73$Wl1r;5h#74Qg<|ZtmmBf0R9c$_! zRipXFC{t!%le;5oK~u26h$8c^z=Jcbl~}9t)V&2Nj*n8MIn9w}16MLwTTr_=?F zT}XXx!Qn?(E}2rPk(rO=X!5C)EDyd7zT}K(=iv$D^(O@D8xD4Oc?zY=vgid#| zOFLOw5KqH5VRg0j5tK?I)V2EkeR>rr60_0Hpkn>ghMlj7x~8u{mFH8LS?TK)^y(*H zU!wm29e0k@yR`S3pL!vW{A1Uz=t{c}tm1@v6zfzYIWBf+E4dZvBZI zY8J@I2$edJsmAxd&{u1KI1^8fU`8eetSwI~g1(>;q6}o$eVZCE+KO$mR;?Xz$B>oc zq{(bd3hI{R@Jzpoft9;w)#OskDa!HjNGk*fd~cr2`56kRkTtVf*0>6*V;BS+2o>mc zJXc+4E3!}r8q_1H1qoPHm<204h``RZOq&%H;o<<#c1I=&a{;J@T4TLgrE_qESfqX% zw(Do^mZ5tq(NP8{5l*Y9Gq@IIzC_l(2f~K2nwrroQ7N$GWLStM zx5$Hm4AQAyojN^s*3(qgi;f0U^R6@u)}AoyVv6+kqTMlbXO+e=OTST0JidykvKX-% zcbarp_4U^S<8yjE0H~k|+{)?-R0bS56MP6Dn$WMITT>u)@pz~*GM>&gHK7?q(?uE) z<2xu+8)m_`CaX{)MvW<`u(igJh+epi?9J;HdJa2b98c!-^?|yGc>Zc}ha1|3P$y8f zaL3!Sz=@!C8Df*g!yr>t735mvggtm17$&1mu!8|Jr(KhWbFY@GwIG*|ZW?4`mV$N+ z2AU#!HLXIuUNo`ltU->LVLl0|6b@1uVcx{4t8U8Ohbt8d5opOCBB3)FuAnApLCN3) z!$KK)h-UgMS>@|_su!(~=viuaSRzLTIPB{WBs6J#w9>SyLB{82WJOgRpt4y#j_o!W zIWwLtpC}qVi*;hz?b(D^5cE}J+ADk*^CH}Q zWljgi;)GQLkrq6$Y+q`|b#BO32sls#F~(HH7a64a6MB>{tE1!h;4`~eu-xlh#+ku~ za4dTj9V-BV0Pglw-Mfk=xw-130|1-ZX|%0XU>^w#abnzv-x(u<1Ey}0S9(S<2Xaz zl+s5}U6j^eAy*d!38-VX`Rq*Z{VkV_>%zeY$eXmZF_)?jTCS9JUI1=4oiU3W7#@2; z3hNp6DYq8G#_T5FVONS+V9Uo|jgHtf_~Aiby+V4<1%5iJJ`A$L(`C0ApCs|DR9HA4 zeb|t}r$C|!*HL-d24qYk^Vidb0f)lhRqk!S-^)$fi#sS25?M9ZuU$gDdV~w8Ioz_t z!ES8HdwHg;aSPLj!GPARZ|Zd6Z`DOE+w#&!QoRM9MsQkjKE;91K@Bz))}Dz`B>)S>`#ly zmf{NRmC?U^HNinx#a!fc%{u_oSTqy<0$Rtl@;r|#QLLqCNwMuO zW2w_Ec46MEhv0GswXJG5(Jd^O*zd=S%Tsc6A>5jmXP;+y!aV6*6=UK7enPkDz1xvz zlCvf4nKRZasqzg7V_9|Ldd4`U-(%wr_1Xx82qyQn<674u2t+fpHI0>TPM)xs8EDy9 z>@G+Nl*eFVLSD`5ty2!UeoeL`CSvEVM)$qV?AqC_6T}+a5G(^{%aN zxnWJ(*w-Tl5b`+Kv$o3?JOT34GVrQ40>E&yLz?c!0R^v&$rM!vlsx2#NjhkBQ$Bda0oc^nD7?h^zs zp4%rQEr;{1dOU{2%U3IY1F?d=w5p)CEja0hm{oYWyP$-)pGI_VlkawUXxQB}r^*Lh{Tay3Bcza6;DKT*$AbW1$8F zE6}UJYY4SfPB>LoQdC30_*l?E#_YQ6r6d+dVt7+J_gJ>4ldm*g-;MS*K3$$p%*AZF(}^yUZ}wY1PZhcT~G@g+==;}Ay~G=b`>l9i+XTAKxiz>i+`*0a}IR;!^ksi??LvID>o@=kS;;-0qCwc~0G z^$1qfD#qxjqp5~>R$c>Zb+WEU04;zuZW5{vMYL4wih^iDxiq3P(_T$$EtDN=G$X?* z50Q1c>DLuN3$1*-wXCpY{{Udl{{W!bXM+^ls#Q!|6zz;8n5wru-j*tR2w{dP-j=IV zUOvk$?3348Q#G4kvXr&}3Rf4B4m07rV&>ZM*W9x?VwOFjG0egv@G`@Y@PQ2Jt##7E zNJzKTiz`wrV2u@Gqn_6kPhuSrqZn?1Wb4_TlF0Gak*h1cX-aGjf{htdjcc!4DLB?+ znX0(WTdBq(dv2*iKvdzv!MGm=TwR(8(5xJGD64W2q%lB%JxYR$BZNaOXJ8ZnA>)0E zRT-?6%H8s3WolHZT+CRhi$_+0yKHf(WbJk25h{GZ&s4IPuG_U50Z}-5JZ?II{x zsR{^))*gC=+E|Ud0?}G;ykhK?txCFD*-Qd;0-E|YVmw=HtQy;VH5KAUmOpU>6pFe` zn=Q&F5X()OQ7frL^jHJv%vzo<5~9xA-v(tg3lt#$zPmN7@s(gmhpAMFmjTnWK#P!t zVvejHc2x);7_yp4A)sJAqS0V}-MiUoooWc0;LjmJD!gc~v#^5GY}^u<=A4GLEe*Zw zvsskWXc{DFpi-1-6|`3CFM83_isM5ZJ)Pi8dc>@l(#h-BRb;Y>+Qf4dh_#CSMLoXr zdX-+d=l}+5tEO%)DC1fvYU`khU#Zh+U}FW9*tQD|zT;y%fi+_AjUKFO*@}s1?@f&w zuCH&hw%UhfK)o5PzKoT2y4%ugs=)$>v5Ub9*8~$%%IyWJf)iLDEHkLanwsgZy?tW7 zy0t{myVz_QKJRF7-TO6$<#n2mT|~<=5+Ur!B{SF5(rF0fSos=9UJP1|Jx#^{7e|ub z$n$LgSO&V3zLJ#1nywF~3{N`L*BUXSPQ-Qfn!O^`VJ$x11XhKj0dHXNPPWrf*0{Zc z=o2+XT|)KfYqF~1aCp=+Kp0o55ypfurfqn(cMp${uzc8Tj6j>;(~BW6L>v`?lD4OX z0s*L?C#`F-YpykEiqlft8-u_aMAnshm9|iV3FHwOZw>pUS!4?mN0006f%NuXsS*C^vfm5hZ2+1|d&@Q^QL=mN(l|)e% z0jTWi2DNPi6CK7tZqJnff+X6cWj_xtn$#=NVGS5Eb#)Lyz=A9Qay}XCyz{65f>s3S z!57quiZ}{VLT#4#|C;mJ$f>urR9>&#jmj`LAYR0sye1Juh(tw zlO8aJ4g;k?p<`q*rJ*<^Ke0$KKzG^hcH>;AF}TI#0wIG0|NsE00RI400I#bAp;OGK@%cTVIVLvaRehmfssH`p<;5e6eKf4lEF|@ zg3;k)@bUlJ00;pA00Tb)@}p3R)=<82pEH|%5F{;@tD1AMB{kqg1$d7ImWMuZ?xWl* z(x)f>Vxd_rrMbpL)G3H!04Nqk1 z0mK*Ry65tr?3}~Qi^w(|f;hMic+?OlDcvVEMrXfK?Ibq5&4$A9r zwI?goi-x&be2h=+QmvJv!#GF7c~#j!11L>!fa{{!7?%i)K}RzV>7}}Yf@=hw5OYay zDBZ;|?k&T=bT>K18>gak;GG467?9Zw?os$@0EZ{FujR9muIZqH_EgmW0Efoq6oYUO zW)m?9m&)Qb&b>+vJLhjG5V_$QcnE+7>AFAEh~+mOd_;e02PhWRUn*LJYP34|IWo3H zLE9^<460D0Dbatn#P;$E`7S-YH&i#eE>})((wmQ^oT&c*mDLW2Q_En8#Fjeih|@lx zhU%*|hI^+tYaLTz1qv8b8F#jzLUt}AxFXvrD+uAc3lhZWQ(SQ{btgsg_)hvtd)!~@ zYg3=i{3kG*!Yy>FoJsQUm*oki!W53^c0y-KRGW=_64ZLxU%_Q`0M_}*IaJV`?E>mh z3YAb-x`n#7%1yJ46nrdxV^_exm7x-9>qN1 z#|43_b7HZu{;Bsz;<;jyu-Pre#C=`2SRsdnGuQEvHT(ruhO@VFY7Gv=M-Bb&s zMIw+ds%T@&r-*b4y?+Sdl`fN~WC^my_=~Z;y;0W@;4g<5PHSYkHStLCNKiNNVD7&)4+{$3lp*6?S3d6tC?4O2j`BGFHD%52$U*Sc7Qs~UI%9}2# z5JJk@t4gWVja6=e>1xv^${kYyI*_XE8C^?|BI+}Nkzg&=r(_&zgx3E6_?%uSunDYp ztT_jrVMsEK%4mN-EQpl$K5D3TDnq@HXv)P^)mchz5o^sZ{*)Vv>OcX>!R5^n?6)dy z(G$9UGwEY)m?7BsgV+^?hT2$Ki?__HBCVHS2vn(UkU5jEj1@~knN{*g0Nr3kAeru}Hq|=}mPE9n)d7Vvg~8ogMo^@Q^GRzLHnOvqwAckp@aFag7jgzN*rqRn+IIwotW(&t-cJRl*fn zZI{a)`N}gYd3Gv2ma2zaOxq$<7z^&91FpUoF$1lNoo<-GQ_c&iw_K>3DhQ3$X7&pO zy2)5uH8Z4pCqZ*LyC=EO>qg3>Wk^@DAUKV>CSo_{G$`i6xahj)Z*>l_Og^%ye<{&% z8XF&U;tm)Zrm)iU*PX5p zKnc=UMPe7>O${>Hl^UkCj^_4F3@vv1sracHA~_({x{%Ujv^QjU7<@%hCLltL zQq)UYJFdy)bxdjlWhj*%M*d6{c-d88q(Xz0qh-^<@(Si$%9H_|gdriSlOJUStFC^i z&Xz`3WqD9%qTh8p!VT1>PayoN{*=r?aUoVgWORfZhr;?(!`#AQRbgPD!hyLd<{{9w zR#p+Zy5g|LyDQyF(OWp@%ETM0O~Pr27u{6C?uwjh6(!JMHp$MyU?vXbQ-t?)Pjkq5 zv`U#BSNn&1s_s)ppP`Qc2p#gE-F^p9E8fLwJlY6ZfE}h*;iDtr0#`K5vuO{E~-t?-E6lCSl4tp7`9ec zS~nq2bkN>y6qr=Oja6Qo19aXUOnXJQO{dlahg90VRr@MjZ3qwt)Pq}Z(CWE-EHCG} zq{9Y@&KhM4#RL!Vj(mh zs#rOtaxP<)B@DkSi0DDKS65JbYQF_U#)|r`9s@_+Smj5=JH639%7LPJGOd(uo_#78 z$v!FggV|4H0Z~mP-&F^RBFeKO!(h2&wN@NJ>>`mS2yUbZybm#n8JrhSXDnP34`FUlbK5v%^;3N7Z9D9#w(I3CC&ab8WdT`y z*3U)RN&tx~rN-*Zx`ig{Fh_E(GqmrQ&iiB!r&4rHH8h*TYcY8=1!yM2WboSR*J)K@ zIr44LBHv4(qeF1o+YjYpIi=Lp8>+$_q!HkSK54w|2dYTn3skSN3bw^Z7EWg}5or1PjUo>`VjK1l| z(y?8)sBC9pJ0}~>kt%zqVsgG+{{VztQ(6r6MfRKYSS-LY z^Iz>vXopI3nZuhbTvrS_>1?lwzt2r`M%-Y1)ZVvo9T`br@{&w-6g&ndc!h8E%_UJBzHXI;_wZ;3ojTl}x}82+6! zO~j}_(+mARBo9ydPq_g*6PG}^PvO;5X`j)-L#pN($K6YdoL3Vb`(N}Hwo{PC!gC6V z2T_;Ri~j&>(Q`^^ZEod8zE=IywKE;lKCDoF>8{bhrpzyv{5`f<&A^lRRGwi8jo7Kt zsFz(?ROT3}>aa-EW>He%DS-7*BV~vCWj1Dzn(bN>V|3=8Nhr1VPJ6{hY?|iPFhc(T zj$`bbfH_?=y5hd4RIzwx6g2XuVqJ{WT2>%?P9}#$3vn2FCN~ojT4p&>nf)hq1FD?6 z<^KR9ze`8N)HHfLKu*ZITnUwZP^df|J1j@I-4m%QxMozODN#JT@E} zTKN|#zLyJ*o2)!{eET#D1R0K8TP$fs@23sCq|7cB5N`f?P99YZYkCZ$^f$_^C%34{ z&Crma5a0?FkS6KaijaYI#gro4F!_*GkX9XXtI~u~i+1%)#1&vTdnaL=w2YmI@YbP; zQxp$Mqu;?9U&q8{qOR%eac+y|z0D);gFm>UUnrh;?Vt-0?$gvzV@LV@2TaIEF`pOW zSl{aNBg>;5?bsZq$)ToA)C(yYbW+gKpioyn(5;aQY*r=#E_%uebS`>T7dTc~Z3ef3<{QHCGYP1SGabOnRMX=7mLbyH(- zu3Dbf%WSdfq`E<}y+^~zWi2XMJFXjQ)UGBd=s;78s=O_ShB^NLIY5+2llmyiY^|ye z@qf6){@ktO2rFcKi)9}W4_2z5mDeyp&d9QLoia2Qo{$luv!biAek2#3R4|z=&}y4% zXYRRe)kZ6S3Wz<^Ow-X4`cyOwqbO8=YJwxuy-e!4dDasN0QysD;!K4Axn82Gl{#lE zIZx=NRkHglW=sYAY6`xQoP1<{;Tc=Wg(JzfUpEi?S2Bc2tE%NdHdWBxRpD|lAEezm z&Lus+3&>G8j>37Wps^g_%3y%88pmmLL!}1>p0`}J4HwLD@0cowYXM6S?o!0(hcnQ2 z?43w+#2poQn2ghKk39WJ_;_r?X*1au5CRXDGi3rL4CF4K6rE*QlW!Zw=@{LOba#i+ zp~R>SkdU0xxq%7_(jCI+9J$d`VN69yVIYzcf`kHNgb32{e|eARcs}3Hm*>8(`@F96 zch+Lj*jIwia=tyl$KQwDuk84t>17Y}V{MPOHz?QH05HxQ+D}ZYN z!v@YQbPy{wc?GBsPu?S~^<8XFeWivq;Z_Q0ik-qvYZ-aQG+qs@R?c?gS;ZgevXYz6 zZa7#t?PY?%PfsR_Xf{Z%rP@-eo;y`nKYXZ#zgcA|`s0YN|8@r|-RwWh92BdU=r6%s zJ`k(3U9&DaKTz>X#fK?l?;<@1yWub3^cR2e*g!Yj9=Rb2{}%%J`ds#ki}w%t~JaSV;(o?2Q6 z3!@yUi`ra@@e2wZk1{H$a!;=kJKdXjEJJjU!BNAC7$fQu7Nf(R=I>Yhx_e~32=8FP z^sVr?{I)dQ$2gXWKL=JoJ}6X&C{SNy#^u4`8bN*u3)_L#ic)-Z0z~4=s$52et=rJKtQyjC2zN*^B!gS=LtFc2!qoyD~yI zsoy^Pue5sT6ENS-pXQhh+TJ5QNWMvywnc5|RIm2f{~fo<3z>iPi%8t-m*&=9rPc<$ z<=T>~c`)pLk&CUcZTv$@eSbeYzPK0;m%Ap}wOo4Zn0MjohSDV)A)n(I(6YSm8`Uox zLun8j{KVMnOseUlvf}E%_tjj65dCg+$9%$M7Vnzw3~LcR+5W5X``3^wrKz$nqX7mC zzX#vk;tmUSXzx;(XSX|6GVd(Z=T6*rRJm}nrbgFEWc>BIX~nMTjmnd&H-oyqw-t zeLW@-j%`@SeB6Is7i7TP#@LF$xe~viw~n9RIbzr_ZyBZDf^T|wsHD$woSHK2hbl06 zn{5_Qy%i$nhWOxI%`)^>$j$zBgwV+z=X>f(t`K;ENxk}xiC?2siS4QR>sjZ9)MpGT z0%x5dTuw3I=$7@ISZO$Wj(%L3X6T^X3_HI#Rj$=u&u(&3F7ghVR zT_nxUQ|#IrhdOlMHUd1bYxk|T)gxtxnaLL$zlvNzb`|2f>4QCxo%HBVs$)TY5h)c}FsLsVxQV?V=M-rm6aRJ^qQCjBxoScG z-d?U(TccwTn-PBszHSa(&Ll#8C1?{gjq*`~g0a!O$~p9uGW^yYYo{jX>IQqSB@Z11YWaUk2)Zg-Sve9Y{M_Sx^gg7*uYaY!nL zn;Ai+SJ*B4p7YzSg+s&tQ)0i`GBacREcN$G$yeZI>_n!4IQW5a7JU$^=5b$x{jh_h zyB;|hTg%)8J)?Q+IKIe|Ji{(b|GGRGcRPAa&n%}@DUPwbs7S++NpJWb61ikqgPjOS zb;Bs+BoPvt2}*)fO3TVZLza0EcoB*k79_FBcfA#uSdQ3X3;l#t(6dtZT}+7pLjY17 z8$6w7_~0UIG>H~*6uq=REcQk(LFfy4>{*m#9)V`9!*P{+0(hI3L-U~jh2Cz~`rV4} zwlNNUz2V%GWpFSFzQV{>P!aTB!#`R31w6`Xi6yW1izY{5xg6^4L~d^@qpr|nPBxbOIQ zy}n{(@85bihn==qF1hFG3PbTn7Fh?GW6P;9Qc&-)8F8n&W8zh-qBKv^+=uyk3eE8W zAvHn=-75i^hqCLOK)wfm5Q8xifsfz}PZ01&)Z=oD%~ zZmdpFoHZly+xDhNhKREKTIUNM;Abe@fV+0j4L3ENMJ6OVs?jT!6bx{slVDIf_u!>++~?p zp6>Xj0g_34%)h2JwZ3W*^)hF-ffcUduweckako^y(rjm4bDoaH=?FuJ9Z*>YExJe5 zpMvL#< zf>^T~eGJaB)AG&}Z+72(z=VI=mg(Maw!_S1<`E_50CK&Ahit%ChRe&&gPP%P;vu^- zpZ29pO2jpDd8=?*?=6|=Xz`hS{Xf5363?dkJ-LWBj1y>}wTn+3n?`;1h*B7B5|S$w zpma$vr^dIz9|I$g)N$1VK{a3-OIqlzQWM=Aoh-|K+264TE&=K(6F_9W7VDKdJ58+p zJvz~xX?Fuk);P@Fk9LM9BCR$TKnUQqBFP)4dnSh!TXyV+8jfUts_Y$b(IPZ&m%;bq z&OrtW&fGPf$bo)4ScsLJ@^=p&Eo~Gkb8KUGXSl?}Wx{Klbm^Luz(?`PHQa9Z}L}sfk9xb`HPR%29<08gb9xode z)V@L&Mx50*V;Of>IAxCdju|t(pvWCF(qE)OzjPbcJqnuj{v$F>b>WhmIcNK2trBFj zR!#vFdi@K4b9#wGMtemZu z2mY5=FiCgcIBP#k*y36+oTy6T$otUTW3+!6N$~SB>?4OEh6;V5Fxm|^Qec^DUJZz^|3~NAr<6Fcf z4Nk5E=Wi;lH*E2nkx;zgp-rG}HQ3JPusjZlS7dSDW+4SRr_iA3KX9` zPKNFVnE54(&p1!&GPOQ^n!_$hxUbhWO_hDtOMj0^E=Wx7$Foj;!U`;y;s$25Mn}=T zvmSm)kNhhuI9kF|IrjHNA4?3#X>UKxo7DN2u-VQ6J!5sU7j7tD$zMwxI|OxB1*4VJ ztb7>nJ7(Ut0njT;r6~)(IjPVzF}PYvr` zFJzBjpfH>#!jh3J-<=<#TfD6vX|wDmWQD(Sa>mR+Z69dv$(xK#vwwTg2@E1+ON7T&G7bLr?U6-3ca6G&IYW#mI=j zQ~z=%E+V*W!e2D#Kq$2(`UQgQI{3`(LT(+j@cWjKQs{1|wJzjtgLUUx zOtfh$CrZ%V3y~)^dX=R+SeDQ` zu)EE(wsJiW51&2_3X|_^ELJWKlK13b;6T#`X=#n@>%j3eOKvXPYyXxa*Bb~L^q(~E|GX`opNB;Q zx=yGtt=7$TI8z3uxdpTBHhh51z%xr9#W4qU`NMbRp!olY^0%;L3tAnGlJ(=r8>cMSIP3l_HsW>ZgYZ){f^7JQ@WXp+2K;yL%KrXG!^1j_ z_gjwXdR_lR>M!s9cK3wC%v6<=17qy6*_r~8NV!=MkN3Qc>2q3D9giXVa#lEiKMj4J zKGU3D3?l)&du21)Z5N-iUm_MKHL2RilTh;Ifigs%o;|aW(e~DU4`!J7ng6{##Vxwn zO4_|)JDP|i5uE)Am`;pYT=@Z3)md(_>WdT;umy??s``HenA z<vUJ6M#!4gw2=_KDmrwB7bF8!TpQ(I!4V;qFigFWO{5x(-l0Lr^rqlsy>dSW1cKbJ%mRkZ`rbWm8*U zuHFQ-6fS^~&c*eGpi>{NyxL)#`WIDl)3e-4sk^#Zegs6X11mqk;TX@$q%v52Yw-ds z@UH(B_qbyD9pfWSH*2oB zb6!v`H7JDnL`W_shl^_-h0iLsMDX(n!IYBNX)svqX9*vYRk&f#$T9oOi@fDD{A*Th zp0A^xcG^NIdE$`Jm4Zy-XFc!rc$?iSJUh!WSO`q$hq7Mjn9g5Hofo&>=rmSXSCb6u zdW#XZ$Jz4$gG~P#F2!{{Z7x#$eB9|S^9nimnh9XpthBBSt;AMjPt*1dE1TrcwV)ZN zi@3KL``r{FKeyzZB`p1)=kMx+`Xg-uTsH?`E+}6iSuUd`16GG{0!E=L%L3 zUD@E^5sJ8TD{@;bDDk?iGZ+sD7f}(~mk1QED7yy-a9fSijcW?@f%bA#$uxc)81Q}B znd<(wm&F_yBGE5e27JL%uT#EnS2E5|@~iB^b`vVe4@F%;5E8n5HCxa_M%tHQ8;LO% z4R0R}6T;v}JDDUK#%F&*30QLQKO0mmR({;Lp;3q4y7kp_h4Vg zR57S$(TlenDP^c@ib-Z=pZl${DTh)q8Z%D#4G_YEU$9iF#2IX(>CQ?zBT&%sbC$6b zwPAgs<$PS8_bIcFAh&x#Y#>}v1B;8Wt&ua;4znwcCBPDceDX;sQQO7i6XD`i6+57( z;obJuSh*6!I+CW|Z5D2p#NG;yQHH@p9ymYL?7WrJUf6@9P*!fe6wBaY|tf3v`rs!4oyd=XCdjWT0Q@@f$J*E4fyt%h$$bFZ=bfUKS8M9ku7=Swk zUO-yXB`(uZ#n*KXv3&0Xs%F&fzvZX6!J|7DG}c3@k`hx+SwO0W*`RT*?{%K_tQxp{ z0VF6|`Cj2j40;m_7-=kL!e=eGn$ZXF8HE1B7_6oCEF)W^doSm61vcd zXOBd=&9ex&qs>Q5VvE1&QI`8jL)L~~SArG>^-M_>sM0YwluuTjx{~(v_N*A>wN+>U zg{&7oWcJ<|QA(letDDWW-SF>{Y!j39rFyf*@G!w;0@%2&%*=sI|NS0~-mvcW`vU+= zEk1hefRq2}aaTJDh;8+`cw!XFyCoqaEzK&OKvt#HKwX3O@oF%dvQQ$SzwXtm->!Ur zW*J%`Yyb_*u{-4=ha8cF^T}8~-7lRb^@FI^6EQdR1~N|HYRI470Y|=mSWs;+uNkP? zhQFcC3#Ync-fI;+edZdtnqVf_yS0n_A`%RPitW73XbYTMdo-+Kwq7HNF=)W3FDtM2 zh-kKDC*1BBB$*LLf zX&t*XdaSjEnH1l*JzyjuxvRiZCL~v5%Yokbm%!U6Q}$H_NXXhQO-%ZORHi+(xAcGI zP-OcBJa^x(vsgNF<%QJ@*h$CJ>2@5ij{Hzrs!=Z4;&Xv zFZ5uUy8G3f!~_mWsa?dZE%lBAK)hetPZ5+J0ImkI24#h3^e$6RMi=8t;5V_WMb*_8g*e8)tblz|6UC{c*G%oIDK0kj|p18T|zmZ4FI4WyhoR_9`@X_FaNp_Z2kvPj(%P7C$%L>4OmJ@ zQ3pl?<3{UK-dW_xyh@#nIr|hIZ_i6fV=@)Lz@K;|7Y1&X{1KF2cM}V(u+2{cX(%esntx}IA!M7u>@|rWtjtC z)PGslaZAsI9QMbdH_(x^z?wcK?20DXGtpZ^&M+9831XXrX(hgKgpf>Ud^14g_= z5MmR)dmy1-qJRW^`|4*^ZweNtpLX3A;z_QceH#x^EUQzJc>mk-JU6YT!~8Mz@Uc@G z+6$jbZ|Xv=7wFmlh&;;DK=h-CN}_>anBkvJ12(uLA{dgsQ)*$037;M59q2;%yw6{^ zcu^=AyfQdRk-pOjR-rEurf-;6q2AJP3&Ks^ zJ09W=Uv4KCw`Pr$5shGQ7WKbA%|Prj$>Idb+h=VhxoJO1ksnJen5Jcz6-of8Yv)mJ z-n;5xj5J+~{{?>L^vM6VW6G(OhpOe^RQ7S{;5a1BSGVe;c;@GX;38gu^edTeupl%u zb8S$0G>A4Ll}gJ(sfIfpMx|n%;~`h|Zw-U&{xYbgak)3>wRYO)Me*YVS%Twl3o?bj8jyN3`Do*$ zovpvxCQk2nSzEfS>-fS*SNiSD@&J6hpK$bPAwL{!Q=te*{YX6#DjU5I%xye$?ygCg(<$bv~3VSO(r-MoVf#EIK=8T{tSYebQuOtNtz|7EZF**cG<` z8@@(o)XMRzdnTO@tBrftMA9)u)%V(OryQ=zp~8MUK?2q{aSOR$G2o82oqR71Vt|~* zrSK_;P>teQ5fFb@ zpS5JiK5LN}(;NQ3rjUVwe>o%}0s%G5Y*t;yGJI%kqOT6oeBxKYXjf85>UP12fja!u zetNX74k$uMcrHrkh&r`P&fkzo6!oEqa9DfEj-xX#`R+26UT*WRMhS+mZJEJVcH2Q+ z)+U3RpEqesvyH;}aVBAGCM`+UnCz;6Ohq;8#rwJH;0Mz%$oS(+vUL{h48OdKLB8cuG&@UJW}tz&PspbwkPW+9A!tFyp~Xr6LMIl5uIG<_qTbQ4p8KS*u+}V|{-ipv(M7b(XukwUieX zaO)9uaAk4>;)YWqep0&YFw`QcJk<)xLa4=ldB3o_66;&$cq^!hXYCHZp8Y=Rg5m>& z_*I=qRPGtlwJQa2=Ak0wM2$Ik8t>NQyFcIY){itPa=Rs1=lZ)QZJt^NA+8yRR=qqFn+YbJTWD!g*f>v(riMSv^?$p zI(X9XH@V#g0&wAaW;siY<&mzc|G~z^wb`!UqVT{)&f$4X9|L!F%G6wght?^8XVSUb zMN%8jRBv``!k?{kHOz)7R9~lk;62Nx1GN*QS*Seb{mN6eH0NC6)}ITq2rp>tw>G$1 zuMt=KqCXHy(+Km1uFJH%K;bgp=Vbjht;LIME*Y0_y3kTG4X{S5)j>^v4EvhdEBJ>y z3eTqV70@i%b;Fc+Gi4D2O8RQnM(8`$(|Q0acV=HOXd2^sShutoR7M+!4lj?AJvJ(Z z^lfOxBv6reSw4-+zE-*L?i2=X^|Y<=?Y7POb(^@!S)&sn>TU_4o;o{8OGpZs@xGjN zvA&^a#`as3WrjDm{L4hkI8u}8{e~HLDKlBPb!J?Ih&rUJRN|~VIVGD>cp4gxj+rXq z^|OeI51FLfMY>0{NHuT*T*lQM*sG->z(iBzr-V5_Jpai1d%WdIgcA2EJi~^BhFOq6oXBm1VsgPt z^=GNL52w9kal2!#PyWHPYLzeE)W@ttjksvzieV0aZ&fgf=OlHU`JaVHBP~#pO!6bf zRCTN`5yg}N$v!joW$9MbQxVil0jOQQHTKDf&1^t-wOXKvWKc>hR%qshvwWc*37f`i z<3gq@#ApF-&Xs-Rf!qSuse?h*`LLAoK=0ep=Q83>?*F7(7>o2x0>_Yle@OF9WHyKY&IqNfdlU=rz;@fMVX3{I3+Ag#B?iVv5twI$;y2~d) zw9cJIVfo)baHLXs>gGR$E?7`B!U{Kdh`Jw4v4yr40{Lm01LO^d9Wg~7 z-?}v)vI0%pa#3^rNqpvzn~_hKPYz2qFA?p~#U2BdFLmgIPON}}c$`Y2&OSeXW!Tgz|;YXsi8zT%zyiLI)kB234$Q80U z(bZj8`GkmKyD$(*7*^eBLvscX>ZDA%TiSAz=^!eL?<_J-qQdrRDE-jzm%54FCZyA9 zgNd{~yZwHQWUJ@A^>d(=%Gr^abPTydm5<^1to>_1ydwU2`gz_w8SXfrH)|l#LTe91 z{yObGf_snk=xxKhRu-jh(sERwENr#dcw0N*Rtj7ouy@QaTPno`bSa!ti7PSCNrMj9ePqI9TzB7a;6vpS@(Xg;Ogo) z)~$ZYrF$DR_K}8wgqEE+m@im^wlqQKR^J<abB!b^GLe$r?P`?K~^{J+u%C-PlFD zEKV^2r{RK5uLbk#d{uqjK4nB*f=T)#+;IT-tbekvx%5F;<4s zWcXz8C+ZjFPmfXcEVF3jUg_@^)RULP zn-ctYYd>oVBX9FXxy0}fRT>$eBmO{02otSUMn9yhx^rrg)5a#sW}CW*0{Ct3iRCMb z+zH3!umM)b*8gY0~={2Nv0)i=K?k?^f&&X&tJVExX4BmoQdy`?;z;9 zyzhXng+O}%Pel8VIE&{T9E@r?#CB;~0;gKJlK?{)O>1MU)RasjWow~9{F_cGWMi>G zjhj+rl@Ib6ABTnwiVXhEej-(o9aNOhtKI4>-Tw|SL~n|iHMppAeW(wXph9>|w&D9j zGj5?ScHt;RZSP1hU1Y+;)Md~wyKQ>Q$i5^G?EMdIDP+k~^zC5V2zArAg(J#(m`!T9 zbe?o0!0h8#>p^SL>LQFf!$1C?G$k2JVw-IS-*kyZX2IIsUws)0d?9M(tf@I`ljduk z*kogcbcV3*f{$if_6{o4gp}hPwic9}dSIVIW;Ln$tPQTYEeAkYFvFHgv&qWZTu5x{ zfq0WH1ZSy|U*zk%U?F3o3KQ4POpu$^SJjTmd|M~T=(pEOm`dU$GS|2%u!P`c&UJ6( zUs^>`UegiqTE`_a$YpNS2L7m^T#(V7knXMFR~F39Q}3|7fiG1h=F9u5_~0iS1zp;+ zvj`1;4vC4IHQSp`(2-f;%*I!_eCbUb;a8Q3M}6>MM3k3TX#bJF>m#COnBH^9U2H)oz5sL};Ow$EaOEZHYRf$c zv3QMgtuxA*m8<)DCzIvX+-_#=k~sU!KJs6Y7-L%54jr}{JZ)G8tOFEvXvC7hE@gnC zh~g<#(@gUKrd*p@l_|BQR_RNkQk#!S#lEv(pG3@MHQz*IB0J#YECDy@reXg#7;afh z&@~0hninBw8cTnOGwtR7w5Amb&U17m2;nv4sE0g$3MytcE**pKeftizN!l7?YJj>t zYm@9}8l(8CfPsFvFl&sD!+C`?MPgsl&I#;x@NI{2zmA=xi27$dWLAf3LI6{-yn+@o zw0F70#xd4U=qkf1IeaP_<1#3AnIfg#$sVig=Y{@9v?%)TBgGagd%dy&FyVw=0sb(<|5vg5_7o*JW08)>jtr;Z&veuFDa?b$bf4*vgk z5N{0led+J^&cZ2euhNgLVKf9&M*f~2F1i8n3f*m%0&${l=$W_sJuXuv_b1{f+1Kqt zv<1^#rYUslC~z(dVvIIv-yk^qdKnJpMY0e{`Z%f%OW)SQsB+xEAYamO_h+9hddYs@ zSzQjQ9a5D4qoZ&LyC-kfJ^2AV?oaUm>28rD_t5op`3dk@(gv-q zQlYC}>>glXKw;?mJ3lYW*dKA4TfPZ4F+GVkJnN?w^-(8brAln)P6<2Q)LGyg7qgOuqlbn+?)?c7I^ucX@Epc+B8ByHM zJBsy>7{mOAce5Je6d?!K(ropZ*bTXT)Jt@Fw#&9<$gK_piB1i$#7cZ0srqq{{!XHd zo(EcdZ+6#?n};5rHoU@^Exy*UXKj9{!4 z`^5FGl=X^of-Z-CQ!mS2g3Ne)`)g<-(eiyasXFsI`w6g{GHaCjw;*kchuiZ(vQOib z%h~t!g5eWd(*F_tONWNZs@wf8^eg#+%6vOsXVqjJ_1r;LZ}7Vy?|8oa7~Ay9(+#R= zJgB3ZU1~u(6=~H!xRxu`Y;&#VDC?nXKQiBn5|D9Au4UgrL?I%rw^?{@2_Y7-CEthe z+@Hce3}4Eqse~=1y6vSGP0${(eF^Q4M9F|iMn`7ECa>><5!E;nO#KGfW=Y^bBG&|= zvtXmS4^#>N5hXzru54)vlvRBl%crl{6yE6@Whr0l-ap(cd-8}c@R&ABuroy!t+q_* zhX-M%L$XAk+ZExLgw?4NxUO1Es>4of>J8O0r@5AzU7UORPpU|Q?qKESdSPm_%Ko=k z+Cs4Le?-K3?1}yEk1wm7iEa%yL5bieeoe{fZ#=C$`-yZUtHq9>qnGS)&mg>}UU^elR`<*q2-C`>_+Nh@A&?Iz zTBS9C9V0Vdv?GwzrK!_!Ui-5a$%#7O%8d5?2u=_1_M}zbSjxb$vybziNs{M7p?}H_ z^A$O>*kU)d|Je(Exh2ZHH8kcm6qwR#0HZirwl-ELYG8Dk z6!;^ZGNBR6(Q%UR}Y+z)X zL&bSbcRGBW%nV{;A7CS!TMJbf+khP|r^Iyqi?Pk+W80dt5k~Q&0$%-V_`nJ5mz-Zz zBeL?M5PsyV)z^~P#ztI|rp8UBcZ-mfa;s!oa=@z?(xKC@><^Aur`CjQeqm){K)z#5 z=v@EZR?Bd{QPfLzLC;uqLC)CwlrGbv=Pf*>PT(-f8Y%3%Y zzH$pF^kX+3FpJg^{fY`eh2&KweCJu_b@)d^-kftDX*^W*!ki)5l={;$yg_i5-BOMT z+x%6qX|r$jN}3ZkbCdN!olK0?ugw}Ns8UU_s%etC-wj?}hg`1lvIIGWzyNyV>fSRj9u#;%k;A+%gx2S+Q%lkP(7x4zzQoa4Ve zYjcG3_0eJ*46kIQc2t>8n-!f*qkN#JTWQf9P0!65+M}8mH51l_zwuqxh6v0vc>ikl zmjKsIzqmYL-M<3m*fb`qa;X`-D zmq|BCOCG8Mka&#a_!DDtk|Jjhs2Je{81lXjgy)c08yh?U$}-B%s;5W&uulEWEkJn{ zz3eb1x*jEEre3Yt+@iTB)N8#4O0f+8{gC6Md7>2Y=usJ**TSj`9wUas6}}6rgf3=P zwIY@at z6h^!~cCha8gaZidJ(5O#b&Z9pd(2R)ixlcxT25n?esmvGz0q5i-P*p|%ZBcDktWog zM(m+%?>c5@J70XQu~>mX1N) zSTsFT!+kw9K#J!hfCGZ`-;Q2S%@wy$DLrd z*%F34s3>06Z-9{BcUg1!29lJzca=3V>(>;3>fyVFQEx@BX$a?(O7jdEESSNm_rN?T zR0zBE`~v&ne!9mvwy9LZ?X9>b!@qgAMWs)*ZS_g8%k0nScv ztH!%g0*_(Ftpvt;hK1-g9zMGcmtC)(iqU+t>I%6uoAJ&_qlb>&POT{1jf0A`l;WeG z$^Tfp!-^(BJ3+Ha8!j4q{;j^;sM6gO=1hhs zAS$0%RH2sK;w)n=fQH*BwJ?ldYi-x@NuJc|{3DGo|g`OQ{sQ@&14$V>2xK)(2tkE50*RdK}nb z98R71X*RDyj|$UPemhzw<s5L?TtbN`QM zFEKe$C2_2|O>MNtD1ZZf17F}zX;fv&8GfVJMdg{+R~gKQKF@S%+N_k2b|TbKf`ih+ zu<_Dxdfq?3Lv^@nOVgj(A3pgkjOrhF|IBP~>dQXHO1Ak$;j*WW%Y+4aYF~!l%kv{P z$k>xU<%}{#Qj=l>`MX_`-#CEv6C7m5M)hUypKdYA*>-=+x6`vjsJw1l#ZJ;uXY8#t zFs||O)!QEhmkZkOFRUovR5EA!Iu;FaE;t7ENH+eXZl0`qs^cv!=e64NL@vc+iBPg5 zRz>|>D^VCH(Bje^)SaEX;L5lj3(G~4LQvUswY#Vu{M#dPO=m4vVe8V&1b&@!=#j95 zNh{;!mUIj$r=}h;&6yV?8?L){OVc#2TxkmsD*w11-`WzxddAC&b`bpQ+-ts%uol#k zMNnCOP}nv`w#+K*+A-8Sy~xAL2NRz~KfH*fZu7Yv;wiTIZDP&X>v4T4u2JY`wzCCf z0bAy79GNw?hID`UR=}8bL#4wxd%q&h1oR&L>DJa2@G32iP=%x_Ka_4V=-+3_u8m`t z@7HdMq{d_->whXWCxsLzOur0DXJG~Xl5Ba5-ivGUg&VdM5kC2wg(@0Pgy7$wRquPO z7+YH(ZP@GRz9d*vB@Go*s#fy&FuV zQ`8ltO!Xyurt#FUxL22_5YUej<}S12!}WWabNfYF2No*&K*{!BmqD;(j&P z*x)89Fm+#RL~{Ny(@KB;(~t#P6G}QjQ_*9k69eT*H%)gPy0py$_LL6G9l)`KU*WTm zZTm?rn@L7WmzK)W$W9ma2%N(Y>8Ds33uT#5ngILjzRxjp{M(-}a@#G(8srCO?&AVF zBOSwi4g;Q+zZSGpj~;Adq#fdDoKbg}{!$c7X^DLz->29Ep$k$5rs{0sQM&Z5iAj)- zGmEwE|I4b=6&lbL)L_4F4*m2bhj#hmesaIg(tkvqYL0J)VDV}0LmOLu@mzh_>Lqa> zs4a_?625Evr*1*CGC+0}X*=&`1rMk;fIj3ju}Af5IXcKg`Eh1zcN3|MT2nH^g$FIO zQd`+bgDC`j0}jjWLaEq@qN+R!RDwG0qd6I5VVCu5?iD<*S|=x?TZNNg^O z*uWEoPv}s_fK`-VTy!ZLOo2xdImKN0y|_kN~?# zLkPthAS~k#oD#hfkVYS<1^;%xU$ks>;Y*y&Bdz+QijzZ`U@4DWmGqYF zjb*b&=KM0ZZ|dyU8so|DpwU7?G9^|jQH_qx(2J5JVZ)M=K9Tg6qYlj(u*HD3Z_ z#H5j=PhIXlNTo)*Od2)v%*|=>1D>#U;qzA^ae5Qg1HvpX>{%Qsm4#Z(ba{>I;$&P=KQVt_A}pnB+%;8_>y z1g&8L3eR?lSY2M!l1gP7E>mHC_qfnakeDi8xqsl{dy4S8| z5%SV9DW-q4>RCS}h+XuiNpI=B1kcH&0;xs5u!j@MM4itc?_%l84IhmkR@n z)l%uJZegMM1k1cGE|v~AIr?ro9GxYxV!;zdt0CxzbDO4TzD-#nOl0#x&`lJ%0|$d+x*% z5SNa}3`Mx;ChOpEoR45(G89nbWt>j4+a*}oo4e@i+#U@FdJwfaviHo#vAUtG*?_3A zSx+^8$v(c`mW5yL$1x2H(Q&XF?{Cvw;?PXle`lhk0^=2$4j`&!prPb`%~Z8%(?RDC zAr)XWE)k8~AYz+1_#w=s3#X^FR@2*NtX*2rTjua97j1#3CjH=nT13!!4(uk?X7?C> z&FpeA!8J=c?7t|Kp&`36%@A86IM7;{V;h6jP^`m2)@d)y2=%Ea*6iu!?H-=06GCij zzYdDiG%Zktv&m;RTSVfJ!HwVsIj4NBTAGau%jrO#W!NDpcP;KuL3bXaG?$#cbW0OD z`Dipo2*l>jTcV1wi#SC5v9k$}l*%F35>k|Ax139kfyOi)U>+A^JFud*cCLp**arDR zk`3GK&@#jDJV%kL6UON^Rq`=Yn4rvBRdeZbYh{Zd9 zH!wi!v8UQCQ)EM)sQQI!SEuEvX~1qgd8=I|N}{GPB-{G-*{9NWvS;qK;5PG7C4yLH zrC-1Q_r6dpe2uww+(?}K;UZ|y3at#I^pg0d1mj-dLh~%4?gKK^*FU*uGxs#=TJ_2G zq|mf-?w6-{Hx1h#7@Q|#H*D7tU`~;sW4ht~Y|!R&*KkyO-$10=u!fY5JNpVQ(}HX= zK)V7tuC!Bzm4w0>WM?(9M&fDRyd=8yH|^S9weSwIJZ^a$-N=50I9g*(I<=+`Ex%$v z(555xw1Y9C7KgW$?oD%HsBSSd!O}dpx3+a6m3-$|h11Z=PLm3`ODTi3bU#c*OLVHR zL|Dte8_);Y6RHnIpwH>@W&3Fv_MRT)B){C_V9S(oEH@n7Kl2bg3E!65FPe3i*cmSh z*yjx0I~csTE>bo78ik++cJ8*R6={Wl!D;9#qB|vY> zXMs~3QZ<&5#=GQtcFVR~+})A3r5Szd#@Vu38DCWc;=k@Py@)&WNHiyIaX%<`nf=$` z$xYOQd)>;WKR(4IXiyy9jPg}}2KoklbhwXN4*>YQc~&6Y(|B^km%4q`e3ys*3CwtF zs;BWbyL>)!`9(7Lrh$7XO>pX_MQ|;nd9~?JIH$f zE{E;$*!Sy0EIeW8>Wis+BK}TTsU=YS2kIF~LH~2IT^$!!*2MpaKrar7anFbgNYaf{ zlLfz5;5mqDs60tzJXn&JOtf~2#=8U30RpYIf-LTD;l`2gs#R7qr5=}0fAT$|p4A)v z_*u%C>$8Q=tTuDMF&7l4{1Kfkgd_Z<3T7nivB`o;9-iAi`;SPvAq{YWKCuQByG*?k zeE@%B(`ZK9BYEOi@yz%OSXmwZh>FrW{$Mmhs?1awft;y^fk+#S0xuny`h&L5TGtjn zeis(3eaZ4LY4aA#VhPXZGVznZ7zF&(A(ZLQBZ*sht3ltB12Uo5VX<;2c8)zuEmjje zLe09Qw2BP=eV8`2vx)Uuau*6;fErU=v^H((7z^Zog}H11Ls!e%RyB&gx-X%i6LS1_ z!gD~l|p3V##+Kx}K)rS4c8_w3BnF%mWGVxD@& z?)+I+{dS%-sKOZ1NR)8pBH@4RF{vsua%%chz|?gZ6Hrlkvxmo5WA~XZDQ-| zR~6~XQr;{U4E>H5R!YO8PX30S(NOb9yQ&iovRM;RWv03abj!&P;auvhoyfK9ploT2j@RvlnY%l@IKBDvaff}EZ{e0B#neB)j% z$EsfJn(JRDX|=qnG-D)kiK(&Gzsas_*?8ey07Y7?HkPssD#Wzqrr_cWdLne3N#j&~{7r4^~EN zcp~v@+o)>6se8A!5MBBW>TlsDy|njuzTWyyrWpIG|2$E6lMLGOC~9UNAavos@J60-Ee4N=vtb3YpRrE*%z5`v%{pg>C+82*9 z{m`>%$c3~T_u9xB&nIMyEiAb5^LPjJJUF0z|5Q?n9F$BxkZWO3#mdVh+gTj>XcSR^ zYqC1%5c}%ZJyH1&0Zhvf>q3;NM~T(HHfmP8ziEJsZq{MrjInPlW8N26-*b~9$JSVE zxK^#hA?A<@8+4qEO=+9;}f}MZC8fqN-|5-rWGA5g-dCBS49* z{RXa3V^N2nVimZXSu&~eD&Tv} zKH>YFmqCZ?Scql};2!mSMa^p6JGcglK)A7Z+OlyZ|9YhlU3Y1UZ3^Xrlj=3d4?(}L zR{h>`=}{E|K!inu02rCNW(ZrG)Yd&cE1(BXm>9^q(%C&8_uNtAYlGJGEx13Xyv zu}Hog?qIQ;cF!uW;UmG-CelFO8o{DNu z-#Gl}aQGhpza7r|1x<#&67vB@g8fri+MMj=1|2kxf%YOH_p4 zx>S!o`CW5m8HmnG(+p{ourWh|ZX*N1naR|&G+TI7#A%fBkGcR!(<4ME3jV=qmWmzj zxevZj=^ABAo4XE$eA7XYP^VOX}6R zT|-Paa;o&MaZyoVRanhv7RuRkLXx4*R!yWqS5m=;qWO(+)p0Q@h-#!Jj#6O_y!PRV zC0@->Yy!w6N_(|A98(PzSBXt-$`*xG;{J;HA4o)}9?7$JuZO{HM(S~@BHaS3K>;@8 z>JzZ>Mj$9WRNp4vWGl*(mle=72xr|FH-_`fH14HwIhpDS^g#7)sizIP?uHm^H{Dbz z8Y)7UIo*{aH%8$cwp7w1Rb)t!)k}MYBSidOY(~R%P%MTUT~(8@UsIMNJuWK|zP8H3 zI+$2a(e3>C3~sIi?yy_+&$4II(pDsF6R};)Wf>o}7W_pH(V`b6O&q!+n+k)(XQZiW zha&J)G5yLrYNJw`JuOaMN{>jC;%|FG3ABnrI9QSvCLyWZv(a!}e@YH)f}vIA4-6ck zSqM|26GJ}hl#~kD8f=0n+YRU2y0Qj=(BfUAkd-t=8Q- zvqOjr9Dmhv_?iCzk$g|@{uji}H9=nz*F)aq_kB)3e+MuD38~Tu=!=|2k=|2I{{VDq zq`JX5>@IET*C7NQ7YLZq66x6nw&|cxL}FX1-A1=4#)1@5X66lb~0+1n%HvKjph{GmD&Xs?&rQE`UcsB{&3C{`U;RiiNt z_Bl1}f}GP{75gp`=G}3D4cQg|&$(Qx1R(Q4QSmMaxt$6xX>R0dvBs@fh9pA5YlEH4 zd!PcbZlymF#n0wL*>_HHfQA+WxSqFqdnt4v)1g9D9}IB}UdhJeRL&GVoXBzNEva!_ zNLC&Xm{o8Nii~Hqra(HZKzSM}PdKHf&Xq(n3;s{5C<__p!pH`5YPhX1_&pSInN6iL zSd>3vX+Z9rEOg8<+|8(TLD`j$`dX`!*r{Vfd30FyKw((bj#z}_ ziCn6k^BhWU8!2FckZ3_a6jLRj^iINkE--dIRwH#QiKrih(e#42K(&ks&%`c!q@Xby zDX+vOq8gdNCEl%*zRFr1vKY@5x}I4jVY42Y4r*(DCI*vl1tL){L5E2(qAhnij8Qr- z_YQM8yQev|7j1LXDZk-JM2QLQhXVx{-N71kmDC_qWm9QzLkY#NO)QA}sB9LCeMz7m zBOND1C!A6j#6J#=80}MVnE?e0qAFA?Ss3sPqdR2QHug@$vuxESNYOV?chOYZOQMxY zm>+PZ$4{~p=n;xlCi*ETjZrvsms?=93HW}CBG36p+$Zo9Yt|B(^|RxC&Hb96T~w)3S%zwMNR2{4hO9omLb6 zl7YblSawniMyo(>u0UM+s0p=OF1o9(CLKf67Lux6Nkp&)fQY+~hEtoJwL^S@5tm%Y zRT3F==el2XAV`p{-WSZJ_E)&FgKM{{24(GUy1!Lmn?=~q{Hjca$w;2*&-8?F#v3b8rWPfk+owF7(I|YdIcaot^^7Uc;#&L;I-4@^KjTKmw zn<`0XeRAY?vXgWR3!Q3H`GZENFuRC3ke1J-2icmPloo7SVE7B0BV-MnV<+KYmqU9d zoG|NEC^fvG)zuQ(;#6v+cPX_{K9H`cb3N1&p~y@dD%}ec4$f!XA~lgKbk>W)E_8h| zqTXF9t@7@MQlVkDR|PK(Zs@-nnb9)~Q*_rE&?d--+Ep)oCe15(D4X1Xj>g3~r%%c* zFajf#%5iOASwnl1x)U3s(i(YMH0W0s21ThhLx)J6Wzv{fDY1*DMbH`r8J?=rQBHT+ zHki}@0JT*};bH>akb6Vhp;kcSe{PHA6C3J=E9CO1Yntu%R#FIDF!ob^y%XNY5Ofm@ z2o7@vHO&F8n9!A7;zDl}96n#Vs$TBC8bwUERC*G3M-jC2RX7AN+rt+TQezu6o9wxP zSN{MCmaD5ZbByV5Hwo^<>=1KowHl)9HAPJ(45M3#^57#jD-pj@SiL1b_Jsb66zG2o z70s#7kG@}I>tcONbp->5U1EA7M3FtvpfSy`L<@cwHDFS!I=Hz)6=`H3^6rM{H{Czd zMMFi&KxHt#Rdoeof}K1UP=RjJuL`$PY=aLWRU4{aaE^yX!^7^bQMii%%#9T+C*grG z>0c;i$;4FQ7DlTL*RKA{iHcxbvOf+3*km0-b#~PDLk)qWBj9B8L>a?RW+a?o~ne(?sSNa;?6o13-x= zN1{7|f!FYiN8wTlCKQvpA*2JUhQi&(6LwYU;VrlFzjAA;mlYQ5j|}M%Da>$q*vhQc z7DPX!=!>3V(Yb|2_IAivw?*=@t%bc)n&F1%vTFfzki&DdKIxBr%m_|?A;da1!!7)6 zcc>DPLqMT4b?Tb;b8ot##6_IGP|d~sL2dC^ze1J&F#)ZX0xJJ6&GswHP*9 zi3*G$nJPuRibSic9L-m1VwNr>r zCFL|y=8LBm)YeFT>Hh%fm}%w+;IYod-8xIaPKtI!c9bdB>Z>VTP#O%WY#7g)N^cBW z<5Vb+%ybKp#}4&qLYz2&0Mw`vQ03VXYHW;JC#OVS*!`=Jdw4Lh zJ#7VGFvw;5_#os{k?Nh0WCB*rM4tx@_t6J@KV>rtRg8oh^Pz8a8t7@1=7Kt}mopi0 zF%Lv0`X=-6-DK=D4)O(Is#T|D$#1#hB+oG-2 zAnW+=?yuQ$N8T30bXeljgDG2Uz{7D(Jh|q4B?kKp=m&XcUXUY%B9wH`!0D2=YQcGugqbKq8ZAQ zB|>vfikXxuAdXijaa=%-Rfx)FOqf7oJ*Q=(LTE72Dqr&(ZIwT9Vu{PTc+%*DnRV3V zVthfswZcN+V%ySmK;sVHGBUN%y_2VPPQDA~G96X(s4Xg6?1Nn_b(EqH_)V&DE{>_^ z;aUZgu(_awad8}C$N|fB9_WTh>YO5BJF=_^Uv*3n>Hh%2b|$FP3N_IekCwthx{Ge7 zCiP6i3GcRnZ0xCR)6b>0MZ!*HmjzV*dnQ){aEmb+M9Lw=zQ<@zd>^RlivYFJ;sW;x zO?l;f^(uASPYZDc^-jWc9IP{pG2`O=Gp%uTMmX`041=6lQS0^ zM?+*-?#aACR*T{|lP>H+#o4X%RdC34(BK%Z*a&bnvoevJtzrBXFw?mNsK`EpG5$e$VIOpu0fw5@ykl55XQ<5XUT^Y0t8)mK{ga!r8%}OK;5Sz)K7rrHzrYp z)9Nsu+cm}$wJVaAw)>S!ZeS;TMj&s{6{BUscV*5zG_I_bhxWI zK(r3XQDN?bh&1SnexMXi7%IXCro{Mdls>Mi)Rh?yA;Ug6VJqSA*~x?n?iBbfWC-!| zsc}>7l$)C?^+!rov_K~^=R%wD7-r&8!f|QW$UP+)=$v(3PvJWg9JQ!nwgydjf)Hz_ zt06Ydn+ud&W!KKxb1Qhc3N=pMGABgj;hak4zf?yqs#_BUGLq?-Q05)s0Qz?ES$whX zu^o2Xx^!HqO`3^?hm2^Ras2q8(i3U)-?n{nofWlK@Y#ID%u2e0bkgpMl2o02*V5x5 z4K+rp8~mp-9@j1|3x+4CXmY=kWkZ}qU&R4z)%ng!x`4TrvK|U-w^bDxf}2&ACLG zI_Ij@YPoKqn##SGDDYWMCS8`$ge!IS*$=BlduXKD7M@|v3E%fAbtcP|U&U`Gkc+*P z_#i3EnQ{Y=FnkpWRJxstff-vp^3W?L#^?=`ViReQui&zxVdbgC(FiHfBf7(HbsmUL zey=}d!g-}*f76iB(5E_TB%hQZd{$KBH@Waam13PF0V@#PgyFVQ z6eEUHU8cETGXDUVhMF4M{X=BdJJaA7>yQ}=>d{A^&Q3wwK~%coJ9ve$Xm>@Up9QIc zx?}Q-9Z(;2#pV&;ve}Y=aJ0u&Fr)3@0H*cwHX5(F@jz7{2g+}b;oS`7%j5#Me#&$B zk~?=;r|N3>h7AE7lbxwXIHlCWxmWNCee#fqAE2`5$Wt|6qS|bkNDiLxtuqjba1JB{ z4$`mVQ z$_8+!J%X)+u45~BWL;3`MaBYaF6+C&%~%2xj0Fp>MLVa0b^QgG&Tdk4gx}qNWns;9 z;BB{Mp(j;1fQyc))qvZlL=s?ZzGXU&>GN|W*}(ucx|4j0{Gm+BCH$gM!+#2%QWXxM z{fc-h*-D=jY^=VbHOg|jhM?O&@`JQK0Nz$yqT|=P;lHvD7V^1eQYzf|VKwaJ5aE$| zvJDykR z2mt{A0Y4%5;&Cc()nbm|r^?oDD$KR*V-0SV5g8 zMp$jbxB}jwr=Df*s=4mQ_s-TsLw*+?vji(VaHjGx*vK$a*12*v(Ow#&5Rq&~G8XTgP z8!(hw4x%f9@1L5L^W)=f&C~jkXdP5yHBpIqYrQ4Q86|ntM!*A+m0o<2nGo0)CgsU6 z<|C5pOh_B^F{N$=Lphc=*QsKOL^%qRiQ=IL0ei$*HMq2lWj)()Uu7cRJq9wTLLYjVZXKRU|q z^(@U%9!2!Q1C6lJDF}pnKy303&ry(b`b3o948f>^pc`dT+vT1m*if~Ygy!fd)kcGu zcI{hUrcTk5f+=9#n3>56>}Bj7z8PaNE~ZDv<{`H<>>4r@c)lT#Ms8Rg6BCH^ zr0FHfyM-zXy|aC^5Y6y|VD$c{v=v@qrgPk~5qp&(K9WBs-yaueN+i{WSz7`XvSUjh z%waFSn3(~ng=k)q7sBzTDT-~yM^_DVDI*66;u!(%saRdqXjMy6mTf9o84(^KvuuUp zBCV;!&=R?Z{7qEHA2!bv+|R*| zlER}>kB-oez{ti|gL&kcge+uc*4ha#PXQt(Dx)ii$bG?BCZC9^m(03;D;oGNi*X!P zsS6jXlx>NbZly{r#<^!BdEyQJGA7%J?Gl*f7LTb5Fo*I>1wl0_5TU3Z2p`NqUpj%e zD)Sz-b4|sWxP5udaE()R_>>5vn3Wp%c#acxx$!Jqv}jmK+HISj+l1SvJ|@67D++4R zSrd(AoG@FU>NiC?MpN2?p9$xZ1*j%lO#$~sDx0>UPKKKKz9|^l;Jvx4%?MT)ym=<8DCH$<)G#ewp~Tq zUZrlQsEbnXou7$^Y~V_pXy#%qQ5Du-GSiZn-C*2M)d7eaq65TMAkh&c2Cf)Sv$>*v zm?6WOAt^Z_vSg;sfyZu7l1s$aVZCFZ26AT$X?v~u{<0Q=DcEWP-dY%1fKu&vFnk*keu!MqTw*XC;RDpn(~ zjlIQNahQR-4b#lCw8B8rw4C-!?}MLpGjF`vALxuvS;G|jm76XJ6LE|S)x5y|%4mC* zS-JR$2RVs(oON)KoN5a-W4Ta(9wjvp?_MVCMaaZq56)FGxn-t4=0R=|3ShiluuEIP zbK}$i@hP(NWN>HPR?*g#4c_MO5QQp5tztc^%DDmb71`=3^W1ZDl3eD(prXr zfPWF~7Ts54QukbMa+pWNQ=51v_7-4VA4FGw;sb0F_c+JXFdw{|Xungznk9<_`?*vL z;RjY<%v7b`?jo^H>H}|yToqx>LeQ*{7Aq`T#Xfn0Q0t7!aS$rls`WE!31vbPgt5}2 zRR(Uq+Fw&W^AQwW5bEk8?M`PBniNeCI!!^dZoGJyMN*}xW)M(QmOHTY8E+f&%mAqX z4oWdCxpA*iX~Z2aI)G&co$T{66=LN{YF)6TTO;YBRJDu|qcsq%-P{W=I@Gu!N0&2C z$SH+m+lC_s>aaV*I4CaSE1tZaYjigK_18X}GMa=WOnl>RTm?6AHNLK$(JV zt!`MZV5|gv?^HS-ND4#@i26?=1?di?-KUt zh;ImkWFJp(0L^$}0N`e4ZCO1^G26sjl{1&GBPlg1)OZ#S=1*_Ix8Oh=;@~D*Ko%RL zj%7MmhjN$QYHGd(*`eVD#?NmTigjSy5dppxPplknWzIY_tZdmhlt*j z!gDBVB|%c94khXhtn=fjE3fKSLWk}GJK4l^zlao@uf#D*Dhvh}#9jiFVYmcU&q-6~ z?l@#sRdI)C8Rikf8J6M(Ro8H=^wwj%47Dk4%jOe`2+maCt_=~GKkAe|WiI6~31lVw zX@Q6+<%m$+x_1Vk+^A}56_s+8bzD3}uutFh4wI0nO?;#wlGlK zmj1q?SY8-;wx$B3CDVy>3;=U4D;B;Zm1)K19;8@xFG3ex89@kY0H99|Okwaqnc@TA z##luJzm)0I$5Mw1;wio*{{Z50!KP#uB-5!^)ZD$xxPmZ67MXS2D!w~oOD~DTIrwL{ zMN-THSaAsF7r0R}IvyZLw0N&^rs`diUko4>?CtS6n%Uw!tjGaq2xZfVfl%n0f6*uf*O*ott@8_wCGHV=DQOlq zX_mQ!dc4yB+Vc$an`b9Iz zabV@XFxUke}p?6kh zMv3ANyATI4NWgb>7qMKPV@E26=G{i3n_;-^eB9y@#_E_|>RSP`xnQ!w**6nzYL6B| zQ;74Yh^=~Y67yKN@c5Q+JB?MwE^VCUbsGKlN{59@+$p zJ3+Dt2F7uS^s+Y>Cj3{(b=&~vq6??W9{}7a+jywz>xK<*vRynPl{tRNR#oAJe|zFt8hLAq#5#%AL<_%Pf#%*hChHuvK(-EfwUi%&4-iB5rw{ zLtu0KMMk26v;qPJ_KYf7%srV<>oHvY%leg>eY{ERfg3T6WYI_8rRUsQW9-vX&I$SgQX3DQn~4 zH_0di9knx}{ji}%4}}tnlvJt88CXr$U}%Q_0PP4A4b~&Fyu??AW_XGg*AG(jYvv8W zw`?dD#}e$kR9nC10j-W>26fZKc5r7ClGC41*;5q80wpFP9U}vsTqIrGGoTXWBC)QgshgELf{3{sKb`!+yx1d(*pAg%_1uJsx83(0PrJ~ zO6A<+7=d!LP?Hf0+(}^EL)s$BsOA|7a`(dq{mnq>+#~>WK#Z?&GO-NDbAKGO8WA=n z%35sn`j?l_0T#utsOhWeQ-{vxrt(6=>Rr~>K4==YWC|Qn5LibEFCvcj5)`LU+@~wb z6m&&M^KdF&&$b2}LlscHFaj3B&Y+wJwMA#-Zao1lGcM0sfadU#OLKUcSwmgLOqB;{ zA!uqgx@ryUK*yZHP|<9y=kprs9*niAsDDfolnBPt)_d}B%FH2Rf9_L?Hh^YF1-`O^SY(HY zY%3LU^)keytG|o9U4&9TBDzeCrZGI!+XN!iyKQp^9qLb zEqZ=s%aF`D2PfF^9oD&ej;nmUz$#j9xcZfAUM>ex!I;Z6)XY-uWg5h2WmxK)Ja-gg z@$n8|;MAz?8_@{lB^NBA%2y=5HD%hHBM(P)scmd6;uFC;m4pS;cj69(P2x}ufoAi> zb+|C-Vl6?pd`k!cTUx$gq7Wv&5AzR-n*s@KR}i}?Tt+r$mRwdYu`!b{x#}%qdVI^R zRyPGNEyKwuRh8+2BW&l0F*HYw%kwuA_wmommTM8!z{SSe513{G2qT1I?%Lm8CB+7& zsOA;k#th@WJg``6!=gEGMZ718rlH#%u7#q@0K>)0pOK;@-P_M(sV~aBOVes_bW8Yp zC7C=NupGLz=4`IF+*9@l#*lxgOv|G8EjLU~V0PX3idMv-t+0qLQM|Y}jY^R!!Woqm zqoQWl4(68t6Q)|P774 zCT=9UT=uzI)ltXPEb+9D0%oE%$Rz3Vz5$DMbxb6EbTB=YmNzN!yHSsV_Za- zo>39QlMA90RUL?6sz1eCvk_6;nijgnjG%*b(`-_k9ZCkoh$xGeJmsJJi9`ZOi7JOz z`j>$BEanQ;un3nq^(z5kqO`+w7H+v7<@w!h)k66@DXWK8CZmCcUZa3v)oboC2Tqxx z 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%0Dj=Y((_QWRWt4tu+Pk3OvgaTswJ+3 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
5@$UyIOa-q<(TnOnn3F2?%yeqBkP`2Gr#~Z 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 literal 0 HcmV?d00001 diff --git a/CustomPresentationController/CustomPresentationController/Base.lproj/LaunchScreen.storyboard b/CustomPresentationController/CustomPresentationController/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CustomPresentationController/CustomPresentationController/ContentViewController.swift b/CustomPresentationController/CustomPresentationController/ContentViewController.swift new file mode 100644 index 0000000..ba41a38 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/ContentViewController.swift @@ -0,0 +1,78 @@ +// +// ContentViewController.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 05/11/2021. +// + +import UIKit + +class ContentViewController: UIViewController { + private let titleLabel: UILabel = { + let label = UILabel() + label.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + label.numberOfLines = 0 + label.font = .systemFont(ofSize: 20) + label.setContentHuggingPriority(.defaultLow, for: .horizontal) + label.setContentHuggingPriority(.defaultHigh, for: .vertical) + label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + label.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private let dismissButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Dismiss", for: .normal) + button.setContentHuggingPriority(.defaultHigh, for: .horizontal) + button.setContentHuggingPriority(.defaultHigh, for: .vertical) + button.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal) + button.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let contentLabel: UILabel = { + let label = UILabel() + label.text = """ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam malesuada vulputate mauris, vitae tristique lacus rhoncus id. Morbi mi leo, scelerisque et faucibus nec, egestas semper dolor. Etiam rutrum diam sit amet quam aliquet, vel vulputate ex blandit. Nam porta pretium ligula vel rutrum. Cras ultricies purus sit amet iaculis congue. Fusce pulvinar velit semper dolor sagittis vulputate. Vivamus ut sapien a tellus finibus pharetra. Sed at massa turpis. Nullam venenatis sodales nibh vel tempor. Cras pulvinar dui vel justo egestas, et viverra felis tincidunt. Suspendisse luctus elementum est, et venenatis est rhoncus at. Nulla maximus elit nisl, et congue nisl aliquet id. + """ + label.numberOfLines = 0 + label.font = .systemFont(ofSize: 17) + label.setContentHuggingPriority(.defaultLow, for: .vertical) + label.setContentHuggingPriority(.defaultLow, for: .horizontal) + label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + label.setContentCompressionResistancePriority(.defaultLow, for: .vertical) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .systemBackground + view.addSubview(titleLabel) + view.addSubview(dismissButton) + view.addSubview(contentLabel) + + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + titleLabel.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16), + + dismissButton.firstBaselineAnchor.constraint(equalTo: titleLabel.firstBaselineAnchor), + dismissButton.leadingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: 16), + dismissButton.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16), + + contentLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 16), + contentLabel.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16), + contentLabel.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16), + contentLabel.bottomAnchor.constraint(lessThanOrEqualTo: view.safeAreaLayoutGuide.bottomAnchor) + ]) + + dismissButton.addTarget(self, action: #selector(onDismiss), for: .primaryActionTriggered) + } + + @objc private func onDismiss() { + dismiss(animated: true) + } +} diff --git a/CustomPresentationController/CustomPresentationController/DialogTransitionManager.swift b/CustomPresentationController/CustomPresentationController/DialogTransitionManager.swift new file mode 100644 index 0000000..ef2d6f9 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/DialogTransitionManager.swift @@ -0,0 +1,190 @@ +// +// DialogTransitionManager.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 05/11/2021. +// + +import UIKit + +// MARK: DialogPresentationController + +final class DialogPresentationController: UIPresentationController { + private let backgroundView: UIView = { + let view = UIView() + view.backgroundColor = .black + view.alpha = 0 + return view + }() + + private lazy var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(onTap)) + + @objc private func onTap(_ gesture: UITapGestureRecognizer) { + guard + let presentedView = presentedView, + let containerView = containerView, + !presentedView.frame.contains(gesture.location(in: containerView)) + else { return } + + presentedViewController.dismiss(animated: true) + } +} + +// MARK: UIPresentationController + +extension DialogPresentationController { + override var frameOfPresentedViewInContainerView: CGRect { + guard let containerView = containerView else { return .zero } + let frame = containerView.frame + var width = min(frame.width, frame.height) + width = width * 4 / 6 + let paddingLeft = (frame.width - width) / 2 + let paddingTop = (frame.height - width) / 2 + return CGRect(x: frame.minX + paddingLeft, y: frame.minY + paddingTop, width: width, height: width) + } + + override func presentationTransitionWillBegin() { + guard let presentedView = presentedView else { return } + + presentedView.layer.cornerRadius = 10 + presentedView.layer.shadowColor = UIColor.black.cgColor + presentedView.layer.shadowOffset = .zero + presentedView.layer.shadowOpacity = 0.3 + presentedView.layer.shadowRadius = 10 + presentedView.clipsToBounds = false + + guard let containerView = containerView else { return } + + containerView.addGestureRecognizer(tapGestureRecognizer) + + containerView.addSubview(backgroundView) + backgroundView.frame = containerView.frame + + guard let transitionCoordinator = presentingViewController.transitionCoordinator else { return } + + transitionCoordinator.animate(alongsideTransition: { context in + self.backgroundView.alpha = 0.3 + }) + } + + override func presentationTransitionDidEnd(_ completed: Bool) { + if !completed { + backgroundView.removeFromSuperview() + containerView?.removeGestureRecognizer(tapGestureRecognizer) + } + } + + override func dismissalTransitionWillBegin() { + guard let transitionCoordinator = presentingViewController.transitionCoordinator else { return } + + transitionCoordinator.animate(alongsideTransition: { context in + self.backgroundView.alpha = 0 + }) + } + + override func dismissalTransitionDidEnd(_ completed: Bool) { + if completed { + backgroundView.removeFromSuperview() + containerView?.removeGestureRecognizer(tapGestureRecognizer) + } + } + + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + guard + let containerView = containerView, + let presentedView = presentedView + else { return } + coordinator.animate(alongsideTransition: { context in + self.backgroundView.frame = containerView.frame + presentedView.frame = self.frameOfPresentedViewInContainerView + }) + } +} + +// MARK: DialogTransitionManager + +final class DialogTransitionManager: NSObject, UIViewControllerTransitioningDelegate { + func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { + return DialogPresentationController(presentedViewController: presented, presenting: presenting) + } + + func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { + return DialogAnimationController(animationType: .present) + } + + func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { + return DialogAnimationController(animationType: .dismiss) + } +} + +// MARK: UIViewControllerAnimatedTransitioning + +final class DialogAnimationController: NSObject, UIViewControllerAnimatedTransitioning { + enum AnimationType { + case present + case dismiss + } + + private let animationType: AnimationType + private let animationDuration: TimeInterval + + init(animationType: AnimationType, animationDuration: TimeInterval = 0.3) { + self.animationType = animationType + self.animationDuration = animationDuration + } + + func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { + return animationDuration + } + + func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { + switch animationType { + case .present: + guard + let toViewController = transitionContext.viewController(forKey: .to), + let toView = transitionContext.view(forKey: .to) + else { + return transitionContext.completeTransition(false) + } + transitionContext.containerView.addSubview(toView) + presentAnimation(with: transitionContext, and: toViewController, animating: toView) + case .dismiss: + guard + let fromView = transitionContext.view(forKey: .from) + else { + return transitionContext.completeTransition(false) + } + transitionContext.containerView.addSubview(fromView) + dismissAnimation(with: transitionContext, animating: fromView) + } + } + + private func presentAnimation(with transitionContext: UIViewControllerContextTransitioning, + and viewController: UIViewController, + animating view: UIView) { + let finalFrame = transitionContext.finalFrame(for: viewController) + view.frame = finalFrame + view.transform = CGAffineTransform(scaleX: 0.2, y: 0.2) + view.alpha = 0 + let propertyAnimator = UIViewPropertyAnimator(duration: transitionDuration(using: transitionContext), curve: .easeOut, animations: { + view.transform = .identity + view.alpha = 1 + }) + propertyAnimator.addCompletion({ _ in + transitionContext.completeTransition(!transitionContext.transitionWasCancelled) + }) + propertyAnimator.startAnimation() + } + + private func dismissAnimation(with transitionContext: UIViewControllerContextTransitioning, + animating view: UIView) { + let propertyAnimator = UIViewPropertyAnimator(duration: transitionDuration(using: transitionContext), curve: .easeOut, animations: { + view.transform = CGAffineTransform(scaleX: 0.2, y: 0.2) + view.alpha = 0 + }) + propertyAnimator.addCompletion({ _ in + transitionContext.completeTransition(!transitionContext.transitionWasCancelled) + }) + propertyAnimator.startAnimation() + } +} diff --git a/CustomPresentationController/CustomPresentationController/Info.plist b/CustomPresentationController/CustomPresentationController/Info.plist new file mode 100644 index 0000000..0eb786d --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/Info.plist @@ -0,0 +1,23 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + + + + + + diff --git a/CustomPresentationController/CustomPresentationController/MotionEffectsViewController.swift b/CustomPresentationController/CustomPresentationController/MotionEffectsViewController.swift new file mode 100644 index 0000000..38595d7 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/MotionEffectsViewController.swift @@ -0,0 +1,96 @@ +// +// MotionEffectsViewController.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 09/11/2021. +// + +import UIKit + +class MotionEffectsViewController: UIViewController { + private lazy var stackView: UIStackView = { + let stackView = UIStackView(arrangedSubviews: [ + topLabel, + middleLabel, + bottomLabel + ]) + stackView.axis = .vertical + stackView.distribution = .fillEqually + stackView.alignment = .center + stackView.translatesAutoresizingMaskIntoConstraints = false + return stackView + }() + + private let topLabel: UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 20) + label.text = "I move with motion" + label.textColor = .systemBlue + let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "layer.transform.translation.x", type: .tiltAlongHorizontalAxis) + let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "layer.transform.translation.y", type: .tiltAlongVerticalAxis) + horizontalMotionEffect.minimumRelativeValue = 100 + horizontalMotionEffect.maximumRelativeValue = -100 + verticalMotionEffect.minimumRelativeValue = 100 + verticalMotionEffect.maximumRelativeValue = -100 + let motionEffectGroup = UIMotionEffectGroup() + motionEffectGroup.motionEffects = [horizontalMotionEffect, verticalMotionEffect] + label.addMotionEffect(motionEffectGroup) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private let middleLabel: UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 20) + label.text = "My shadow move with motion" + label.textColor = .label + label.layer.shadowColor = UIColor.black.cgColor + label.layer.shadowRadius = 10 + label.layer.shadowOpacity = 1 + label.layer.shadowOffset = .zero + let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "layer.shadowOffset.width", type: .tiltAlongHorizontalAxis) + let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "layer.shadowOffset.height", type: .tiltAlongVerticalAxis) + horizontalMotionEffect.minimumRelativeValue = 100 + horizontalMotionEffect.maximumRelativeValue = -100 + verticalMotionEffect.minimumRelativeValue = 100 + verticalMotionEffect.maximumRelativeValue = -100 + let motionEffectGroup = UIMotionEffectGroup() + motionEffectGroup.motionEffects = [horizontalMotionEffect, verticalMotionEffect] + label.addMotionEffect(motionEffectGroup) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + private let bottomLabel: UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 20) + label.text = "I move with motion" + label.textColor = .systemRed + let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.x", type: .tiltAlongHorizontalAxis) + let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y", type: .tiltAlongVerticalAxis) + horizontalMotionEffect.minimumRelativeValue = 100 + horizontalMotionEffect.maximumRelativeValue = -100 + verticalMotionEffect.minimumRelativeValue = 100 + verticalMotionEffect.maximumRelativeValue = -100 + let motionEffectGroup = UIMotionEffectGroup() + motionEffectGroup.motionEffects = [horizontalMotionEffect, verticalMotionEffect] + label.addMotionEffect(motionEffectGroup) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .systemBackground + + view.addSubview(stackView) + + NSLayoutConstraint.activate([ + stackView.topAnchor.constraint(equalTo: view.topAnchor), + stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + ]) + } +} diff --git a/CustomPresentationController/CustomPresentationController/SceneDelegate.swift b/CustomPresentationController/CustomPresentationController/SceneDelegate.swift new file mode 100644 index 0000000..4aa873a --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/SceneDelegate.swift @@ -0,0 +1,58 @@ +// +// SceneDelegate.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 05/11/2021. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let windowScene = (scene as? UIWindowScene) else { return } + + let window = UIWindow(windowScene: windowScene) + window.rootViewController = ViewController() + window.makeKeyAndVisible() + + self.window = window + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/CustomPresentationController/CustomPresentationController/ShelfTransitionManager.swift b/CustomPresentationController/CustomPresentationController/ShelfTransitionManager.swift new file mode 100644 index 0000000..59e2765 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/ShelfTransitionManager.swift @@ -0,0 +1,207 @@ +// +// ShelfTransitionManager.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 05/11/2021. +// + +import UIKit + +// MARK: ShelfPresentationController + +final class ShelfPresentationController: UIPresentationController { + private let backgroundView: UIView = { + let view = UIView() + view.backgroundColor = .black + view.alpha = 0 + return view + }() + + private lazy var panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(onPan)) + private lazy var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(onTap)) + + let shelfDismissAnimationController = ShelfDismissAnimationController() + + @objc private func onPan(_ gesture: UIPanGestureRecognizer) { + guard let presentedView = presentedView else { return } + let translation = gesture.translation(in: presentedView) + let progress = min(max(translation.y / presentedView.frame.height, 0), 1) + switch gesture.state { + case .began: + shelfDismissAnimationController.update(progress) + presentedViewController.dismiss(animated: true) + case .changed: + shelfDismissAnimationController.update(progress) + case .ended, .cancelled: + let velocity = gesture.velocity(in: presentedView) + if progress > 0.5 && velocity.y > 0 { + shelfDismissAnimationController.finish() + } else { + shelfDismissAnimationController.cancel() + } + default: + return + } + } + + @objc private func onTap(_ gesture: UITapGestureRecognizer) { + guard + let presentedView = presentedView, + let containerView = containerView, + !presentedView.frame.contains(gesture.location(in: containerView)) + else { return } + + presentedViewController.dismiss(animated: true) + } +} + +// MARK: UIPresentationController + +extension ShelfPresentationController { + override var frameOfPresentedViewInContainerView: CGRect { + guard let containerView = containerView else { return .zero } + let frame = containerView.frame + let height = containerView.frame.height / 2 + return CGRect(x: frame.minX, y: frame.minY + height, width: frame.width, height: height) + } + + override func presentationTransitionWillBegin() { + guard let presentedView = presentedView else { return } + + presentedView.addGestureRecognizer(panGestureRecognizer) + + presentedView.layer.cornerRadius = 10 + presentedView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + presentedView.layer.shadowColor = UIColor.black.cgColor + presentedView.layer.shadowOffset = .zero + presentedView.layer.shadowOpacity = 0.3 + presentedView.layer.shadowRadius = 10 + presentedView.clipsToBounds = false + + guard let containerView = containerView else { return } + + containerView.addGestureRecognizer(tapGestureRecognizer) + + containerView.addSubview(backgroundView) + backgroundView.frame = containerView.frame + + guard let transitionCoordinator = presentingViewController.transitionCoordinator else { return } + + transitionCoordinator.animate(alongsideTransition: { context in + self.backgroundView.alpha = 0.3 + }) + } + + override func presentationTransitionDidEnd(_ completed: Bool) { + if !completed { + backgroundView.removeFromSuperview() + presentedView?.removeGestureRecognizer(panGestureRecognizer) + containerView?.removeGestureRecognizer(tapGestureRecognizer) + } + } + + override func dismissalTransitionWillBegin() { + guard let transitionCoordinator = presentingViewController.transitionCoordinator else { return } + + transitionCoordinator.animate(alongsideTransition: { context in + self.backgroundView.alpha = 0 + }) + } + + override func dismissalTransitionDidEnd(_ completed: Bool) { + if completed { + backgroundView.removeFromSuperview() + presentedView?.removeGestureRecognizer(panGestureRecognizer) + containerView?.removeGestureRecognizer(tapGestureRecognizer) + } + } + + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + guard + let containerView = containerView, + let presentedView = presentedView + else { return } + coordinator.animate(alongsideTransition: { context in + self.backgroundView.frame = containerView.frame + presentedView.frame = self.frameOfPresentedViewInContainerView + }) + } +} + +// MARK: ShelfTransitionManager + +final class ShelfTransitionManager: NSObject, UIViewControllerTransitioningDelegate { + func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { + return ShelfPresentationController(presentedViewController: presented, presenting: presenting ?? source) + } + + func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { + guard let shelfPresentationController = dismissed.presentationController as? ShelfPresentationController else { return nil } + return shelfPresentationController.shelfDismissAnimationController + } + + func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { + guard let shelfDismissAnimationController = animator as? ShelfDismissAnimationController else { return nil } + if shelfDismissAnimationController.interactiveDismissal { + return shelfDismissAnimationController + } + return nil + } +} + +// MARK: ShelfDismissAnimationController + +final class ShelfDismissAnimationController: UIPercentDrivenInteractiveTransition { + private(set) var interactiveDismissal: Bool = false + + override func startInteractiveTransition(_ transitionContext: UIViewControllerContextTransitioning) { + super.startInteractiveTransition(transitionContext) + } + + override func update(_ percentComplete: CGFloat) { + super.update(percentComplete) + interactiveDismissal = true + } + + override func cancel() { + super.cancel() + interactiveDismissal = false + } + + override func finish() { + super.finish() + interactiveDismissal = false + } +} + +extension ShelfDismissAnimationController: UIViewControllerAnimatedTransitioning { + func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { + return 0.3 + } + + func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { + interruptibleAnimator(using: transitionContext).startAnimation() + } + + func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating { + let propertyAnimator = UIViewPropertyAnimator(duration: transitionDuration(using: transitionContext), curve: .easeOut) + propertyAnimator.addCompletion({ _ in + transitionContext.completeTransition(!transitionContext.transitionWasCancelled) + }) + + guard + let fromView = transitionContext.view(forKey: .from) + else { + return propertyAnimator + } + + transitionContext.containerView.addSubview(fromView) + + let height = fromView.frame.height + propertyAnimator.addAnimations { + fromView.frame.origin.y += height + } + + return propertyAnimator + } +} diff --git a/CustomPresentationController/CustomPresentationController/ViewController.swift b/CustomPresentationController/CustomPresentationController/ViewController.swift new file mode 100644 index 0000000..bc8c04d --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/ViewController.swift @@ -0,0 +1,199 @@ +// +// ViewController.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 05/11/2021. +// + +import UIKit + +class ViewController: UIViewController { + private lazy var stackView: UIStackView = { + let stackView = UIStackView(arrangedSubviews: [ + presentVisualEffectsViewButton, + presentMotionEffectsViewButton, + presentAlertAlertButton, + presentAlertSheetButton, + presentModalButton, + presentPopoverButton, + presentShelfButton, + presentDialogButton, + presentCustomShelfButton, + presentCustomDialogButton + ]) + stackView.axis = .vertical + stackView.distribution = .fillEqually + stackView.alignment = .center + stackView.translatesAutoresizingMaskIntoConstraints = false + return stackView + }() + + private let presentVisualEffectsViewButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Visual effects", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentMotionEffectsViewButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Motion effects", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentAlertAlertButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Alert alert", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentAlertSheetButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Alert sheet", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentModalButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Modal", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentPopoverButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Popover", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentShelfButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Shelf", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentDialogButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Dialog", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentCustomShelfButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Custom shelf", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let presentCustomDialogButton: UIButton = { + let button = UIButton(type: .system) + button.setTitle("Custom dialog", for: .normal) + button.translatesAutoresizingMaskIntoConstraints = false + return button + }() + + private let shelfTransitionManager = ShelfTransitionManager() + private let dialogTransitionManager = DialogTransitionManager() + + init() { + super.init(nibName: nil, bundle: nil) + configure() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configure() { + view.backgroundColor = .systemBackground + + view.addSubview(stackView) + + NSLayoutConstraint.activate([ + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), + stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), + stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) + ]) + + presentVisualEffectsViewButton.addTarget(self, action: #selector(showVisualEffectsView), for: .primaryActionTriggered) + presentMotionEffectsViewButton.addTarget(self, action: #selector(showMotionEffectsView), for: .primaryActionTriggered) + presentAlertAlertButton.addTarget(self, action: #selector(showAlertAlert), for: .primaryActionTriggered) + presentAlertSheetButton.addTarget(self, action: #selector(showAlertSheet), for: .primaryActionTriggered) + presentModalButton.addTarget(self, action: #selector(showModal), for: .primaryActionTriggered) + presentPopoverButton.addTarget(self, action: #selector(showPopover), for: .primaryActionTriggered) + presentShelfButton.addTarget(self, action: #selector(showShelf), for: .primaryActionTriggered) + presentDialogButton.addTarget(self, action: #selector(showDialog), for: .primaryActionTriggered) + presentCustomShelfButton.addTarget(self, action: #selector(showCustomShelf), for: .primaryActionTriggered) + presentCustomDialogButton.addTarget(self, action: #selector(showCustomDialog), for: .primaryActionTriggered) + } + + @objc private func showVisualEffectsView() { + let visualEffectsViewController = VisualEffectsViewController() + visualEffectsViewController.modalPresentationStyle = .pageSheet + present(visualEffectsViewController, animated: true) + } + + @objc private func showMotionEffectsView() { + let motionEffectsViewController = MotionEffectsViewController() + motionEffectsViewController.modalPresentationStyle = .pageSheet + present(motionEffectsViewController, animated: true) + } + + @objc private func showAlertAlert() { + let alert = UIAlertController(title: "Some alert title", message: "Some alert message", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "Ok", style: .default)) + present(alert, animated: true) + } + + @objc private func showAlertSheet() { + let alert = UIAlertController(title: "Some alert title", message: "Some alert message", preferredStyle: .actionSheet) + alert.addAction(UIAlertAction(title: "Ok", style: .default)) + present(alert, animated: true) + } + + @objc private func showModal() { + let contentViewController = ContentViewController() + contentViewController.modalPresentationStyle = .currentContext + present(contentViewController, animated: true) + } + + @objc private func showPopover() { + let contentViewController = ContentViewController() + contentViewController.modalPresentationStyle = .popover + present(contentViewController, animated: true) + } + + @objc private func showShelf() { + let contentViewController = ContentViewController() + contentViewController.modalPresentationStyle = .pageSheet + present(contentViewController, animated: true) + } + + @objc private func showDialog() { + let contentViewController = ContentViewController() + contentViewController.modalPresentationStyle = .formSheet + present(contentViewController, animated: true) + } + + @objc private func showCustomShelf() { + let contentViewController = ContentViewController() + contentViewController.modalPresentationStyle = .custom + contentViewController.transitioningDelegate = shelfTransitionManager + present(contentViewController, animated: true) + } + + @objc private func showCustomDialog() { + let contentViewController = ContentViewController() + contentViewController.modalPresentationStyle = .custom + contentViewController.transitioningDelegate = dialogTransitionManager + present(contentViewController, animated: true) + } +} + diff --git a/CustomPresentationController/CustomPresentationController/VisualEffectsViewController.swift b/CustomPresentationController/CustomPresentationController/VisualEffectsViewController.swift new file mode 100644 index 0000000..01c99e9 --- /dev/null +++ b/CustomPresentationController/CustomPresentationController/VisualEffectsViewController.swift @@ -0,0 +1,148 @@ +// +// VisualEffectsViewController.swift +// CustomPresentationController +// +// Created by Thomas Asheim Smedmann on 09/11/2021. +// + +import UIKit + +class VisualEffectsViewController: UIViewController { + private let imageView: UIImageView = { + let imageView = UIImageView(image: UIImage(named: "fruit")!) + imageView.contentMode = .scaleAspectFill + imageView.translatesAutoresizingMaskIntoConstraints = false + return imageView + }() + + private lazy var stackView: UIStackView = { + let stackView = UIStackView(arrangedSubviews: [ + systemThinMaterialBlurEffectView, + systemMaterialBlurEffectView, + systemThickMaterialBlurEffectView, + systemChromeMaterialBlurEffectView + ]) + stackView.distribution = .fillEqually + stackView.alignment = .fill + stackView.axis = .vertical + stackView.spacing = 32 + stackView.backgroundColor = .clear + stackView.translatesAutoresizingMaskIntoConstraints = false + return stackView + }() + + private let systemThinMaterialBlurEffectView: UIVisualEffectView = { + let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .systemThinMaterial)) + let label = UILabel() + label.font = .systemFont(ofSize: 15) + label.text = ".systemThinMaterial" + label.translatesAutoresizingMaskIntoConstraints = false + let view = UIView() + view.addSubview(label) + view.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + label.centerXAnchor.constraint(equalTo: view.centerXAnchor), + label.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + visualEffectView.contentView.addSubview(view) + NSLayoutConstraint.activate([ + view.topAnchor.constraint(equalTo: visualEffectView.contentView.topAnchor), + view.leadingAnchor.constraint(equalTo: visualEffectView.contentView.leadingAnchor), + view.trailingAnchor.constraint(equalTo: visualEffectView.contentView.trailingAnchor), + view.bottomAnchor.constraint(equalTo: visualEffectView.contentView.bottomAnchor) + ]) + visualEffectView.translatesAutoresizingMaskIntoConstraints = false + return visualEffectView + }() + + private let systemMaterialBlurEffectView: UIVisualEffectView = { + let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .systemMaterial)) + let label = UILabel() + label.font = .systemFont(ofSize: 15) + label.text = ".systemMaterial" + label.translatesAutoresizingMaskIntoConstraints = false + let view = UIView() + view.addSubview(label) + view.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + label.centerXAnchor.constraint(equalTo: view.centerXAnchor), + label.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + visualEffectView.contentView.addSubview(view) + NSLayoutConstraint.activate([ + view.topAnchor.constraint(equalTo: visualEffectView.contentView.topAnchor), + view.leadingAnchor.constraint(equalTo: visualEffectView.contentView.leadingAnchor), + view.trailingAnchor.constraint(equalTo: visualEffectView.contentView.trailingAnchor), + view.bottomAnchor.constraint(equalTo: visualEffectView.contentView.bottomAnchor) + ]) + visualEffectView.translatesAutoresizingMaskIntoConstraints = false + return visualEffectView + }() + + private let systemThickMaterialBlurEffectView: UIVisualEffectView = { + let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .systemThickMaterial)) + let label = UILabel() + label.font = .systemFont(ofSize: 15) + label.text = ".systemThickMaterial" + label.translatesAutoresizingMaskIntoConstraints = false + let view = UIView() + view.addSubview(label) + view.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + label.centerXAnchor.constraint(equalTo: view.centerXAnchor), + label.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + visualEffectView.contentView.addSubview(view) + NSLayoutConstraint.activate([ + view.topAnchor.constraint(equalTo: visualEffectView.contentView.topAnchor), + view.leadingAnchor.constraint(equalTo: visualEffectView.contentView.leadingAnchor), + view.trailingAnchor.constraint(equalTo: visualEffectView.contentView.trailingAnchor), + view.bottomAnchor.constraint(equalTo: visualEffectView.contentView.bottomAnchor) + ]) + visualEffectView.translatesAutoresizingMaskIntoConstraints = false + return visualEffectView + }() + + private let systemChromeMaterialBlurEffectView: UIVisualEffectView = { + let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .systemChromeMaterial)) + let label = UILabel() + label.font = .systemFont(ofSize: 15) + label.text = ".systemChromeMaterial" + label.translatesAutoresizingMaskIntoConstraints = false + let view = UIView() + view.addSubview(label) + view.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + label.centerXAnchor.constraint(equalTo: view.centerXAnchor), + label.centerYAnchor.constraint(equalTo: view.centerYAnchor), + ]) + visualEffectView.contentView.addSubview(view) + NSLayoutConstraint.activate([ + view.topAnchor.constraint(equalTo: visualEffectView.contentView.topAnchor), + view.leadingAnchor.constraint(equalTo: visualEffectView.contentView.leadingAnchor), + view.trailingAnchor.constraint(equalTo: visualEffectView.contentView.trailingAnchor), + view.bottomAnchor.constraint(equalTo: visualEffectView.contentView.bottomAnchor) + ]) + visualEffectView.translatesAutoresizingMaskIntoConstraints = false + return visualEffectView + }() + + override func viewDidLoad() { + super.viewDidLoad() + + view.addSubview(imageView) + view.addSubview(stackView) + + NSLayoutConstraint.activate([ + imageView.topAnchor.constraint(equalTo: view.topAnchor), + imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 32), + stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 32), + stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -32), + stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -32) + ]) + } +} diff --git a/CustomPresentationController/README.md b/CustomPresentationController/README.md new file mode 100644 index 0000000..8929310 --- /dev/null +++ b/CustomPresentationController/README.md @@ -0,0 +1,3 @@ +# Custom Presentation Controller + +A simple example on how to create your very own [UIPresentationController](https://developer.apple.com/documentation/uikit/uipresentationcontroller). diff --git a/README.md b/README.md new file mode 100644 index 0000000..31cedfe --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# iOS Examples + +A collection of iOS examples. + +- [Custom Interface Builder View](CustomInterfaceBuilderView) +- [Custom Presentation Controller](CustomPresentationController) + +These examples are created as a way to learn. Feel free to use them as you please. +Feedback are also welcome. + +Happy coding! :smile: