From 0f5154b375cf27dced922e0afda71959b1aa4d9a Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Fri, 10 Jul 2026 19:52:59 -0700 Subject: [PATCH 1/2] Live Activities for Event Schedules --- RubyEvents.xcodeproj/project.pbxproj | 212 ++++++++++- .../UserInterfaceState.xcuserstate | Bin 15413 -> 194902 bytes .../xcschemes/xcschememanagement.plist | 10 + RubyEvents/App.swift | 23 ++ RubyEvents/AppDelegate.swift | 3 +- RubyEvents/Info.plist | 21 +- RubyEvents/RubyEvents.entitlements | 10 + RubyEvents/SceneDelegate.swift | 22 ++ RubyEvents/bridge/LiveActivityComponent.swift | 57 +++ .../liveactivity/LiveActivityManager.swift | 335 +++++++++++++++++ .../liveactivity/LiveActivityShared.swift | 18 + .../ScheduleActivityAttributes.swift | 37 ++ RubyEventsWidgets/AppIntent.swift | 15 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 ++ .../Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + RubyEventsWidgets/Info.plist | 13 + RubyEventsWidgets/RubyEventsWidgets.swift | 88 +++++ .../RubyEventsWidgetsBundle.swift | 18 + .../RubyEventsWidgetsControl.swift | 77 ++++ .../RubyEventsWidgetsLiveActivity.swift | 344 ++++++++++++++++++ RubyEventsWidgetsExtension.entitlements | 10 + 23 files changed, 1370 insertions(+), 6 deletions(-) create mode 100644 RubyEvents/RubyEvents.entitlements create mode 100644 RubyEvents/bridge/LiveActivityComponent.swift create mode 100644 RubyEvents/liveactivity/LiveActivityManager.swift create mode 100644 RubyEvents/liveactivity/LiveActivityShared.swift create mode 100644 RubyEvents/liveactivity/ScheduleActivityAttributes.swift create mode 100644 RubyEventsWidgets/AppIntent.swift create mode 100644 RubyEventsWidgets/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 RubyEventsWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 RubyEventsWidgets/Assets.xcassets/Contents.json create mode 100644 RubyEventsWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 RubyEventsWidgets/Info.plist create mode 100644 RubyEventsWidgets/RubyEventsWidgets.swift create mode 100644 RubyEventsWidgets/RubyEventsWidgetsBundle.swift create mode 100644 RubyEventsWidgets/RubyEventsWidgetsControl.swift create mode 100644 RubyEventsWidgets/RubyEventsWidgetsLiveActivity.swift create mode 100644 RubyEventsWidgetsExtension.entitlements diff --git a/RubyEvents.xcodeproj/project.pbxproj b/RubyEvents.xcodeproj/project.pbxproj index 17c031b..a943fa1 100644 --- a/RubyEvents.xcodeproj/project.pbxproj +++ b/RubyEvents.xcodeproj/project.pbxproj @@ -10,10 +10,41 @@ 973DD3652D95F8BE008E0AED /* CachedAsyncImage in Frameworks */ = {isa = PBXBuildFile; productRef = 973DD3642D95F8BE008E0AED /* CachedAsyncImage */; }; 97613B4C2D0635C600220031 /* HotwireNative in Frameworks */ = {isa = PBXBuildFile; productRef = 97613B4B2D0635C600220031 /* HotwireNative */; }; 97613B572D06512900220031 /* YouTubePlayerKit in Frameworks */ = {isa = PBXBuildFile; productRef = 97613B562D06512900220031 /* YouTubePlayerKit */; }; + 97AAF32F2FFF2733009DB8C2 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97AAF32E2FFF2733009DB8C2 /* WidgetKit.framework */; }; + 97AAF3312FFF2733009DB8C2 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97AAF3302FFF2733009DB8C2 /* SwiftUI.framework */; }; + 97AAF3422FFF2734009DB8C2 /* RubyEventsWidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 97AAF32C2FFF2733009DB8C2 /* RubyEventsWidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 97AAF3402FFF2734009DB8C2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97613B0E2D0634F500220031 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97AAF32B2FFF2733009DB8C2; + remoteInfo = RubyEventsWidgetsExtension; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 97AAF3432FFF2734009DB8C2 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 97AAF3422FFF2734009DB8C2 /* RubyEventsWidgetsExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 97613B162D0634F500220031 /* RubyEvents.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RubyEvents.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97AAF32C2FFF2733009DB8C2 /* RubyEventsWidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RubyEventsWidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 97AAF32E2FFF2733009DB8C2 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 97AAF3302FFF2733009DB8C2 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + 97AAF3552FFF37FE009DB8C2 /* RubyEventsWidgetsExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RubyEventsWidgetsExtension.entitlements; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -24,6 +55,21 @@ ); target = 97613B152D0634F500220031 /* RubyEvents */; }; + 97AAF3472FFF2734009DB8C2 /* Exceptions for "RubyEventsWidgets" folder in "RubyEventsWidgetsExtension" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 97AAF32B2FFF2733009DB8C2 /* RubyEventsWidgetsExtension */; + }; + 97AAF3502FFF2D25009DB8C2 /* Exceptions for "RubyEvents" folder in "RubyEventsWidgetsExtension" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + liveactivity/LiveActivityShared.swift, + liveactivity/ScheduleActivityAttributes.swift, + ); + target = 97AAF32B2FFF2733009DB8C2 /* RubyEventsWidgetsExtension */; + }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ @@ -31,10 +77,19 @@ isa = PBXFileSystemSynchronizedRootGroup; exceptions = ( 97613B3E2D0634FA00220031 /* Exceptions for "RubyEvents" folder in "RubyEvents" target */, + 97AAF3502FFF2D25009DB8C2 /* Exceptions for "RubyEvents" folder in "RubyEventsWidgetsExtension" target */, ); path = RubyEvents; sourceTree = ""; }; + 97AAF3322FFF2733009DB8C2 /* RubyEventsWidgets */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 97AAF3472FFF2734009DB8C2 /* Exceptions for "RubyEventsWidgets" folder in "RubyEventsWidgetsExtension" target */, + ); + path = RubyEventsWidgets; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -48,13 +103,25 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 97AAF3292FFF2733009DB8C2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 97AAF3312FFF2733009DB8C2 /* SwiftUI.framework in Frameworks */, + 97AAF32F2FFF2733009DB8C2 /* WidgetKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 97613B0D2D0634F500220031 = { isa = PBXGroup; children = ( + 97AAF3552FFF37FE009DB8C2 /* RubyEventsWidgetsExtension.entitlements */, 97613B182D0634F500220031 /* RubyEvents */, + 97AAF3322FFF2733009DB8C2 /* RubyEventsWidgets */, + 97AAF32D2FFF2733009DB8C2 /* Frameworks */, 97613B172D0634F500220031 /* Products */, ); sourceTree = ""; @@ -63,10 +130,20 @@ isa = PBXGroup; children = ( 97613B162D0634F500220031 /* RubyEvents.app */, + 97AAF32C2FFF2733009DB8C2 /* RubyEventsWidgetsExtension.appex */, ); name = Products; sourceTree = ""; }; + 97AAF32D2FFF2733009DB8C2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 97AAF32E2FFF2733009DB8C2 /* WidgetKit.framework */, + 97AAF3302FFF2733009DB8C2 /* SwiftUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -77,10 +154,12 @@ 97613B122D0634F500220031 /* Sources */, 97613B132D0634F500220031 /* Frameworks */, 97613B142D0634F500220031 /* Resources */, + 97AAF3432FFF2734009DB8C2 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 97AAF3412FFF2734009DB8C2 /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( 97613B182D0634F500220031 /* RubyEvents */, @@ -95,6 +174,28 @@ productReference = 97613B162D0634F500220031 /* RubyEvents.app */; productType = "com.apple.product-type.application"; }; + 97AAF32B2FFF2733009DB8C2 /* RubyEventsWidgetsExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97AAF3462FFF2734009DB8C2 /* Build configuration list for PBXNativeTarget "RubyEventsWidgetsExtension" */; + buildPhases = ( + 97AAF3282FFF2733009DB8C2 /* Sources */, + 97AAF3292FFF2733009DB8C2 /* Frameworks */, + 97AAF32A2FFF2733009DB8C2 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 97AAF3322FFF2733009DB8C2 /* RubyEventsWidgets */, + ); + name = RubyEventsWidgetsExtension; + packageProductDependencies = ( + ); + productName = RubyEventsWidgetsExtension; + productReference = 97AAF32C2FFF2733009DB8C2 /* RubyEventsWidgetsExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -102,12 +203,15 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1610; + LastSwiftUpdateCheck = 2620; LastUpgradeCheck = 1610; TargetAttributes = { 97613B152D0634F500220031 = { CreatedOnToolsVersion = 16.1; }; + 97AAF32B2FFF2733009DB8C2 = { + CreatedOnToolsVersion = 26.2; + }; }; }; buildConfigurationList = 97613B112D0634F500220031 /* Build configuration list for PBXProject "RubyEvents" */; @@ -130,6 +234,7 @@ projectRoot = ""; targets = ( 97613B152D0634F500220031 /* RubyEvents */, + 97AAF32B2FFF2733009DB8C2 /* RubyEventsWidgetsExtension */, ); }; /* End PBXProject section */ @@ -142,6 +247,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 97AAF32A2FFF2733009DB8C2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -152,8 +264,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 97AAF3282FFF2733009DB8C2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 97AAF3412FFF2734009DB8C2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97AAF32B2FFF2733009DB8C2 /* RubyEventsWidgetsExtension */; + targetProxy = 97AAF3402FFF2734009DB8C2 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 97613B402D0634FA00220031 /* Debug */ = { isa = XCBuildConfiguration; @@ -161,6 +288,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CODE_SIGN_ENTITLEMENTS = RubyEvents/RubyEvents.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5UY2R75SM3; @@ -168,12 +296,14 @@ INFOPLIST_FILE = RubyEvents/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = RubyEvents; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + INFOPLIST_KEY_NSSupportsLiveActivities = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; + INFOPLIST_KEY_UIUserInterfaceStyle = Light; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -193,6 +323,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CODE_SIGN_ENTITLEMENTS = RubyEvents/RubyEvents.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5UY2R75SM3; @@ -200,12 +331,14 @@ INFOPLIST_FILE = RubyEvents/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = RubyEvents; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + INFOPLIST_KEY_NSSupportsLiveActivities = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; + INFOPLIST_KEY_UIUserInterfaceStyle = Light; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -338,6 +471,70 @@ }; name = Release; }; + 97AAF3442FFF2734009DB8C2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_ENTITLEMENTS = RubyEventsWidgetsExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 5UY2R75SM3; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = RubyEventsWidgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = RubyEventsWidgets; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.rubyevents.RubyEvents.RubyEventsWidgets; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97AAF3452FFF2734009DB8C2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_ENTITLEMENTS = RubyEventsWidgetsExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 5UY2R75SM3; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = RubyEventsWidgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = RubyEventsWidgets; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.rubyevents.RubyEvents.RubyEventsWidgets; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -359,6 +556,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 97AAF3462FFF2734009DB8C2 /* Build configuration list for PBXNativeTarget "RubyEventsWidgetsExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97AAF3442FFF2734009DB8C2 /* Debug */, + 97AAF3452FFF2734009DB8C2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ diff --git a/RubyEvents.xcodeproj/project.xcworkspace/xcuserdata/marcoroth.xcuserdatad/UserInterfaceState.xcuserstate b/RubyEvents.xcodeproj/project.xcworkspace/xcuserdata/marcoroth.xcuserdatad/UserInterfaceState.xcuserstate index b82f64c13680c65ed1ca02b68a54e49859bce5e7..db59f34e0cc44b4dfb8430239ee97b7633f92212 100644 GIT binary patch literal 194902 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

0Z*k@eV|w6 zF6sllD|c5P=u=s(J`k!5s}IB~z|Je3pb!g=%^?@;!hpP|NR*qF4sH>cyK2TpdS$$wy<#hFdS(Ody z19K|pst?SsT%bO1OyzOxK941C&ereq#7ebtRW7Q;rU=U`@y3IBTmSUgmFK9jmsFmo zK5#+hGWCIrE7i(Xd3oh>28eeg9J_VE6_r=3zpkZnrTV}Pl{cyntg2KiSLN-MYUQfD ztMVRp1$eu{Nn5{y2P+>^fB&PEkEstlQTe3$z%!L<<*Iz4QmtH-uT-j)tMZLXwQ^Oy zUHOjsOW&(}Uwz=C%8%6tKCAp(ec-FgZ`gf)P2A$G-{%jNKdL{ysq!cFfz6e_st)MO z^j*{kGZT;&)dbM)tV|ul6>HF%{%BAn8S1Xr3tye3TKCf3RmwrDz zQ!YJ}t7Yq#G)%8nF8x7zwQ}hX)vJ|DKSr-sE`68I&uuxp%7 z+$~$b#zwt5=F-p8t79(x(Ry{vrC+F5$6Wdo^=jqPFVd@HF8vvLb}0&v<^HXo+@weNwOo&PzC5_~ldsi7#Fpz@hx9V@x->$zyf2V%6{x1F9`g`>E>hIIvuYW-Qp#CBK!}>?`kLn-OKdxV+ ze?tGH{we*_WrOt3>Yvj;uYW=RqW&fQ%lcRJuj*eT?or|ph&@5vQ^Y+(+;haeK-^2j zy+R!R^$p_QBJOSC))Ds}aUT%(5pkao_Ze|t5Qhlp8{)nr?t9{XByJ;dKN0uK!Ybl^ zCGL0PyAa=vc#e31c!~I(h~Jrb9lMD)^l$3l(y!IOt$#c7%|t^Y>~< zdJx}-_f5`mqhQ4fCtBb#v>c&X`%(P(6~ppALU- zsGnOmK3m&ZTRnWv*!j7+NbzR-Ya1swESNBV=Ilue#?6{kH)X-R3Dc*IUod-I?X=qJ z5i{mAjH?@3J8lYI=`*`}+@!j3Q}D94+0~g^{CRw8_WbGN_MOIF_cI(X+BqQCXWIC7 zIc$}rTNUJM&lU|+8(KVaMME;C~) z+g;?Zyp1UsZ`PC_vTYdS3it7+UKFG4si3W`DX-}?w7&{tF=~GW^_`mX+y4&r|AeuV zW;7mI-%#hDUW=)(YgJrD?yC=+(=c{M_2AmM^%H9wXEglzr{bH*DL35M1_qSO<+U#EukS$pL5C!nVn)1W9?Izn<<+$30@qhZ1@x^y}paS~w zHmg?c%=+ro(0xa+x3i9`D+W4L0s0h0|82XwX-s~Z&zd@=80ByU<@0TxG_?qim{K>j zu5rfnV!&|<;Fp~#C4VpdlN7YCx0we;Cc=gjQAYU>*$$ z%KB}M;SOQG24U2np=aBX^qlGAr*;5*qyqfIHWNUxm_pcCY$-=8KpQ&AG}(kHk}_gk zLtR}5rb!Cmrke6e+r~Jxv9t!J)%m*G#yJgG!};4t^<)M9=bG{<+Xg=sextT6aHt-^ z5`sBX|A-_~jg1ZUWAS3>*~KG%x^e}ZYszc4?F!Tb06}ec_Z=|i90m8cn(}A=4)_1W z_5L+TXv?!YNUL)5un;%9e#Uh8iozdzh620eXV46+)^!j=o!@$sd|6HTxWBu}f98@^ z)7w5s95JaD239<+7b(bHYs$y}OUMV*PDl3F!A)PTKx?*{!?WvY_X>Npl!o$=drVOjkWb1Bu_UeSlXKM0o#TJCsS-O zwanWFtJYLKQS~J86~tE(uP45Wcmwf9;!VVxiMJ4MZK--% z*=?li`KlMHUMve#y^P&Pcw5_UBfNw7-o)>YUE_JSef&N(?Ke{ORn@oH*`n&}s&9yQ67OoN`mSm{@owUMownad)yAry+4dO=s(xB{ zJMkWDpHa1W;Q_>Z7p^|M@cQpTb<-y{PU;~KZR-*-bTM$)bHvcq(9NJBz9;d$h~K5z zz#9bYIl}Ks{BGNQ&k+N9VGO$BjYJ|Rome^Ifc>sL2AC{w<7O;S+Ad9-yzm zWAGY$hMtCAhFuK18g?`EHtbG(HSq!BgT#l34-+3DK1zIy_&D*27K2}*uOX;x7G#Jr z`mz=uw#6;KXWM2${D2+g?flJx3>lEukR`rv8+i=_wnSdTV8bxjg<*(cDDis{zju>i zxM2kG{fN(Y+Rk2vk%rNXhld(Q84e?UAL9EHpK3OYF&xf#m?l26{drgia!n{E*Q3V{ zU$N8R+@kZBtP%PdKf8eOupXyQE>2Y-@bis`5$}#7^WF!vO%7X z&64;WHcK+h>e8L~{K5l@#jESt1^yjrSfDU=K4a`aFxD`ODPF$lLxoQ)G@Mb^ccp<0 z#~V&CoM<@7aI)bP!y?0}hSLnE6Tctv`x8HicznlT;)f8ADIZ4saN;rH2d*@n*+$!Q z4T}v+%Bsr(hNX;9UCs~FE$5Pxui=htqL=QkN{VJ3L9VHNQsi9fW- zaI4`q;ztobrqi6X;V#3y4CHQR=Z7&nzmM7Z=#K1Mb6CM@A2F<9;_#^9F~j4;A5MG? z@kcZpo-jPg#G#h>vD;r9UI61?EM~lE>9yruhYgW#J@e~v&soM{x33osui(^Ii%-3# z-y{3Ham*m!@t-}r;dZlg5uCK*qRYw(1M#Ney|TV53~w3M8s0X%V_0W+m-ss3ClEi8 z_({aq6F+%{;eGJ(L&Hagj}4y?KZQ|oD)F<3ZzO&Wi-jv%*IL^wcy^yrGiFSKv8fM^ zfFZIJAw2_?FW92xkJH<%Ia51*ZtZMl|25^#zy4zu9lG_bW&RzD3_Fun1hsWZmaPCby-2@2owtKs)D!*auK#5XKAmJvUD;cC@K4y~Qj zIAa>Feq13;H1bBF%zzG=)otHl)Eakgm0n|aCcQ^8>AjCh@94jiUSp*ZEjlemy|Kz@ zFdB^}quFRNT8%cNo%s30gAYd$e>CyO5PvN3#}U7fcq0Dz7Nb*9U8C3NGxjVC7><_%bK?eP!g`vgZ`@<-rg9BZs&gFKEol*Mo;#tF=!Ea}Lh=8ZusKyqek7RYn9*`2VY$jMo^iCH@-XS9V%7WW2$6GXuGi8Sk~scvmswZRyB( zHM6FBwB;!`)Duz2jHy)(7fX^$wsef{-2|H=4gjL$2KeU3496=Uow z#@Lp>W$dd)giS5R*Nm?l-!Q&ue9O4j__pyK<2ob4r(20fkc)!R9mL;B{A%LwA|B&< z5ApZ57~gMW?8j}4{hTrOz5-((EHL(&9gO`K7`urv_9x=+FEDm9bG*NDmv3W-Nn=8!)@0&LJn;_^|8SE@G)ct6QXcO#-kM}n4+f%RynPhBHB~U)KGqR$ zcR#0aWhRpiyfv9k7L%3uHN-zb{FBWlyUD?L`xNm{Z+G6BdY0)-y^6^=xXb0IJo9yW z?5f^Jy>#;N+PUDZX*ZnOyZF=r8-^d+xci{cD#OVa4(?;Q{14um{H8!FZ%x&Vx6gvN zrV7T}$NrADrkE*>YK19oN|=(SzNS4*dztn&^)u~b>TgOB|2*+85dR|aFA@JT@vjj7 zD)Fxo|2pw+5dY>%Q$``LX@F^C-h-t@o6;r~>* z!gLtuZW>Me+BUkIYT6vMX>3_FN=oo-Z{t6`%NG|IHPJMg(QuNfp7?ddzuRP*Vwy_) zd&GazX#uurmT3;7ZG&mH2?_N3#ADgx!)DW5(~*p}9})lY_NVQ!;No$`TwHQf?YD28 zIH>oz!{#K$jmf;gXnQsK>lJvIjz~W+4QUF zHxhOxK_)@hY%Vi*fj|o7B=p$s0%;b@bY`ho^`?G*`uDfqJZQs`-9DK8&LMj(g+Q9S z+0I$^hd`Rk&6TYJX|8}k3Y8$Cxe5X)=!*ri%X4ir zW44&>t;{vsz+Azwg%1@z;WhUGbIm?;PjfHxF6Ld$yP12NcQ@~0_LE>D!AydM1S<(P z66_>6NN|$iBEj8au2z_94lB$x#~E`y1?Kt+%nj^dZs#X4<{X%7&XeG6W3GAMEtMV2 zL(L;#7v^E+;Ux4Vp;wdnK=VN)>_S5CPD@|Rqs(I%$YDrdgk6!om=8z#BJ9>t`qJ&o zg8hv*PXf)&b><1?i6rb!!X6~}o6Ys+$&BWGNT}ZaG@k|THWYJLd)+=u&pmp-D{kn$ ztYYZeu8oZ5b8zb1;!{7{bV;&0n0@TRIoH-7U-8bUKWRSSe6+&YqZng@jIoC^n(tOb z^TLQ7Z^pBiE#?!xN`B62 zE#|Y@7`wQQv22x9*t@{keF}`-e+Og#1;$><7<&~7{R)h|W{Zry(Y%V0=_d2dB=jdC z)nvZKd@BiQ5^|l#*wtnh=$Y?gjLk5{-pd%9?TE2_VU5cCu=#Pu*hkEdnja$p8Z>}} zfz9SM<|i0q_a$M!?a$cfLBkh{Y4||$PS+Ln*%5cnzVVfLQv+tk*q3qYD;=DgeSh9- zn=_Z*;`?rc_|xv~82h^UErqdfGR6*KjJ=mJ7Hunk$y^GIeb4+A3J&J?%^#RQG=F6N z*!+p%6!T~1&&^+$za(KW2}4L2O2RM_AkS!tz@HB!0s4F}35TpSf89pg^<9UWe_-tq z=8cTFBMZbGweTSlCbV`(2(xx@xAVDc;lN!BPr{*X+_gws;;yCK!a_Go4@(6JhmkP4 z$)dMZkuZjYBRY+{7K??2dKN3=?&09B#lg5+(-C*ORJ2*5#b?PB*OD-n zgmKN5-7LKscgK@Zx81pG36|+Bp<+Tl^4n9pp7!bB)r%jy;_0aeTk_zpC5lsH#i!mJ zzwnol^Ru@#RXfY~6i1Et!`oVtmj0+4So&J_wCrWs+tSan4+#i6CXrB2!ekPrkTA8i z)4`IlWdH1R5T=nZ<3HKyP?-23mf^4#!+OgwRxS|K4GtZZ3oIioqfjoe97@8>4$B3F zZ?3V7ZIweyEtA6r$f3o-{GRx9HLL&)t zNSI5)ktEC`VLk~k@1saKnuKFoERBj1TIN~iTNacBEJrgPJhq^NL;{TXEYx{~vvJY z%Z-+sm>A+d&)EKAcn1{j&SHi8cvqd}xJw5dcYg07w;gN_WSAJ-2?0sditWxsD;}4ycJR2wUfo9D-G9uWSIBLZT3KuLGS*(Vg^v{my0?PB?qT&?`&g^30c+42vWBe@ z5^f;jMiOo!0n}SX!Yw4+O2Ta<;EL{OvBnhETKiVLVEU{qVC~0PduM^QXlv+=N-<;Y znjNg|eAZeAfwfjx#OgNIT8DzQ)?wD+?1zNANVr@14cFVdoGZ-tq1Mr`5bG!_(vW*e zxUb1N#(Fpj_ml8Yr#WBiIO_z(dh3|=KETXy60_b1i>+6GUg657SRiF>tV|D^o!){_+Op2)cS#1;mvFk+`$@kX^4>lxNFt!G)!ww_}> z*Sgrc#Co0;UKTF%X%e0x;aL)%BjI@xULfH`5?&(V)sr-@ijiiD2PIywSz+5@Qo9Dj+~P^uK9@E2Q5F&cm7Gi*R8COXMKYu z4eujqu&!lE!v`HD4dOF}nR(y(k;2;#8E-#gyj{!0?t>z+D}3S$>qb=ntY2EcvVLv- z#`>-GJHsi~@2x*rf3$8O;S&-*CE+s?u-^Iw320(K_3tYZz9!)t624t&-PA_j&4$I+ z-&pm})`ijcy8?aD(lCyM-&@OnqIL&`JD98v3Yl#d8>`IOtTwEf z{y@TyO*V(kNdhMOr%rRaHlJ-5W`_%Gy_nP82s^Z4rHzD5MRwRjECh_UKDH1TZ>zQi zY(Wx!CgB$nHaFYCwg_{&zmo9Vc4xe8&oZ5DuVSYgp{EvJc>bVMFMoSU_TE! z61$P8A(3k>|Je>;Z9_IZ`oJD^64CV8+BPJL|FO2AHVv{JYGZMrVZH4zR{j%(t#%99 z#@fcC{AU|SqO_&*pRL|DwN(#oQ=o_9PFt|U!nHKm@c!8r+iY8-ZH{fO?MT}^+kD#s z+flZoN!*!4nM56l5}hRW?6hFUcAf1eCT-W-Zm``*qKiZ~iJoTL&9+sLHqlF>Z~IHzYUtHn z#d>wZy~lN3pBjA2C39SJH%wo76qB}laq4}=r@oY!c51RJbIw(6Zt}95dZ6W?Fvt(u zSOw4a5P}&IE}_ZxD1sSrmyUuNp-16EPuZST$omW^vqr?J-F-ChpX+IP0gb{&a(k+?UB{hIAP>=lf)`;gdwyR+7A zF4Ng9#Z~b#1-h1oiGpk04Bft2A zwRX3?wSu?6?nM+Qra?e^FGj#j5dnMbsx8dS?)E;dthM_YYja!pP~j61JC;3H+N1WE zJ#J6fllH!*z3qG1_qO-5V~huoIFLkyLi>@pKZ%3b6AvOTVlatANF2J-o>Hi5&vhMY zAHY1XeLqItVFmIYga!n$R`I>lcJR0J`D-5u{@M>Ead;bl?W4h8`xyJ-?1#h=Bp#^z z27`Am-?=dFb#^q@HQ6WFCz5zDiH9`V>+O?C97*C~otBB%XV@DU$V}#W4u$8j&t{%y zREM7D+`^U3w;#iZzrcQ!9bw;S6338uc(eUj`*Do;H6$Lf{fU1v*nCPcn{Vh--Dkta z`weM+X0&b0+U!@1_^092(~D1CrFre7=fr`bJC~d9xbMZU_xzLiXW7q3CSpI^evbWI z`(pbN`*|deB@yBFcoOSKoIv8l751f|+A{lvt&IrcB$kQPlQ`u+*@*Dh2N>*E*{^}w z7}ndbZcRxhZ#5;c-(W|Gx7-d_HFZlViTyVFor*r*!Sr!D)5qCNR7VwwYQY-svtwVG zmG=AX57-~HKV*N{{)pie`(yUU?Q85$kT{dXStK@)IGe;q5|IfGC2=l^N0K;?#Q7`j zPqpdebB4wC7h3g^y*Ex=P|!!bdjS)Bsv?l*?-0m;K_Jzsot(>eHJ@k*@Tbb{{5AtRPnbw8%t$K*@d^@`li0M+eMn)r*To^|&Wj9=mBl>Xw_ESN{4=!!P}r{$7StFE2h-zq0!6at$_bAS-`xF; zV_1)usCr`7(d=kpntG+ zcxQ!D`o90aS^9RYcCe*X$6b!QNxX-|dz%a!9QWb9UL@Z4mlt%6o-|{2;~>1(i@jiM zWc_sIU1SAIdc^S<6WB*dd|-{JzEGnUo6zr z-ud4X)$RZAtb^6m9H^;1*A{X*SWV4=dYa=`rj*Y!rF@}PDgEVr+UDBX&B?$PH~6lWH$%;>~>dYhdlr`d@* z{u?B|N#a}0PMg!tlyWVJZ*O;{bo$D4&Ys2cciU3F{+T%g*Pf$K91)m1>?$awb61?Y zTk)yOzc_8N@0Y;~7F}?~`yW5M^K*Yhs?I%})y%ytclKd{(Yh@RT4BVZPE^%eoH1wI znQ$hZeVuzc_j2y-?B_&H?L89TClLwBha`SPBKE`kgv3ut{EWoUTbykLH75#cEM0W& z%OavL3cUTQz}ug8@V4_)Mdu;lt#c%aU$*hqi8q8?iD_v4ANZ>LuXkaV$2#j6W5+qi zllV1>-!wTVI8jbR(zv11(nRM}=S)VvY0l}+86AxGV(2Op1@)|*3IBV^FE0kbTf1rRG695oo6YGJ(Dr^=Pi7w@QL%BS0I&fp6^`h zyui84d7<+n$6)6r&P$z_Igzq#Ch=Die%6zDn*ER@!soJI zDD&tFbN+}EU2aXzN1cz6q$O#mCg&RG6C`yfsqIDde1+`#e?=T9VA8L!ag(VCA)&i`0G;@#)70qhk%1KUQx z)y>61L6^qGkz^;y@edP|!pC=Z>5z}OU}&x_zfRZ$%|t zeYy^H1(-^@!b~Om6jU<6RB|sxCHLK-lAW)Tt`t<#l_sgWO(k7;TL?OJu-cCw^ysk6 z1iuy*VjR~X*AQlk2e<~46eKCs#1_xGabM~p)eu$}-X!Ac;7uYMtK4^O_T}VN=O2Ias?D_K4`Fr9aUBhrbj@`g z>6+)7?^@tGiln_s>PON(B=sjLMN)c&>ll#iIM>3~Qn-|1GMOc5z<;z9{uh}%!*w>Z z%`;utFFZ$5zR7VPUd=AD5)SG&?MpTtJ;v->>RQHR@&b|uZc!#LbzPyzF{RPhpvy9;?b5? z;!`K_AKg9uhWu;irB=MP)H1pIpNjW`Ya<)vA6Y0l7NMkT6WU3naUHdjbh8(@_?w$! zGWol^%-zM^)!oglA*qg}2_#J0uF_fllb;Z!_aJ!(4ZYN1Iwxo>io^HG|1cfp8E=(C`F=gDu{Pwsa zzuh()?mq4$3S;hScfcKVhumRz#2t0V+;KOY_iU0HNt#2_T#}9?X&y=QNy1dauN~du z?yHERyPr}RbElak9#fFSg>8i~>5LtE*!gdfzU(uL1oqKhos|J za*ba|uBF0Ek9OCQ2?3Xu4e|gz&(it zjwiwZ-BXwWo>XLjJ-Q7md}yY-5i;tYuyXUy)G8sLMq|>*1;OIt~ z%-unmZ00?`&A)1NYVy^OKXUTC?|-@jGU_IrdVH~r3iIzg_pVnn-(UIqHD?Sx`JTi7 zkWu$Z?nMe~PhqS*a|?r37_qb57a^W;pY1-!eXe`4dx`rz!zu2i?hD+@+!vB`Hc97@ zbS_DYNm@b@_J%=Jb3RE+NkVM3Y^D3+HtJq(SnOWT;u-gqjJy{X$a^tsf|9O={XlnD z?I7^KK;Tu3z_*ZeQGvj>gTR=Ijw{>ld)*H(^4{mZpQKAjy0pptpc^qKik???S~%l= z-2D{e;Trc7?k7pQoTMvATHfq_+WidUVG~Ks+nO2>TmBZtni%hClA-U*RermpSnMDfA0Rm{Uu4)kaR6cEhMcZ={l0GZ(Xc+f9wA4&(~B* zH;{yNd%RElzqTP);l?++@zP%w#o%4h(@45;t5J-H^9YDyJUmG^Zz+oLboZcKhA74( zGd;Y8>EXM~iL5AcB5l{=sq(m?haQ8+=rMWB9*f87v3cwshsWu0k#rkLa7K5KbSFux zNxF-qyGgo-q7sZ)3Z-mHTxmyAr}1L7lNOk3I>w*>VI%-@a-Q5RIc(L(myxg zvwQx~PfwkPJ;Km+foCEM{+?;_)O#kA^ejow6%n^}drHsrvV*T!*tCMts8azup=c#rn^jzSH36>=iz8jpr65kDhBiEuNL0>pa(cZt&dbxyf_0 zXB9~(hHy&cjM+ zo_9U(d0;u~N&23oADTTMdRj|qKa#XzyT_g$l+rvMl+vz`OuuyBe%aCY-8FN`#lM_0 zg=r^BX`T*BX_G$<^nT~YRLzOKyS#DcW1Ft~Q#*g~uu>Yda|6@PO^A6sKe3nxuc7$M zn~HmMSy$lSZ{9Agl=YS|%Koy254C;5D|jowSg+`nyjt&0-tOL=y|P#5E%){y=~t3| zBk6b2mXWp#X}glP8)-G9TA_`x+QQ}^+8vvJ6!v=V#C@E- zyMeLZ-lP@V80+t*+Ud@n(@NYRgHx{rf1q`}}`yh|Bl z&-0#7+McBC)#SavyNtBEkhb$S{qSDuW$UKi%TV9YvQ0m{%TeFZcDU(>;nsrvUG2r@ zRn6XOyw`eLNV_{}_aLpm*?XP$dPeg;q}~3Tet2&McW*1^E_eN|KW=<4_ulpU_kC>l z>HXQuI=pw{)YZkOZaT=~J$_wo=8AzQjUKUU+4?_eevkKlg|YWB#s_bKnw-eb0n6wenMo9~0j*~V)T5z&2Y4;@UUM=1i z+8FzaX`uJDvVivu#@NE9AKLzGvqJ44lpwSR?1+myzb5PbgmLy$(iXP;@O}Z#dcQR8 z$$m(?58LLu^*1UD6AS$K-n)U3>Id(Sq=g?$H+eUDH<30&+B}PnJ7rnL`ztoB2FP!W zxmhsR*M%`R*HLA%N8w#QKEbyWnClaLk`F<^0MZU5?Y_;v?!KKFbN3_d{@XpI_UX%X zzN%t6_MTwo;B;2iznR@N`bjP6HYZ3pL)Dy!_S1ed?6GPeY^N}_3h^C?c3eAhiPwLA78aE z;0uy=C~1e0b~tHAkoG{*9>f|&vQm%l5@h1AR$fU;Jq=M&VI~ zFnLTXh3iQ>hp~9>4i>CUg`-YTNvmerqMs<+=0*4cYSwGmv z+TDDI_%MryleVVGH_CSyX^$Z7gigzFeMk6Mdz`PrD}1MbXs7y4Yh7K@&Scb@McUc_$<>v=zI(&B)Q18dmRWqu z*fNW@VXMn5zRP{fQS$R$LE6TSOMdQx-Cyl%QS|XzrjJK5eVotqaZ=Hg6h3j2?{364 zzMFlke7E>+_1)&X-FJuYPTy+ZU8J2)T1@Rxq&=Fn$B_0|(jG_Jg`_3Y9^c|ag|Af_ zAMicsdkFLO2ouH=3c`2_X_t`pJT`SZUb^uw4zV{hv-}Svm+C`*2waNE^??cj_M%r^aPZ>Y+eZ`dVbKe)fFG+hk zY0n_-na#ehecv!;Jd3nvZ~s7L1LSUFar7~v*W$+gho$zsem8fr-+)HEvG_&b&p7p$ z;#0d{Si9#V+RI4`Jz3t;^Z&8;9spGxY2*HZBt|*sTv20*70c}% zP)clcu^Q4gVM1{Q1F+ zc`R;hX6)D+c4Ko2Zfs69A0ZJjJ4MVT#!uXMN$jYIg`}Iaun=>GIa9>!7BQE$n6u3c z2rd&b*ZgU2Y@Tk;$BoT1%z5USBIa@tbA^bxvei7xTp-=}DiL$_f834D^OfG_1zmk} z%BG)ho3Ut0k2{Jko!PpyfJnARZ-P1owxhsQ`+3vTw*4` zYcZEfH@;T7aX`B9b=|pfuTinyNZnMLYYgwLmfm}#^xlB<-s|@3y$$9j>Ah>rYt8G- zjpp^{Bh4Gk8_k={^tU&Qm|H~5ts>?&5p%nUxkJRvE3|l@o`2? zc_5=^O`xu1Im_E4y3HcDdQC;JqO>v)>@F9Uvpare4QWPq&84iarn0iIzN9|jsadux z7^v?qr(lOvl@-;Lr+bmo8tPZn)bXIMAD1Ccc1>k@MfLLTw6(Ubq;@(v2Scmf=Ch^m z(z@Ok@!j+B-Tf}RnOn^AC|+}`8K-_g#5~wy-etyj9}+R4O$2|+xA~Z_G+!%y_A2w$ zW`;!%i&)^f-k8Tk47(O&3-O1yEc~N85`K4+!yYq7@tV6iig&=xZ|~SR zWX4Iio!30Ap#S5aOP{@qq<439?`y=2p{ti=%s9XP4ENs8`*93l#QE+sKPZ)azx3HB zrO(Qvcw?UG&S!gCBR4%^HjWK3%VR@go{=6akK*OF{Y)#EUogvKL(DIlUoyXJe#QK% z`8D(F<~PiLG5=M>JSSrIh!{e%7evg9B8C}-mqiRA*{dSvwad-nV?)g0V?)gH*pQgl zBmM1PA|CtE|9R}cptqIBhM2z>F>gdXRvsHN?1O5NVmZXpL&Ur#V))jHKWRG9qFPMyA)2(>x3OAFZ)vsfbZ4~(JruTD zOMlDZxVmM4WuRq{hfr$C=Kkn+5QA%&i=&t@-Hf_G8sA%R- zmyelQzWdxh58&z+3rVeAla7f|-f_H@we!TiAD_~)?zcDET;1ZZxKUbkv&AL7_G7%( z(p!4%JNxrmOM+z*lYy2*%UH`eOOhqok}^Eca)f2PWrAg*i1}2+d?sQ(7cpOmm@h>P z2SHpUV!jqJdqvDQBIesGER&7S){+^WZ^@>e_gUoGAu-=Yoc9Ob8dDDrZL(JT{Gb2+ z`TlE>$A?(viJ0%h{%bkl@gbH{i#$HWQf4U^F+Yl!zqeSHS(b~KpM)Cqr$xz@N{c)` z#8PFcw$zB2pGC|sBIegt%W8`}J|yNhp(_7*H{|#bOE<@doY?!&Yn`jJe79Hr{NAYd z9+AfnSa>hO(#?Aj*1S^_;-^mCd2IFaoW~wM=-_rY6qYU04cA-b@gZuobVGT3hL zH|!IW7HPYVx17c_pydS1iI$TrCtFUjoGR2qgxW)>hYGc)P#WYC`S(Upfug`PEuWi$z9*mR8G7q3S|4{bR4zTCTKQ&77d+Dxt=9J0}=X^bMAq zjYje&8cDV90ct05$DNi3WYyedx!ZD&O*s6&N1e3#`x%R`oj zEst0pwLB)&IH4vBb-qyRgnFz{FKU|fyfRPet;|;zC<`r5Hz`d6h1$P3wsf6)oeZ(v z^(*QECFSnrC6(-9ZA|rg%WA6Y1J(7DYU^ss0>R*falV9jzons}qI^PDd_smlJKN{> zWsXgECuXE4yOYO_O>`$@XJ`5|{JxBY#IY75!wCsvJ3jb%6h|A;F!Hl;w9P`Vz;v)BQ<)cYJ(GrY~(=LiV`qjEKDc zj*tC|@z^2%20f39@A%+%j0X?Y)BOb*Ti`(B(|QNJR)qApm^chJ_>RF?`Kydqc<3y({x+pqrbz3NlyHUg$_(qpfE7m@z_)Z?;lZ37n1)sH&}RoIzv8)X4n2nmD7z z4Jn=NQa-2jw(|IKdz4~jsnu_dpOaUZ*HBs6V)ZL!M(RXT4;&+UoY6Kau_jwn+pN%f zgiuptlN&Nn>qILj<273+36-B|LOtSu_GZnpPRHJ?+14EE6l<<^s&$%B#|w3WP$vqN zOePC8ZI^Y1HP1Q|dz&TgEnTQng*q!_Zw3G5_C^4?+q%fQ*t*18Y+Y(Cv6c!oL#UZT z%@S(1P;-PjMX0&b8uL3^WAcXb#>(=9)YKUzWh-V*uPG@Hl&7XHtEeu|sH_PFg7t-s zRi!nR2Q<>+*r^#cRkd~4NT57q<-ydrq)^6*si|rCxxv)b^2(C(^13+xhGNXUwxqsn zMe*92x>c1mHMOB%@HWF8ietxjET3;fac%g6KjbjQv6Bk|Wi@q(Q55Q&Q+Z}q_3DN| zL!dlvSzS$4Tv<((r=+&FGT^Bysi+S3;c+%2d7R(APYL`R5>hs_6}lwYSY7rz+8Eze z8)TBaVR@jM3C8+B25u23Pp3(!uPZ4FP(XjUO$b(0701SRl;6K0++G~;nGv6Yh}wb^Pg#XHd>F8CEp~}{BBzw zqXpR_+nYsLc6i)mWjEvQfn%)4S&z4#U_H@#lJ#Vo7oipkwMeM5g*r#5bA>vu$uWAe zm=ao^;+GxaUpB`@et9(f%ho}WUur|YL?k`O%4^Nx&eD3mP#3f}Qx{n|4zSsJu}~K_ zTbqTt=)ld?CDtotGquaQ+j^<>GVA5mD}=gOs7r)eEYzh!EfH$zF6&j+tF712OkHQa zUZ`b4T`pAWly0$FsH^|0`^7tyIjz<^t#?`P7HYXr143OU+oZ`IZ9YC_Lve9QsqEg@ z(jgYtmNZtUHtS8@gswEN8!KX>TeB)$6KDD)B$r2GUdoWyfp_|1pgZ z1C?oY%YzPA+?tw-^7elk=suTM)1Fk;R4)(xu&1VuDfXwP){t=t@5tHgHaiVXb&v?f z*HN~A#G4mx#C_d~=WAGbawUGE9&lR~W!>dF@D)6(@;{WGrjg7qc& zm=}dwc>vdYUAmquO2qZvq$Y8_x2^AlT#nYJR=U~LkmD$$C(mpO{bo3>+`$;WJ0ij- zR^CsJ_|)e@4YvE#S5_HnS_w7lo2`VJp*NBD8){mAu*y)=`lI#l)}O3DTYs_sD%3SX zT`SaeLTwc4dZ8Y<%cj_(Y=oM&P^h^at+y@K)<>utg-R28 zlys?y9nCIr0|919E$c;r;cwOW8U_B8Xv`PQ*Bn8T|S1<)7Jfas?CG1g^CjP zR9n2^sdSQUonu=BZcDbcN8mOh@a=7GXq#x05x9-u`M72q5%}>3?AmNuHW`82vTZrG zDYjhOR2vca2|_(ls3!^aWTBoS)KhoaX4vv8Dn&*FLy&C@Masa z$?4MhGWO?uA#eF(9vCsMrM6O8>oV(R8^OSt?Z&mtCQr4oEw`-@>RCcPyT!KBwo0hy z2=%;wc<^VdwecNn&9>D-J-1uyDvtHfle1o)+{~MKer zJ6{d8{ZX zw&s&;^2^n1C)-Z3ooYMHcDfBiZ4qj#Ph4{(vutPE&as_qJ5P=$FBR(L zLVZW5mkCvV1N?vS{Dp0&tg>?vMON9oj@Fz)E6>odp)L?NIzFzVIEBBPvls9^o2kHsA;(|2|b!BX~C=WzT{4(2>(vHuy5e=ifD_U$<*{&Aql|p?~ z+VRwm&reQjfBrxJ#OrN0$tT`myHTiD3H9n0+s(FHgnEroANj{U=S~}o^}B6%+3vR8 zW4qUOpY49z146x4sLb>ez~3NLo^q2=Z{BTtNbWVYJqnMr=BD1#be&udxLy8uh^01! zJ>ce+f8XwvuA54Nf8vXywil&+y(H9IBc0T%tYF(-Q@j$P-o|El`GehJk+l}v+qQRQ zmAzy8n^5l%>YXjN_iXPA^)8`4AocdA>^rf2V*7$sFx#iL&uqk`3{vh9>bV#~_!E`MTu>3gh#*?uPJFI|&q)JzB1UJ;*xC{=Oh7?7Q|}c1_;VY**#V%);rhP{V;ofp*|+m$6M?J zr3*jt&$zICn4Ou=-S*-35%xIyNc$-JX!{tUGP-(7s80*^8KFKa)aQh{XSd?BTY>S1;9rtC42 zAbN=O;E185*)wH*rQ0)vis!%FV$ZTOGx>^8|N5u-uYH<*CjM)mZl7V#6Y8r%eNCvZ zx7zdVv!wsNA=Ll;H_+HwQnb(S>XdV@`{?lN$E96+_4<#8zj*e_ay3hM+U})HPQ|kY`@F!|K2rmp;3P%^CRsW3A*eIx8HBJGcx^9#$#hV^U)G>)$Q@_HS8CVmjtf`eDrnj!4w2?on>x1r! znxMCUKeIxAdP2*w3^!Ls9=y$dBH^3;82hpI?e^pB$J-f+d?eJ5h5Ct5KNad{Lj8P~ z{UrOz_EYSq+E25eF4QlC`lV365-Rf!KMVC28Nazh4OT)vIkUgiXs+_>0&6O28iJiJ zW>m6dyavi65qRWV$0&xio7}_2 zC}ie}ZK08JjM;z6-0EdDkz@lqC2RjAqV5ar7b&Sbc1V@Q8cEyJ7*^6Et%T@#ZUTo@R;b?y^`}42C`P9}^4mq94G%`vmh4yCuTxT6 z?AO?d(Y_bz4=wiV?L=um3ia73+;H2_e-xWDk)7bsmovwgmJ|aTwAfMeo|;2MeaAAFfPRs z`Xi&Ja>6)Ept?MAm0#sG|2T`W`#E%d?AY*M#v<$l|5%SNBKaQs^PMGs$gN>AtlVRO}LhY4+{?A3--hJuD_ zsT0;+S(=iqS7F(TKvf_(EznpTJGQ$7(@TQ&G=$~cnaLVlMRn-w1k)Rh8$Fqew(Q|HIp+`=0j81!0+55{)FI_FPJ|RDG z#5hz|g)>5Fm{zS0)C7x5>Z-;i8j_B2m|1(zE1c0#U&0#$h6T1d#yBiW*}S|$ z8yJyEDOier=5Ru!LIk}@`sl$=zW zm{_tbkl;^@k1tu4=ua#Uj2k;HsVqJr$(PdQ&i_G${3G@fviD5G-cS4J(Y!O-oFFH3 z@#pmH1t)phE>1NrPC2%(ernsr8S>(z%IC#TAAd~S#eCx;F8K12wu^SgH)T%rVz7&oSSzz_HM=$g$Y5#8E6XhtQlt!?N5$qZD4D`Gn>dTKr{7ilbEV zIZ7P?$1=xq#|j2R*9t9xagdfEG;CBQx=iHr#QB+kut5WY(+&q z0UMK4^V@DNj_u#^2{Y*UD&-_pmnYL$m(>O81M?zQ$eKJ>n!)0UQD%4M*o^e-q~t_* zN@jAFd+gXupF2G*YpgpnW$d_wcwe@EY*yy%kO3}= zj;2Vb;@IdoT1nmM*yK3M(c}<9OBEWfHeP5Gb~-jYwm7yrwh3*b&?X6Ove43`&kdj# zNMmo$nu_|yf`Hr+Ra8+gbv&rc2XpA5LoY~m{b**be02&<`?}mE*MKSm^5epWDx&g6 zqvPHe^SQS_}GsPp-zb!-0C>hahl_Fp`{CLiqNLF%XpT9mGoA} z*^YA@=L#)DXqiIGYIU6NxWKVlXxT!`K}0E;?B6;|*6GRlbrm&r2wfcOJa9s}&7v?+ zTM}B9rI9*tYU3GmN-7%yqbG+(GKw-QF5)GZI4n-$8jxHe4XQZ*&&vf)R)ZcbFf-kTUimT_xWCkiazMzLwXz0PMtP=M&aCfi;8EDsb;gu^SY^bY@fbu9nYLGWpcQ(D6cTBZSk!sx@l0; zLGue6%E|%(cF#QDe}HM=;X`EER|Oh_3-~u&pyokM2R9FHI;5!|oq0Ba%}c{a#El$f z8a>8rvD&y+Sg}69vzBF7mMoVKA%rQbtEi>BB9|#8cs6Im%I#sqW}_!t3^n&THnxec zZ|~8>HrD~3G`T;gu#wG(RkL&DGt%i7o;NvNZjYBef5vm$^KCQW!TWyFLBIiho1(TH z+|*M_<{vwxH9jG+saI1>liE5iDY;2&(wq7>^&P20J7f6iG5WcedOt*Y?q#0j7zQnRa(g$|m7Yo;Ww0_vu`BUPl9H=TS7s@NN{!N>Y*4l;Cn)DC z=PMT~7b}-3*DALv4=4{Qk0_5RPbg0*FDP#-A1Yrdzee?nij6uvYG~B(s1Z>kqee%K zkIINz9JM}bLzIZx9CcjONl~XnofdUQ)HzY-MO_eeQPhs8o1B!Ec|cypMwaVrWwKFjgFfZx77yGaY?J=M#s%c z87h>2MOvR*9rwsE?QF;GjyoLZI_`4Z9cn;l2rZ8`RA@7WmcMKGe8+u``yCJP^FGn@ z2BFOoT7l3CL%+T`J#sa=ZaAIo_1N6O|CCES5h=vPAwVwc|!6ny48S%jqxz z<)NM+n9a7qyh8Q`$VLVHJOe-qjVLi3H>x#S+Ph`$f{Ic$(oAgq2W;IQrn+tyq&=wbyCf)uc%~sI$-oY#+|v_N$RHv^~Md+?YcO;m#4xIOj;`DCcM=gRy#{H3{u_p`9tTvxL?xw5x@7m(U&&+Otwwp3wYM zWbwXDQcpTcT2))aZn&Uvkr;huWqEO|qwR*sQcP%GXLhcq{pO4nCDqI23-N=E#G#+; z9BwFYPectwrYhTRq>IU^t7)h;J}`pM(QVJmtEp#X5R{t?j9)w4XPk82Rg7$$kZ!sy zkI>B#yYRF*3_b0Bl1#5zjvPbx^J%EUBQ@uDCMl_xIOClO&P3-}Cxe^@p{)_xTA{5I zTH__oWVy=gJix(OE1UKkBzdquQ~n_W@Kg89s9 z#wr!^B?u%mlfeN}W>w1uigdk67g4)>hHR3;O%AhA^$}4ro!LyAIq5!*Y<3cRZ;+E# z@?N9mOAD1Rl6abv9X@iFH*#U7b5{G^bTgaUwx&2|JLec_3FnSH(&vhE`+XZ-aYx1{ z#k=B?ePcInjAXLFSKzgGb$%W>``p9{+Hs#67JbZRFOABam-^7EAJObsjbGv+m{GGBXtfBQ_ z@DnNWDrc3H8~;3}*@=H1E43!aRo&jjJdd-^8FVsk9n5sAte|{33Shv-o_U5*q1ip5 z9VfKyGh?sccZkrF7KL!VK8?s+?y#5r>U@T`RiR=pHs;QG1w~rZ5+ZG^E59a4Ygbd9 zz#Q6{&%9o3*|DRgm(~)aj*bK&qwnS9M)|)M-86dgYUB6OlTU~X{noS37|-}=MYHG3 zUlgcbz25jVDiX=`HvVq=xj7WZIM+JY(a~kCtF1J8$(arHl}!4|M${OzNWsI(Zgn;~ z*URbfKbW3ZvWko9b28@m$1xIbe+FJ2Kd$}H4v&;^OfV_@xZ*j5#R>lQbRo?Z(mGTx zZx5!6BelE1DWpMebZ&AU<)lqLL1-rm?IfX{EDdtAb4%DDPZ8Rw|4R(=MCZxUASvT% z%}&a7`tKU#85rbQzi*Id%#8hMAA^kT^FK4lvszw%Q9rcVbFfnmci9dZIfyIWygzoRpNFJvJ*bD=jT8R@oC}>a8sa ztg9^vz04GJ zJElmv9(Fz|ot?mLceC>`ppFELq?9VI$g#b(~HI&Q@_Ld z4~R@JMP7z5hLrv5YgPrSvnv9X<;FBbD8e8(tP3rQ8Hx*aVyv14j4&p>p}xL`du0FJ z-cSdddd4cuR~_8cW6vP{@WCDCrgk(Pv}fqB;Ul`64~a}~v<#1Hp9&eIj~czB=@4!* zTlSq2F%OR;f7|G0d()v!hZtkCealj81gKecbv1Ql;`UJZV!9|J9X*bGD^AXy%1|XF z@lLPLANRYd7^bynQzSLloX0ZsG-+Z?nOLI6Mx{hejG7#k9+erjENWHM2~np;T_5$d(KfbC zY{YkNG^0K~KqwS3;b)xBNfUlnXje2l_XzFE1Ddc5pkAWCdgb@~tE>L}0P3Pol|EU& z6F}8RUM@S~hmbb@!2l|vme-wsWnY5x4d-8kc8$=kZE?Oi;C-Q8$59cobvc~Z80#AI znai$Xd7>`ZJ}t0#S;$B7OXLRI>PU9)IX_~)+WEfo11Cf0>xIUA(2cFmkDZ@5KNZ?d zLc3XLcgl>1%J?#icN>dpjBVWYfm!lV;oT>FL(eT_w9Fu+EEKIS3|*2F^zzI#ISZ05 zU+R>te-R7ap}Svj?sb0S{Fci5PFdjm!TIC-&`m{wx~c_orn0=Sj3#11=wj$eLc66& z5gJYH9nW*uPtKp6zc_!5UR5O5&gUUnm266ccAL;{4KJR$qFD1}{|K*^Fi*mPX1smu zI>>eKK4l7(M?Sd4b%+c*I~BO?!+ox|31Z~h)78sZ&u^17bYmyAw76K;{@qkX^8MOy zCAoAL-+Z&vWped)#kzo8aUQAf!y4%6-z8ejMK`oFxF`F-zo z4R`TQOS5Z)&>n1djTG8LzvsO!voq+j{=WAEMelAKu%o%> zo?bC(?|s6}R!ui`+Vaq+%l-zA3g~ieI;%91wJBqdOKgvpK8LmRZ4Wrx$5;IajGo-y zJbc)xd62aWp*1K;wr_JKkNgkiI>@t zdacmj=6E#eNy8|hoI#vfUD=o`-viN`obPp+LDa+`<>8(kadQeEp^M+)s-p}p4_-+SfwcE3|Kf_N~yq6B?8GKV0FuMDeK%5vP)yC@(t?g3_6u46GTu>TcM0?M#?1cc+B(jDrLsaN z#e^5o%RA4$;W?3y10{tl(ziK!AH(pOK$KTy6)^%1Ka}TG$c1Y82|E(xL#Bt$fh9@A z9rnpKS59>hr|~7JahZWoQS;>n0G7I|_n8q4#wrVD)&{C`t7T{tOUNEt`EuRsdPuek z_qpzOJ>Ys!Xuk;USE2nTbY-XOVb>#$`&^F+Jxb_349aTlFu)wSiU0k z+XADUhE8Rp(I#D+;v$cG*7c%%+;gryuIF7Z2t8Wp2MPUPp&zmnWAsL8@+}CO)$n)! z3<+)0!TniP3aky;VL{2-P_u>`4etDDcnfnV5JVxJJ`CN?j+XXie(oR8DM=`I852gz z`j(4`_fpr}u6JC2bG_?&&-K3R1J{Q_KUC;Fh2Bf(F+x{`t_fWiy6IBsO#B!60s#42 z$g!>qtp!RK3pttGU(z=D!7kP6U`=H}8rJlR(mH8X#!xkE%X0m&+thN6Ggx0zRogke zV}I%Mb2E$htW)N${Ux5k>(S+`M|MswzdX77vY@ffN%vdq!iLgdXd6c7^xpkt&8B!c zOD(r{biQN1Wp8UrJBS*o&YxYs%2x9ip~p76Fz`OI)$7CXy3JbK`xy5@QG;9D2fGgu zdS9UrYTI(;?&;XZl~L&u-_$i-wokQ+DmFQCH>pl_5$_<5nu(3>)a_1xoJ-> zLp|97&0H4Av;8xnn}t41=r*A{g+8?D8otN5ZHlf_uWsbpzN*${WuZRM?c;@WHz&Qh z6NHY?BZWSiP1f#l?j)p39{7tpbwT@6XNSro^bw-Ry+UVZi_oo2N^$H82Iv3$yDi~;)*aq<318_t3Nf^j@1E8DYXmLs0;!Dd z-Y{S^?Jjc9cF$Q*OV?y5QRoh#a~jg*f9}nI_IGlOV$F9iScn@%Y_rw9(7i}0>v)NU z$9#g}K)JNtEEby^jXRgPi`h_1HFvVX_B!v}lef5+N-6(vdc$N(+2Zdm6S}*--B{+X zVtnCV?q1=paIbW)a#sr7BXqCOeM0vOJznSuj4#|Z?ppriOD!2+=!rrf8~Xn^BgPv> z7u8T%E<37xwucl1nC%GG6Y7MvPcD?r*R+c2az;xX0-43(@PaVNpWwt2jlYQkc)cRr z(e%y@8h?jlB)MuE&aBu-9(z!@8Fg=Rv$3?*eU!V&ErgyV^kku@w7NIDw~VR~I+k3; zx1r0XwXX~`(t=ZnMhI?0Z7YFMB$DC7cDH3IJHMiuLvT7>HBOXwAFs@5ai8EmQRqhq zy{5_Ws{0i8sqWL^|3hp8I_F7WakjikGRPySv}bdGuGfA8`w{n}?#JAZyPt4B>3&M+*+S0|`V^t( z3Vo{3rwM(!&}RrePv|p+o_~c5%-ql6V9$@Tx?dc{3%Bl9LZK#I=q%}Lg@P}2(U*u` zf0ci&#Nk+l|0D0-cK>2*+gC*V8(z)*W8V!S+b~1dp;rTmKWGus8rHFwsckqDZVtK; z```RE5^j0Mlbcw(ApAbCTYgLBs7Z=fB6{7A0m>g(u`!Nuf9?L3H&5Mr-QNhkNa(X$ z+~2vs7y2Bb&yzLzr+h=D`)BuW^7YpB?q7MKU7ySFf7D8b|Gl2+a;$T>Se`>Xy@=pE zJv@hc7&FWlI$im~R!@vaTn5!wgx4zih9bwX-3C1iYHE1J z!`NNbc2V|%%pD|{P zyftUsZS4ALOJ;Ok;Xfl4@AD*JDjvUwo_(3nm$wY~Zus4zN3H02H|L;o1SGrIt9Tc$ zx_*&7CpYriN#yoa&v<6VJ@j}L2Rh2yljf1{!ACcHGI-%yUv&VBq%Ufy&13B&G&NFI zZ!1nE9vhQ3F58zBA3x5W;Y-TkMKQTGBFz`?PEW|r$QqlLmYA579EzMg(>*hcEoX*4 zJM`-P$?a%eKI^8p_T+nJc?vv*o+9^!{65z+Pv}9R6DV&Idacm6hI%@#tQY#m zPFo>EVlr(EcDLa!J4nzpXa!@RAGwSz`fzCgZK>|wek zSRd}+Je7|7WCAvb%{p+{?pba0glqTH6MEJdVS8gZY@hk3gzX&)-2URbXJhC^T>Z%6 z*gyLz#3yBK2b`{}s&w;KJckn2H@cC>|c$VTQ73XD7_6RCSn5&Gt)S;mFa!!yEz!rKhv6XZTa zzdt3BjfUe=Hg3dad}$eJnF(1b?&JhtmOC+XT!uR>GdshblAP_2&q~VjWhVL~5})JY z6{Tj+xk5jt*>k?ok3GPogXdx<9XvZc%|hQU^b^_!51yT#OS_o{@bJ={=L(@8C#M09 zXBwc*{n&bUYsYy6&$XT#yUXAvGPp(PC&~;?l6seWH6t^Wa#m{eGAn_t&)R&@HDX%n5h=_cTr}K;Do(DY7Ff;6V(DRVzVb3F;M?H^u9``)q zdD8Qg=V_szF7z{mex}gR68hOfKS$^&>pY>OtP6yG;T4`|6|ZLxyx@7!^OEOf&nvF0 z2?6wrq~~2Ge_Sr~D}>1_Ov%EO&%`icL1<Kdgsra9R357w)>j{{$n%9-OoP% z?kw*gm@D3A$~;nSA9_BPmim#?^C-UKP@i?j z15OJ>l;-ey7`JD~-)rqJ&SjdULq`fWmg zFVz3PEA)qj{%EKE-<$2tk^R4Ss%!xWcN;ZP#~e-ui1DVTR33EE=`Z>%5KL_1+`B8@wC6M2n9L{RyEzDfFj=PG9nj(4Q6hb3)%E^ye@4 zHW`aC-Yv!#L3)qnlsx?fV?{>jFNMEWPJhRkT|3}N{dY$B-HezSj>s3n|Nr_$klwQx z!F%b@Uks1nz31U)gFYI*S|VG+o|hOu+s5$TX75f0Gu{?2y~fKzf2GBHiFcRKUlsZr zf7%${dxe)T31STIy-JSZUt`4Ny;jDauXh>4_lbHo(sxBuhAc<=p6Z|?(L$L3efd2!G2m*re__r`f2|1y8|ZieyRhe`TK z*Q86gs1;W|GQIW8tCg+C9iOtjZ5Z!;+$)a=k8bupDTkSVJAl#_auP@6jIBR7yzFL( z=zYSm_5N~?lYVRSw7CLiCw$Kt3 zJ%rIiy|2u<#QTBwL+?l4kG%vsL_GZbOz2+-{mb@7|3zc0_^~loT+(*hE=(?IrY2`MX6m#0Y;9(0iWd4$`;CFGBxS=)Vb*vOhD8*j{J5j9l$(k&&z2nxU~OX^Q$oW*BZIeKUOv8R+@) zeY1Q8zCvG-Z?8PQD-PFVHKdwI9g!TT;D>8`Fx z`>$GX$7A15AHHSA3G+X@vu93Q2k*PgcP#^3-{rn5d{_Fe@?Gt_MwmtjQ=Bl36sA$a zG+LO(gy!jeH~4NG@Ihpr-eeXgtDLGg-YNLg=jnfcF8)9>`F~)Z-gl4heynA{*S`Bi zk1AoZv<&!mz;~iY4O8{|%+p7V_)*{EOwIcq6DHe%rsjRmu*p=$OupxcnM{rY*x|fL zuS?&Tnav?%$(*>5mXbc!otQK(MIPLiq5b3ile@d^es0U4BIIq^^0qC{cDgOcpU*Z-{}g|&f2x0)f4YB$KhHl?n5GC* zt}sm%rfI@7U6^R$^Mq;U|82vJ?1cW`xee1_<}X)5=RQ!$J>hT|1upPIDolb|Fb5XF z5=9wyFvI{avJ4vm4j}!oagYq$H;ns+r9mcS!(!M1r^5AcBiszEjtsjU?u5JHUbr6~ zgooi#cpRPt-cTHdK@R&0_QJRD1N;QPz;B8&JQ^t9@I!$z4%dMrn}+v;0Wb&#!&oSQ zVmJzR0r?Mq3%*m75u_hsg^4f^R>Flqxkuaud*B6l30{HM;0^dIkjIF3;9YnhcsXbU zWgS5o<9dM#lq-${7vk2#W;hAX2A&bu0$0GTfNtW@O&q!zIR?=4$ONGLBa`3)xC}@? z@+!E7Dm1|m7zQI?By57?;Y2tYsE1Ln17#caF?( zMN!5~1N1Ux0W5+g@DQNGG3aCr>Bf-vn4bW-$51!sC^!fX0qVz$F3c*R3v(Qd0%SB> zzz*1<*$eT2yyj#`g>pb&<|h<|q>3dGxMo3j7RqVu0o0$B`nC>&A%HHd=)y{#RuA}q ze67f5t%tSH2pa%hvB6WZqFd`Fa4B34SHgY3bFF^`^k)4AuovqO@FO6v6?ttjFdV2a z8}((Q{5I;#HW{YFELaT70Q<9TgNxxNxEo#obZA3|wr}BAg;Uc2`?enp$Y{rY?0o=P z?fqdO91a$+fdi1&z6Gdn`{{5doDJBg{R{XC_5#mv;17;sp#B}yzk~XB+yV~*GCQ7v zXW%(_1zv+U09`oVQWPik>l_1FkOwni7OVnv>|6`z*m)#SCg)Z-22KHFckY540GoH- z3FyIjFFXQ|0cCJf1}9~3en~Th+`J5@xOk3h9xMcO%F9)XYXwvQ&vvbYqd>rB;JL07 z02^}gY}aXU23!X`+jSS*1Jt$aap1Wwp6fzh*W2(ncn>~+&q0>uYxoAR1$Q4948vdq zj0Eb!?F2WZ!bYG>Zp!4QOm52LMi=hwa6Fs{C&Q^gy}7A3H}%F`oZ>zoE`*Dr8Cu~I z*bSG#6>t??1IXk?r|z48x^&+LcK|Zt28suJ@*E7Klp90x11t@d;ba)t^hZo^xcvVpnkRf3yltMWygSX%__yWFyy^4~EOo{7Z z18jmOK&G*WLN7qqV|75Lv1hM!kC*aI)XOYjPygS6M+1Nam^hc5wn(~vjqNBBum z(y5R1BLEvnr_AX*H=Q!4&w+Wc02TqdOJ57?VKW>HXTk+=5$u2#pbpcofUDpdxDF^s zh6Zk+J~J|a{4>ZuqXfu1qYBmld1ssj=Rh+cd&VtrC)^G9!b9)~JO)p|bMO{?rYM=% zU*^Hk1A0OX@a#+z#6n*<3DHUj0!ME{xS zHcJQY&B})wI04X07Uj=65718*_MLS#TnpF3jc_yE3doZ6I6Mi|W!CfXBD@ULVb;%z zl6^Q}ciEIRo3du}yll#voeJY&B20#KSOpgXy2?gJ+1Nxj<;?yFzJ}ivB?lekpo5%| zK)yLPZ~%GdkarGw=b(q2Oqd08fV#?A0N89!36wzq>OlZ?mV?YW$ee@BITryok%LX- z?1Wu#DNvs|*m}-=fDUtzKZkPWP?tH>WzJLZ3_J(uA_raMQ0^&xfHF;)3r9jTaPO3N z6(#o|hyy#gzym&@4s+2-E^_2%!xWeb(_ubPpSeq+6qZ8;pugNII0deP+kvv?Qr29a zmrGf5si)j$VGp3++?N2oPDOW93t%Cv0LnQPdzrcoP6u=_6&*~y3CMTqoj^TJCGV-^ zJ(awtqKB!kzTnumo36Cr? zqd@&le+tmY^f%#c_!}V0^bg=8_zr%8UlnCW6!d^zpn(a{;fy?>oHMAG83CYdGpLst zbOSv9psw;>hrhzxfIa3RYaVr%_ZfVtC^HX%o)7~X zP{x^kpdV0&GtukJ!7vnt!x69mHo*>f5Xdi|`|{m@Joy!XKJw8=KKjTrf zr@(1&1|Ua%D_ja!z}0XA+zhwD9e^D9KQWxAoU?R@g}y-9W*rVgU>LXnozB9hW@SJ& zZsso*b2wO@qoMq)L8+t7Mu;|0d-bzJ@EX3TL3u=kh9=!xEJmR^jd(=6+8ym zZo!9&Qg|phVFs)Q@+;)N!q?zOMJXBpBVZJm!3sX0{6$B=1egSAfE-2WrD!&wlcI&N z6v_afD_Q}_QFJL#&Z64^e=52MC|l9P@F+YEufqF)O%;6!d*M6yMN!CJnSBsoXR|5) zY|1km8=t)yPJnaaN}%3nql?+(J^N)K&)MWT`x7AF+2lL>TlgM+grAt&iGhJY9nGPC zm=h0UAsLW&4s|vMS?6Rz4p3)vih<|PDF@`7gPe0#K^4%p%t5bn>R}D6gEQeqcm@8h zD07Dc`OW3NxyQgRcmSRR`i8lC;05>#Q2x0e!pHC_d=AJl7ro4j26Qs7C+H9h{h&V} z$Gq7}($8pGSG-_XZ!NKsL+= z>U}=Cm`~pGw*Yz0C(rrk0Qt@*-}x=D6L!I+a0@&L)Y1Gm;7xc3-UH;FPo2$2*7;w- zH$a^&(17PJ=mW^P067;7g26!BvH-m<7zv}n4Czn;TVXdm0pz!k`xYibA=E-6Y=EOc zz;QtN7oG`c!?|!iAjd-VvhW%}CktRg}d&fO=nyE*6vbVn2}QV)9&^ z1?0P!d>7AzSx^YGp&V8Nb+mXpoB$`oX@I@zCOVP{HW8qYw%uBBW@?1)uOObgg`7R~jrO&`~@I1T-@4{C=o3-=@_(@TyI;8|# zC^;B(5{rA(~|YD0geIz zn_&ms1AkML(nA3KmXcp7_mxt|rN~qIG@y@C^ihgFO3_CtK37WlOZURJ@ICwp$Wex! zmFW-*{a_Fbf#DDbl)r2#P|mV?SPPV`Y$I%eW8gTz*2+$TTi_!_DM$b1FL+fieb0g9XrOzzH7k0d^ih#{q0HfQ|zS;pfcjhUK43d5J^|`*#TW23P|g+KDM|&psGvS7C{G1)R9pb$SHXQN4}md2eXOM1 zD`!AH6u?42A1jvuGOR>~m6d>QRvrmWuo zD+d7iR+4Wewoo|=#()K=tIBks?kg9-Vps~)S0(aRRsgbA)<7LJz;VFyD^CXGtVGVr zv)~*!572An#ekhuw!*#erlM3G1ZKzu@~h&$s_Wr7_#D26zXLW^^_!wp_XNsc-4FW1 zKsX$bqZ++by8)e4CqObB0TW>|AV+l*P|oVp;0!n$C|mVKumf7)I=CCKsp?1J33wV_ zgje8oz|N{Ee+}iSNri<_4y$1cQ13P9qK3R{t^x9_AbKmM>*aYXpPS_2X!Jg1Ims&|}>exEWps@~b0{paRjL0(Kj80(l0>GdKyz zH%PugIXv#EQX_?709oi`x-Pro`xxaJ{r(R1Nvw{ z9}T5I`5UUB237;gXh4pJqv04h4o-yA;7q{h8qNdC-|!kx&IWv`;VYnQ4d27Bin1mO z4u&4k6Z}vH=zk6Qts##!SHU%KD`2;4u>UpWxrRK~d7WAC0|%@;45Kp)efc z067}HkO)bT3fNy`I^c7SIY9Xvj{(Zrh%Yr>1eC3DCtLwn!*y^2+ysABl=ZQI{@0V= zdh%Gm02V<2u-o-pfjrlf=lXNu0wCY@$h-a$*bSG#t?&>$4%q7YXW#{R36ORDYw!_# zrzl5KM@O2V4;%&qVK7irF^sxbbY`7CB|At54F?a%=0_5262D}aL!Uur; zZTJH4xeeba%0}eamaMV8>azf+gJcaFb4vFPB&sx8#e&{xbbM%4ky6La4Jy# zjg)8O=ZdnaH((E&%#aMJfG#$X_ogx+&rRgHX)TcNCi2}RU^8rmW8f@k1?p(i9dI|? z2M+@BZlcaMA?v1R;d!9WHhlu}`CkHZZbHsY-@}hU+p-D0Qhep8Xux)l8VQr39Jayb zKz>JYUsFGbhnX-B7Qzx(3Kc;4o9bZ=tb_G{98Kt@=_EiWO=rNlZ~@?RP0c|0o8AV> z*@Q1O{Q#7$=~qP&hX8GhP(cUuD3W0%91r9t$V1!+H^V)E-HJDXJOz1*z3?57uRvb$ zo1z>Y1qVT27y)AdTRqwi9`FIO9-RmokPp<+(JNpTRKseh2kPu-WIcK#G{IhN8J z;bNeSNAHAPK-+ROdOi9oxCX9+r{Ob2+1v*bU@nl~X71a3FCfq6pA}^b`q+X#wxEwK z=wr(Op!{1#!e}sq6_8`gI5-0Ey)9{w4Y`2NZOH@V*m4q3&MiBj6)pkFw&hB=8m@(V z0G)2ZrnbBUufiMfH+UaDf=__*Z>2n2r$7Z@4_l9d(|~%~iY~U2_tv|BJhzhP*5`nH zx03JH*WoYlCcF(_!Y_)ljXK)a9|pk?7!Jt0jXK+gtlJ#m2I_2E7V!LSQvo@*A?LPP zPzbaw+tBN_1+WOP-EBw0d2lzpr6|W74CHqV_Z?FOC%|QJJ=_Gh!tL+?Q2t|{hG$_9 zya32?40<`{LqI3Td=7izJHY3T`AJcZrToVp0hIGteCgN%plrv^gJLL!04xXec za3Nd{)Y10);URbwo`9!;I@^w{+h2y)fI8d$HGB)-!;c`#_^YBE7X|3_xE|08RL}t( zAD0X0__&kd26z>y@8gI5KZ@=u%<6hw0PufNBB6vLAdPf4(%s$N-7Q_x9YYQsL+21f z_aNOE7>Iy~ieS*O-+l33oM+Ga`nN95K4*bmrkcmpwsgQOrkcgnehgy-qwu{ubsQ6z z%R<6g#%dziz$WxC)lQ~9M;`44(|qqudyjY|z+9)LMt#%rQIH}OqbwDujM}GFX8>|c zJB>S-_5+VGk7;HwJuaUj=5#Tq=Rw@*;!gjZ;*_Ecb~fEzPVbAj)4yOSBe1LKb~Rm} z(EGm^2Ju^zv9`R=Q+>G;>&rCJXOw31o zLJBgFgIwrgrXFS%pb+ISlbO}1Nj=>2O#7SJ41LU8j5=p-W-B{T+sr8TbC7dYt^aSq&J7Tb?x)JD;@zvzR6JtTTu?OUzk6Anq)2XZ^}={LY`e z4uaY5lZNzsMi%UAwti>lMX$39^EoA`i~O@2q0ia+oZXVvxY^m}I=d5H=*C3c$?UWI z5d?D*A>JIHn=^!k?B+1XI7u{@Q2(6o_?{oRjXvg>%bb5PlQ}PW7X))-5S#bV$K1-O zb8b_b(+aiC?MP?3GMMqWskt+m!#tL-oK?89x$2**p0E%Z$U#x6WA9;R5hixnAjAw4 zGi(athKU;%#(WmCm<{Z~j>3Gegk9k}U!&hJI}6im*e~42&cfaX!94lr#YCU;^f@mc z3GjC3nd`iye9R{lq&{D;h(m}s-{pW&!~{zN7-mFehXzPZd_iJ8n_ z$7Z(S&CTD1`se=}1Pj!;z*|}nAGIw=Omci5EJ#B-%yB_=Mz9R=7KpLnG-tSqyItV^ z7l^q~%!P3fccHio^}8?$ACZhq!!eina-c`P=M#pbct zJQim|{fi4yn4%OzAB(F}3vX|61DetTZ*Fm0)W3Ko>RjwCEsjEMiw|>(uQ-8!^I4bWDnwo>o@!e$2h@Ne&Q}}HT*Xo@ff{^{~H8L zVv-0uT9TC<p?I2FbXqW=BAd-$AK(c!fGPez$VncOg+ovk`4E;yfpQ&r{!j` zTQaciTHMuDs74KH(UNZ1(dw~`XA)DdTh?CX zI_9|cT@Xa%qaNZ#h!HW25lq0{MnoWHgqRWg5jR5I2>nJx^A%_LmizpUTa9?ke>_94 z5wC(^T|7R)j@IQNKZPhtaqMiJUe{HiGIqAEHSOp?C)BvEJ3aB;vd&!B4PX$1na3`^ z;bjo4PlI^teQy0k^t1j1=CR&9)|RT33ZWMFlLd4xD?#5NDA%gYnl)+7HsYXre(3obl#GP$X z{}%OZapPNl;6DEZ!PYp~`&P5qD)!cVh`CkFtrZb>tGHWhQr7GRj*r@u@XDmx)1rc9!8&A^||#Fr}5pg)m*n;%$`&X!IySldD z;2UmXhTH9EhuQ5YhTGjC-VQN#jKf@Zn8%JKY(vZ)V(#!hcSIxZjtgAk3fH*9U;N8c zUhp;ucItCy3}TU#bQGc}#VJKuDqvqb^}5p?>~se^?Q3Tjy3>>1sBz~2e6Q>@)15;Z zfxF!~hGiVWj3Z-`1@R(%E^-$7i9C;aM4CsWc|@8=TUWv+3PZ_)ei2R!5t{tALUSNIY0+jEy+ z@t^PUpYM4Q1bgjr?}tGURT#BJm7p|gjB>A0Rj5ua>f-jJyyvK9w4@E~>4f`@>OpV% zVP;Ww8Z`_vi?YwCaZF?i`i-)~sJYB%5qghW&MMZj9{opcMek9&*vo#*HOefaP7uu* z&U1;YxQQq?5oIn>W)NitQDzWj22o}Z^(T+{ho_iF)N9@a!9H`@7n``m$F1y3%tw4e zN>Y=KjASMoImttQ3Q?5el%gyZs7y6#Qiu99qA4wCO*=Z$h3@pCFW$<&FK{pWMlhN$ znZRVGF_SsWV^IHMTL zcqTEG8O$b(1uSMMD_Bhg8`#V?cCwo&4se)boa8iTxxi(vag%TPo}akGJs$8ok9fkr zJmV#Ag24ELgE5K2`y}8)lJGIf`II!I=QFa9om}Ll0EPLS5|pMK6{$jXYEhR4G^QCX zX+wKD(Ul(brXK?t%rHhWhH*?}3e%azT;{WgB`jwZYgx}Gwz7j=>}5ZPILZm4Im0== z;XBOopjjT$=b>Wg?NBMoBIhByJ0#DcHLT-B5F9qg!*Pj6LRzDz!@Y1Thx>Dit6az4 z4%^$2927;KBk~+6je9w=40(>ob3{K!?CxkRr$WKA+>zI8Vo615KV|K@u^MtoSa6BLev9Yt`9k8e4UFeSa9Y2da$K^SGB?wMr z#7&%#=Y%{biZB`bIU&ypc}^_lFJ2?hNqJ7X!IR$G$#%$dQl69U;iTI?`4#ei&X=VYb*P8^oL|Q-_7KH^Ah?i_l%ygJ>FLjC#xjnH+~5v(xzBGwaIrX5s74KH zvy!cBXD7RZ;F9~el!zpJ#3#6qOM@89P)6WBE`86B+~$`cxLk;GRG<=731>YU+03>e zxDw(6xi2yVndo*VMqu%8>P z>47{q3isAQRKNP&&|@zW*PF_l;`GJo&~|zv5@C$dA{~N z^mR+RAi&?^Qp71vC4_*_4*fgdCo#=w^ zp>Gdy7J0sv=i4hm@LfjoBF}g7d{>0Y%txN@dFDW zLY`al+`1G5-=`-x@_aAP_l5Y9S)d!6s9qQ+5Ey|{^nnv1;I}hsYe4E(UeU@v7dw3&+WvdAsrd8pW9zBjtNX+ zDnIa$KX}BGAo#gFb&%(0d46upT6VIFJ?smDJMl?QN>Y)QzKmovV;Rra+~qzG_&o@I zDM>YIP>Z^(W;^oyBF`^-gW&G_BtxFN^4v{LZ-yh!U3u=>&)pl`L7uzv+_j&3#i@ck z_vE=(o0V)uo_q4#+Z_b=-{T|Xxi8QCPjMgj2QiqT*w20UasPXM&Ycc^=5~U>Fzp4tXBP^Wf(o_^kkCkmomfeyhwPB9P}d zd4Ai%yC8U&0C^tD^DrqL>4!WI<#{-S(_H5!-*77ke)m1}dofB-in7dQ1*=%YI{piS zKVlGzIM~l0&FMlndSE|)9OELFxyp?o_%jOyDNIp{Go8gOVHqp=CkP$|$n!{^NAKaz zA9X^WNAf)C$pOCNEa$PGztWSNyyVAz{+dV_^I1qZfAW&oybXfKA?nkHc66XK?)-5y z@;sL3@r59G;?AGsM4l(|JSl)Xe=-Mop2+jWexCfwzdYqRuY%z3nlz&Yt!PUmM>)<( zP6xq1DacG#vXhHZOk)PKn9Du>MxKA<`R7Ft{9BzS$n&o}|F&iahmq%BdHy{W1pj@) zXUOxPJpbij2ospZ6sB{F2R!5t{tAMp-tW_D)SwpL@6+XM#=Sq?$!@&ir~5e1w|s|q zPk%tXr@jlGiuv>r=JV7(p1$E-5IjpjLOvi7sYydx?D<)4@?Zzg@>7~Jl*M=0vpT5j zSv?wH*3azqnY}*iMh|*1h8fJnT%XNBFV9x665mVDwqu6RcCw3OnB%h(nB}vpT;n=7 z@!jz3F81@x9Xzw2Xa8YG&)mZE*u>#IyrJjGu#e}-Nl6y$SgY?h(d=WAHU1~ze+bDZY_ zm-rt0d;TN0`IATd#S`B0E(l%(#Nb1c@G<&(p}!ZY$U_NAQi?Lvq!zWYyBDo!O&i+L zn?CfVKclg~7h@TRUS5Q;fW<6f89O-45sqSaFD`MJE7;wO+x*NO?C!-A{^lR-?qv+@ z?PXlzlaLR|Kpygvj{=mTEaj*`T^i6ByL#CIy}j(qNJgQTmt&d9EM_y871+(oRoKtV z9k|1nk?iI;?(pSFqPd0}eCfTt{GK1t+sl7~z!M8zg@{2c5@R>7l43uvGLVta@V)S= z00k*T5h_rTN>rgCjnLPtrgWk+UGT;2) z5O(*<9lmmhuP$PDuYN#(uYSVrUb(|pfAJW*d-W~|UhDO>y}h=#*YQX|T5^($+}Pdg zl9Zw}cK5m#wW&irTGNKMw5JdD_qrbg7{ge;WIS`2i+g-MpVh2kE#BDcUD)62Jw$N| z`+I$wGuYwlula`W_?3tJiT+;e@Abby@a8=}!v5YQBRQGKN)Gh*Mt^VeQ;~YqrvZ)7 z%bN~#q%#8;$ROOFh{w-MJ{oLANdJy?d=`h;ahup`-Fdj z;GMVkE+%o%-#h)iOGr9$VNdV!kdIQ7rVQn%O&#iDckkNZ4&SxI?%wsKAN{erckb}r zmyE;i-pwV9c`RTJYl&bzyRpA_d)Y@cr}>Jre9d=wZ|`oSzjt?e7KDOW#3l}L`IuyU zLJBgIjhy5m9|fpHeHze^#&n<~o#?_q2Jr<$n7~9PF@*&zWD()4X9FAA%svisgyWnf zns2$!uRP!(&v?!YUIn30T;3-h2}nUoJ|#8T$$`E?xhYNwN>Z8{)T9=5Xh|E|qrXrW zx-o(&Ol2A~&`W3uOIgllwy>4$9O5wg3LWDjm$=MTe&RMi^9zr8!r%NGgkpqzo>Lj?P6T(PqA4v=Otr=w&M3w*o=Mn6%xWU(a zi`^zDiTg=V12auvrU@d5WH)=+AA}OxW5N{JUBcA3)r2FM!Zge?;cR~AIp&(sToanb z2d(KrFZy7%ADrSU*SU#$K6KX~R;MPlsmD6>{ox*>I1q#qB}e~>^qLG z*0U)HC01|Z%w)x!61%U&YD~NgvrW8;wLvJ!AiiWg_L@XbNz60J8`PiFE|c12QZr0C z7`K#kIHNGbq`#r>r0yxH&wbQ{j&!CgdjIGoSGa~9eDqBa`ZxpL_s97tKw*}!0rh`u z_aAQ$LdibB+>@Dmvb6YIvN4!>veoE0na?EKj9W>z6T3?mg?S}A%rVS4nK>uB#Si?1 z+e>zj2RuX%$^PO=5c)*kPt5F-y4cw#X8g$^ehxy(1Jshd1Qn@5b!yUx*0iNPW|7=1 zlAA?xvrayYk?0}$1ST^L{Uq0S@{6c3`EAsfTz$#ami!OYmRxNqIySPIt(-&epQ`86 zyfi?(PkruFyZF@oeflB@rHVmp;u4Rfq#_M^NTr8VpW!{Ea%-uIQk+thrxI1M!&K@| zH5GNHTFxremTEoQa9^q1SE{}2<4zDt{Sk!_FSQt{ThRtPPi^O^?KriVsl`malog1Z zTED6Fn_9oA^_yBxsgH62-w&y;^ELWR{Udgj`WOD@T@Xr>4DURRUemb8H2O@FiLB%x zH+Ge#AVsJ}UFy@2#<-0%Em3cpc67kKrcryE?o2|RY0mLy5K5aEvC{h6wC*>p*`)Qp z)2c14U8Vj1-}oL#tH!jif>63x#KCUT*-bk4mF@%FSGsg$#9q>=H=TOZsW+V+rK>}K zMl&9Dq?^J_<`BkwE{xG znCW+L7`>;z$Q8s%Zzt)$;|KJdUeD?OLeJ^{<2iay|0W1!NP>JB%sxXOX0VY+j-t*C zUm-_^%Una98NT5s{y^Le&w@}!v&{G&=9n=di4Z@d-Dk{3cI+l&Q9h?QRj5gA>d}~{ zw7{Ka?1?v((OfgmVIJ-@V>rw3J~OVt4P;bz#x0m{Ms;UA%^B35(R?zRPe${}sQ!%K zatkxc_%aB6=1xB=No&4j0~gR=rubyVoH7+e51G`TsT|cYyG(Uyfci73KT~sBB3`B* z^ko2FFq~10WgKeHbQ1MtGS^J%%H%y|axqj9F*?6f?`*3-L0Gk$C}&Sj9HX zAhVd6#mubV%-ZFxTP%KN0vcMWd^gb!z^K_H;a0+gtL?ts6ERXj-k%1>dETuWvzyIS$!_6yUcnO z_nh@PuXr1TvIV?P5MxxZ|=$wxsxrv#-bi$1cAL7my=GM|O0Et}f1 zsV$q@vdN!q4<|T_8_9N=Yj|_nen9Qn?r=8>?_%YnAye5 z?yY4PH@mpm^_l%TUt@pS-9mQnH%C0g&5?+tBqIg-%#jxR%3)tQ+-#1Ll%X6Is6d=rTG@}LG>BTU{GM-78XD)T;^8Jv@ z-f}Hw38#=FcXHC>2K<(ED7PEVU4y20pSi`%EoSb~h?`s7+*6o_@1ESVS%IE&>od1L zbL%s=K6C3cxBch7$+vvZPu$@iW|;e35XuuGCb5Z2d_KUN%VUpu%pi|C^SIeOMQFrO z^pWQ%=9kys<}HMM<+ZE4vsi?`@jKO_yeqMrypil?FZ(&jVZ_O+X8(XqDDMrv!OiBq z%`d1opW5?!{*L8w4LDvHs9j`ZUTh9XA+J1;OEw^YF13oJm)0%8^rvw)ZdwzHEX9OEL_FvkM= zE?|xYe!|`h+~uDjR8a1MACsICThC<^bi&>^C^#8uQ^Nd1Lwp@%|xDD*Rr z&_ki8yx?sRDjXsfama?f6|RrE3ahJd8|S-dpj78kd;K8shU7Iko=#d|OYaf?r63e%Z|K8w%CzKYvd@#XAdFZ(#aA&zpK zlSFfdb6ntI5GwIL>M2p1{)kt?=SqCfs~}WT%_Y7=FwR9=; zS=z2jyMfZxsEJ*bu1_O+(uaNwU=TwX#z;mpmhqTFX||iz07TVPnEfc@0T*qFq1OsFQfi4?}AX-5Z+taq$DE+dMTS8J1m{tQNa zWk;a4vT7@-Pqn$rt2DW{)u z6Ig_p<-{x}RyncC9pEtTpxjBsE2rmjU-K<)p`5*yyMx}#{fav%|0zXrYvl(M#!Aez z{04k?m*2rI%(47FqPfOR#4ay(d9lm?jG2~y6@)6dg98VHuzGMY%t?FjBp?<$%AF6r+_51z$P}MV>;{xCD z6L-)<)rb6vU02mlwU5b<8mpT{??dXX5YxZFX!x_a`)L&EmH77Hbg)GJXYOY2vH8-)9?buaK_11h7gleg+ zmfC8mtyTg)ATe&ORt7R*zJB{YRI3E$T&o;avAbG!SF0}OTuV*0mJW} z8H8%bBoP@Av$mMEiy&@oacjHT+U2po+Er+boz>QBZE$UbI^jUibv+;Io zFJLp?R5~Tl*lsTWTNU1gE$YgzAJ)PaV6cV;6PAtK)NZyu~{9Sy#<?Z zcq4VQQ-H##zpnc0noC_h)YXIEuMgF2NE4dlmg}~s6J1byT|4o6_My7!s(XavsHv{| zs%w6A-IssgI#l;2?}AXheAGj{dScWYhWo8Ifw@E=W<4?M>9?NSttW21lbpuw);q^{ z{D8Mv?=PP4FE4O=^?b+rujxbeKSa;<^;ut^_4Qd_pY`=w-~Q`YqzcukMO_+ThV^^V zhkgv;3x=ZJ`lA@bIMiN$5^GUs{Rcs)K|FFJR)fLVYlA&p<9mL>-WuG+cT0n(xUmK= zd5!uTs=r}ElJGIfNliL3V&4t*(6A$FY^c75Ll}2oi#ej3B+rp=SKG5=o@bF zBR`|}M)$F=#wjU6eflz&6_{z`^=x80k(guSC{A&e8;IRl?8ag@zKxkSe#yHa)FebK zd}lR@&j)x9P12H+vgoskx6`B=`fcL&o2aEpBbw5J*0_TvUtrEnhT#^PjK-{+m`Rg~ zOko-`Puwo+TGa#TcJt!h(`hBQVU zt<1F5E^Z)RtN+I^m(~I9x3!vEXG6@^Vz$k3PhnTB&vB6}T<2>Z@q~Z)k7syutzYvl2(_`xHZh4q zTcQK20FM?3}7<@n3jAsqUaBCexq$V>3P;UqIc95e(c`D&1{62oDLlea8AZ7;NIchSMVI(*Cb{KOsZ@qpiXguCeQFXqtk0}_*zkNJd@sJml2%%-E+ zbaWdX-FC+um~+R@OvP+FUO}u*pW@ASYRVu+F&1;_G?7^>LhYT@-bwA9)ZS?=>)6FU z4x*P%Cppbo+(#$((K!JrP+RAWm~CfubOkss>Plc9`2?_KoXMekiEVOCx2 zu*)ir@naC`8X#v^wRSC!8|&(Qb#)6}<>=Z5J#_6v7X~6`S24Sa*;UN0Gceb#OWDXa zc3_rW&9dtO4s(=CxQnj;@RS$4=3Nl#7K7NtB|h$=o4e@t5jn_>8F$N1L5iU6ZY3#0 zIVw^aH{DIm-PGA_1Lv^2?(VC*zwK^j-M_>vy4y?lukbhBFLIf0xx+nvu~pNsyz58}6aT9*vR9@8O4fbf*{Ili$M+^%#s@^_a{w7O{fWM4;{-+lj>e z^oU|VzXYM4a`bd(Jxf!A*0_b9ZlLEEOhL?^^Uz~YJL&0t_S}s)J?*5Yo%D1EJ@wqv z`{{X&o9Ml#9rgT)pRuQ2^7S(JUbX1K48l=wFZK3PZ?8>k#qN8lxz|xHAZ9N$_qxw- z{DEEcdcxZv)H^*I5Mws0P`_xYRuc+Sfp)Hfyx zu=~D=ajSikksN*W)koiKFY2DrZg?r*^FJi_e_ z_$LSrRR6#NsB@t2je*rr+rT<_y91lilGe0k3I{Rkf#MAmV^AF8V*i8EV9$fZ93}rr*4O+}P4s#5>4myoK2VKAo47$cm z>}t^W{KQjU@QOFQ3qoJSAQtcOKJobg`}`sad8kD{!ieI>AT-$L2B$|)gUw@bC%V#u zUii)#Jen^V&m_!h@HA!+&I(o&!6vq{gGkgq*ev~@|A&UCZAd&4qOKvIkdoA-MIA%T zbBK8jS&Dc=#26Bd{SUc4jawaBkt$Tj zEQZ?I&{o+0(DvwksNRR_eQ0m`GJ&-mNA97ogV3-vWT7CRQvx}LRiH9@7*>O(h&il3 zgBXI|hK*tj<~PjzhMC{6Rmd}JBb(XA4vyj$hTY{?9`YxTF@s@lVVGMO_W!!x1)<^g zIXpJ0NQ;>c&qyY+lAT<*hvE6q!|=isr6B|G9W{JE`W@k>M)=$aeT~q|2zM~T?nlgI z4q@2UhzK@d|0C>w#CCRagp-`+ESI>-4SWZU_%{fRbO$3pBO5u$O#up_u93y4ikXfy z(~)hkuaW8*Xm z=uJNcBHpO+OkxVtnZ;b@V^*WKaGu|S(CGMNqato>baT`@TD_y?7~P#-xUJD@9z7Z{ zM=!=4N3THbqs?>ldUoUXMw{R0GsrXg3fH*FH@J(@<~T;~F&~hak1*FUDe=C>q$4Al zQQw%Hl&2C^FpDuYs7+lO(1<4JVN6R}<9^4u*)jGy=I0|q}Va06p6a2fj_Yd2%?S+Tymx^~avZ>1~|d zkDJSU7O{loY-Srf*u`GIT5;OHX{h`TbG}&w>SELEeXip!$M9j%z zPF{exlf|99lGQ}89($YY{wLq!N9=0yUGzEmA$B#{t|q&W$!_0o@P{V94nk9sl8oe} zBo%4NKqj(ams9L=N^bH}6TMHF#ZGP_*3@*ArWL~&$3)!R)M>akzq=orx&kwqx(4-6 zRsYo8*xl4a9OV>WVSiIEp!R7AQRB4qe1_Wm4u8n+@Q0=qqzIqmCZ=^@KISq_ylG-g zyUiW!e43q4x8vzzP8V~!o~P@1y13KzJ6*ri^*dd^)AcmH9JOgdYueF~E_BBoOxN>t zcQ}1C_BMS2lhOP18Q9nKJ9qw|U2mFV6XQ_9#dS}NbF7`NEj@foK+Z_GYerR@E+`#P4bfYf=7{n0NF?$W} zY_>Vf5pRwdbJCH49H@Ctb;O(_=A71uJ4f6(UFkt@#GW%6yPo6L=S*WJ3t5XdGRJ+- ziQ)i(9jtR@0`pSzVE?84sX zn(N%lnC09b5p(X(*#F!o*#BI8&o$4v-fozkhnZuTTw$q6i#dd4!S2IyVfSIBFq5!0 zw5Jnh5oQ))Y76VfKn7#RVI!H#d=|2pB`jwpdI&S4u=Q+YGiR`Gzu6y}mz#QsH_zwh zncuwcQ2Ts4n;(-nxP$qLNl7ZwV3+gtF#j|1Q5fG3^Gi^c3RI>l>i0YTq50~ZzmyfI zZNB-=-@v#M^ z3-r4{zYFxV;4tT~vjtbVfj$>}kKHY>y9JMV6NDDZyYOS|YT>8obzyq+xiAa%wa~s6 z=A|N4s74KHQ5Uzgupy0UhT0dZec><`qn?F&ToeoO7Wv$wo=jr{J28tzQS9dg=edX; z7U^M;yIypYU$D{`>Y=v9O=wL!I%2MiyE2E9+(W#@ zVuXJ{B2thUdkz;fT+HyAh#M|$xPHT%qTg`+hU+Q34Dk)YG0!ECAp}9dY0&M$sWX8 z>T^reQi|quz$}(_qXz>S$!PSjR1ZrhFo}8C=Tf(~bOmc!&nC8@kEMU2&ZX~y(6SiB zLT$^`woGly)V56iWf{mrVa#_~2})Cms;GTgE$T1?IhLL02IjHsKg?vgewHUB9bzsQ zb9q6;T`ul&eJ(FUc`DL?whTht<--}pSjMBzLH#SUk)J{o#m%i$|4Q|*EJtnB zztY{UY({I^(GfdbX;&-PAVR!j4vci(6Rv8;|jZRzBrL5L%_~Rqkq4 z9O4p>0?4sy0y9~{Hg>R|(|m`RtA51WTqW)*eXg>nRqkQcYu*K+)gcm*nt~Le7$wo? zYI|C3W~<%6YB#W2&#UXvkRJ4=FZ~(FV1_Z0F?@+SSKH(2DVWFVXdVWkH3`T|BZjgF zJ6v-Eb+56vHFvqsUp(g(Z-UTTb6FdMSi~VI$+5q+X~;-s>~L)k-0s@$sBf+NT00i^ zwN_ngXEKL*EI=J=kMnO3iuf4uBE*O&g_%T{MTD9ox*}$Tm=PlwjkpmL(QCvs+-<~C zR^Uzgeg9CzA&znavxqpudE7ySoki$9LhliJkN6d{iufZ4t+T6j=_rX?TPNo_wXR#m zHr&~|y~wfd2zpp|3iq(?I%2L9bDfy$#9ZgQVV$|Ia|`R<2BG!waSQ8{pzrl5Nkv-H zV^{0tUT^>F8`6a4w4yB?=u9_y(g!nMZ^rA*W4(E-H;?t+@%k{#dcFGBFJT#GwBBsi zo56;F3{;{Av(V#)i~Nq=Y4JJUx`mDE+NiFL%Q4@L8`z8*HhO0pBT?rjIXC4&yiH4X{``coFTVC**cR^^YUbenRJQ850Th+U@DeBs)uC1N$=C+#a z*8Zqr>tKeW&aHB8eTsP7#Movg+tQOA{co#=nA^nMrr&LC5qF!tZ}X0~x!G;K8Oa#F z#NBPv=e7md-L~bd#O}7)-L~C$XWPE!JAU9czhGC}%x&8r{Ken=7lgL!al2V={}A`O zJt@gZPD<=^yV|#_eS1dS==RpAXZu>tAl?q2+mRpp+|i3KFpC`{7{w%JGZ#JV(8G>J zgtMM4Y$uW^?9sms5ZZAR_3sQ&=T7fw=O?IbXKFqp3+B2rC+=)#V z|DE3K&bL7*Qp`v(Ba`qk;zsH>QooV=TU-XirGS)WEUp)&)JH*y*? znS)*<7oyL|W!P7weMPS0AV)aH2~P19XF1PBuAufvwMYIPgmxuHJ-hU{YZ&6~^0{4i zgV64nq$3+C`NfIq5j?K-(4F$>~2MS-1F|P*xl~F=w-K?-aVH+sBgF0cAw({ zS5edMulbe-nCtH6ybD5mVi23Sd`J>L#*Fu*z&!WJv1cCUvS$;Av8z32xXEvbxkt=B zZxDB{xO?B@eG>2i?qIL|?=4FO>}hW`YElP#+G|gHy|uk9XiYnYFr1N$W-Q~G$P}hA zgV~tFUbXJs$rb(!LQ#5&Do$H`F3Mh`%qi+NYLEJZzj(sSAha(gX0lKH`_#WLKJIUy zTi%zJ3}iwt`*M+&{4}H=qnN;C)V6OX^I60a%yHie&hRP-?N5bx`^DH_5p&sZ9{XF; z2Ql}Hxqlqu?iY8ze)rEpzx(yOUr+nju?u&)|0Jh5i#ynVnQQ2I|1aFbE$p|q{g2T5 z{(pkd0e5g93l(r{2jo1U)&m=GUk46g{|Dqa5RD!VoaZ995c7bUA8-o?^mgEF5IPvb zOb;f)4IDJTgP$SK!JOnK9|b6fn?Gp(2krl0J37*Z?(||9ZsFh<)OTOQzS2p!VXp^tF~hurib^FA~he}Bl|ADT@V&w|k5Sj53+4%_=-^FKTS^FJ)# zVfhaK##8io*u5Nn6NHYmMQum=;=LUCf}sp&4$E1^TGq3PEgZw_j+ot%ANiTP{K`ZA zM2;hJ91SqXqv|{QKI%J~kUUhyzK*)LqhcRD&N;+BdIh^b_91#dmX-`;A}j9rSP@E4 znsQX88a1dz8wT+u6PS!#$IS1T`5iOwWBNL_12=eVFZ(!*9*>L6xw>Lk&8#dkc$9HPx3+PQL>G_N-WJBH2 zWvPI@MXNtr{n6@=R)4hmqnpqcbBQ*O=;4fK2I1IW^h(qiy^am2Gg_U|>Wn^u9;4M7 z{S9^({Wsov^mAVEHVB;#5sSop#3!W0-cF|@Bku0BI!~+T^ho49eFD9o{)LD9i8-A9 z2RXhf%9S8=M(i_UpAq|v*k{B(BlelJDU#$3+42|{P%k&r|rB^k+4 z^V!dFFK6A$S@&|*y_~Iwdi~n~p|c(7g4)maqAvp&gkH`rMvZ6HbM{#fIw$tITok4x zZuFe~&&hGF3X_A-`F?EW0EaooNltTyo800@e&#;E@jG^N{#_8d@G%*%&kI?}L2mLQ z?*;iT=;?xTo{6zyfBKf*vW<2gs}iUURa9VT!`c-7r4wd)O+Du zzUL?Yz%DM>#Ra>#U>6tc;(}dVQ2WL76vuoox`T^iUo^vuhYd# zcr%y1?aMW(gB!Wrns&I6%WmXycX~1gIs7{bq07ry$r{$NkuA9A%lf^n-^=>F9L*Wd zVYZje@5=kA=ZYO(5&MeWT$zg4SM2A?TpsZ%2we?`NgU$y0f|XU8`O2x-CZ5XU`8++ zv$;ARd%mi!tLnO{j;rS}pQ~57fjM0@r>o|4^-mu2H~;dC7rf?e5W1$8YpE$qdnOWr zonE`c@2LCQ6aK;HuE!=W-s<&)e2Dt5tN(gBGU3jz=fI6$FMv08-3?rCj-IaT^N}eHC_aT^-l;bt6Ou#JeHJjq22-5o*5izn1PiF3URW1MvMkff&dpg2*GA zEP;T4w(n+(Hl>c!GL@MvTA9|2Wt(Q%ZrMJSO`}tj?TcmmWQ#Lq)3h%jAhL*%1)>lt zjsoxXzVr6^T=hqKe&>A8x%n60MU|RWYF6EYx>f2{`6j9!;|c7y%08>!Wi21Ejt%^a zFZhc3AXJ@)zN_6-wfCxz;&>)-G7~wMKVUc2-mCUrwK=NIQN0}R`CSsBYWGzAI%{|v z?^oMfwH~TJMi15hAnq^D1VpeIJ?C+FR{s{K!V? z*o?Vr^;o+Dw_0oFS~J(#Tb+LD?5pm4W^yrRtCMlvTy8*5bvJV>cc7;_J=N){?nByw z(56&Q|HMpzB8@Y*_@ouAc z8vl-(jbGqq8r@7|6FuTQS z1N7Z0w^n_&daG5Rt<}^Z-_{Ox;N8|;>}MbdwS|c$h6-kI509Ytw!iTrui(A5HP~6( zTIAIB59HM5KHJ=9TYV7vrJYXp1fh1d+lOGTcHd^Z8QQ(mK8{1NzxJa!j?bBD}2)b5Z~M>%f0V*+yOn1q@gYIdmEp=O7g9hY+j^Y{bv zS-|z&$RZZwRy$wmlKx8KBa-s4m1u-olT_*S;J@iQIlpqpLv2BFS)5*bP= z=|spPmplq7#?CvB#Z7h2;(C_x1gnvKr`|ff*|{?a?U3~jKbv>Nkw7xT7)}P6m|=%E zb{x)8sJ~-8Cvpm>aynD_9cS@-mhuii@DuKSryJdQ3^Q5G3hZa++q{Rn-1!mfa3edv z;d|_Fr`z0Fi+kDGfPA{t>(WElIb6m9%-ppQ^}CjE8;{~HyPjbc&+#Vu>w2HHxXmu_ zc72U^yS~NSU2e0hHwblyh{6qZ$6_ztX^dbbdg*pk-TBC=dkT8$_I~$DUdDZNzrkC) zi?_SY*6kL$|3hC8`ZYivzsliPx&7K1gnI0w$Bp&KwC7>W)3cl>QM>1P94BxR6S2cx?q%1N+{^tu6ohs^z#3$;`)j^Kzq>c$hIi|G zxB9zV=w=tP+P#ndAhbtjdt|mpW_u1~9A|SQ_Oa(vehEUoa_b$>3~tBUy?@4i^ge~X z_1anQYV^}IVy|yuZz<;8JC;K@jA=n=-+CJHt@#}hp?&(^ zr|*6G-e(8(_aBSC_U{fteFrcY-%4KsDcFCX{r5#szfYciuR^Hr9Hw&t7jZdr zxr+H*!y~-FTi8>dEc@)cPd|NqL8#vy^oNPYyZ!p=&ma%qd%qd`$6~gA`|O{{Ozg4$ zCLU!acGqv_{#In&zb6O{s6AjFzk?t&U@rqhP=6pDvkaJjAQx{99LZ!ZC9K&E@$)kc}IGzcd%p^|3J7IOh>V_}mVrFp}S1^zJ@K$&o^|S}!0|t@8NU|A4 z0Yy}DFo$sjM`N}F&SDX-^Br|;rim6h*%O4LqKG4z2>GZTbr5EV(tDIzQRkuWD1ArG zM$b`tj?#0~<9xt+KIJpM#d}fSi}GGn8{7CL2uBYll??1AItOn?do#M25@Z)Wi}@^N z84vI@E5mzNd;BHqk&c`ir*LL9!hr&p|RAG>z+d z5VZ%HX^`Gy;z>mBG4>Io-EY3i-#J!l|6jRDQ>q$S_8BF;{ah=7`aMj5lKR zAEW=6S9yo`_&aO)h)>XS%)THzI14);d?M-&{ypcR{@@F_giD!&9SvU0E!@iO+{xYC zgKP)ik68zQgxfeUg8mO&z_V-&!m)#Jhp}ml!2Gc?i_OLSvBzR>u_rT$-=MG93%CgT zj5T}gRm|rauHy#o;!nsR_I2LJ{$ju4TYjJ#Hx=uqVzo46_BiBKRd5}x82p5sMcK~D*5vFn6&tmiZIm*87T_!>8mAk)NX=?m0IQX@%?BsG$1v8$wA*jLj3*0itW5C<>>GbFp)D`d8M`8iZ5g@Mlx>nsNin zc^msp@n=%(H)R9gP{StNR7w+D*h&|>*~|VQJWQ{{^g2wh!w#g7Nu0%boX<>VVgJKq zGi)vk@r@08fQOOKF#QbE@36n|EYI^IGE4PFs`*pxA=R9zlbOmn%*H&aYNo20s#dC6 zsZX+!r&)!1sc-Qv@3WSVaW|=-@)`B)3&LsX*masY(yn0%ce0daJj9=PoF{mWH*vpd z|6~K7^Cj*uZ4=wrj=iVZd)glMBF8j)A0AIG6ZtKdF^}7k!|+#F%^K`&_6|%o;fr^G4=!CHjjj;wElp8D@`|J@O*2VE%~t zBj%6jHKNyuUL)&R&n6nM+lbvpT9I?49eqZ8mysU!Ah*cAAUraWqnXS(=wYN>M*f{| z`85b<+I^-uGRJZVhjSFiV(*z}a6T6?i_4h9bu4BH_Md70nfD|6%tw%Y=5oxKDgVq3 zcr#PZnR3pQbLKB>N8g$H&eV72e)@xORuUt~=Lk;VBqk!?th2d{&iaB{@|Bm^2oN+Y&*?v<7Yas)0`ZNyoHuxjkNJ{s_?{nw zaPC2vHTO`wo$KvfJI>XAuH16sSKofGL^!vbUG%aK`y7=*8tG&p-%;7* zl1Bl)rBS0PWfE>})G}T}Povb!^Y`-fk#{a~&$|V?&a>;hyD?+lpIO0EJi~LmfF0zy z{k#wPgirYwX36`CUxILcJo?MmTfW}%-Cw>PdA`KH3S?7YUj-Yf z!%Y=5(SqF+3#UE1bhT z%vX3Vc2H;sg-fxs!pB*KJ_}#u72anp?x)cG7wW&TmU6YG7e~mVgfYmtSjNT2qxWJN7wf&)w_H4v zi2jL*@(-%AlL{+92l!VJZ-FE&GQ1Ma1` zF9?qwiJnGZgnf>d$!LFe^u8cm;=3q00=HS>)=T`El384eJ1DtGAxZ{2#MHrX%2bFukYj`I1qx$^5UQ~6zZyWHF5 ze`Wg--0aTz?fI4j_pU$f_cnQ4}Dv3Yk^NtirA< z?7Bj36=z@%75c5vXT|j_WHC$7YsE6|=RxFEA+L%xd_#8-u8bp{2wCKkPa)o^oWMkW z!(`-Dc|LYiX*ZQ~u=mPqkW=LiEJ6>J@~ZS+<&&)BX;$$vuOYKanN_~cN64zOo<`hF zWh>igr;{#vg78@1!`K)OB#w9zNhXC URQSLDt(^Ve|Nj5K!{b)|4+iBbHvj+t delta 8300 zcmZu#33yXQ*Pb(T+icC+&^Bq3F4>wiThr2(y+8{T3Iz(47AzDRN}(HFSVYKNL1Ym` zszzmzE+C+yh=_Qd)BY6NVd;f zF+l-ikOW1cSQLjes2l43WOclMC@MmuP$?=y1v!ul zgJBqqfUz(R9)vQe03TFAH8emY%!E0>!z1u0tb*0B2G+t0unt;3nLH+i(Z&!k_RL28?kG zj>U0UgS9vw>#!aha02d%GjSHq#@%pt+ynQ-y>M?l3>V_zcmy7ai|{Bs0hi;6coMF_ zQ*afo!}YicH{*x!Li`wBgcsu_cqx7ouk_<*Z~(8z8}N&GBi@8Je zAveh_a+};CcgdgRFY-5sxJXXGMR74)EEmUVI4x)5%$$w0bDk)!E7yn1;renzxPlf= z-;1N|w5Vl(evsdWvbUgkq(gdSKnW-jC811%76S(RQ zjaS5t^iA^Bwj>)Cwj4H`?>Pt+w4;197!9Fn8cQ`a{wNxTYLQ`?@b;I5sYj3eft^Z{jDd4X0z4As;F^ilj)!Se=5ZQFc43LQ~N+s;35;(2ixjD!mB=<0yi{{Z}YNV!iL=lf3p=Ro#X+aq} z0@J^P=s@as5D)jpcfW=Bz}|1cntvq3)FM>SiWXA~jX#DSN6XN1#^@7h1$q*#ENS#r zGZ9qP)s{3>)%Y5l%4_P!R@6;uuJP42F-cJyO`%rm4j#SS*!P1&C+EMo=0qoZ&!Fc} zb{h(yXQ`d0wxQ?ID(aw4>MG8wsA{TfC>~YbQ0Z$LuTYJdR9E3k58sB@N=G(NoSip= zZPOSQX&Y*9*^?3%--bF+$+%%fxm6*)${S{f*EgUS13#RAL_s^+h&G{;;7#V3|4F-( zzn9S~D0|(y`|^AZy&e?wU>e(sw$b$a3vZ&gf(tunMl0G$yD~jpcvJ63d(gh%bUszL zqIYT5{pa6DpQG%}=m7cveTY6n2hqpq6LbiDiaw*+v>WYCd(fV=7wt{^&>Y%#Gdhg2 zm~nW}G4v%f6c74_8Am^61OwT35G`Q_GLVi98-=#0uDM~7uYX;|wxPMXFbw?^RNv3E zKaCHo^E@i(K)<33!5__~d7)ptf>Ss|!p@UlLpM=O8@i5e(0n?$4c$Vw=@2@K8GI`p zn2i1gf@0bM0RW~2bSNFx4je>4BrT*P=*Zw>l|?OE``MV+jzV&ff{baz)!bZFF>!X2 zudz^}xU;|OF3rxI>Mb8)dHtPnU(n$pHGu+@#mvY?=jXP80+kqZD%PRk=Lo17p)UVT zXwdBFlEmrxq8FZ6e{A9tyRG*Kp$>>^Lw<&ZduIYI=-HVV%yo1$Ep7t?B+v)w7+O@; z3D^Q(ZDrGxvDH-z;CF65b674a}%u9gR2cy%b^wDNrX>J2-<>Q^7&U(FfZg z0St`h1GH%L>LDWZG;RlDn(C~wk!_*34c-gR`q0LR@ z6RUk8H`5M<|8g`i5{eB$6&ArL7)__pDmt|t9)K}WLZ{I>+Q@kP?0Z=3hw)I(HiQYZ zx)mnU8tVGD;lX5fgi4qabge=A4_WxbgAXLr+AtqeVH!JCZh4ch4W`~#MGe#iiPqBk zR;Z`b|C1;q*#ylnql6I^Ha0a>)mGAmK;M&)8uraF3ucd3$p1NBQRtC&HvLe@D~Inp z1@I2#3tH%NE@&9`M zTlfx6&}V3XK1*H3KKJZt5=t~sp+1hL!{`dk=BXW^#@|Is%?Q+Yd_ zg`ZJL7+d9?CqD<5Q1%AK->+~14#GwFopHH}uBI#L8oG7^T!t%f75-q?EA$1rj<(V^ zc4huOFyU8N>o?{I?^!p5;qiAE9;bR~?`F~3vQc#v<+BsZn-bHycK2r8+Y}QVg|atd z4oBcfEWko6!eT6;9dte2KwqRA=_b0FzO*suz_FbDL|7FZhn)Az3@MxFE1|J#$Gi)m z1HU0HGb6E^CowI<<6-}v#NanA%bT5;=E>@o*tu;YwxjG#I0+|XBQ{|(wqPqx!8W>u zzDi%CTj}d`8-0Urr*ATlVh46&7j|P0PGfiJY{MP&H+qp?rGL=t?Cw@jcZ&SnyrO{j zBCIHUkPX9ewr_*4Q@*$l9>C;_b8uhW5BJBpIFG(Xcha}%F8U7Ly#WuzgK$1u9D)nz z9{Mpo#uk61XPA7SxDLiZ-|cgvny;!;?`Ai_k@Z!Pi*Q;=Tp~6`qQ# znY+c)=m)L1hJF}cG(_U*xB)i?YOjG_Ll4rA3YD;6VtsX0W0S{o3^3s$BDD#D_1B=M z|ARxP9(>z%ZG%9nP{+g_5sJi7qw33>rj%3#!@{7d+NL&%RbO7) z$g-iLCg$?egZU19;N44%fHJyWB2g7pS4~tzuxGnOg%;=AihHod*r-+so799SDe)Vx zx5l%1ouPxhq%X^>t*EbKo4OijR!weF;I>3#TT-$y3|54U`%K|so5^g}4lu6PEX8Q60b?2&jDp3O3?i&x=kJD!7SP`3}` zxp*G-(@*Fj`YHV^sM|;I{E%)xr-wUrJ3gSk2FWV?I9?vqh!_Dvv(mu@{b%A4GQpAA!A@C#-7D%QTBTL9DW|J!mIHb z`X&8}eoeoj$JgT*f>{=B!|n82W|{-(|IzP*mLU&XMkv$uRRk_yf?|0Yn<=hp47zky zgfs=dXQ1|X?(h{U&q_RDdu=Z%$zwM zN1`*$GuM$g$D8GKBxZZM&Yj!&zFVf5O3frxQ z!$n>3)ljY$CUN~9iF;`1Byk(xWmy5fL$9@lLbfY#p2KD>0m3oT1QSAU(3@>RG=y;A z3ZzEhzJ4Mhu_*f`5=Ep$M&v|6lte|MiJEjFG4wXQL+{c*>0k739uN<#IqQPYfi1B$6bO%tHh%P{=5pD&!r!q2{lrT_}V)6hP!$UL=Y96|@lTzl{Ts*|E z5~!3RAR__yF_VeGyxGZG1>us1Ob&8g$wM5Se1uFzax#rn2b3u|p0S|eA^sStC3U2p z)wRQeU(yud6B1V0Jj@o@C@v7=#?f)aPblFT8;_9rWC3}UEF_PSMaUJ1mf)!hu=9|>gOdj) zDFZDHTui`OMyc7IkUBtEKHEV)ARm&C$Uz>wJf!oG!9&*$@(DQvSIB2P zWb)91uHzw>p=-1N_i~Xh$+yARz9L_fZ^&^TvUtemp&Jj~JD9_8;oq1`8OYFhnI%@P zz&-(Vc&4k z-|2(~hVsNWEDd zTO)Qy?2ULgVt-^zWJ07pGCi_eWbep#Ca z2=)sO2tE`X6dV>D5gZeICHO|D5)Ks36fO`x<`*s&J}z7?Tp?T|>=14cZWL}7ZWV45 zZWrzl?iBtaiWTLE@NXAHNBz2PMl153hWTs@cWR7I6#4q6`&q$t? zJTF--Su0s5X_ItFHb^!~HcMWX9F+VL6&2-*8W}Y!YIW4EsBfcgNRgCCBcv?NmujT( zQoS@mnj|$!%~Gp0MQW2~`lUUjy`+7lxzYjBLDIp}8tD>gK)P1CPTD5zkiH~+Mf$3A zt8|<6tSnOImSxNGWMgEdvPrV3vO3u;882HdYn8RjUY2c@?UC)59guw}J0$x|c35^q zc2f46?2_!3?6&N#JVGvztK}Mbyj(9&mYd`jd5YX6?2pDDgpe6KjIxTLtMxTd(N zxUIOW6etybrBO0H6>qE%f~u_}!!UZqzhsFGAhl}nYUDpO5YEmEyfy{Ou&`bKp! zIwo2dZHvx`?iJlTIwyK)baC{U=+fwM(Phz<(f+FFY0)*&b!F0)LOMpZBu*HUUh~#Q{7A5N8MN5U!A9}Rj*cmr2ayERQ;p+XZ1Ptuj=2_ zf2gmkZ>n#r?{~pe6JO1z1kkyUfKcLLhT6c1Z|CWo|bAK(Js&~)GpF4(LSzSu6;q< zs%_V<*S@ITq-wAe+xoluzYGF{$RIID z4RV9hkYea*7;UIG%r(q2_zk>awPBOtWy2Q3R>L;KcEe%Aal>`L;ilns;vVO zm3Ss8KdCrrd{TMRq$FQbWm0`oLsC=HjHFpf4<$XBv_5H1(($A}k|CK(j!YIMOOmC@ zDamQc!;*(5k2DI5YGZ;i$!Ij1jaH-0m|@H`W*fU3dm4KibBrU64;wp-+l(I@zczkr zJYoF7c+z;N!qQ@S z+7hsAx4dWh&~ni7iRG~6h~=2&E6YWz!m77sSTn8J*6!Ax*51|}Yk%tiYreI>T4@}qo2)af4_W70sdc_}p>>hZ*#eX#A zr<8LkS5p465u4nmwdrhWw(hoGwj5hOTcK^7t;|+#tFTqtrrK(3583A0sBOM&p>45k zsco69)waWS!1jghvhAuJ*#&m7U20d@W9?eI&Tg{IQH_8Ios z_Br+i_807J_VxBR?H}7u`0Y3Cx9xZBf2BgII5jENlG-bEKx$d)q|`a7%ThO_?o9nC z^~cn!4!J|+=;DZT#5)X*M8`!Bs`b(T+om-qcoS!<6IDc_o zcHVXV?ZU1+*DzP9tK3!N^1Bwfwz=MNopxPv-E!S^{q4r?2)E3wbgSJlZjC$MZF0NZ z-P|MGW$sG%RCkTL-reYa*gelp-H*5zxEH!R-0!;2xc~HsJ@FocC&^>-SUq-+)8p}^ zdvg7r0iHpg!JY!oFwbz$NY5xwv1ftj4bRCmMOu%vX=!WH4y7GWJCXK7+Nrd&X+Njk z@p4{~H_9vbD!m4;*_+}`^}4)Wz1iOG-d^55-l5)7Z;f|`cfNOtcbRvEx5fLsca8T2 zZ=1Kn`-=B%?=J5<-aX!Z-cP-Uy+^%YdB-02e&;>oJ?FjP{oQ-n`&W8Ix-eamE=%u{ z9+$37*QY0>+tR)1eOR|RKfNHmFugdvBz SchemeUserState + AnyCodable (Playground).xcscheme + + orderHint + 3 + RubyEvents.xcscheme_^#shared#^_ orderHint 0 + RubyEventsWidgetsExtension.xcscheme_^#shared#^_ + + orderHint + 3 + diff --git a/RubyEvents/App.swift b/RubyEvents/App.swift index 0731079..28313d9 100644 --- a/RubyEvents/App.swift +++ b/RubyEvents/App.swift @@ -78,6 +78,29 @@ class App { func navigatorFor(title: String) -> Navigator? { tabBarController.navigatorFor(title: title) } + + func route(_ url: URL) { + let target = webURL(from: url) + + guard isTabbed else { + navigator.route(target) + return + } + + if let index = tabBarController.configuration?.items.firstIndex(where: { $0.title == "Events" }) { + tabBarController.selectedIndex = index + } + + (navigatorFor(title: "Events") ?? tabBarController.currentNavigator)?.route(target) + } + + private func webURL(from url: URL) -> URL { + guard url.scheme == "rubyevents" else { return url } + + let path = "/\(url.host ?? "")\(url.path)" + + return Router.instance.root_url().appendingPathComponent(path) + } } extension App: NavigatorDelegate { diff --git a/RubyEvents/AppDelegate.swift b/RubyEvents/AppDelegate.swift index da3323d..668e704 100644 --- a/RubyEvents/AppDelegate.swift +++ b/RubyEvents/AppDelegate.swift @@ -19,7 +19,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { Hotwire.config.applicationUserAgentPrefix = "Hotwire Native iOS; app_version: \(versionNumber); unique_device_id: \(uniqueDeviceId);" Hotwire.registerBridgeComponents([ - ButtonComponent.self + ButtonComponent.self, + LiveActivityComponent.self ]) Hotwire.config.showDoneButtonOnModals = true diff --git a/RubyEvents/Info.plist b/RubyEvents/Info.plist index e0f24c0..e9d4abf 100644 --- a/RubyEvents/Info.plist +++ b/RubyEvents/Info.plist @@ -2,8 +2,21 @@ - UIUserInterfaceStyle - Light + UIUserInterfaceStyle + Light + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + org.rubyevents.RubyEvents + CFBundleURLSchemes + + rubyevents + + + UIApplicationSceneManifest UIApplicationSupportsMultipleScenes @@ -23,5 +36,9 @@ + UIBackgroundModes + + audio + diff --git a/RubyEvents/RubyEvents.entitlements b/RubyEvents/RubyEvents.entitlements new file mode 100644 index 0000000..0d57a92 --- /dev/null +++ b/RubyEvents/RubyEvents.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.org.rubyevents.RubyEvents + + + diff --git a/RubyEvents/SceneDelegate.swift b/RubyEvents/SceneDelegate.swift index f2d24ff..15a6138 100644 --- a/RubyEvents/SceneDelegate.swift +++ b/RubyEvents/SceneDelegate.swift @@ -5,5 +5,27 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { App.instance.start(sceneDelegate: self) + + if let url = connectionOptions.urlContexts.first?.url ?? connectionOptions.userActivities.first?.webpageURL { + routeAfterLaunch(url) + } + } + + func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { + if let url = URLContexts.first?.url { + App.instance.route(url) + } + } + + func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { + if let url = userActivity.webpageURL { + App.instance.route(url) + } + } + + private func routeAfterLaunch(_ url: URL) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + App.instance.route(url) + } } } diff --git a/RubyEvents/bridge/LiveActivityComponent.swift b/RubyEvents/bridge/LiveActivityComponent.swift new file mode 100644 index 0000000..754c534 --- /dev/null +++ b/RubyEvents/bridge/LiveActivityComponent.swift @@ -0,0 +1,57 @@ +// +// LiveActivityComponent.swift +// RubyEvents +// + +import Foundation +import HotwireNative +import UIKit + +final class LiveActivityComponent: BridgeComponent { + override class var name: String { "live-activity" } + + override func onReceive(message: Message) { + switch message.event { + case "status": + replyStatus(to: message) + + case "start": + guard let data: StartData = message.data() else { return } + + Task { + await LiveActivityManager.shared.start(eventSlug: data.slug, eventName: data.name ?? "") + + if LiveActivityManager.shared.isRunning { + UINotificationFeedbackGenerator().notificationOccurred(.success) + } + + replyStatus(to: message) + } + + case "stop": + Task { + await LiveActivityManager.shared.stop() + replyStatus(to: message) + } + + default: + break + } + } + + private func replyStatus(to message: Message) { + let data: StartData? = message.data() + let active = data.map { LiveActivityManager.shared.isActive(eventSlug: $0.slug) } ?? false + + reply(to: message.event, with: StatusReply(active: active)) + } + + private struct StartData: Decodable { + let slug: String + let name: String? + } + + private struct StatusReply: Encodable { + let active: Bool + } +} diff --git a/RubyEvents/liveactivity/LiveActivityManager.swift b/RubyEvents/liveactivity/LiveActivityManager.swift new file mode 100644 index 0000000..b430dae --- /dev/null +++ b/RubyEvents/liveactivity/LiveActivityManager.swift @@ -0,0 +1,335 @@ +// +// LiveActivityManager.swift +// RubyEvents +// + +import ActivityKit +import Foundation +import UIKit + +struct LiveScheduleResponse: Decodable { + struct EventInfo: Decodable { + let name: String + let slug: String + let avatar_url: String? + let featured_background: String? + let featured_color: String? + } + + let event: EventInfo + let time_zone: String? + let sessions: [LiveSession] +} + +struct LiveTalk: Decodable { + let title: String? + let speakers: [String]? + let speaker_avatars: [String]? + let track: String? + let track_color: String? +} + +struct LiveSession: Decodable { + let talks: [LiveTalk]? + let start_at: String? + let end_at: String? + let date: String? + + var startDate: Date? { start_at.flatMap { ISO8601DateFormatter().date(from: $0) } } + var endDate: Date? { end_at.flatMap { ISO8601DateFormatter().date(from: $0) } } +} + +@MainActor +final class LiveActivityManager { + static let shared = LiveActivityManager() + static let didEndNotification = Notification.Name("LiveActivityManager.didEnd") + + private var activity: Activity? + private var sessions: [LiveSession] = [] + private var eventSlug: String? + private var advanceTimer: Timer? + + private init() { + NotificationCenter.default.addObserver( + forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main + ) { [weak self] _ in + Task { await self?.refreshIfRunning() } + } + } + + private var systemActivities: [Activity] { + Activity.activities + } + + var isRunning: Bool { !systemActivities.isEmpty } + var activeEventSlug: String? { systemActivities.first?.attributes.eventSlug } + + func isActive(eventSlug: String) -> Bool { + systemActivities.contains { $0.attributes.eventSlug == eventSlug } + } + + func start(eventSlug: String, eventName: String) async { + guard ActivityAuthorizationInfo().areActivitiesEnabled else { return } + guard let response = await fetchSchedule(eventSlug: eventSlug) else { return } + + sessions = sortedSessions(response.sessions) + + self.eventSlug = eventSlug + + if let existing = systemActivities.first(where: { $0.attributes.eventSlug == eventSlug }) { + activity = existing + observeActivityState() + + await advance() + + return + } + + await endActivities(exceptSlug: eventSlug) + + guard let state = await buildState() else { return } + + let attributes = ScheduleActivityAttributes( + eventName: response.event.name, + eventSlug: eventSlug, + featuredBackground: response.event.featured_background ?? "#000000", + featuredColor: response.event.featured_color ?? "#FFFFFF", + eventAvatarFile: await cacheImage(from: response.event.avatar_url, as: "event-avatar"), + scheduleURL: scheduleDeepLink(eventSlug: eventSlug) + ) + + do { + activity = try Activity.request( + attributes: attributes, + content: .init(state: state, staleDate: nextBoundary().addingTimeInterval(60)), + pushType: nil + ) + + scheduleAdvance() + observeActivityState() + } catch { + print("Live Activity start failed:", error) + } + } + + func stop() async { + advanceTimer?.invalidate() + advanceTimer = nil + + for activity in systemActivities { + await activity.end(nil, dismissalPolicy: .immediate) + } + + activity = nil + eventSlug = nil + sessions = [] + + NotificationCenter.default.post(name: Self.didEndNotification, object: nil) + } + + private func endActivities(exceptSlug: String?) async { + for activity in systemActivities where activity.attributes.eventSlug != exceptSlug { + await activity.end(nil, dismissalPolicy: .immediate) + } + } + + private func observeActivityState() { + guard let activity else { return } + + Task { [weak self] in + for await state in activity.activityStateUpdates { + if state == .ended || state == .dismissed { + self?.clearActiveState() + NotificationCenter.default.post(name: Self.didEndNotification, object: nil) + + return + } + } + } + } + + private func clearActiveState() { + advanceTimer?.invalidate() + advanceTimer = nil + activity = nil + eventSlug = nil + sessions = [] + } + + private func refreshIfRunning() async { + guard let eventSlug = activeEventSlug else { return } + + if activity == nil { + activity = systemActivities.first { $0.attributes.eventSlug == eventSlug } + self.eventSlug = eventSlug + observeActivityState() + } + + if let response = await fetchSchedule(eventSlug: eventSlug) { + sessions = sortedSessions(response.sessions) + } + + await advance() + } + + private func currentSession(_ now: Date = Date()) -> LiveSession? { + sessions.first { session in + guard let start = session.startDate, let end = session.endDate else { return false } + return start <= now && now < end + } + } + + private func nextSession(_ now: Date = Date()) -> LiveSession? { + sessions + .filter { ($0.startDate ?? .distantPast) > now } + .min { ($0.startDate ?? .distantFuture) < ($1.startDate ?? .distantFuture) } + } + + private func isTalkSession(_ session: LiveSession) -> Bool { + (session.talks ?? []).contains { !($0.speakers ?? []).isEmpty } + } + + private func nextTalkSession(_ now: Date = Date()) -> LiveSession? { + sessions + .filter { ($0.startDate ?? .distantPast) > now && isTalkSession($0) } + .min { ($0.startDate ?? .distantFuture) < ($1.startDate ?? .distantFuture) } + } + + private func buildState(_ now: Date = Date()) async -> ScheduleActivityAttributes.ContentState? { + let next = nextTalkSession(now) + let nextTalk = next?.talks?.first { !($0.speakers ?? []).isEmpty } ?? next?.talks?.first + + if let current = currentSession(now), let start = current.startDate, let end = current.endDate { + return .init( + talks: await sessionTalks(current), + sessionStart: start, + sessionEnd: end, + isLive: true, + nextTitle: nextTalk?.title, + nextSpeakers: nextTalk?.speakers?.joined(separator: ", "), + nextTrack: nextTalk?.track, + nextTrackColor: nextTalk?.track_color, + nextSpeakerAvatarFile: await cacheImage(from: nextTalk?.speaker_avatars?.first, as: "next-speaker"), + nextStart: next?.startDate + ) + } + + if let next, let start = next.startDate, let end = next.endDate { + return .init( + talks: await sessionTalks(next), + sessionStart: start, + sessionEnd: end, + isLive: false, + nextTitle: nil, + nextSpeakers: nil, + nextTrack: nil, + nextTrackColor: nil, + nextSpeakerAvatarFile: nil, + nextStart: nil + ) + } + + return nil + } + + private func sessionTalks(_ session: LiveSession) async -> [ScheduleActivityAttributes.SessionTalk] { + var result: [ScheduleActivityAttributes.SessionTalk] = [] + + for (index, talk) in (session.talks ?? []).enumerated() { + result.append(.init( + title: talk.title ?? "Session", + speakers: talk.speakers?.joined(separator: ", ") ?? "", + track: talk.track, + trackColor: talk.track_color, + avatarFile: await cacheImage(from: talk.speaker_avatars?.first, as: "talk-\(index)") + )) + } + + return result + } + + private func scheduleDeepLink(eventSlug: String) -> String { + let day = (currentSession() ?? nextSession() ?? sessions.first)?.date + + if let day { + return "rubyevents://events/\(eventSlug)/schedule/day/\(day)" + } + + return "rubyevents://events/\(eventSlug)/schedule" + } + + private func nextBoundary(_ now: Date = Date()) -> Date { + if let current = currentSession(now), let end = current.endDate { return end } + if let next = nextSession(now), let start = next.startDate { return start } + + return now.addingTimeInterval(3600) + } + + private func scheduleAdvance() { + advanceTimer?.invalidate() + + let interval = max(nextBoundary().timeIntervalSinceNow + 1, 1) + + advanceTimer = Timer.scheduledTimer(withTimeInterval: interval, repeats: false) { [weak self] _ in + Task { await self?.advance() } + } + } + + private func advance() async { + guard let activity else { return } + + guard let state = await buildState() else { + await stop() + return + } + + await activity.update(.init(state: state, staleDate: nextBoundary().addingTimeInterval(60))) + + scheduleAdvance() + } + + private func sortedSessions(_ sessions: [LiveSession]) -> [LiveSession] { + sessions.sorted { ($0.startDate ?? .distantFuture) < ($1.startDate ?? .distantFuture) } + } + + private func fetchSchedule(eventSlug: String) async -> LiveScheduleResponse? { + let endpoint = Router.instance.root_url() + .appendingPathComponent("/events/\(eventSlug)/live_schedule.json") + .absoluteString + + return try? await APIService.shared.fetchData(from: endpoint) + } + + private func cacheImage(from urlString: String?, as name: String) async -> String? { + guard let urlString, !urlString.isEmpty, + let destination = LiveActivityShared.imageURL(for: "\(name).png") else { return nil } + + let absolute = urlString.hasPrefix("http") + ? urlString + : Router.instance.root_url().appendingPathComponent(urlString).absoluteString + + guard let url = URL(string: absolute) else { return nil } + + do { + let (data, _) = try await URLSession.shared.data(from: url) + guard let png = Self.downscaledPNG(data, maxDimension: 120) else { return nil } + + try png.write(to: destination, options: .atomic) + + return "\(name).png" + } catch { + return nil + } + } + + private static func downscaledPNG(_ data: Data, maxDimension: CGFloat) -> Data? { + guard let image = UIImage(data: data) else { return nil } + + let longest = max(image.size.width, image.size.height, 1) + let scale = min(1, maxDimension / longest) + let size = CGSize(width: image.size.width * scale, height: image.size.height * scale) + let renderer = UIGraphicsImageRenderer(size: size) + + return renderer.image { _ in image.draw(in: CGRect(origin: .zero, size: size)) }.pngData() + } +} diff --git a/RubyEvents/liveactivity/LiveActivityShared.swift b/RubyEvents/liveactivity/LiveActivityShared.swift new file mode 100644 index 0000000..2e25cc7 --- /dev/null +++ b/RubyEvents/liveactivity/LiveActivityShared.swift @@ -0,0 +1,18 @@ +// +// LiveActivityShared.swift +// RubyEvents +// + +import Foundation + +enum LiveActivityShared { + static let appGroupID = "group.org.rubyevents.RubyEvents" + + static var containerURL: URL? { + FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupID) + } + + static func imageURL(for filename: String) -> URL? { + containerURL?.appendingPathComponent(filename) + } +} diff --git a/RubyEvents/liveactivity/ScheduleActivityAttributes.swift b/RubyEvents/liveactivity/ScheduleActivityAttributes.swift new file mode 100644 index 0000000..1941f72 --- /dev/null +++ b/RubyEvents/liveactivity/ScheduleActivityAttributes.swift @@ -0,0 +1,37 @@ +// +// ScheduleActivityAttributes.swift +// RubyEvents +// + +import ActivityKit +import Foundation + +struct ScheduleActivityAttributes: ActivityAttributes { + public struct SessionTalk: Codable, Hashable { + var title: String + var speakers: String + var track: String? + var trackColor: String? // hex + var avatarFile: String? + } + + public struct ContentState: Codable, Hashable { + var talks: [SessionTalk] + var sessionStart: Date + var sessionEnd: Date + var isLive: Bool + var nextTitle: String? + var nextSpeakers: String? + var nextTrack: String? + var nextTrackColor: String? + var nextSpeakerAvatarFile: String? + var nextStart: Date? + } + + var eventName: String + var eventSlug: String + var featuredBackground: String // hex + var featuredColor: String // hex + var eventAvatarFile: String? + var scheduleURL: String +} diff --git a/RubyEventsWidgets/AppIntent.swift b/RubyEventsWidgets/AppIntent.swift new file mode 100644 index 0000000..5e6752b --- /dev/null +++ b/RubyEventsWidgets/AppIntent.swift @@ -0,0 +1,15 @@ +// +// AppIntent.swift +// RubyEventsWidgets +// + +import WidgetKit +import AppIntents + +struct ConfigurationAppIntent: WidgetConfigurationIntent { + static var title: LocalizedStringResource { "Configuration" } + static var description: IntentDescription { "This is an example widget." } + + @Parameter(title: "Favorite Emoji", default: "😃") + var favoriteEmoji: String +} diff --git a/RubyEventsWidgets/Assets.xcassets/AccentColor.colorset/Contents.json b/RubyEventsWidgets/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/RubyEventsWidgets/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RubyEventsWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json b/RubyEventsWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/RubyEventsWidgets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RubyEventsWidgets/Assets.xcassets/Contents.json b/RubyEventsWidgets/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/RubyEventsWidgets/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RubyEventsWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json b/RubyEventsWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/RubyEventsWidgets/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RubyEventsWidgets/Info.plist b/RubyEventsWidgets/Info.plist new file mode 100644 index 0000000..464a4f8 --- /dev/null +++ b/RubyEventsWidgets/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + NSSupportsLiveActivities + + + diff --git a/RubyEventsWidgets/RubyEventsWidgets.swift b/RubyEventsWidgets/RubyEventsWidgets.swift new file mode 100644 index 0000000..56e4a82 --- /dev/null +++ b/RubyEventsWidgets/RubyEventsWidgets.swift @@ -0,0 +1,88 @@ +// +// RubyEventsWidgets.swift +// RubyEventsWidgets +// +// Created by Marco Roth on 09.07.2026. +// + +import WidgetKit +import SwiftUI + +struct Provider: AppIntentTimelineProvider { + func placeholder(in context: Context) -> SimpleEntry { + SimpleEntry(date: Date(), configuration: ConfigurationAppIntent()) + } + + func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry { + SimpleEntry(date: Date(), configuration: configuration) + } + + func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline { + var entries: [SimpleEntry] = [] + + // Generate a timeline consisting of five entries an hour apart, starting from the current date. + let currentDate = Date() + for hourOffset in 0 ..< 5 { + let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! + let entry = SimpleEntry(date: entryDate, configuration: configuration) + entries.append(entry) + } + + return Timeline(entries: entries, policy: .atEnd) + } + +// func relevances() async -> WidgetRelevances { +// // Generate a list containing the contexts this widget is relevant in. +// } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let configuration: ConfigurationAppIntent +} + +struct RubyEventsWidgetsEntryView: View { + var entry: Provider.Entry + + var body: some View { + VStack { + Text("Time:") + Text(entry.date, style: .time) + + Text("Favorite Emoji:") + Text(entry.configuration.favoriteEmoji) + } + } +} + +struct RubyEventsWidgets: Widget { + let kind: String = "RubyEventsWidgets" + + var body: some WidgetConfiguration { + AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in + RubyEventsWidgetsEntryView(entry: entry) + .containerBackground(.fill.tertiary, for: .widget) + } + } +} + +extension ConfigurationAppIntent { + fileprivate static var smiley: ConfigurationAppIntent { + let intent = ConfigurationAppIntent() + intent.favoriteEmoji = "😀" + return intent + } + + fileprivate static var starEyes: ConfigurationAppIntent { + let intent = ConfigurationAppIntent() + intent.favoriteEmoji = "🤩" + return intent + } +} + +#Preview(as: .systemSmall) { + RubyEventsWidgets() +} timeline: { + SimpleEntry(date: .now, configuration: .smiley) + SimpleEntry(date: .now, configuration: .starEyes) +} diff --git a/RubyEventsWidgets/RubyEventsWidgetsBundle.swift b/RubyEventsWidgets/RubyEventsWidgetsBundle.swift new file mode 100644 index 0000000..1aa540e --- /dev/null +++ b/RubyEventsWidgets/RubyEventsWidgetsBundle.swift @@ -0,0 +1,18 @@ +// +// RubyEventsWidgetsBundle.swift +// RubyEventsWidgets +// +// Created by Marco Roth on 09.07.2026. +// + +import WidgetKit +import SwiftUI + +@main +struct RubyEventsWidgetsBundle: WidgetBundle { + var body: some Widget { + RubyEventsWidgets() + RubyEventsWidgetsControl() + RubyEventsWidgetsLiveActivity() + } +} diff --git a/RubyEventsWidgets/RubyEventsWidgetsControl.swift b/RubyEventsWidgets/RubyEventsWidgetsControl.swift new file mode 100644 index 0000000..f0af355 --- /dev/null +++ b/RubyEventsWidgets/RubyEventsWidgetsControl.swift @@ -0,0 +1,77 @@ +// +// RubyEventsWidgetsControl.swift +// RubyEventsWidgets +// +// Created by Marco Roth on 09.07.2026. +// + +import AppIntents +import SwiftUI +import WidgetKit + +struct RubyEventsWidgetsControl: ControlWidget { + static let kind: String = "org.rubyevents.RubyEvents.RubyEventsWidgets" + + var body: some ControlWidgetConfiguration { + AppIntentControlConfiguration( + kind: Self.kind, + provider: Provider() + ) { value in + ControlWidgetToggle( + "Start Timer", + isOn: value.isRunning, + action: StartTimerIntent(value.name) + ) { isRunning in + Label(isRunning ? "On" : "Off", systemImage: "timer") + } + } + .displayName("Timer") + .description("A an example control that runs a timer.") + } +} + +extension RubyEventsWidgetsControl { + struct Value { + var isRunning: Bool + var name: String + } + + struct Provider: AppIntentControlValueProvider { + func previewValue(configuration: TimerConfiguration) -> Value { + RubyEventsWidgetsControl.Value(isRunning: false, name: configuration.timerName) + } + + func currentValue(configuration: TimerConfiguration) async throws -> Value { + let isRunning = true // Check if the timer is running + return RubyEventsWidgetsControl.Value(isRunning: isRunning, name: configuration.timerName) + } + } +} + +struct TimerConfiguration: ControlConfigurationIntent { + static let title: LocalizedStringResource = "Timer Name Configuration" + + @Parameter(title: "Timer Name", default: "Timer") + var timerName: String +} + +struct StartTimerIntent: SetValueIntent { + static let title: LocalizedStringResource = "Start a timer" + + @Parameter(title: "Timer Name") + var name: String + + @Parameter(title: "Timer is running") + var value: Bool + + init() {} + + init(_ name: String) { + self.name = name + } + + func perform() async throws -> some IntentResult { + // Start the timer… + return .result() + } +} diff --git a/RubyEventsWidgets/RubyEventsWidgetsLiveActivity.swift b/RubyEventsWidgets/RubyEventsWidgetsLiveActivity.swift new file mode 100644 index 0000000..ce6f1c3 --- /dev/null +++ b/RubyEventsWidgets/RubyEventsWidgetsLiveActivity.swift @@ -0,0 +1,344 @@ +// +// RubyEventsWidgetsLiveActivity.swift +// RubyEventsWidgets +// + +import ActivityKit +import SwiftUI +import UIKit +import WidgetKit + +private typealias Talk = ScheduleActivityAttributes.SessionTalk + +private func sharedImage(_ filename: String?) -> Image? { + guard let filename, + let url = LiveActivityShared.imageURL(for: filename), + let uiImage = UIImage(contentsOfFile: url.path) else { return nil } + + return Image(uiImage: uiImage) +} + +private func hexColor(_ hex: String?) -> Color { + guard let hex else { return .gray } + + let string = hex.hasPrefix("#") ? String(hex.dropFirst()) : hex + + guard string.count == 6, let value = UInt64(string, radix: 16) else { return .gray } + + return Color( + red: Double((value >> 16) & 0xFF) / 255, + green: Double((value >> 8) & 0xFF) / 255, + blue: Double(value & 0xFF) / 255 + ) +} + +private func darkerColor(_ hex: String, by factor: Double = 0.2) -> Color { + let string = hex.hasPrefix("#") ? String(hex.dropFirst()) : hex + guard string.count == 6, let value = UInt64(string, radix: 16) else { return .black } + let scale = 1 - factor + + return Color( + red: Double((value >> 16) & 0xFF) / 255 * scale, + green: Double((value >> 8) & 0xFF) / 255 * scale, + blue: Double(value & 0xFF) / 255 * scale + ) +} + +private func timeRange(_ start: Date, _ end: Date) -> String { + "\(start.formatted(date: .omitted, time: .shortened)) – \(end.formatted(date: .omitted, time: .shortened))" +} + +@ViewBuilder +private func trackBadge(_ track: String?, _ colorHex: String?) -> some View { + if let track, !track.isEmpty { + Text(track) + .font(.caption2.weight(.bold)) + .padding(.horizontal, 6) + .padding(.vertical, 1) + .background(hexColor(colorHex)) + .foregroundStyle(.white) + .clipShape(Capsule()) + } +} + +@ViewBuilder +private func avatarCircle(_ filename: String?, size: CGFloat, border: Color) -> some View { + if let avatar = sharedImage(filename) { + avatar.resizable().scaledToFill() + .frame(width: size, height: size) + .clipShape(Circle()) + .overlay(Circle().strokeBorder(border, lineWidth: 0.5)) + } +} + +struct RubyEventsWidgetsLiveActivity: Widget { + var body: some WidgetConfiguration { + ActivityConfiguration(for: ScheduleActivityAttributes.self) { context in + LiveActivityLockScreen(context: context) + .activityBackgroundTint(hexColor(context.attributes.featuredBackground)) + .activitySystemActionForegroundColor(hexColor(context.attributes.featuredColor)) + } dynamicIsland: { context in + let accent = hexColor(context.attributes.featuredColor) + let talks = context.state.talks + + return DynamicIsland { + DynamicIslandExpandedRegion(.leading) { + if let avatar = sharedImage(context.attributes.eventAvatarFile) { + avatar.resizable().scaledToFill() + .frame(width: 38, height: 38) + .clipShape(RoundedRectangle(cornerRadius: 8)) + } else { + Label("LIVE", systemImage: "record.circle.fill") + .font(.caption2.weight(.semibold)).foregroundStyle(.red) + } + } + DynamicIslandExpandedRegion(.trailing) { + if context.state.isLive { + Text(timerInterval: context.state.sessionStart...context.state.sessionEnd, countsDown: true) + .font(.caption.monospacedDigit()).foregroundStyle(.secondary).frame(width: 56) + } + } + DynamicIslandExpandedRegion(.center) { + VStack(alignment: .leading, spacing: 2) { + Text(talks.first?.title ?? "Session") + .font(.subheadline.weight(.semibold)).lineLimit(2) + Text(timeRange(context.state.sessionStart, context.state.sessionEnd)) + .font(.caption2).foregroundStyle(.secondary) + } + } + DynamicIslandExpandedRegion(.bottom) { + VStack(alignment: .leading, spacing: 4) { + ForEach(0.. 1 ? talks[i].title : talks[i].speakers) + .font(.caption).foregroundStyle(.secondary).lineLimit(1) + } + } + if talks.count > 2 { + Text("+\(talks.count - 2) more").font(.caption2).foregroundStyle(.secondary) + } + if let next = context.state.nextTitle { + Text("Up next: \(next)").font(.caption2).foregroundStyle(.secondary).lineLimit(1) + } + } + } + } compactLeading: { + Image(systemName: "record.circle.fill").foregroundStyle(.red) + } compactTrailing: { + if context.state.isLive { + Text(timerInterval: context.state.sessionStart...context.state.sessionEnd, countsDown: true) + .font(.caption2.monospacedDigit()).frame(width: 40) + } + } minimal: { + Image(systemName: "record.circle.fill").foregroundStyle(.red) + } + .keylineTint(accent) + } + } +} + +struct LiveActivityLockScreen: View { + let context: ActivityViewContext + + private var background: Color { hexColor(context.attributes.featuredBackground) } + private var foreground: Color { hexColor(context.attributes.featuredColor) } + + private var visibleTalks: [Talk] { Array(context.state.talks.prefix(2)) } + private var extraTalks: Int { max(0, context.state.talks.count - 2) } + + var body: some View { + VStack(spacing: 0) { + HStack(alignment: context.state.talks.count > 1 ? .center : .top, spacing: 12) { + VStack(alignment: .leading, spacing: 6) { + eventAvatar + + VStack(alignment: .leading, spacing: 1) { + Text("\(context.state.sessionStart.formatted(date: .omitted, time: .shortened)) –") + .font(.caption2) + .foregroundStyle(foreground.opacity(0.8)) + .lineLimit(1) + Text(context.state.sessionEnd.formatted(date: .omitted, time: .shortened)) + .font(.caption2) + .foregroundStyle(foreground.opacity(0.55)) + .lineLimit(1) + + if context.state.isLive { + Text(timerInterval: context.state.sessionStart...context.state.sessionEnd, countsDown: true) + .font(.caption.monospacedDigit().weight(.semibold)) + .foregroundStyle(foreground) + .lineLimit(1) + .padding(.top, 8) + } + } + } + .frame(width: 62, alignment: .leading) + + VStack(alignment: .leading, spacing: 10) { + ForEach(visibleTalks.indices, id: \.self) { i in + if i > 0 { + Rectangle() + .fill(foreground.opacity(0.18)) + .frame(height: 0.5) + } + talkBlock(visibleTalks[i]) + } + if extraTalks > 0 { + Text("+\(extraTalks) more") + .font(.caption2.weight(.medium)) + .foregroundStyle(foreground.opacity(0.6)) + } + } + + Spacer(minLength: 0) + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + .background(background) + + if let next = context.state.nextTitle { + Group { + if context.state.talks.count <= 1 { + upNextFull(next) + } else { + upNextCompact(next) + } + } + .padding(.horizontal, 16) + .padding(.vertical, context.state.talks.count <= 1 ? 12 : 10) + .frame(maxWidth: .infinity, alignment: .leading) + .background(darkerColor(context.attributes.featuredBackground)) + } + } + .widgetURL(URL(string: context.attributes.scheduleURL)) + } + + private func talkBlock(_ talk: Talk) -> some View { + VStack(alignment: .leading, spacing: 3) { + Text(talk.title) + .font(.subheadline.weight(.semibold)) + .foregroundStyle(foreground) + .lineLimit(context.state.talks.count > 1 ? 1 : 2) + + if !talk.speakers.isEmpty || !(talk.track ?? "").isEmpty { + HStack(spacing: 6) { + if !talk.speakers.isEmpty { + avatarCircle(talk.avatarFile, size: 18, border: foreground.opacity(0.25)) + + Text(talk.speakers).font(.caption).foregroundStyle(foreground.opacity(0.85)).lineLimit(1) + } + + Spacer(minLength: 4) + trackBadge(talk.track, talk.trackColor) + } + } + } + } + + private func upNextCompact(_ next: String) -> some View { + HStack(alignment: .center, spacing: 8) { + Text("UP NEXT") + .font(.caption2.weight(.bold)) + .foregroundStyle(foreground.opacity(0.55)) + + avatarCircle(context.state.nextSpeakerAvatarFile, size: 16, border: foreground.opacity(0.25)) + + Text(next).font(.caption2).foregroundStyle(foreground.opacity(0.85)).lineLimit(1) + + Spacer(minLength: 4) + + trackBadge(context.state.nextTrack, context.state.nextTrackColor) + + if let start = context.state.nextStart { + Text(start.formatted(date: .omitted, time: .shortened)) + .font(.caption2.monospacedDigit()).foregroundStyle(foreground.opacity(0.85)) + } + } + .frame(height: 20) + } + + private func upNextFull(_ next: String) -> some View { + HStack(alignment: .center, spacing: 12) { + if sharedImage(context.state.nextSpeakerAvatarFile) != nil { + avatarCircle(context.state.nextSpeakerAvatarFile, size: 40, border: foreground.opacity(0.25)) + } + + VStack(alignment: .leading, spacing: 3) { + HStack(spacing: 6) { + Text("UP NEXT") + .font(.caption2.weight(.bold)) + .foregroundStyle(foreground.opacity(0.55)) + trackBadge(context.state.nextTrack, context.state.nextTrackColor) + + Spacer(minLength: 4) + + if let start = context.state.nextStart { + Text(start.formatted(date: .omitted, time: .shortened)) + .font(.caption.monospacedDigit()).foregroundStyle(foreground.opacity(0.85)) + } + } + + Text(next) + .font(.subheadline.weight(.semibold)).foregroundStyle(foreground).lineLimit(1) + + if let speakers = context.state.nextSpeakers, !speakers.isEmpty { + Text(speakers) + .font(.caption).foregroundStyle(foreground.opacity(0.8)).lineLimit(1) + } + } + } + } + + @ViewBuilder + private var eventAvatar: some View { + if let avatar = sharedImage(context.attributes.eventAvatarFile) { + avatar.resizable().scaledToFill() + .frame(width: 46, height: 46) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .overlay(RoundedRectangle(cornerRadius: 10).strokeBorder(foreground.opacity(0.25), lineWidth: 1)) + } else { + Image(systemName: "record.circle.fill") + .font(.title2).foregroundStyle(.red).frame(width: 46, height: 46) + } + } +} + +extension ScheduleActivityAttributes { + fileprivate static var preview: ScheduleActivityAttributes { + ScheduleActivityAttributes( + eventName: "Rails World 2025", + eventSlug: "rails-world-2025", + featuredBackground: "#3B1D62", + featuredColor: "#FFFFFF", + eventAvatarFile: nil, + scheduleURL: "rubyevents://events/rails-world-2025/schedule/day/2025-09-04" + ) + } +} + +extension ScheduleActivityAttributes.ContentState { + fileprivate static var sample: ScheduleActivityAttributes.ContentState { + .init( + talks: [ + .init(title: "Multi-Tenant Rails", speakers: "Mike Dalessio", track: "Track 1", trackColor: "#DC2626", avatarFile: nil), + .init(title: "Startup Speed, Enterprise Scale", speakers: "Austin Story", track: "Track 2", trackColor: "#2563EB", avatarFile: nil) + ], + sessionStart: .now, + sessionEnd: .now.addingTimeInterval(45 * 60), + isLive: true, + nextTitle: "SQLite Replication with Beamer", + nextSpeakers: "Kevin McConnell", + nextTrack: "Track 1", + nextTrackColor: "#DC2626", + nextSpeakerAvatarFile: nil, + nextStart: .now.addingTimeInterval(45 * 60) + ) + } +} + +#Preview("Live Activity", as: .content, using: ScheduleActivityAttributes.preview) { + RubyEventsWidgetsLiveActivity() +} contentStates: { + ScheduleActivityAttributes.ContentState.sample +} diff --git a/RubyEventsWidgetsExtension.entitlements b/RubyEventsWidgetsExtension.entitlements new file mode 100644 index 0000000..0d57a92 --- /dev/null +++ b/RubyEventsWidgetsExtension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.org.rubyevents.RubyEvents + + + From bf955227da198808232f7641c8a83b635320d6df Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Sat, 11 Jul 2026 10:30:10 -0700 Subject: [PATCH 2/2] Implement Home Screen Widgets --- RubyEvents.xcodeproj/project.pbxproj | 17 +- .../UserInterfaceState.xcuserstate | Bin 194902 -> 209495 bytes .../xcschemes/xcschememanagement.plist | 2 +- RubyEvents/App.swift | 9 + RubyEvents/AppDelegate.swift | 2 + RubyEvents/Info.plist | 5 + RubyEvents/liveactivity/NextEventStore.swift | 56 +++ .../liveactivity/NextEventUpdater.swift | 175 +++++++ RubyEventsWidgets/AppIntent.swift | 11 - RubyEventsWidgets/NextEventWidget.swift | 467 ++++++++++++++++++ RubyEventsWidgets/RubyEventsWidgets.swift | 86 +--- .../RubyEventsWidgetsBundle.swift | 9 +- 12 files changed, 735 insertions(+), 104 deletions(-) create mode 100644 RubyEvents/liveactivity/NextEventStore.swift create mode 100644 RubyEvents/liveactivity/NextEventUpdater.swift create mode 100644 RubyEventsWidgets/NextEventWidget.swift diff --git a/RubyEvents.xcodeproj/project.pbxproj b/RubyEvents.xcodeproj/project.pbxproj index a943fa1..4097ac7 100644 --- a/RubyEvents.xcodeproj/project.pbxproj +++ b/RubyEvents.xcodeproj/project.pbxproj @@ -48,6 +48,13 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 975673453001ECF200F713BE /* Exceptions for "RubyEventsWidgets" folder in "RubyEvents" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + NextEventWidget.swift, + ); + target = 97613B152D0634F500220031 /* RubyEvents */; + }; 97613B3E2D0634FA00220031 /* Exceptions for "RubyEvents" folder in "RubyEvents" target */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( @@ -66,6 +73,7 @@ isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( liveactivity/LiveActivityShared.swift, + liveactivity/NextEventStore.swift, liveactivity/ScheduleActivityAttributes.swift, ); target = 97AAF32B2FFF2733009DB8C2 /* RubyEventsWidgetsExtension */; @@ -85,6 +93,7 @@ 97AAF3322FFF2733009DB8C2 /* RubyEventsWidgets */ = { isa = PBXFileSystemSynchronizedRootGroup; exceptions = ( + 975673453001ECF200F713BE /* Exceptions for "RubyEventsWidgets" folder in "RubyEvents" target */, 97AAF3472FFF2734009DB8C2 /* Exceptions for "RubyEventsWidgets" folder in "RubyEventsWidgetsExtension" target */, ); path = RubyEventsWidgets; @@ -303,7 +312,7 @@ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UIUserInterfaceStyle = Light; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 17.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -338,7 +347,7 @@ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UIUserInterfaceStyle = Light; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 17.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -484,7 +493,7 @@ INFOPLIST_FILE = RubyEventsWidgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = RubyEventsWidgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 26.2; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -516,7 +525,7 @@ INFOPLIST_FILE = RubyEventsWidgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = RubyEventsWidgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 26.2; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/RubyEvents.xcodeproj/project.xcworkspace/xcuserdata/marcoroth.xcuserdatad/UserInterfaceState.xcuserstate b/RubyEvents.xcodeproj/project.xcworkspace/xcuserdata/marcoroth.xcuserdatad/UserInterfaceState.xcuserstate index db59f34e0cc44b4dfb8430239ee97b7633f92212..05e5b0b859377e26ab9d76011c406b1b83cfe35a 100644 GIT binary patch literal 209495 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 z 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 s6Oc=OEO3cFGRgr2)b)*JT6Ny7=A+?b@ zNIX&(X@Rsu+9Rn*XCw{jhGZaFNH)?N>4OYF1|k3%j0{7DBcqWq$OL2}G6l&;mLcCG z%aIkxN@NwX8d-y^MK&WpBHNHX$X?_iatb+zTtcoRw~=Sa3*;s87Wo53P!wgNEL4b! zP%$b&WvCogp&C?=I#CzuMm?w(4M(HUs%SMd4y}VWK@-pxXlryXnv3S4i_sa(1++F^cnga z`VxJG{(-*3Pz=LZ7#kxn5))z~Op3`cC8ol(m<}^xX3UN`Fc0R%!m$V}28+ciVU@Aw zSPQHr)(UHlwZYnA?XdP(BGv&*#kykY$O$Y1>xK2k`d}0Wu))|6Y$!G!n}AKkCSlXC z8Q2_bE;bKaj4i>IVmq;2*luhOwinxn?Z*ya2eCugVeB~e3w9a1f?dV#V-K)jv4_}G z>^b%h`x9s3Y+Q@$a6N9ojkpOn;}+bC+i*MX#v|~GcqP0tUI&lI>*DqBMtB0=25*a} z;(mM}{xv=br*MD|#)shF;6w3Y_;7qQJ_(kOuj1G6>-Y`)CVmUQhd;qz;ji&G42*#@_>6K40Yk_LVkj6ohMp12D9@e}IK(*2IKnu=IL)}oxWstQc)@td zc*S_lc*A(h_=E9|@h9Uw6KC?6Vy1){#8fjwm{z8ZX=gf^9%dM`JhK8bf!UPVjM<#o zg4vSUirJdkhS`?cj+w;l%uHkUU}iD1nFE<$GY2s#<~Pg{%n8hi%o)s?%r(rl%yrE5 z%ni(q%uUSA%q`3xm|K}UnERQ>nJ1V(F)uJLGA}VNGp{pmGaoS@GhZ@av4kuUOU#n6 zf>=_Pj3s9&SivkMOT#j=EG!Sp%kr^eSh1|~teUJiRxMU-Ry|fDR%6yztX8bntSnYG zD~HvS)r-}e)rZxW)sNMmHGoC2hO@@ACa@;5X0T?m7P7u$En+QZEn}@@ZDeg?onZaM zI>|c4I?ei-^$Y6^>n!UW>pbf+>lW)F>k;cQ>m}=`#p!v;c&Pd2`7jn<;XZnj)r65SUFyfk5h*e&#B9)$EnY0 zz-h>7#A(d=iqnMCoYRiu=XB(B;$(8VbNX@ma|Un*asX#2XDnwNXAx&HX9;I1C!e#7 z^F3!dX9Z^^XBB51=LgPi&K}NQ&T-BO&QF|^oL@NSIoCNiI1f0#av5AEm&IjsIb1H6 z$0fKVm(MN76?22Rdai+M-Ob&@-OJs_-OoM1 zJ;*)8J;wc+dx?9Qdxd+4dzbr+`y2On?sM*I?mHfn$Kq*tTAq%l=NWiLo{4AXS$I~S zjpyQp^D6Kv@+$G-c(r(qd0+9G@Dg|}cx`woyj0!*-ay{hyg@vQ2Y7>dLwMithVq8- zM)4-{X7Fb6X7TcP3wbMeD|xGUt9k2rn|V8VyLjh$7kC$Wmw1*Lc@?H+VOB zcX^L_FL|$cuL+!B5KMwa@Q8ARjF1yrLPx|9u|#>I0#T8uL{uiK5LJn4M0KJT(ST@1 zG$&dRNklS{LZlL%iF6`|=t&GDz9yy-(}{118N^It7BQQcL(C=S5%Y4L&Ra?IB|-&KwKn#C!P~8h?m4G;x+MxcuV|2yd(Z3F_KG)NHHlPRiv7< zkXF)0+DSJVO2(4q$tGk1*_3QXHYZzLQPSMb$*Bj3q)@!kALeiXkdzZ$FL%3>S_| z*e2K|*e%#EI3PG8I4bx_a8mG#;Edpc;G*EF;F{o;;I`nt;DO+=;ECXO!E?cD!5hJ! zg7-pP$PjXbTp?drPAC>igmR%ms1}9@^+JQtBD4yfLYL4d3>8KSqlD#!6@*oURfRQ$ zal&|EU139EBVmHDsj#K6m9U+#y)aprBJ3pWEKC=66ZQ~h33~~93;PQP2q_^D4iyd) zjuMU*ju%c4P7zKO&JfNN&K1rR<_Q-Hmk5^%mkU=2*9g}NHwrfiw+eq0?iB74?i218 z9u^)Eo)G>d{8{*m@VxMX@QU!N@TTyV@SgC#@R9Jb@HgS_!dJrA!gsA6_poN7F7||5Y-gb5ygudh#HET zh!R9CL@h;aMeRgMqGVA=Q72JXQM#zRsE4ShsF$dpsK02Ch!TAx8Y&to8YLPh8ZVkG znj-pEG($8;G*^@>$`dUXEfIY$S}s~GS|i#Z+9>)#v{kf2v{STKv`=(MbXas;bV77m z^t0%k=)CB%=!)ou=%(nd=$`1I=#l7|=r_?z(JRp(qIY6cjEPxdwwMr;Vxd?hmWpL! zrC24_igjX>*erI6U1Fa&LL4KmD6T55DXt@~FK!}E5VsJw5hsdM#GS-l#hK!4ac^;d z@gVUK@o@2I@p$oM@eJ`y@mz7Pc#$|?yh^-Uyk5Ln{G)iMc(3@d_=xy~__X+}_@el_ z_=fn7_<{JT_?h^H_>K5a2_|7lNC{sel1L@Nk`RerVwTt?Zb_&lQW7hvB&jBelf+9J zNg7L^sO5RG|2jM~NARJXF~)Hx_UC@UyCsCQ8R zpg}=Hf`$i;4jLacIcP@E%%J%}3xXC0EeTo?v{H&nnNpUNCncl;sZbgul}dx9N~uPw zl^UfcsZDB^x}_dzm^54(Esc>@lva{flUA43lGc{ilh&6umVPB|CT%WlEo~!Bly;D& zO8wF_X%}gRG*g-_&5`zz_LUBlek~m=9U>hr9U&bf9V?wEog|$moi3dvoh_X&T_F8V zx=5NYT_#;AT_s&7T`%1%-6Gv4-7Y;NJu5vYJukf=y(qmTy)3;Vy(+yXy(Rrs`n&YG z^o8_K>3bO>ivd*$}S&poyte5O-*&x{r*-Y6i*=*Sy*<9H?*?idoS*|QkwotZ2 zwo<>96$K?z;Q_hu(|XR(kH}BUf0jR#KaxL|KaoF`Ka>9^|6TrE{zCpz{#Jo0 za0Q_t6?}zMAydc|dWAt@RG1Vtg-a2kh*UIEG**12Xrf3^G*vWHG*`4xv{bZGv{tlN z_!S)$8H!9rcSS!%f5iaBKm||?Rg6`PQ;b(kP|Q~>P~Q^6p3M)1twS;4b|=LF9Uo)XC zGk90I1j$AXUsp9($`d?om5@SEVb!G8q53;r|sy%JHPN=%6>8A^^)pp+{W%3!5l zX;2!KZly=*Rr-_>${1xGWxTSkvYxWOvVpRpvbnN_vYoQMvZJz-a*&cz0_9-k5al<@ zp~_*(;mQ%pk;<{kDaxtJIm)@pdCJAgCCa7BwaRtM^~w#(Ey``m?aCd>1ImNSYs%}& z8_Ju?TguzYJIcGtd&>LD2g=9F7s@}C?^TG3ry^9Oimwu>q^b~=Mx|BhR5q1eRZUf0 zRYO%%6{o7Ds;#P{idWTD)l)T6HCMGzwN!ObC8?5CT~u9F>8f6;-l{&TzN&#Lpc<(f zrOH+1sTQifQ!P?0RxMF2RpqOeslHdOQf*XiQteRfRP9n7Q5{tsQyo{GQk_v7W7Xr-gX%--lj>9I2kKwd57m#)?afF10goiW;X&BNdq;besAx%OOLYjs& z3uzwGBBV`7a!5)@YDjuWw~&mGULn0h`h*M)84~hM$k33HA!9@4gv$ zUdY0b??aY{tPNQgvNhz#kTW4?L(YYq54jL>G2~Ln<&Y~OS3|Ca+zRBN4r&f*PHIkR9%z2mJk&hWJk~tXJk>nY{HFO`^IY>(qv8BeeCk4YUoljkJxmUum0Y6SPgW&9u$6t+h$o zG;J4cS8Y#iFKusaAMF4wr5&LisU4-Aq@Ao?u3e#Bsa>UAtzDyCt6isEuic>CsQp2^ zOS@ZpSbIc!RC`8yR(no+UVB-4U3*{qK>JqvhxVQJPwjghqC<6gf`6O?Az5?R4#RiMljh7hP9fx~{t}NB50x zsBV~UxNd}Qq;8aMv~IF)if*cImTtCgq3%1~cHIu$PTeluZrvW;Ufn+3e%%4xLETZ^ zY28KLCEaD+UEMw1ecc1yW8H7Mx4J)c@AQ0qIlVwH)Qj|Dy+j|RSL;LcM!iYz(!2F> z`da$h`a1e}eO-M$eSLiceM5aCeS*HVzKuRbpQ`ukyXiCZnfku^e)|6U0eVXRjed-N ztbVb6iGHa*U%yQMy?(iVg?^=em43B;y?(2HkAAOypZbZieoL9)>K#V8al@H-@2xVTR#`5rzqdiH1prX@=Q` zIfl80MTW(O?S>tOorYb8-G)7ey@q{;{e}aEgNCDq(}s(NONPsayM}v)`-TUG$A;ew zZw-GK-Wi!jmQiEW8g)j!(O@(hO-8fPVze4^N!^AYPOhS{$ zBsNJ*a+AuWHknLjQx#KHQ#Dg{Qw>v1Q=F-mskW((Dc;n;)YR0>)Xvo2lxRvbbuo1{ zrJK5&a!dnE15IC>#+k;OCYUCgCYdIirkJLh=9uQ17Mi{@Ei$bztu*a79WWg<9Wos@ z9Wfm>9Wxy_oiP1m`q^~RbjfttblY^tbl3FE^qc8-({s~n(>pWM%rdjh95dG}GK&+X?8_k={Tg^Mn2h0b} zhs-CrHiGjrKhErrMIPzWq^gUjIfNf zjIzwM%(Be3%(2Y1%(Kk5EU+xK{A@XAId8daxnj9t zxoNp;xo3H7d185Cd1+-^IaaQfXCDa~ZB4cMtsSkMtevfC)-Kkr)*jX@Yd>p$>j3Lu>k#X3>qP4$ z>tyQ`>s0GB>vZcJYo2wXb)9v+b%S-Ib(3|ob&GX}b*FWgb+`4P^(X5|>nZCw>v`*C z>rLw|>uu|O>l5n>>q{Hk#<6j2JR4ynZG4-=7G#s!WHzxx3ldWyU;GOi|tCg%C5G1>|VRi9%>J>hub6Uk@i@7ReK$KyuGfyslA!K zxxIzGjXlxc$==!C-QL6A)85zK&raFDu@ALRwNJB8w|{G&VV`NAWuI-IZ(m^l&c4k4 zy?wcTy?ujyqkWTovwfR=mwli8i2a29C;QL#3-*ilOZIE_JN5_m=k^!&m-bf<%z--? z4yJ?aARPjS*r9fWI5ZBe!|1R&91gdmlB2StileHdnxnd-hNG4v-cjGt$kD{n%+b}6 z?&#*oaAZ2VJ9;>>9NCT>M^8sDM{h?TM_J zWI9<+wv*%JI(bgQNjmw?a!!lW>a;oSPKVR!bUEElkJIb)IV(G>IIB9VIjcKsIOCml zoeiB$oh_ZMoPK9VXD4T8XPUE%v%9m0v!}C{v%hn=bA)rGbCh$mbBuG6bFy=~^IPW( z=Q8K_&gIS(&Xvwp&ehH}&b7{U&h^fn&Rx#k&OOe(&cn_l&ZEv_&eP7Ho#&kAo!6Z= zoHw11oR6JPoKKz4oNt`(U6_mIV!H?z=~B3YT}qeArFMn5j4qSQ=CZq@T`{g$S9w|>gej^>g-B$b#rC7vRv7&UasD*J}$}yT!URh zUBg^sTw`5RUDI6CU8`MdTx(tHT+5Myo}Qk*o_?OMJ%c=y2Y5z%#(2hh#(5@rrh2A%rhDdi z=6dox%RMVRD?OV%TRcB_wtBXCc6ly(E_p6{u6V9`u6eF|Zg_5bZh3Bd?sy)09(jKA zyz~6&dGAHMsF(1PUcR@SSKyU+jb4-2?6r8UUYpnM4fjTPBfU}H3f?$xeQyJAQ*TRe zD{nh*dvCHg#oNi-*_-a|=I!Cl@@9KSd&hXkddGRkdnb4&dM9}&d#8A(dS`g&dzW~Z zdh@+&ylcJdyxY9ny*s=+y?ea}y+3(RdQW*zdoO!$c^`V8dY^e;cwc(odjIetK8BC! zRezn7B?_20w;@jlg?Azk|!MD}-qi>sUpKrhK zsPCBX7vCA*S>HL|CEsP=E#E`mQ{QvnYu~$2G!zSEg^EKZp+TX#P<^N&)EH_Cb%Z)Y zeWB$;D}=^{)(UMM+9tGZXuHt%p^2d#LX$$1o0&3trl+4m_((ZKfCv!@B5Tnw!PC{> zH@h|bvuM7vxhW+*DLXqC5g}pqR5>P@)M2RU0eYg{G zA#TKjco82G3jYg7B9KV+I)Ihk33Yiib{es-czS<~M!sb_l8X9csp*|jpW=nvagOUZ$=#R(~$ z{oVYD!jQr*8)s$Gv&ISjocL6D&a{qc{wz3e3`?j<&y1S>?3}cWq#QWgTriEC15@_Q z@;6V*PD@TpPs@SH%pEhcQvB6>rlqICe5$3Vf0!^kzGFkbKh>WKr=tULwn)oJ&Fl?B zmBeKvC8ztFcFyuArPfYLPxoiR^C=5Iua=dSl+g(Wnvqk}pWL%kd`8F2M4<@AR3kGZ z$KNNXun6F3f(ozW<7g9w^8dWNhDqK01s5hr@TbG;@TdM2iLZWAc214VZr#)U@Shvg z)9cweFz3Res-Bb$XVK}hgBRSy-#s%6)}Ns2FzT+|Gt)A1vI{eKDk*|;@NCMInX+}vY1*N3al!nq#2FgTPC>!NCg|viqyA{$JX@j(-Yj-lt zt_}P%%byMlzL%duC^;od6n5^ImhLa_^?I9S!vMYAlCn}Vvodo!du#f8`O`DI(?#XY z>Y3aZehGter)6e)o4_yQ3chTSmfFdm^AG=0A7&A_I8S!(w2nC^kwl~el7u9;E`*f< z3$A71U;Ww58YaNHlnXyjY1uHLQNfCX4=9>3Wu_NK`eDZD1sSUn zg~|U;#?^afq^A3e=i8$o-;hLM+kYqD;yLyz$WfapY+V*P#`S?UonB7jfwd+rC%u4N z_J<|gzaT$-qOkV=l%J@}F-GU0h8v)6)YP1**zAWCK!u0kWQoT7Yb%VyG$~wjo;! z>U1d4gdaCdXwWl<9^lnXgY9x=Mp9PaJmdy)3rT6)FyZfi3*3M^$gfEGg~(mx9&#Uf zKvkn^P;pf4g~&tX5%L&$Ld8=}s8&?FkMI2Rf;(S5QP}K%Yt8;1C;gwj;G2T1Y9yX+EEFz(<1q{e3Q-J1l0POV>X% zG&aJei;RsKIIu940#z>USA}1zQRRI4?{F}TYEfPLzv^>AN0x_bKj_L(18Si! z*NB=>GnGI!rJB)~YeVhua+^~v{vTZ~d@?M&#L%$tzppVSDmHM9KKdF%sg{9jj3~Iq zB7$f%THzlqq7qseUPNoE4Sf;H|2Tg{s3+2;iw=tpDHO+u5=6f_m}qaD#s zXlFDH?Sghi)6s5d2AYX>M|+@IXf~RI_C$N3z0p2sU$h_EpGu}usg6`Ed!_g7wNOTlB8Xbd^7ZkJwu&M7I=sr`^vf&FAf4AiHzOWmG zeOOA@#Ex0;F|bN{QqPQ(&I$f(`iY^5zhkBF$dt%Xe`u1=Qjn|`ovKb!cIQeF;jyui zp|QRgU#KrKDk360BK(6S1&2l?Cnx)pB77e-gy^DzVBnCcRKbKrg!yBVqDv7>Xp}!9 zqGN2>N5L#B2&Pl%f(Z?chzj$?rj#O>@USRfgg+|fqhMAQ1d~>}V8TNqLSvIsB1#bq zESbpI$k^zQf>~b>OxMx{6B-&G6O$ZKnqb01qkJ7BqGLV^W=laZ-AWfscuZRjQKlN5F!K{V14Y1;O+zZ7>m0Nzu`zDjB-E zMW%dwn@$x3)4TM+{9`*4784#F5fd641{>kn*s##BsHp#FfkPu=!crr{K5l2u76b#| z#FpkZ(LQ5*sbQtKP2sRRi1vp^esr5I6$I12)WL-NI{K1J5e(gUCnY6++|FDt2xegE zg83gBJ-To5M}>ucR5Eu8f*Dl0VCY7#V`RtDwZM^4Vafl|YyVmh3@BwV5x(fqj?twF zCNv@`DkU`f<2v)SAebSg3??)x(jOXLn(iPxDmK)gn*4F2_o5(}p`{KcJTleqFGU50 zcQ`UOCFCvGv#p}#}Q8Mu9z@L)zQQw4V3WAwhx?t$r6q5|Q-VeqH|LsE@ z>`DCL5g!e%Fk?Y5(@Pf&-8V%Fz~48)Yy-@1I$(s%#2b71IIIAe)t$$ieN&c z!egUjKW=B-1;NZJWiXJ04-Vu?6AU~wG&K6-+Z0w1%$(8&liV>mCZ<%k2^MO2D!f-8 zHhR$o!OSaVFp(XTqaq_p(`(a%tH{ug2jp1Af?yVuG8mdfXh&ZuZWDwUp5lWu6-BS) zuqs$xq#Z!6ILh3te5w)0FLM^58sb$pn`B*(97OpGt zVU4iH^ePi90j?`q4i}BAhQHQOyXciA)b7GXB+9?%feL4lJlO^7BH)XiM4`I)hn+Kf zH%QA!>y`xPGxY!XF+F)xBNOgN04D$wh1!2i6Q9wGUObZShtGk<&yt?hH?wEXUsKXB zjj{MyQsDf5dIG(VfhV(L$80}bjZyqeaGK?>ROx9MFrI(Dq-s5LI%j6VjEa9u&m`5# zOixYAfNy|`msanrr0(_MnG0uwup~Gege6leC`ZBTW6X~z6Du^!Y~YF#dtjpb15sV(%PCAf+wJtwK~w$%T)OyFzr#;}+=Wo5zz2~GUj zaIH`Fe$!=AtC_HGI#yiQ3$TE|G%SA%AxJz)V!(#F7Z}7Ea>a z!oJC+Cu;&H8-|TSWO>+dYy>uv`hnU?{g{W1#>QY{scqB_Y9}4FrP#gd{vVMh!1YS- zR(L;=uxV!BnrYeefkjI_;Ibe%S5WMT?6g#Wa#EJ3cUo#r=ablEM1W1froyQuPtTrd zsmXoe>~|xfaL1Z9?{Dv~S$)p5O?lOs^;=Tg3$6~Ej(yu4u4HKzUo#h*j-;H#X2RoV z6+b?*cLb%KRQ1*PyUXtOojmjywcS`Xbv{D>&$#_b!JlwDi-IW+Y(ADp7xw}zm)b+^ z{h+v;b%eF(KMOi=R6e$z7QPJo9$SvBz*b_bu+`WaY%R8q+D{#z4pN7x!_*P#D0PfF zPMyfdHWUfpQY3sE6#i3@@KZ&?FMknUur$t-4I8a86Mlpiev~>H5Psqxg$M5I8SFe= z8_r_qsMFNXx!48lBJ~S(k#LHfefx;w`h>pu^ZS;>I`+3I+ust#_m9n=cx;y zALJtl>Tz*U=a#MR->hZ)GsV*~) z+8(&{7uf5*e-n_?LQi`K>GJMRv;5cq0B2KrpGzB1e(OTI1eXq66fRPZ~-pF zMYx!{MqQ_FP&cVt)NSexb(gwF-OtB^3QgjQLX)@}ntV`X@?nw5S6@t)y-C~wP2x`K z*CLa+=Tj!}NIVAC13U_krXEp`bMaWbJoSWnQD!FbDtHZO60eF^!>dzIsb|!0d3a4c z4x0R(dj8o>;`I>$-k>RD?!#fn3OoS$1mu#{l-h(#T z3Ga-j;a%{qcskw<&%iVB?$lfA59%HDC-okn2teV4D+W*;pp1Mxs|aSVBAESoob9nd-W z0vhOCd>%d@paeikfb#S3Ts#jO3(#@^6?}fB`Hz1+d=#B-W?+?=;qD_-_C;0MwX^KgVAH)C5oq zjkQdkU-7s2pL8aFVEq7GRaJ7I!eB5sP&b3gU@_PLwF1-zP$;cf`*kn`y=ez^Go&!7ta#E3W6GQBr`Ka|xicq1fW!M;YhJ)c`xB%(}s1Kl_01X3ZI6xx+8VS%S zfJOr}CZFLc#L5UO#L9@GvC`k31m83Pv_b%DtuI*19xJ0J#L9>RX!#h1G2<(MRs?9JTt)(;DL^X&v}&1QWwc_nrR!clMjN_ksZw&?OJ;PWv8FIm8Ge9P z188-C*2rUYVsxgl)&ywW=f|1}1$Hkk&{}nF+esZ7{W!Ja{k#oRC!V9RX2Ya8#gnGH zoM89B8miG*YmV(`7rEnati2ii3bFR3vDPlRz$nIO8Y^H7W(;9`!x+jK#u&~R!5GOH z1<-ha)&*!ifYt|S1AsOJXd{3&1}MDaP4XFIim*;7!a9YluH&=$Fj)r>U&Z3)oUWruYmV@n~{%{10lCD*+jj6F2g zos32B$E%&?f~tP%M>t$0L=nuPMKk4N|}lR ztV}tLHM_*R$J8(l5Gzy5)G_q{?FrCc0PUT}G%`&z);<93``NKForr+xDlRZ`!sCg5 zyl!w~^`Y0VX8l;9HN?vF!lb_9Nkwxjw%>5A+7Fwrc4{XIUc2Hitjus`Q~_3IB#pIy z$pu!CSsP+yR$^9WR$*3UR%2FY)?n6T#xZLFbRa;#2IwGwQUC>TEk8hq0Q4Jx4h872 zd}f_Otjzj_SecD!tiuCXM+LA>{etyhz}lY1nh4Ml0j$XoD>DW0(*FT;Bn7)r_#5RA zl0`EC%r4AsG}x}pbbyWq=$Kq)1~U_&ki}#gY?;i=FmsrFXn#GKy_mfLIu4-Y0XiX% z*_YXm_BRorlRm#c08tGtj_T=?2iTzQwc9Vn&W@6UDp4TVXE6;B$LwQ-HKZ-dJl zgI_&t--3JRZ+|11V+tFr(R70~rDT7Tm{SYEPNBh0EBSy~%tbWV*~~f2xy*UY`OF2( zTxK3~A@e(c!gq!<06G((vj939pmP8^7ohV13g7oF$Y(At0=ujT>`EGJZUF4U0N9mZ z!2Szhf26@~1880V?9Na2t_PThX{-mChX4w1?4n%e5#~{VE(YlGvcr0k`3sHp6!SFm zXMipN=u&{@=P}PP&(c_z0rdONkM#-^c(u5|JmlwR!!I=Q4x4}W_KXYa1~k?iFzLoXebs*FJO= z%VmvVji&vMWWjfemjHS>mo&Kcx`@LFX55k(onn%l>&6>l4 zW4Y@9y#dghd93-Y1+?5-0KNVBvSnsglJH?j(eU;0)&w{u1H9+5%9o8qTg5h32)-xLG zo099^Yt}m&>l@Zv)*k?c|9=P2Kl50Bvfk5J-vjuKU!QxmFq?%4*zDp07yX)5ZvX2> zzi;m}!tr(Lu%{3!n+KB;#gmSR3YqfcS@rGP7am{U%dqL;Us&1Y*rEcgY$3#oVI>wA zTh2B>tZW54n5|^1*lKnNTf^3}b!>XHxW$);$mz1Y3keb{~3{n-841K0!EU$X}ROam}2z;pnEa18)6 z0?Y(3Gr%kWv*xow5!RtaSVz)WZ2_!~0M^JaSpNmA(`l^V0?Z!3I_r~IbJ^d~So7Em z0p(6jW3Ohfp|OSnEbQ}R-3$e8 zDK2o`n7kR~8pRvFuf62iPpLzGr?LJBlWr@Xw8>W+56|sYYw7f=6DRdb?9cxj>rOVD zQ>L-*rm;qpZ0`{JXd%`kG}fq+4>-lXOk+LG{+ay?`waUm`yBf``vUtS`x3xn00#ZR z_PYYWDgvw$z$yc*3c#uYtXe+%N)gr@MOg39SgQxH)(l{6^abm`fb}_z^##Cc1hBsT z6jlzx!C|%Fpd9!kcH;n6E0@FIz(G@OfWg)0Wi+S5;c?(hZytx>kQ_e1>HrM(-F5Rg z0*;WzS`T3LKRZ^A91(C7#RXo|%zLnJUyY<;V_IzIr*0Suv2s)}sk(SljrR6y>QJ4L zTT-)9g=yXPy=A-~D31BH@_RPxZ z%;`$ky?&f7bkCApa^35}=}GI(;$(Aj0G0|cKfpTXae8rj)4DqWtn=sB{WT;zs5sg5 zX-^JQOKUS`fgGDaYhzm9YJI5 zQgVTf=gg$BPT)-BOyW%DOyNxBOyf-Fe9M^uuylZR16T&YG6B{dU_Ahq1+Z*@!IJHn z&zV((bzTwHJQ{1S0M!1@BLUoK|{ zXD7h=0}Pa1&$^Fuh_<(%bAWRYU;_X)5MW>DaSn5i(DvYC74`Y;or0iF7YCJ_x^(g4 zU+VrobJ9qAs}bMQtCcusVA8Y2lWuCbZ&HtqRp-y#1bTLv#^?QQ?*ivCUC0;do^|kl z)3e^>+$qF*o5uQ0$ygt9UeQ<|aUOG?aGr9Waem|c&Uwyx!FdU=VE`Krun_(o0Gs{Ub#u!j0&a!kWHrtI?ALd6b#>m3{eyp8y2%1{b1TE7Rf;D) zqQB6z&gDkTq3PM>)~@VHi>fE>jtlXM3*108O<<{dihgiAwxed4txsAAuxnFUc za1*#qxp3$^A7BdrmJ6^vfGq^rcK}-iF!)|#3BZ=-b6XT*<+drpnn+{K4`BU1fOX>+ ztp5VmZZuXn=2;fN+T)X0`*8cyj{0(;qvZfwk;@&xh5a6U5466_dRFdW?l9Wk5bihJ zp#WP2u+;!tlgAy-9YNb$3*Z(bpL-^TJ060XP#hHAY8{0ts`E#X2{#s2yL5uK2e)|P z{=*h8DMzQ9>xipXS&-Bjef2i)>%Z+y=gy?<_2bT<9|Ja&Y;Qida0eGI+`$E4n@T=l zDR&)>HJ`hT`#pC#cLjGPcNKRvcMTU7?iPUk0I;n9`w?Jp{InflI{*epPrCrNJDt!SmEN7qNPn3y|)Y87QOiXLtl1lD*WjxMVnXs|JtpIdzj{W1Ymmu zT#pxV{g0(hMXO)9zi`jdUe9pP0&G9P4&-vrb1wi44p8aUXFX)54Df?8N66{sOXnSzP#mEykUv zchy_GF2CZPEmv%lXyI>Q(znHvMvEnjsJPlUht0iN(;D85^SAInc_=M>0S}?Uo`hik zua#g$Hck2egZj~8VUS(c2y7KkoRi(R^nKyV7CEw2Vi&ec=dS=Xs!1EcK@?$5o3gJ#*yu$$z28M$djqxd z;Lk1OwJM&p*HL4NU_`^CBjtjY`h)%Z|D~1JmX}zlwLPu%*OCj&&+ATO?a1rI>z zb>Vg8rSrP+GI;RK(j$O92G|pTJq6e^fc*xr-vRar0M^l;#5##bF9+mJ=1l?ETY&wM%bUiV4zPCsdtY`~ zXY=3^LK^E_8tb1W*S+s}OKGf&c#C;U0FD401vr++%jYeFSaBTSjL(mC4HUSxxIp!# z?#CV&RdHDU40eW&3D5hr;YVA75MkTmM;_2WO+Hw_!QVbkGnP3*t1ZsGk{h;=K( zinB^Cu-&|4G}b-5y}W(A{k#LbgSYON3}9u&YzZw2!OYguExMPt1Ua7h5`y-#9&!lRc1@}BaZ0bB}j z_}AZg&jBt6cu1K&xboic;Kna`ytlkRc<%tN0C+IKm3h4P1VY5|ElRg|tSe{{Hv!xXa0|e# z0Jj0$4sZv+o%w{j5GxT{h?R(>vC?}o(LF2f31BVyN!4E-Tg!47Ow@o_iJAa+7hxr8 ze+nznkoXE#3!)Lx7~o!j`*MjUL;}D=0o(wwtX4)4EeW{sOCHgRXic;Mco@LL0UnV@ zv?JQnSR(-*_4%>-p}>yC1@3!1t6zsMbuLnh?OXS=74UmyP7-M_X_w+jTl5>1(~?({ z3*1#3T^YH?@Hf_OM0dK7GvHG@9`j$k5+`~QeG9Snp|O@P8S5Zo6pfW405O;tLVQCE zC592hi4g?+iEb4EUJ2lp0bT{*RRLZN;MD3fVEBl zE4>xWm!7qZdsborjWrkGwF6kc`y|%yiIsFcT28D0cs#)C<`Sz2*rL`0c)>EJGTBm% z*g$Ni>s~)%6Wz1aFS+h*Cw9}icMv;?T>x(g@J0Y{oJZ^-_R_k)0(g_puloojd$c&& zS3hhfY-GLHYnl!(zfG4$f9nl#0w(>bc+%x(+8>|zy8g(;$Mwv+$D4l86`v-~6k`2_ z#@e*x0=q=qrLkTnt`Jv=Ys7Wp262`Aagq6fUg_Y!yd{`|=f`m^q zDF9E+CCicUdBzX$PG$DYN(Pbg0<5Hr#@eyOx<`hPdWeYZ}Fs?_OxD^cqQI75zWqO zJM~Gezq(>FjEpS6N=DFFGfFP73S=#am8?isA}fP2;lnXP_GS$?uz4cguinDm?CNiV(MF=N@VhCx4= zGQP78SHYjBQ8cka4kzKy2Z19CawOeY4J+B+1afjA)=4zh5hWimgIq{sok`9jXOnZt zx#T=@KDmI*CG!A23gDvwJ_g{htj7U-JisRad?LUn0eo^k`CSp#rA1hm(^#hjuucnL zUGN2K*{_Tsf1t5$1^Cne*6p9fx{o|aW8F_40Qhu(f167lA`b(62Eb>PUC(*~ZU_Z4 z`H6mJoB3Znvytb>OSJCuYd1mE%_;3j!>{<9ex@TEeV%_6M^D98C{1|>LzdXRo-_E~=kt?_u={Dzv^iFzMXl zN$UXVgtopq%B`4W9QegK?QeYx_zUSmh7A_LPyZKV3w}O-c_G*DX|BJN%ylh)8_jhc ze?5N#eK5xli`3SNZg6K>juUb%5Uj`0ZT&O+Ne+zDB%P zW&>gVeLh@3n9F}aSJu1#O=bO!|B}}IJO4TV1;FnE`~kp!&Evn~zovCR1o)%RuDcw9 z2+EgiZ(u*m$hi6%?^cqNu@&6?+$Z?(WvX+tc+pUsS z?jd6@x#e;Nbz8q&)>F417Vgt-+grJH6KU%9eNFkgdH#8#vOkL;gs-F6^%hM8p2**u=Q_xL~k0GCo+H2xP-CY%%SR zBvUDWB$|%+6NzlvpNPlP`DiYZOQllP`9vU@OQfUzTp*M6N3yAiKb?rB{E0v+k`HI% zsdzM3Jw6edFd;M{>936h+6mze84B)QP%gy^2KsbxtF|)ysNyM+*{sV-b41wedKC6AP41;9F`+;RF27U zIUy(IzVe>(Uh>{@KY1UyznqfOaz@U|IXN#6kO#{9%KORt%Y)*dMv6nUyVO`a~# zkY~!XZ@=5Z^@+tBn`BeEd z`E>aV`AqpN`E27m&;9ZvwWp| zmApc}TE0fUR&J43%Gb%)%Qwh3$~Vb3%d6yD6gsN2ufZ8LTIjWlJX=}H>x z7{QZ9B#o9d-AN;prkpetq|uYcKpGQiETplK#z7hvX*{Iyk){`Eb|p=3!agvXKBNhd zCPbPDX=0>Fkftwb_99I`()1@ynlxF`e|A#n@*$Sbi7W`i8@KA)$OF~uG?8B>vXzu zT@PJ_u2QGhRp|^mqt2u=>nu8}&Ze{L96G1YrE}{%I#6Id+eNplZZ}SDUME}={6`s()7?WNmW*H5>PuD>p&OY1VatS+a^>jvls z>h>khMx288>MciS;jV5jkafcJ$PR<=cTrF{9i5o}Uc;f1a zn?T$|;_8W;OxzUWrV=-exaou!k#jSNn?+m$akGhQByKL@4dUE<;ua8h6mdrrcMNgI z5x0;yBJOzNP9W|?;!Y;+6yg>UcPeqG5qCOqXApNLac2>CHgV?=cP?>Dh&zwC^NCwZ z+y%rfBkn@tE+Xz?;w~ZXQsOQr?h4|T6W2`KmBd{|+zR5ZChi*It|e|Ian})dJ#jY> zcO!8(5qC3jtBAXmxZ8-kowz%QyOX%p#N9>Q-NfBPc+oTW0C5kg{GDzv+gY8u{Zv!F z|2#jo6K|}qo$9Y^jkf%Sov7jQW;fP0H2P;^Bk}5dC>#%^g78h@a1{P5l=i1W(WpNh z%0&~2U^tk_q}zE^-3SHYmzwe+TS6E+wRZZHKOn1Pi9kFO%B1|kR0zH>kWTp1$zaf* z4`+k%NIDnGrLyf&Mk*-3mWC2eMRTECKJL#16G?w05fAv&QT#O=PUaJ-R45(~CEKHn zQBZy_4JDS1h2qgb#2*O;a&Z2Ugg=?fWc>M5BA!de^3g~<-X3LaD~hH|X(-7^GK*JBogwca+#<< z70#*+_;ZO&D3cDxqS?G^_Gc+5 zLTM<8WIP?sB(nZ63&kS&DDEYcO!$N8a6A&oWh1$8to?}1RZyhTP%?>pHXMm0{kd!i z@n0~6845*H{#ZB~52r$rL?Rh&k8+fPveQ3jWDujCjE6yvTpXhn4dwlbd@zgY4`KL1 z=~yz6YLBo`LD;#p`$%JoF;IDbCY*uvArJNWnBeQ|LKb66~ zfV8r5aWJjrB&Yws_I>U)zC>vKP%%8~SSaKH*Wr3GWMO2o2y@KK_4J8-IMbohaV|*Sq77D_* z#Df`sBASZl1EEYl5stJUu~iC+yEGJxe=G<0;!h@H;7d9afa)g#{&*^s&xEqkY$~g= zu{#tLZ)qqHksyo-(;Z5MVae<^^1-M-kc&m*nOriR3WnO>%RLH8&(ctG(PS`|#+-*k z=^#*`|LHv3W*ELD3w6#XvnthpP(j(HG?aKe07;HvO7aOrN!c*d8l>Uj0HT3dJ|D~k zRX+bQ1!cF=P{IMsZ!DJZM}tY&ST>e{_s^vLp=1gkAsvZ?OV6Y)cY5g{c*QCM0e?a!ri z`A{s9Os3Tu_KJc~UD|!5QkeK~It~qkmyd)QYeG>-S_ZL8A`*@UVyf8XO$8-b8cHY- zL|~jtA@D*Z8Hq*%{zNPvfPLiyxp)9|oPf$3uTxOMrJ*E4;RK@Kh(8cR@dr@_xRSw~ zK>rabg#(dvKxM@rDk#y?P;vptNC*>w_!#pN$RTz~$Kw8MHWy&>k7-l+{Ld7W_&=Zd zJko|h9HCt{!)8982{QeP`I8y29-@=Tsr|~=3PQ59`^d%<(L@-YI21=97C|`dPo@Et zPC&qNsZ0WM-<~JmD=2%Gh7yAX#}GmInKJ}W5KtroNeo^B0eChMh4QFSHYq53mxjVp zmOw0&^2gJ0rua#yGQw5JSpc3hosMUNs;J^u1qEGirQ~1HY!bXiEi#&oBBl)EUJ!>N zOp0Ot^MQ0e9d2*M*s>OcrXzU=G*&}^6m;kuC)6I!GYw`Aw+t? z45Fh@1QA6ffJ`FAd}BD252oAu$MPNu%7D^P@@WheQZ9cWlZWTZ#t^bV{^7o2$$TgY zTMM-JDdh$QW#7_J!Xe~a(OlRciy?=IgrY%sE;yEKI+nrEh2!CnYQ(Gx%KjyyB-1D) zKu;iKnEp6!D3!{@{keQ590No$9&2yK)l95a}t>Q^<1!Y)i zD6xD7fma0HJqr5Q^D-8u1FJO?{Bi6#aWJ6&;3R3}pEE-OPGJ!-a8EPMU zl@C-<#*~JVfd`4kkPk8cHaY3Wr$^6mA`|1ZrRjxJ7>!{y&(@WCNK@`&_tuw1QGs8VWpYG8GM@(iRHB ziXrldRuSvv^YK7B3z~*ikx_ZAf-}L83Yh{+)ExMut*?@;%6RSI2j0~Q?YO` z5QwQpY>t95qcoIcB9=pzlK1CPF7QJHFjy@6il>ndp{j#2s4AjZprFhu4Fw@YG@il| za~d%*tAxO>1W^eI27#Xlr%(}5d9ULXl-Z@Bpw<!l-g7_Zh6@odVgpf`| z!^mS)BX**KGN&|@Kt36W=5iT)cN~)w522Qy%7;*{Otlujp=BzRQx%jWOG80TC4^!} z#*dOKY%GfMG%Pvg&*Wm69DH#u5K^I>rJ&3&4FzS7bO31_0&j*AfF7rks2%0QkwiL; z;3$%6U)3pJqM#gA8cG@k>3j%5S2i19mJFLtBNO%qBDq`uwW~-zsJfSB3d%91p`f4> z$t6)Vj3*iQb0|+FLSRmYty8dSYdp}t{#|~lf^ytH_bn*0#!#MwgHLBMS{alMlhFVG z<9XZ&VwX@zrN>PQ0+n_jkz_1@coM^dFcMabr5x07u|$!;f>$23*Pv?MtNdyO<%H5u z@&RN-u`KFqtrC-k4WuKm0Ze-s9V7{~h^V6P>lBoeN<)dHgD9;;GyXsprS=Gx)DZWj z^N7B&9FalHpAD&af3t#eN@*yl-Q>f$Byz7D%T$vrx5w<@ui0=AN*O}7)L!*(S5QtZ z4F&mbB%WwpA561oFOI5C1O!cIviV>hwZ4?9np=Lif^vFkD6wo96$B_{3eh%33=1t- z_JE;f(S{R%(}5Yczn2FTlru|1i6F&;uR`4*&T5mW62p=~okS)WOeI3$a7tA{D1THz zIlDBJP$rxW<+DM5EX%6w0aQcMXixITG9h#yVYw<1QQgav3d*^qp+o}+x^u9sY!C}; z$X1gmN~5xqNaPU-Vl+|YZ9ihqDJV-yLqR+rNU?kR}}z3StIT z_wurWa(-zjv1AyoD+%w26eg4Zi3%S%H+$vYBD;=AL?ARK;%Ekxz>c?7Y^Z~(J|TU2@BjS5P0X(%Zy62cD# z5a*{^42H#<1aSTFD3bngI12%7UoS4-te{-=&u2axNTBi!66OL4XjcO1YAS`>3MQjD z^gSd37{qp?)uW4oaCK?-fx=)kh&;%Tc1X-Tli*a46!k4U}40qs8+W}u_!1v|8x6_M^mgQ3@?I-1{-k;sZ=cQ z&&J@&lIdhNnrk2B^>8W(x0H4tp-e87h{jm1&Dv{2Xbiz3I@lOR@e@WI$wb=6EIoV* z%59~g_Eu2tFAW7%XtXjQ;7UbU$3_J4UIM-ts|5(lV~JPiRw{(s#q1;DPG``w1s%pBWGd9*Z?EGVDL!NEfVpe}GI5PZ~)VP1h0mZGuFt>Vit z1?BP5P>`f%q6w^YWkbjxB2Y*01)*Lv6o!R|LkMA13Ujc6^29&aun1bRPytK%b2(N8 zO`-tG%3sJ-!?9dE#A^B~Ej~;^c&fDfK!TcyF?WT=FvRyswrrP1hh{VYkw(KtI2cuF z@evBjGo_&|FPdudcqUMUSFmkEF% zEPxCn`og*w!r~B;FC-AiE@KEX6Dp;gub{kE8cG0(4_kRcn3{s>;}#I-qyGTiQ)oI3 zB~rPZYW9y+P~IpFC5Vs(-Fb|M5Ed*^u*?|G#$eGq6^NjjBc{qBdz_%4yj2BL=Bw(OwSq{9HJl&ET<}n2Ps{6qL71LkS17SmXlZqX`r#5%QyCj5Z2PQwaHM zFq=t6Rlem+1!dhoR~IyTX3_!Hz8u6NaU_6}F31yv*g%}oJRMJ}dck@uRuJAR?LN@# zhb#zLQ6$akEvyLv=@244Xnh#Z6=6j|6(L=qpnOmoN)la-!6@b=f^sWnb4OdB%WBnPw9#afQFNL{P)}6l^gWg<2%nU8 zAK6$un?{V{M{Q;nDh|uK zvFeRVG29ATIHIZ=Ymb!*$`_@fWhwNr=OO_twFlMub(4bf zRcR>6SPTM&)HIM`oX0F-<`Kq3(SM4&!2)tjrNy@?DBqNZl8B?F5dDTIdBQWIh6f*s zhB<^4aU`*5)Ikc^UW@NiP`)b-B^X9ohZUt$S(GKw<$zwpEE*BwVf0WU(#XeEwaFg$ zD=6QWV8v+D!KxP~A;x@47OT)HOcR!iVZfLxEWD|5$VU`}A4|KBSQ_iwXxH$^khWk> zfS16eqmwy-N>U7oY+j{ZPberGOGAMMwwCSS6|o?R1qfI%`X~IEB+NLOMa4%QOFpZh z{8SoBHVR!q)zFUzFEC;;)}IH?vyNF-b4M(xs(tr(NkRFgG!!HynP>1j=$XSaGN69@nctwGNTs3VKznq?qIWsYR5F8>5G)%ZL4v~xXEFhFZnj^I z>hX($vQud&XxPA74aO0kbID*&}G2M;hBchpZ@5P{sX%l*-aj(2$3Qcs$&d zOkssP5`qyU9g6saSf@y#0U;hxb^TZ96_l!f&PY@vu}p(l622Z$ULMlL9?HVF;W4rl zbP{bN?eD{^AQ=BSLIT}b=~x=$gIXT*k63rG(=D#Z%zAr!x|Y;6)xXSBZuuYzFx=LmRAEQQ4Zl+v>ZS0i~8^O6|=266Q; zH(;=u_s(Td(Om(b+a4m#%E?sZ^U!`g_HdieaiY? zaRqxKRQYtUBBVYLt%#`)BrE!=5A0phPkkU&kyanbRp6zb?NRov*iU`nfQljPqVXi} zE?d9o11kY(HC9S6rh$u(INM28hRx_t`q&s)}3GpT4~UZ;xpI{dZN|tv+yH z#r^674^=#@KJZw@8g>Pb6PMrm6+BaceNfs1zEJU^`oJp{uc{BcQSqkwz}pq;7~ng^ z4ca>3hZP^GKmBRNXX*oAR(#FA?knPkZvE@NulPaz>5UcGKDhl2{Zg@6ec<=XGSz{~ zZj~DK0ijaD6;z7E9kSIcsFW*p>Q7fx;vFjOuAtITX;dGuR9e*s9F

0Z*k@eV|w6 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 URQSLDt(^Ve|Nj5K!{b)|4+iBbHvj+t diff --git a/RubyEvents.xcodeproj/xcuserdata/marcoroth.xcuserdatad/xcschemes/xcschememanagement.plist b/RubyEvents.xcodeproj/xcuserdata/marcoroth.xcuserdatad/xcschemes/xcschememanagement.plist index fd3ea77..3d5adc1 100644 --- a/RubyEvents.xcodeproj/xcuserdata/marcoroth.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/RubyEvents.xcodeproj/xcuserdata/marcoroth.xcuserdatad/xcschemes/xcschememanagement.plist @@ -17,7 +17,7 @@ RubyEventsWidgetsExtension.xcscheme_^#shared#^_ orderHint - 3 + 2 diff --git a/RubyEvents/App.swift b/RubyEvents/App.swift index 28313d9..2e7e782 100644 --- a/RubyEvents/App.swift +++ b/RubyEvents/App.swift @@ -63,6 +63,15 @@ class App { self.tabBarController.setupTabs() switchToTabController() + + NextEventUpdater.refresh() + NextEventUpdater.scheduleBackgroundRefresh() + + NotificationCenter.default.addObserver( + forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main + ) { _ in + NextEventUpdater.refresh() + } } func switchToNavigationController() { diff --git a/RubyEvents/AppDelegate.swift b/RubyEvents/AppDelegate.swift index 668e704..77edfe9 100644 --- a/RubyEvents/AppDelegate.swift +++ b/RubyEvents/AppDelegate.swift @@ -26,6 +26,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { Hotwire.config.showDoneButtonOnModals = true Hotwire.config.debugLoggingEnabled = true + NextEventUpdater.registerBackgroundTask() + Hotwire.loadPathConfiguration(from: [ .server(Router.instance.path_configuration_url()), .file(Bundle.main.url(forResource: "path-configuration", withExtension: "json")!) diff --git a/RubyEvents/Info.plist b/RubyEvents/Info.plist index e9d4abf..59ad877 100644 --- a/RubyEvents/Info.plist +++ b/RubyEvents/Info.plist @@ -39,6 +39,11 @@ UIBackgroundModes audio + fetch + + BGTaskSchedulerPermittedIdentifiers + + org.rubyevents.RubyEvents.nextevent.refresh diff --git a/RubyEvents/liveactivity/NextEventStore.swift b/RubyEvents/liveactivity/NextEventStore.swift new file mode 100644 index 0000000..dd767d6 --- /dev/null +++ b/RubyEvents/liveactivity/NextEventStore.swift @@ -0,0 +1,56 @@ +// +// NextEventStore.swift +// RubyEvents +// + +import Foundation +import UIKit + +struct NextEventSnapshot: Codable { + var name: String + var slug: String + var location: String? + var startAt: Date? + var endAt: Date? + var featuredBackground: String + var featuredColor: String + var bannerBackground: String + var speakersCount: Int + var participantsCount: Int + var featuredImageFile: String? + var avatarFiles: [String] + var upcoming: [UpcomingItem] +} + +struct UpcomingItem: Codable { + var name: String + var slug: String + var startAt: Date? + var featuredBackground: String + var featuredColor: String + var avatarFile: String? +} + +enum NextEventStore { + private static let filename = "next_event.json" + + static func save(_ snapshot: NextEventSnapshot) { + guard let url = LiveActivityShared.imageURL(for: filename), + let data = try? JSONEncoder().encode(snapshot) else { return } + + try? data.write(to: url, options: .atomic) + } + + static func load() -> NextEventSnapshot? { + guard let url = LiveActivityShared.imageURL(for: filename), + let data = try? Data(contentsOf: url) else { return nil } + + return try? JSONDecoder().decode(NextEventSnapshot.self, from: data) + } + + static func image(_ filename: String?) -> UIImage? { + guard let filename, let url = LiveActivityShared.imageURL(for: filename) else { return nil } + + return UIImage(contentsOfFile: url.path) + } +} diff --git a/RubyEvents/liveactivity/NextEventUpdater.swift b/RubyEvents/liveactivity/NextEventUpdater.swift new file mode 100644 index 0000000..f4ed7e7 --- /dev/null +++ b/RubyEvents/liveactivity/NextEventUpdater.swift @@ -0,0 +1,175 @@ +// +// NextEventUpdater.swift +// RubyEvents +// + +import BackgroundTasks +import Foundation +import UIKit +import WidgetKit + +enum NextEventUpdater { + static let backgroundTaskID = "org.rubyevents.RubyEvents.nextevent.refresh" + + static func refresh() { + Task { await performRefresh() } + } + + static func registerBackgroundTask() { + BGTaskScheduler.shared.register(forTaskWithIdentifier: backgroundTaskID, using: nil) { task in + guard let refreshTask = task as? BGAppRefreshTask else { return } + handle(refreshTask) + } + } + + static func scheduleBackgroundRefresh() { + let request = BGAppRefreshTaskRequest(identifier: backgroundTaskID) + request.earliestBeginDate = Date().addingTimeInterval(4 * 3600) // no sooner than ~4h + try? BGTaskScheduler.shared.submit(request) + } + + private static func handle(_ task: BGAppRefreshTask) { + scheduleBackgroundRefresh() + + let work = Task { + await performRefresh() + + task.setTaskCompleted(success: true) + } + + task.expirationHandler = { work.cancel() } + } + + private static func performRefresh() async { + struct Response: Decodable { + let event: Payload? + let upcoming: [UpcomingPayload]? + } + + struct Payload: Decodable { + let name: String + let slug: String + let location: String? + let start_at: String? + let end_at: String? + let featured_background: String? + let featured_color: String? + let banner_background: String? + let featured_url: String? + let keynote_avatars: [String]? + let speakers_count: Int? + let participants_count: Int? + } + + struct UpcomingPayload: Decodable { + let name: String + let slug: String + let start_at: String? + let featured_background: String? + let featured_color: String? + let avatar_url: String? + } + + let endpoint = Router.instance.root_url() + .appendingPathComponent("/hotwire/native/v1/next_event.json") + + print("📅 NextEvent: container=\(LiveActivityShared.containerURL?.path ?? "nil") fetching=\(endpoint.absoluteString)") + + var fetchRequest = URLRequest(url: endpoint) + fetchRequest.timeoutInterval = 8 + + guard let (data, _) = try? await URLSession.shared.data(for: fetchRequest) else { + print("📅 NextEvent: FETCH FAILED (host unreachable?)") + return + } + + guard let response = try? JSONDecoder().decode(Response.self, from: data), let event = response.event else { + print("📅 NextEvent: DECODE/NO EVENT. body=\(String(data: data, encoding: .utf8)?.prefix(200) ?? "")") + return + } + + print("📅 NextEvent: got '\(event.name)' — saving snapshot") + + async let featuredFile = saveImage(event.featured_url, as: "next-featured", maxDimension: 600) + async let avatarFiles = saveAvatars(event.keynote_avatars) + + var upcomingItems: [UpcomingItem] = [] + + for (index, item) in (response.upcoming ?? []).prefix(6).enumerated() { + let avatarFile = await saveImage(item.avatar_url, as: "upcoming-avatar-\(index)", maxDimension: 120) + + upcomingItems.append(UpcomingItem( + name: item.name, + slug: item.slug, + startAt: item.start_at.flatMap { ISO8601DateFormatter().date(from: $0) }, + featuredBackground: item.featured_background ?? "#000000", + featuredColor: item.featured_color ?? "#FFFFFF", + avatarFile: avatarFile + )) + } + + let snapshot = NextEventSnapshot( + name: event.name, + slug: event.slug, + location: event.location, + startAt: event.start_at.flatMap { ISO8601DateFormatter().date(from: $0) }, + endAt: event.end_at.flatMap { ISO8601DateFormatter().date(from: $0) }, + featuredBackground: event.featured_background ?? "#000000", + featuredColor: event.featured_color ?? "#FFFFFF", + bannerBackground: event.banner_background ?? "#081625", + speakersCount: event.speakers_count ?? 0, + participantsCount: event.participants_count ?? 0, + featuredImageFile: await featuredFile, + avatarFiles: await avatarFiles, + upcoming: upcomingItems + ) + + NextEventStore.save(snapshot) + WidgetCenter.shared.reloadAllTimelines() + print("📅 NextEvent: saved (loaded back = \(NextEventStore.load() != nil)) + reloaded widgets") + } + + private static func saveAvatars(_ urls: [String]?) async -> [String] { + guard let urls else { return [] } + let slice = Array(urls.prefix(3)) + + return await withTaskGroup(of: (Int, String?).self) { group in + for (index, urlString) in slice.enumerated() { + group.addTask { (index, await saveImage(urlString, as: "next-avatar-\(index)", maxDimension: 120)) } + } + + var indexed: [(Int, String)] = [] + + for await (index, file) in group { + if let file { indexed.append((index, file)) } + } + + return indexed.sorted { $0.0 < $1.0 }.map { $0.1 } + } + } + + private static func saveImage(_ urlString: String?, as name: String, maxDimension: CGFloat) async -> String? { + guard let urlString, !urlString.isEmpty, let url = URL(string: urlString), + let destination = LiveActivityShared.imageURL(for: "\(name).png") else { return nil } + + var request = URLRequest(url: url) + request.timeoutInterval = 8 + + guard let (data, _) = try? await URLSession.shared.data(for: request), + let image = UIImage(data: data) else { return nil } + + let longest = max(image.size.width, image.size.height, 1) + let scale = min(1, maxDimension / longest) + let size = CGSize(width: image.size.width * scale, height: image.size.height * scale) + + let resized = UIGraphicsImageRenderer(size: size).image { _ in + image.draw(in: CGRect(origin: .zero, size: size)) + } + + guard let png = resized.pngData() else { return nil } + + try? png.write(to: destination, options: .atomic) + + return "\(name).png" + } +} diff --git a/RubyEventsWidgets/AppIntent.swift b/RubyEventsWidgets/AppIntent.swift index 5e6752b..a72b799 100644 --- a/RubyEventsWidgets/AppIntent.swift +++ b/RubyEventsWidgets/AppIntent.swift @@ -2,14 +2,3 @@ // AppIntent.swift // RubyEventsWidgets // - -import WidgetKit -import AppIntents - -struct ConfigurationAppIntent: WidgetConfigurationIntent { - static var title: LocalizedStringResource { "Configuration" } - static var description: IntentDescription { "This is an example widget." } - - @Parameter(title: "Favorite Emoji", default: "😃") - var favoriteEmoji: String -} diff --git a/RubyEventsWidgets/NextEventWidget.swift b/RubyEventsWidgets/NextEventWidget.swift new file mode 100644 index 0000000..a8dcb84 --- /dev/null +++ b/RubyEventsWidgets/NextEventWidget.swift @@ -0,0 +1,467 @@ +// +// NextEventWidget.swift +// RubyEventsWidgets +// + +import AppIntents +import SwiftUI +import UIKit +import WidgetKit + +enum NextEventDisplayMode: String, AppEnum { + case countdown + case list + + static var typeDisplayRepresentation: TypeDisplayRepresentation { + TypeDisplayRepresentation(name: "Display") + } + + static var caseDisplayRepresentations: [NextEventDisplayMode: DisplayRepresentation] { + [ + .countdown: DisplayRepresentation(title: "Countdown"), + .list: DisplayRepresentation(title: "Upcoming list") + ] + } +} + +struct ConfigurationAppIntent: WidgetConfigurationIntent { + static var title: LocalizedStringResource { "Next Ruby Event" } + + static var description: IntentDescription { + IntentDescription("Countdown to the next event, or a list of upcoming events (medium size).") + } + + @Parameter(title: "Display", default: NextEventDisplayMode.countdown) + var mode: NextEventDisplayMode +} + +struct NextEvent: Decodable { + let name: String + let slug: String + let location: String? + let start_at: String? + let end_at: String? + let featured_background: String? + let featured_color: String? + let banner_background: String? + let featured_url: String? + let keynote_avatars: [String]? + let speakers_count: Int? + let participants_count: Int? + + var startDate: Date? { start_at.flatMap { ISO8601DateFormatter().date(from: $0) } } + var endDate: Date? { end_at.flatMap { ISO8601DateFormatter().date(from: $0) } } +} + +struct UpcomingRow { + let name: String + let slug: String + let startDate: Date? + let featuredBackground: String + let featuredColor: String + let avatar: UIImage? +} + +struct NextEventEntry: TimelineEntry { + let date: Date + let event: NextEvent? + let image: UIImage? + let avatars: [UIImage] + let upcoming: [UpcomingRow] + let mode: NextEventDisplayMode +} + +struct NextEventProvider: AppIntentTimelineProvider { + func placeholder(in context: Context) -> NextEventEntry { + NextEventEntry(date: Date(), event: .preview, image: nil, avatars: [], upcoming: [], mode: .countdown) + } + + func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> NextEventEntry { + currentEntry(mode: configuration.mode) + } + + func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline { + let reload = Calendar.current.nextDate( + after: Date(), matching: DateComponents(hour: 0, minute: 5), matchingPolicy: .nextTime + ) ?? Date().addingTimeInterval(6 * 3600) + + return Timeline(entries: [currentEntry(mode: configuration.mode)], policy: .after(reload)) + } + + private func currentEntry(mode: NextEventDisplayMode) -> NextEventEntry { + guard let snapshot = NextEventStore.load() else { + return NextEventEntry(date: Date(), event: nil, image: nil, avatars: [], upcoming: [], mode: mode) + } + + let upcoming = snapshot.upcoming.map { item in + UpcomingRow( + name: item.name, + slug: item.slug, + startDate: item.startAt, + featuredBackground: item.featuredBackground, + featuredColor: item.featuredColor, + avatar: NextEventStore.image(item.avatarFile) + ) + } + + return NextEventEntry( + date: Date(), + event: NextEvent(snapshot), + image: NextEventStore.image(snapshot.featuredImageFile), + avatars: snapshot.avatarFiles.compactMap { NextEventStore.image($0) }, + upcoming: upcoming, + mode: mode + ) + } +} + +private func hexColor(_ hex: String?) -> Color { + guard let hex else { return .black } + let string = hex.hasPrefix("#") ? String(hex.dropFirst()) : hex + + guard string.count == 6, let value = UInt64(string, radix: 16) else { return .black } + + return Color( + red: Double((value >> 16) & 0xFF) / 255, + green: Double((value >> 8) & 0xFF) / 255, + blue: Double(value & 0xFF) / 255 + ) +} + +struct NextEventWidgetView: View { + let entry: NextEventEntry + @SwiftUI.Environment(\.widgetFamily) private var family + + var body: some View { + if entry.mode == .list, !entry.upcoming.isEmpty { + listLayout() + } else if let event = entry.event, let start = event.startDate { + eventView(event, start) + } else { + emptyView + } + } + + private func listLayout() -> some View { + let isSmall = family == .systemSmall + let rows = Array(entry.upcoming.prefix(isSmall ? 5 : 3)) + + return VStack(alignment: .leading, spacing: isSmall ? 3 : 6) { + if !isSmall { + Text("UPCOMING RUBY EVENTS") + .font(.caption2.weight(.bold)) + .foregroundStyle(.secondary) + .padding(.bottom, 4) + } + + ForEach(rows.indices, id: \.self) { i in + if i > 0 { Divider() } + upcomingRow(rows[i], compact: isSmall) + } + + Spacer(minLength: 0) + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading) + .modifier(WidgetContainerBackground(color: Color(.systemBackground), contentPadding: isSmall ? 11 : 14)) + } + + private func upcomingRow(_ row: UpcomingRow, compact: Bool) -> some View { + let accent = hexColor(row.featuredBackground) + let size: CGFloat = compact ? 23 : 30 + + let days = row.startDate.map { + max(0, Calendar.current.dateComponents( + [.day], from: Calendar.current.startOfDay(for: Date()), to: Calendar.current.startOfDay(for: $0) + ).day ?? 0) + } + + return Link(destination: URL(string: "rubyevents://events/\(row.slug)")!) { + HStack(spacing: compact ? 8 : 10) { + Group { + if let avatar = row.avatar { + Image(uiImage: avatar).resizable().scaledToFill() + } else { + accent.overlay(Image(systemName: "calendar").font(.caption2).foregroundStyle(.white)) + } + } + .frame(width: size, height: size) + .clipShape(RoundedRectangle(cornerRadius: compact ? 6 : 7)) + + Text(row.name) + .font((compact ? Font.caption : Font.subheadline).weight(.medium)) + .foregroundStyle(.primary) + .lineLimit(1) + .minimumScaleFactor(0.8) + + Spacer(minLength: 4) + + if let days { + if compact { + Text("\(days)d") + .font(.system(size: 15, weight: .bold, design: .rounded)) + .foregroundStyle(.primary) + } else { + HStack(alignment: .firstTextBaseline, spacing: 3) { + Text("\(days)").font(.system(size: 18, weight: .bold, design: .rounded)).foregroundStyle(.primary) + Text(days == 1 ? "day" : "days").font(.caption2).foregroundStyle(.secondary) + } + } + } + } + } + } + + private func eventView(_ event: NextEvent, _ start: Date) -> some View { + let foreground = hexColor(event.featured_color) + + return Group { + if family == .systemSmall { + smallLayout(event, start, foreground) + } else { + mediumLayout(event, start, foreground) + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading) + .widgetURL(URL(string: "rubyevents://events/\(event.slug)")) + .modifier(WidgetContainerBackground( + color: hexColor(event.featured_background), + image: family == .systemSmall ? nil : entry.image, + imageWidth: 152, + imageHeight: 88, + contentPadding: family == .systemSmall ? 12 : 16 + )) + } + + private func smallLayout(_ event: NextEvent, _ start: Date, _ fg: Color) -> some View { + VStack(alignment: .leading, spacing: 2) { + Spacer(minLength: 0) + Text(event.name) + .font(.headline) + .foregroundStyle(fg) + .lineLimit(1) + .minimumScaleFactor(0.7) + + if let location = shortLocation(event.location) { + Text(location) + .font(.caption) + .foregroundStyle(fg.opacity(0.7)) + .lineLimit(1) + .minimumScaleFactor(0.8) + } + + Spacer().frame(height: 10) + countdown(to: start, foreground: fg, compact: true) + dateLabel(start, event.endDate, fg) + Spacer(minLength: 0) + } + .frame(maxWidth: .infinity, alignment: .leading) + } + + private func shortLocation(_ location: String?) -> String? { + guard let location, !location.isEmpty else { return nil } + + return location.split(separator: ",").prefix(2) + .map { $0.trimmingCharacters(in: .whitespaces) } + .joined(separator: ", ") + } + + private func mediumLayout(_ event: NextEvent, _ start: Date, _ fg: Color) -> some View { + HStack(alignment: .top, spacing: 12) { + VStack(alignment: .leading, spacing: 2) { + Text("NEXT RUBY EVENT").font(.caption2.weight(.bold)).foregroundStyle(fg.opacity(0.7)) + Text(event.name).font(.headline).foregroundStyle(fg).lineLimit(2) + locationLabel(event, fg) + Spacer(minLength: 6) + countdown(to: start, foreground: fg, compact: false) + dateLabel(start, event.endDate, fg) + } + + if !entry.avatars.isEmpty || (event.participants_count ?? 0) > 0 { + Spacer(minLength: 0) + attendeePanel(event, fg) + } + } + } + + @ViewBuilder + private func locationLabel(_ event: NextEvent, _ fg: Color) -> some View { + if let location = event.location, !location.isEmpty { + Text(location).font(.caption).foregroundStyle(fg.opacity(0.7)).lineLimit(1) + } + } + + private func dateLabel(_ start: Date, _ end: Date?, _ fg: Color) -> some View { + Text(dateRangeText(start, end)) + .font(.caption2) + .foregroundStyle(fg.opacity(0.7)) + .lineLimit(1) + .minimumScaleFactor(0.8) + } + + private func dateRangeText(_ start: Date, _ end: Date?) -> String { + if let end, !Calendar.current.isDate(start, inSameDayAs: end) { + let formatter = DateIntervalFormatter() + formatter.dateStyle = .long + formatter.timeStyle = .none + + return formatter.string(from: start, to: end) + } + + return start.formatted(.dateTime.month(.wide).day().year()) + } + + private func countdown(to start: Date, foreground fg: Color, compact: Bool) -> some View { + let days = max(0, Calendar.current.dateComponents( + [.day], from: Calendar.current.startOfDay(for: Date()), to: Calendar.current.startOfDay(for: start) + ).day ?? 0) + + return Group { + if days == 0 { + Text("Today").font(.system(size: 30, weight: .bold, design: .rounded)).foregroundStyle(fg) + } else if compact { + VStack(alignment: .leading, spacing: -4) { + Text("\(days)").font(.system(size: 48, weight: .bold, design: .rounded)).foregroundStyle(fg) + Text(days == 1 ? "DAY TO GO" : "DAYS TO GO") + .font(.caption2.weight(.semibold)).foregroundStyle(fg.opacity(0.75)) + } + } else { + HStack(alignment: .firstTextBaseline, spacing: 6) { + Text("\(days)").font(.system(size: 44, weight: .bold, design: .rounded)).foregroundStyle(fg) + Text(days == 1 ? "day to go" : "days to go") + .font(.subheadline.weight(.medium)).foregroundStyle(fg.opacity(0.75)) + } + } + } + } + + private func attendeePanel(_ event: NextEvent, _ fg: Color) -> some View { + let extra = max(0, (event.participants_count ?? 0) - entry.avatars.count) + + return VStack(alignment: .trailing, spacing: 6) { + Spacer(minLength: 0) + avatarStack(extra: extra, fg: fg, bg: hexColor(event.featured_background)) + Text("known participants") + .font(.caption2).foregroundStyle(fg.opacity(0.7)).lineLimit(1) + } + } + + private func avatarStack(extra: Int, fg: Color, bg: Color) -> some View { + let diameter: CGFloat = 34 + + return HStack(spacing: -11) { + ForEach(entry.avatars.indices, id: \.self) { i in + Image(uiImage: entry.avatars[i]).resizable().scaledToFill() + .frame(width: diameter, height: diameter) + .clipShape(Circle()) + .overlay(Circle().strokeBorder(fg.opacity(0.9), lineWidth: 1.5)) + } + + if extra > 0 { + Text("+\(extra)") + .font(.caption2.weight(.bold)) + .foregroundStyle(bg) + .frame(width: diameter, height: diameter) + .background(Circle().fill(fg)) + .overlay(Circle().strokeBorder(bg, lineWidth: 1.5)) + } + } + } + + private var emptyView: some View { + VStack(spacing: 4) { + Image(systemName: "calendar") + .font(.title) + .foregroundStyle(.secondary) + + Text("No upcoming events") + .font(.caption) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + + Text("grp: \(LiveActivityShared.containerURL?.lastPathComponent.prefix(8) ?? "nil")") + .font(.system(size: 9)).foregroundStyle(.secondary) + + Text("store: \(NextEventStore.load() != nil ? "found" : "missing")") + .font(.system(size: 9)).foregroundStyle(.secondary) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .modifier(WidgetContainerBackground(color: Color(.systemBackground))) + } +} + +private struct WidgetContainerBackground: ViewModifier { + let color: Color + var image: UIImage? + var imageWidth: CGFloat = 120 + var imageHeight: CGFloat = 72 + var contentPadding: CGFloat = 16 + + @ViewBuilder private var backgroundView: some View { + color.overlay(alignment: .topTrailing) { + if let image { + Image(uiImage: image) + .resizable() + .scaledToFit() + .frame(maxWidth: imageWidth, maxHeight: imageHeight) + .padding(.top, 12) + .padding(.trailing, 10) + } + } + } + + func body(content: Content) -> some View { + if #available(iOS 17.0, *) { + content.padding(contentPadding).containerBackground(for: .widget) { backgroundView } + } else { + content.padding(contentPadding).background(backgroundView) + } + } +} + +struct NextEventWidget: Widget { + var body: some WidgetConfiguration { + AppIntentConfiguration(kind: "NextEventWidget", intent: ConfigurationAppIntent.self, provider: NextEventProvider()) { entry in + NextEventWidgetView(entry: entry) + } + .configurationDisplayName("Next Ruby Event") + .description("Countdown to the next Ruby event, or a list of upcoming ones (medium).") + .supportedFamilies([.systemSmall, .systemMedium]) + .contentMarginsDisabled() + } +} + +extension NextEvent { + init(_ snapshot: NextEventSnapshot) { + self.init( + name: snapshot.name, + slug: snapshot.slug, + location: snapshot.location, + start_at: snapshot.startAt.map { ISO8601DateFormatter().string(from: $0) }, + end_at: snapshot.endAt.map { ISO8601DateFormatter().string(from: $0) }, + featured_background: snapshot.featuredBackground, + featured_color: snapshot.featuredColor, + banner_background: snapshot.bannerBackground, + featured_url: nil, + keynote_avatars: nil, + speakers_count: snapshot.speakersCount, + participants_count: snapshot.participantsCount + ) + } + + static var preview: NextEvent { + NextEvent( + name: "RubyConf 2026", + slug: "rubyconf-2026", + location: "Las Vegas, NV", + start_at: "2026-07-14T09:00:00-07:00", + end_at: "2026-07-16T09:00:00-07:00", + featured_background: "#303A32", + featured_color: "#E3ECDB", + banner_background: "#303A32", + featured_url: nil, + keynote_avatars: [], + speakers_count: 62, + participants_count: 68 + ) + } +} diff --git a/RubyEventsWidgets/RubyEventsWidgets.swift b/RubyEventsWidgets/RubyEventsWidgets.swift index 56e4a82..cc645c4 100644 --- a/RubyEventsWidgets/RubyEventsWidgets.swift +++ b/RubyEventsWidgets/RubyEventsWidgets.swift @@ -2,87 +2,7 @@ // RubyEventsWidgets.swift // RubyEventsWidgets // -// Created by Marco Roth on 09.07.2026. +// The Xcode sample widget (time / favorite emoji) has been removed. +// The active widgets are `NextEventWidget` and `RubyEventsWidgetsLiveActivity` +// (registered in RubyEventsWidgetsBundle). // - -import WidgetKit -import SwiftUI - -struct Provider: AppIntentTimelineProvider { - func placeholder(in context: Context) -> SimpleEntry { - SimpleEntry(date: Date(), configuration: ConfigurationAppIntent()) - } - - func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry { - SimpleEntry(date: Date(), configuration: configuration) - } - - func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline { - var entries: [SimpleEntry] = [] - - // Generate a timeline consisting of five entries an hour apart, starting from the current date. - let currentDate = Date() - for hourOffset in 0 ..< 5 { - let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! - let entry = SimpleEntry(date: entryDate, configuration: configuration) - entries.append(entry) - } - - return Timeline(entries: entries, policy: .atEnd) - } - -// func relevances() async -> WidgetRelevances { -// // Generate a list containing the contexts this widget is relevant in. -// } -} - -struct SimpleEntry: TimelineEntry { - let date: Date - let configuration: ConfigurationAppIntent -} - -struct RubyEventsWidgetsEntryView: View { - var entry: Provider.Entry - - var body: some View { - VStack { - Text("Time:") - Text(entry.date, style: .time) - - Text("Favorite Emoji:") - Text(entry.configuration.favoriteEmoji) - } - } -} - -struct RubyEventsWidgets: Widget { - let kind: String = "RubyEventsWidgets" - - var body: some WidgetConfiguration { - AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in - RubyEventsWidgetsEntryView(entry: entry) - .containerBackground(.fill.tertiary, for: .widget) - } - } -} - -extension ConfigurationAppIntent { - fileprivate static var smiley: ConfigurationAppIntent { - let intent = ConfigurationAppIntent() - intent.favoriteEmoji = "😀" - return intent - } - - fileprivate static var starEyes: ConfigurationAppIntent { - let intent = ConfigurationAppIntent() - intent.favoriteEmoji = "🤩" - return intent - } -} - -#Preview(as: .systemSmall) { - RubyEventsWidgets() -} timeline: { - SimpleEntry(date: .now, configuration: .smiley) - SimpleEntry(date: .now, configuration: .starEyes) -} diff --git a/RubyEventsWidgets/RubyEventsWidgetsBundle.swift b/RubyEventsWidgets/RubyEventsWidgetsBundle.swift index 1aa540e..05bab45 100644 --- a/RubyEventsWidgets/RubyEventsWidgetsBundle.swift +++ b/RubyEventsWidgets/RubyEventsWidgetsBundle.swift @@ -10,9 +10,8 @@ import SwiftUI @main struct RubyEventsWidgetsBundle: WidgetBundle { - var body: some Widget { - RubyEventsWidgets() - RubyEventsWidgetsControl() - RubyEventsWidgetsLiveActivity() - } + var body: some Widget { + NextEventWidget() + RubyEventsWidgetsLiveActivity() + } }