From 0d210607e39b309b87cf456b065a4a996cf0951a Mon Sep 17 00:00:00 2001 From: Saad Masood Date: Thu, 11 Sep 2025 22:40:07 +0500 Subject: [PATCH] My initial Solution My initial Solution --- interview.zip | Bin 0 -> 52266 bytes interview/interview.xcodeproj/project.pbxproj | 338 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 44886 bytes .../xcschemes/xcschememanagement.plist | 14 + interview/interview/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 ++ .../interview/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../interview/Base.lproj/Main.storyboard | 83 +++++ .../interview/Cells/SongTableViewCell.swift | 45 +++ .../interview/Cells/SongTableViewCell.xib | 124 +++++++ interview/interview/Info.plist | 25 ++ interview/interview/Model/Song.swift | 19 + .../interview/Networking/APIService.swift | 31 ++ interview/interview/SceneDelegate.swift | 52 +++ interview/interview/ViewController.swift | 42 +++ .../interview/ViewModel/SongsViewModel.swift | 26 ++ 19 files changed, 919 insertions(+) create mode 100644 interview.zip create mode 100644 interview/interview.xcodeproj/project.pbxproj create mode 100644 interview/interview.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 interview/interview.xcodeproj/project.xcworkspace/xcuserdata/saadahmed.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 interview/interview.xcodeproj/xcuserdata/saadahmed.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 interview/interview/AppDelegate.swift create mode 100644 interview/interview/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 interview/interview/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 interview/interview/Assets.xcassets/Contents.json create mode 100644 interview/interview/Base.lproj/LaunchScreen.storyboard create mode 100644 interview/interview/Base.lproj/Main.storyboard create mode 100644 interview/interview/Cells/SongTableViewCell.swift create mode 100644 interview/interview/Cells/SongTableViewCell.xib create mode 100644 interview/interview/Info.plist create mode 100644 interview/interview/Model/Song.swift create mode 100644 interview/interview/Networking/APIService.swift create mode 100644 interview/interview/SceneDelegate.swift create mode 100644 interview/interview/ViewController.swift create mode 100644 interview/interview/ViewModel/SongsViewModel.swift diff --git a/interview.zip b/interview.zip new file mode 100644 index 0000000000000000000000000000000000000000..9e8bcf1a4b7d8f32dee5e60ed2cd40e9c0194227 GIT binary patch literal 52266 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 literal 0 HcmV?d00001 diff --git a/interview/interview.xcodeproj/project.pbxproj b/interview/interview.xcodeproj/project.pbxproj new file mode 100644 index 0000000..03154e8 --- /dev/null +++ b/interview/interview.xcodeproj/project.pbxproj @@ -0,0 +1,338 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXFileReference section */ + BD8875D22E7331C400844DEA /* interview.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = interview.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + BD8875E42E7331C500844DEA /* Exceptions for "interview" folder in "interview" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = BD8875D12E7331C400844DEA /* interview */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + BD8875D42E7331C400844DEA /* interview */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + BD8875E42E7331C500844DEA /* Exceptions for "interview" folder in "interview" target */, + ); + path = interview; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + BD8875CF2E7331C400844DEA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BD8875C92E7331C400844DEA = { + isa = PBXGroup; + children = ( + BD8875D42E7331C400844DEA /* interview */, + BD8875D32E7331C400844DEA /* Products */, + ); + sourceTree = ""; + }; + BD8875D32E7331C400844DEA /* Products */ = { + isa = PBXGroup; + children = ( + BD8875D22E7331C400844DEA /* interview.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BD8875D12E7331C400844DEA /* interview */ = { + isa = PBXNativeTarget; + buildConfigurationList = BD8875E52E7331C500844DEA /* Build configuration list for PBXNativeTarget "interview" */; + buildPhases = ( + BD8875CE2E7331C400844DEA /* Sources */, + BD8875CF2E7331C400844DEA /* Frameworks */, + BD8875D02E7331C400844DEA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + BD8875D42E7331C400844DEA /* interview */, + ); + name = interview; + packageProductDependencies = ( + ); + productName = interview; + productReference = BD8875D22E7331C400844DEA /* interview.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BD8875CA2E7331C400844DEA /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + BD8875D12E7331C400844DEA = { + CreatedOnToolsVersion = 16.0; + }; + }; + }; + buildConfigurationList = BD8875CD2E7331C400844DEA /* Build configuration list for PBXProject "interview" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = BD8875C92E7331C400844DEA; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = BD8875D32E7331C400844DEA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BD8875D12E7331C400844DEA /* interview */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BD8875D02E7331C400844DEA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BD8875CE2E7331C400844DEA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + BD8875E62E7331C500844DEA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = interview/Info.plist; + 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"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.interview.interview; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + BD8875E72E7331C500844DEA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = interview/Info.plist; + 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"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.interview.interview; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + BD8875E82E7331C500844DEA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + BD8875E92E7331C500844DEA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BD8875CD2E7331C400844DEA /* Build configuration list for PBXProject "interview" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BD8875E82E7331C500844DEA /* Debug */, + BD8875E92E7331C500844DEA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BD8875E52E7331C500844DEA /* Build configuration list for PBXNativeTarget "interview" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BD8875E62E7331C500844DEA /* Debug */, + BD8875E72E7331C500844DEA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BD8875CA2E7331C400844DEA /* Project object */; +} diff --git a/interview/interview.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/interview/interview.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/interview/interview.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/interview/interview.xcodeproj/project.xcworkspace/xcuserdata/saadahmed.xcuserdatad/UserInterfaceState.xcuserstate b/interview/interview.xcodeproj/project.xcworkspace/xcuserdata/saadahmed.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..4b23f3b687980358a189c3daefc687b18a32c230 GIT binary patch literal 44886 zcmeFa2Ut``)Hi--?(W{IE*&XKlcFrJEW1mSUPKU3z=DM!tcU`OEZ8-7qS2Th(@dgK zz!Eja#6(j~VyecNSYl$T>86=zde8sNUKT_!<@?P0e$W4jJi_k1bLUJszu!4i&fMwE z4fT%JxVTps#9)SHG>n$fF&raK44Z3fan#$JCWTeE)Xc1hZ{=aF_U4IU_UW^1HLVVJ z2Cdjor5{vWR%lybtIh06bcEp6kq&W4L<5jF@2^GE728b z6}ky+ME9cm&_n2P^aOeuJ&*RI1LzQX2^~cz(Cg@J^d5R2okE|Zv*>H|9r_;qfCu1# zco5cOH|&l*uqXDy-Z%({;|M$)8*mIZ;&^Pv7Mz5W@kpG8GjSHq#`$;@F2ZAQF)qOs zcs!nfC*n!C5>LZ*xCyu61!xjph?n9^@iM#;Uxly6*W(-TYJ4N!inrnI_-?!d--CDJ zd+~jE7k&&sfuF=r<7e>mct1XfU&Jrt!}u6}1;2(*;Mein_#J!_zl%S_AK@?YclcM9 zVG*lk1$F@I#=5iKtPktU4rW8xC^n8wV9jh29>ylKX>1mo$L6zzY!O?_+SnOv9Xpe) zXJ@gq*#@?eZDL#41?)ohGIkleoV}X8hP{@(j=hb&oxOuy%Whyh*)8l{>{j+Zb{Bg; z`vAL_eTF^AzRVtGUty24ud;8j@38N)AF!v`Pc)1MX|RUXXf#@lPQz(oXs43S>)=byT(9~&WYZ^4onpVwx z%>vC5%~H)Rnp-t%G`DGP*W965t68VHQ?p*PL9UC?FenO z)}S?N6SYa&WNnr4vzNLLz`;PXc z_5Za*t=<0McbuBuFu2t8jTcBH_yIi+Iw^Db7Zk6r^-D=&9x?6Q? zbnA7Sb=!3J=yvJ$=pNBMr+Z$vUw1(Fg6>t_Yq}G<*L82`zSMoCJEJ?R`&##n?pxh= zy6<(r>VD%eCvyY1f!rWY&-row+)yrv3+F~~X3oM{xlAsL%jRmhTF%DJ;Oe-UTs=37 zo6R+Fja(CF=bE`WoWd>VF6UNpS8~^K*Ks#;H*p)dc5VxIAGeFUpL>9NhHy%e?5N#e-nQ*zlOh!U(2uKH}LIz2fvx$#&75E=6CS-^AGU5`91uL{9*nG|0(|& z|2h8!f13Z2|B64upXI;izu|x2e;0HDC-8z^a1%U*A;M50NC*~&2~mPkh!;i+g+h@q zMkp3agi>LwFit2F%7uwSl~5YEbA^S%QelO#Qn*66UbsQnDr^(B3wH}U zgnNXY!o9+M!Y<){;X&bX;W^=XVZU%#I3m0$yd}IXyd%6Xd@Ot^d?j)sFAAb4N}?kN5L2MM8 zM7!85wu+0yW#V%2a`77RT5*kdn|Ql;hqzws6t|0ai_eJ9iqDD9i~Gd`;tS$I@kQ~F z_>y>3d|iA`d|&)P{9OD({9gP){89W#{7piVAc<0l6e@*D!=!L2LW-24q~X#CDO!q? ztWvs^A!SMh(rBq%s*uJ@6Qs#fl~gCqloW|bmr2W{<7?|o^q%y-^nvuD^pW(jbV~X}`a=3f`bGLx z`c39!UKV6g9w@uZezLzDDu>C#kU93vZLvz#KQ%LVdixlk^W$H`^#1i4baM6Q-= zNTjks3&GHucE_tiG zP2MiwE$@);m-ot#%TLHp%KPM}SBExZ zBxS{!40+Zht1;7*V9rV~Rp~toa&jlwTV^|&t7~jI_L{av zTT`n`vL6%5MBl~uGXYE>GlUt+1Tn!(h@w?=3a9Xjpoog3$agVe%rGXLiGaUD;BS~R zKpChEQuOebhra_9LzUi(%BgRvwa+VX$To_gD7*k)@ z0{%nCDUrij?2n5Bv_IxhAeYlj=`9im7QlwOf;Kv%~ksF?h?S$S=B8QsvYC&9rYk( zLVfGZvihdF1{>U|(hr4%nKiB8hIKbrZ+ZH`Jz3f94b!Vz3S3!L>3w_dImL9};;Zxl zaY1HlkkOJD7nEd442pvv=NDsKyg5j4^+ghs%|vfyl9?1Hl^MyTG3iVOlgVT$Zi>6& zp?E4@inrpU_$q_9LLcNZc}zYtiYZ`5!?z;n1wUnsQmjl?rYO_kTQ%(yJrt^JrhQ&< z_1yZpYG_>bQuo))78^9N8>Fget#7Drt+zQQ)YrDoRFf4nIhw%@wYT&n>weOiY|8k0 z+q@jx^tQS>=nlQd7+a&gWkG&Rb@R-gtFAJ1OPC7ca%=0m@^#gIA~TJN-o#8|Dw)a5 z6lSX8uLLN8$`EDfCZ>wH1a3@cYLp-)25zJ)*|c^+6Km|Xwiw8+u)Z~>yJ#`p-B+de zzd({aP*kXRnXLgTXshjh7M$(;7JFN>dIMZ@N0mObJC9;}YkiH);gsh5*!`TV7PFaV zCVC^&z%(*Vj9m#PMSnN^x0EJ!rnYsk&uB2c%jyvAC?nIR;S`yH|P2?4T)-&?RF9a|Pqw&a70T+L=|# za7s-S4E;WH6xi+>=33^uD!m_c9>sbo9UYCcHMiItKup!N6iT!*qQng!n(i7oABZo)F7)_SMD{K;<~LV2(b1bzxHEq@X`@!pKt>(|;7QL(6dulJ;0f;mG|AdY z`X#3!fv+DV7+hIwYn=zw3>>7#kS4&*nT>n>iLsDo2u(8-(##9Wvp3Y*S|CNRGX>4% zcSsTHMpMA$VXn(dIk+6*)-J)tsIH41JF?;82)7Q2UNyL`KI8#cW8F4NQrysrY+FNv z1MbFmXA}f?6U?+4dKPY2oi{dkWNoR28%b1f99&LOFAwrNxfd>vq}3h_m(yL9T^iY* z2{*EwVzR6BK4tc%I$+fX8*LjZHO4Woenx9Y?x>Eu{7|OrU+9xz>Zgu^(V-c0)X$+A zSB+9X@n8_cV4$1I6vAM(5wJB6l=gDwI_75PR%R`;oq2%S!#oPZ)C0^*%xf?_eHVtN zrFjD_Q$$I_6J}LrNGdF@s%AMcb zpjx_;w$_IFCTDA?!+Y8`U1;uPZh{Ie``hWO^wX=#Tl2HW8!b8G%X?%1U&UK`zMdnp zd_l9#VeJxEHNLFMWb8@j)ax>^98GlvwE)ff8TG*OYBg?U)&SoZmyKy_r3LO`k51?S z;13r!+|I0HqC1#7n6*l*64$}p$*fn5N*d+A!E@SdEelGksapU5bMzSYsVdo(R=2|S zCRbJ)nY)0h$IDwGzll(xM%w5~ zvXTf)0STUD_AyUQ0-w*(+5#=DBvsC^K?x{M9BNxX!#wMp1L|t)GH1F@<{9QWCr_*2 z)uj8G1LxJkSp!F3OWh%kM4+ZNFJvyx0_VzOIP8%HqHE*kFZEFDw z8S-c83LFmbF)!#ZsF~3&cNOei<|Asw-(%iqK43mna+F*pPsyiN{1o$v(~6H$3jPPI z_@5Y3S5eP0-%#WGwKBS$`Bo|XOXK?^7~h}&%J>$Q=y#oGdpU4p|8H#X+DXz4of|fE z2y%xg^~3W62KME7-YqO9wXnQm{G=(ira22$K1D8q9n_0o8D?2%MstSqnyYPohqORG ze;`IFQA#@yMyxVcDWiH7(dMwVl(yJr*jid_wcU=cQx$UOx7wVBy&wmaCb(D1Y@n1n z@Nv&gbCizZ5RZfn$~Y%rkc4Cy&1JTTb+{v07GJJ+=B&@w*G?k{^@V3N$dit(EF^!asRXrSewrG~@os zV`cRV0cJg}aQ~$OcN9{kbc3tgnbf`01JD@BpLu1X)-{dE5_#tQ6r7_XlkqMj-GqNBnN(5&l8QhUnG*X$a)F`!zO_`z8DKnLNWtK8qY1od^ z!B@#dStuLjpj?!P^3f<%pfoCWrCFJyv?vaOS%O7^BM6QpIEq#?$TiOC8FrO{Yu#Ev z{ai4!Fy0%UWt(Adfv#$7u5PJ!*qfXqj|xCZSIel6s^gJCUB123`CZUpt33B+P}i5X zhSvIK7|K&Yr7iW1Fk&dGUSMx)1!HqwIh>vbv|DJin$C6Gxh7KEdu#x12UwyU+l*=u z;2dSDqtl?SOQm#4#X+0A_j8VEW2)!ZH-Z}1I>o_A%QZ%I7LoS+F*E^91T0U2B?kbc zTX9);3l-U#>YU@^bFMk(F7!xgQZ;c3nmYNMyB%m6v+Udpl_kx#rh+E$ejR!SypgWf zD6-9HEw_)WubbJb@UK<4s1!M*nL2ak1*JuwLO(Q1L zK~y2wMCYJ15Y)M?p_VFjDNOB*vw^eYXa!}Vb4d<8>ni9HM8Kk>rRY+mD2tUP%F<47 zqL-oN%B2KZ2zr%jqdRSZOh=b+=U@$Ni%Uh}rnAw(<;ht9?p1w_>x$YsS0dpqbQQW9 z-12MDb?AC@16r*p%0A_+@&`e&1Wh66a)Rzr#+^VngXexLS_3_L8@e5Q__b&qx)VJ4 z4X7P;pib~XYrE#dRD}jlmKLYjIZ+i1UZ{=EK~aCL%RB3>Qcy$(U4-lLet}V%oKr1b zIh~*0t=C;DXR@mV72}HFY1g+N`_k=sD~~I;Dz_;_c~W^oxk*{`D%ylLqb*RmyUSgD4F5P zv*(_2jj~L+Ub#`ZOtDw#W4n2~S7WLf_RPt2J8f!r?n1&wbU%6k?M8c)<;qIsO66*0 z+%fbpdIW0rD3IOW${vXo&ax<%1KX{DX^}BdROlH{;pz73mfE1mtZIiXN=4(7Xdes+ zfGT>1RjQ}#%%ZfqzNG^_MP1fEP2(!aGw4~gSGhu2Mdc1UPp+PKC3}IESGkH7uV>nz zpPR=Jj1AB$=s0?n*>kQ6Olqxf1Y}h=HY?XE*C{{~)l?0WV`F0}7dv7d)z!7tGhxsX zn`3j#hQ;F8?&%3bbBi7HuF=tR>6}lrX<`~6$*kD(im$fU8|Y1-Rv0(B`q`yB9q29E zO#R)0@e6tfokZ_eHiHpSn^#$_+)$-2_`fV}%zQevM@y@g?gRAUWGI_UQ9IE`=wo2l zb1p%*lmd;}YN;aU!W{7e^~q1rr{Gh79`w@69;N6F(GK((t?b`Ue++#AZE%{|gT6v% z=nVdJXl5Y&m=;?D3^3=~U?g~pa`XROH-3Y@ttc)7GU-6y(3%Xdu{Xw4H-jOLDLBuu zG{FGM1)Z3Q1zA;kYd3^d*Q>W98lxHrmwue{w2S_K#299<(NE}S^b7hG{f2%=e_#e9 z<#y!`Wv#MKxl>uMY*5;jj;)x*8kjZFVGi?Hz#>?#PUU{(0cE$cM|ntjSb0RXUW3Nj zYQV-&>)dQ_X?0Xq+U<>b)pS-GRzOr&tstk|UIZim!Y2E?rtIpbxz!HWwBMNO=I&`; z@K#D&>~rhErv_GY*&CR%o^EUDp%`#Od}wBwbaJ){*u6*K)kKIY>pD!&X~v zZ!WUUwKa6*Lx&9d9NS!&CkAudu^;xw0XPs3Q8p@DlkWrwm; zxesU$2Q!0k2oA+zcox6U-K?#gb@M z>l7ac7vmD+OrQ{naYDw(g1i7;A4r2GXrp-RV<*Y#smv=c9Pi` z1B;3lt2xdXXG%)2CITp6e2+_!(22+5akxx*RC!F<3mIoksx+7q4Xtr4l}#mChKfc* zPHA1`ggTR9T!q0JZ@Qp|QVA|?gDr@Xnu@r|c#67E+siMfzGw%YN@<)f;`X`M$HB!_ z_!3-=r=tz<$%bbr&nhn~N0g_)WqejSq#W+$GUA!I-sLhX2bHH?o}5};JNRX|8PCBj z*r7b5Jg*#3Ug-AAAoqFT=RB)CN8KT>zH|EX>!){lJ$RARCE8D2B6XFaUw24#_s(&j zx;!L&1@(}W7gb+q`bF}EoU0wN7bteOLC4^Kf$@g9&;J3re_^S!?KSr5a(i3NOx04m z=5Exb&+{$&`IZ`ty9+=!;XA=ZnopMw;ro5sYS6)?KQ%)$a zD{pMY>+uHMj$z&mZ^WDMW-!rjDxWEzD__7Y+G*uW<*WbSndtkeiGBd@#(VIC_#yl- zenfdoc}ICyd0+WZ`B?d+$3*XSa^Kr7?lZ-M)dMPqzve`v37DB0jwB#%*p>i>IL-`| z4J-|&*cb;iX-c5~EOAM37D_u-OMFZs7;GbauqIf+LiX_aKBuIU7m$=dP3d`(;-Dn` zN&=ScB?-I(i@8VAvrb9xT|iQo)x9WnI^dM_flE@nF(D={(U@ekCK?mW)`YkOXPx3> zz<)5A&0sX*tzf+R)(IYfhCaVeR!dKv4ml-#bOA|V0xz1RBTh-Ds3h=NpqUaAt%=}> znauG}Eh9B9@kz#*_&6){nc18K|BQ*WN@noGtR^d1A*&@Zp4y`Gs&t-09Cr%()Kw+w zaDfjNr~We~nrY)%E#R6Zx_%&cryB;g&KT2`5dJ`mN5e)GqbVi<90})-#S#y$L}>ci zz=rQ`S#hI_HQvB)y3DS3L6+)bQ|r}Zb?8pMq)o7=M9JE8i)< z0X=^WrtLfB7v=ZfrtK?yrrWgrqOOOsGgSr#_Gd0PkYC@2x>WS?l=}C8CoGuV-VLPt^-5wA- znkouGa+UsnNVd8mk{!cNWTLmR#cT;%%8q5nv1M#ITfvTJClEA{pg{!b334OIogfc_ zJPGn5$eSRaZR{kvKEs5uQ`u=K1O8Ss;RN}DqXIt!`4d>hvC~f@)CC~F9tBesFh<=( z?cQd7}gCNSCAHz%l4W?Sn_dkYBadz((f z(cMR|H33$Q`#e1l_WBh;&ahPh21zW88rs=rf(Fx-P1QzPTL1d1tp|x7=8+E~?yJ28ms}$O*4)*Ic z!6K0Z)`J}9C2JJ}o9)$EM~g%T7-(6CPSX7(2LR)RpsA_T?Z|GC%YcD^To8a)z?m6 z0L#NAdi~q_?~{)g=e4b0e94pSSqHRogmc)*wzD1MVY0BIAg6D6-QXNchdyye9aFnnY8$(Qw)J-QZi1o-GQjwOU8Rhr ztsP!5160XzUW-@2YGa+FFTd{wet(dC2>AUG_EF03Cd%(435uiqKAE7D^ZEU8_K6;T zPa??Jo8O}nJiDJgKu|nE2?SXQO6=kH-73GERDRcImKK!Jt$#JJ{zG@Exw!oZ zENKC^n_*2$SSuMo>CI83bh#ltoZBK{*8F5|l?!{x|?r#ebRr#?%Z1)@1_72ddW{?W2Mau!phD;GBA|9r zFX%nG*g!K_698LldY0ZZ9QhJY~zjWbi+=04^b+ng}3gO_*kw29yG* zW*k9fotj8Z6eZ_!f-3&^$ypP}4AL0;a_b+hyCUDnD!S{DTPHO*Kt1rx448xtd8RSA}q=&s4+s6NcCDZ-~T#hMbdK~tm|N16K)%G~t? zO{L6z2|;z|F}J2dGrotpZ3Ip0#oU@HRNJO%rfI4)@N^YH)dbZL*d*avDb^IJ%zX)E z?n>&H_hM|#Ogdpn&~!Ruscz%`M@+40Q<-{(%G47sk|XXMHaMMdS82QHS+iKBXV{wa zuSrumS#zo8O5kJ-#1&~S(=5|0*Iceyp;@W9LIcj)EP`ee)Id-pK}`hN2?FnK4nZvh zIksu8QaM?3oyy6Y8!0EZx;S}WHzzOqkCXoePHv~1+(A&Ai<37|lx)WH=zoIdD$hB8 z0VBJ+@V-NHFJ2JPtbx6&3&3(1T7@6UFV{)@q?O2DH}hed06uZL9iQXF+oc@ zHIHfbQZ`;n(53$mu<zOwp~&gIF=HXL`d@qS2qpl{lVLG0`~ z5xIE7$;AW5tlRe0Ic)r*=4IN>hv;~N(D8=mFdc7P*3Wpu4UKj6&a0Z&RW?51WaH(O zjSo`}zpM|3_vPG^z`5^f-UrV8Q1cPx+*OowuP0~)<=hsj*W6PTex|txb?EscF1l>l^?c21zD${BMRHoGiQKr4a#kA|YnRfesOndQ}RvQCM ztBoaSZ5PvOk}lI}X~o!a%<4cc~XhqhC@QM*YC*m#tn#|UlA#|e6ZAn2@p z1U*I2(*!-UO-sYx;YWM7b_bnH*4|4=_gNR|K2OjwbuRgp|48>=Al=6)=|ZPG=OW#w zfOKJ$=lp?&SAWL2;Cw*)A|-(rvC0P zAn8Sd4s~izXkVvf3*uh>e}HV?1pHoh_K^W)cprvYU9A*B7N zZ`!5GqPT^36~-?|`tMesO>#enY(LR{PTToYO14LwWcvjr+oS!Ftv0ti(#zFN-)O&A zS@%09>mH}93;RiE2ItSj>pABdg7!CvhtU2`&IO zCzybs*9nGGpU&I-56i}&0Cysf*L40I%tcx_F&Q zm!LE2EIO+$QJ18H8KCzG`hcJh2?CS)F+ryY`h=iQ3Hpqn&$sDPRbJC&=rVO#Oqec* z^4b?JUOPk3uLS)@7s-DAkJv6gvFXMEvFXYPI^9KVy75$%Cg>*8{{($W5DX>hZ}294 z^^varuF_2h6hSkgl0sl%U}Azu8z7=ca4+c zbTFolCg=~KI30}qX%^>G9PALSvBTLObr8fHIS-DbNv@|MdC6)Fi|!^JL=Mo1?Or4Y z>$x?vJ9M|ueWCr|gjfi=ca(;2RjH5m+8(33O?P`YwPAr^O>b)3K=rX**P-jwZ6sJr zu#RAk;GTUD|2DNfs(TXRuXT^<_UazjJwdQUuuSj(f(LHY?bAJl=jomyco4y!FvW!f z6~jatLq~`Dlbm66^i!p}60F86(pKsY^6QQnboJLk-C-*2McpCYOS+c{))VYTusgvX z8<{Y0H!u?p+-QgXS7S!ULx3dRzw6vM;f(VfS3OTX#|Ty{df)9jk;HjI0IYWOx=D*! z1~Cl~$Wzl&-wdn5umbPhD~U6A8h_?0>zld{;k+i@Te`P(@90kI-qpRQdtdhf!CnM= z6YN8FTofZwo>dIW78S0sHcOyW4~4K^B6SyVs0 z1%ftnn`mWSL6h|OrhZeGy8@SbryqWy^raBB0rz@k9(|$2V{EMu_5}L?dL^e(I{lXg zTC8`{3l_VqZMtItgo`%zP9J-rtRaGgo;^cD_j*5Z!LqwTw$DxO>dqf@KS4;c?ni=$ zwCjE*cqr`evRb#sO8cjVQf`-5W$4k8eT;ffCBSdIhE<}{p^1E2;I971qt zr|vN(oP#i6NdcgQDdAHg*PbYsDfAmCu=5-&8nH6IoT}rP>N+?#qpj8!nlb-gC$Dvt zlyl>}`V+Djgn-J)R7kiI9-6VTxz}R>T%fvfP|vt>3g&1SwpwQ{jNsvl!RhC55l}xa zl8YjE1i>*q^^4}>`Vq|;L9~hBXe!#EginGVQ@JiQW0lgY5Q$uBe;JH~4AKdXr5VIg z6FLa8aK!{u0EA}LIP>W)dJb2{MBl^Za(P@nH;OCZMstN+5jTb_=1RCyZY(#B;CO=++=PFHfRdJVq zJBBj|E+FhpguPX<6ZSUn#@O2lyOyxq;1XdUBkW$4j(pVsDYfdZ*er~KWnQ5bkvIVMNLAmLqS)|bzO=B&-HrpLBHIzRP3jn;3fg90?Ef!qa6 zGa!!C4P?=&WZQg*;HI%(kd3EWzTTyP70L69O=0OQ@E})sS9eL`XiygoZ--?|2omg$ z5?7mmMn~2#$&u*sSUJmCym|>|^b+rWvcjGTKpAZ@GWBW?k< zp$={_w}e}&`~nM{usa1dAi~TKOuQ4E3DFlf5u8nMF2VV9h|oO+%`J0Ig`3<>y_zId?UlqXLd7 zY6VN>T7Bqg;?=6eQC0fVi&NvC@KhJ8-OSw%P6T%go`E`H1`v-{4l8Sv-#2o1aBI1B z+?@m$5S;B;OTk>D&Tqa^bG6nJQkN=nc9D&y~g{uY=nNEXpkfb!z7}5nQAg zT(|Dx?uHEw2B_i#H2E+u#p!IiWO(Y>U1u|${0;zF`33K&4x zUvfA?Wp2H_%~4+6QfKQLi)S}DPg@G_C-*A#+PSG!Jne=t5x0lnvC6ntxQ8J!8Wx4P zN4Q71$GE+dy0>H!TuyKq!9cSU|AoE`g#+4d^L#kK&DE0oxM$$#5AG@MX@V;V9^b(| z3lmCs0z`Nl#;ff$Uabq9YS3TR;LJVlMeYy~Y_G;Rzi~UcmpJF~Nq?TK{~+vsMZ0Qn zlsl%{U)P0Kxf7r_*rpt6=U|>>N{`yS#eEEsLEPKiJKRa`UG6>ZeeMJ9L+&GjrxHAk z;3|SIA-J00=>*phTuZQRD|d?fg!`2H3}NmI?lku$1NM9d!EgpiE5U6r=D~9btVQGb zs;l|`pI~0@7bI-ve&v4Se&_z+86FW_M{qsCvk7h_*iP^qV0kremeqd^*B>CZEM;QwCa0@Z|)rAb2HZpeqPoMevoBft z!u_Qv2<PtY(O8gToLYYjYel zHI1r-PJhw_U~v1^6TG2E_aN+OGk+Psj9<=Q&adDh6^st9CwMi%Fh012 z;59v3c%|Bi*U?7odkVtEIPSq^psrOV-Qd!UfA3@mezhv<#{MgH5s!A@Z&4-Pd?85} z?Q94Bc2&}?uIBsq4tL=1R7Ks^BkH1`?r{E@3w$RJLk)W7f=ZuTD3Ibv3NGkA$nOK_vXAl)!{B=X8>ION_F%x!oQ}ZpCg+Gd z(>WBsmhQu#WAm;2Q~cBXGyJpsbNuuCe*ORtPW={wpCb5ef`1^aJ7J>LO7(2=$rP! z0T#k=!Qfog6JSX%n&5qZ)`YHRGYN3M=QbfhFbfvJDkKU?Lb8w|qzcgXFs1Me!Os%> z9Kp{Myr19$1OpEpB>2T`Lb?iLAzOv9kWXQJ$OU8AWzq%XH~)k2#fPy_0WcQE6Z}#a zjD<-6;|p#*5-t&HD1@s8m>D@t@R1IoR_!3?aO%(tLw?NdS(z6u6)sa*j5t~Bb%3C-oU#~xqtD8^zT5@E zRl?OOaIbO#_pLvB%Js}@0gkQTCfq38B-||ABHSvh5pEN17w!e@O601bO*?zi;EJm{a-Q9E;)l&`FP+Rj2kfVW&s5mLwl%P~ z-~S!ho)Lbbusth$Eqo(FZ>|i>i7#fPm3&StylL0Gm6wxai+!Bz|ugFrRJ zA>vTNY6+|B5QD`K!g7QaFB)vc2yr+S5(%(nc?w%`1i+RR`h%?-|7{m?MWbj2HQ-gn0Ok)O#>3z|7=k;UXv)!LL zpu_FXeLikpu+K2!sF($5v-_rPEx4hj^SO+jS4^BT(~YlL(SuwuPlSjRH~>O~coY~$ zy8&{=5!6hx!i5M=EDW(mDyo4i#Ve?z$cBOjva6^D(lbcTJAK4e zum&`@~)1{o(`SZgG$JAYlyz z&e39H2^&XPBVpqSYa%SLqM5LkZQ{dSz}?#g+FVIM?40=?LVZ^r5LDZWM6WWuI&i0_Ce37bmTw2KGb55-d|bU$`NcO>Yb zcA68qeZ%rx1v@RCrO^FS{7O7S*mS~X5H_<@{2IXfEn%~q=*^}@{HK7sc=K6D#h(F= zzx0J;KVgkW#or1}SCXXx(m-jDq?g>w+$XHmHGd z?6m)&d-0(w834Kx5bL-u=t{;v^OmJViJlB2B}stUa>7=0NU73D!j2~_91U}kEUuI# z(Su~9Z0apfpx(0f3-Fc^Oo3f+kSi5RB>-EgNE#!7W`UzuN!ZDqQYm|@G>))SoUonx zzYJRmUI!#i>I=nw0_2WLQy}fszG?djymP_!5{b?nvfHKUPS{pa*nZ(;yT0LYu4n3{ zRtno$(rl?gYLuEJyVNYrky<1NVXFx{ov<~8ttG6Durml-N7$K!ttafPZBknoY!|3; zU(yl^+u1JIHg?B-vGf1K?Z1HAt0-=-CTxQXx7Pt~`;Yr__4O^%Z4_3wN^1z)L|A)= zbh~s1VVeota`CXcLF%MJ+9`JDQ0(e1qu7Ock_%&Zs|1JqbxPZ$?b6+Z1v%4Gwl9t_xUdz@uSinz~h5`@z_u7*HP&aNc(8twEe`Cx%%dDX`hN+ zh#Cizy8y7OyUdB*zHwfzXP%diQta-R4oELZ2c;LKL()sq%hF-#2w@iyb}@ldFj*KG zT}oJmurMyVjIhfHyL_8;tP8uZsot{mCdKaMF6=_6nmVt{uKo|Y{{nPBrO^G1uq#~9 zJq^(9@2DkLM}I5*Kr!{5^gUs(And9R=||}&!d^+(>nSQO%CUFS?=mbMcS?WAjEo3- z6=8u~u7M$|tdX@&>v=6~gTrxqUiWnbDgh(kHO?be*m*#cIv0ZNhmE%F37&isO zUN3dShis7(VOuu6)-ERz_KvR2HgYP&zB^O8qP^q{IR`pj&Xlv{Y{IT1?45*N-zn$H zc``Wd8wk6Ruv?s+4(00;N~1=*IGiyu=Kd1UC>eOuSZ(i6o2&)ugU;u|`+Kf;dMdzG zwJ~xDR80mKuf1I^C2WUc=xMB@ayc|tg*=|VJBz;ijPAi-^Fis;QwiItw%|m060{(F z)q96LvHQ)^@??1`&2|c5H?_;t2)nsgw(5(O+#qXi0F@!6w&HVc<{Q)h>fS zwUvfX{9oj&R=YtSuU7Z@fN!9>E@5_gA>+MGZkFfBEwV#ymD}XG@;rIIynwLV2^_1- z?jY~63L0|>i^urMj} z5MduC>?4GIR0*%FcjPwI*VRLOCqz57I%7E0cUQr|%B}D|&_)PIJ@;~f10u5^wx<=+ zpLb(IJ-qS^A|oM~P<^5-r_dS8O5c^$D{ogw2?Q>vDbEcjo7DYq_ieRAdGIR828bQ= zI=4K|0~G0r+Yozpeh2n*C9QUDYpwI$T!!;f|E<2PaOwm^VVw7{F)=1?e0?d^pGx(Q z(Hd=ZPOHdkkk^LpP)7L_cV$!q0x@}2T}!ah#eCkXo_VfSs6+vN_qQwH=tMcAha z`wU^9rCR0H#wbA#O`}TRJq?yL;LFdHvxz!aD2e-@G8tGeF zRYEJX)j418S>b#Q@dTqK6W%CRtN%=`);-9pQ{E}xD}(wyN7xq$d!(n956Cbl*eUOp z_sF1d&l7e(VGnf556h3p?Sy@Sum_=%v~HA1dRL*BYZATVwJO6IupOGA26!@KgIwr)T7JI2!ta+4$WZb_gnfyyFDr)7^sZyCYnY&6 zmp z&$caa(D%)C6{y`;(X{(1TEzoMI1j=yUmY?uC^%$bXxOmuh)B3bUknYhX5=+g*HIxo z(d>}RsA|UqdNesTfnX{_Gs4yOcDq8aaJ-^Zd_cit;G`&cPp~rzyP|-~$bwVCj}06V zZHS45{o|_Ko_xD?+3);2=Ty+!T|vt=3QuchH2ZhPn-Ua35f!P^Vog+JaGbpq4}h|o z1+7H)!{DA3mt~jJg5=q%X^blb#6sw6o#UJ&zOEz{1r-iB>c9KeQSX6i8SUxHK*f{F z&dT-g$fi@+`i{JO#Z7UiQvD%!SI!O4?e=rtKL{1>zDpzjdm?f5j9z!NxTJJ!rP`xS z(4rI7k2Yt^*Vj;x1A;qB$3d5rI8_RsD6csG4cX=6$3b5^-a;H1=$JYVzFtxd)P0V&!O;QKL+Y3gkN0z(;Tbo^4~92UOgv*{ z3Ya2hEK|nVnKouIb2)Q0a~pF9vyNHMY-R3c9%7zmo@JhA4loCqL(D78d(0=yS>|^n zAUzt40?-gN6a}MDc!72{nu->p#fZRJ?N`F9g0Dxb(M@O#ya#wKyaRXx+Jjz4-@>aZ ze}UIj{sHfy6tIK`U_Exnp4b~F;9^_~FMFGSr{mdpK3;^E<5lp!thMketUdTq{1QHb zKg6HnGx!_)BRhcAt9p%57oT(mj(2@y=z7v&)txyezcRJ^edXZQRCmh9UGU-vm9s@EZ>??#lzF9tr=gIHM@8fw8WXHY=r(v+K z5%vTea{L^n*N{KwL8@JUnFz`Ri6Z_yCz`0N6I!XO zL^#ui?X>INm~v2oTBe#=zy!hXR`_jX;+SN{#8`r2nNns9D9&Iego%dh$xJ#Z&3I-C zGmZD;{rCtzmQRL&pgf548O@jQWBGD^Jimm$iErn3@elBO_=osM_{aFi`6pp7_%YaI z{Tghrev^NjKgqwxf53ml|0c+=PjiW|S=cXpDEuKZ;!rV2G>92umY4%e+@r+NVv$%3 zE7s#gn^-5-i?hW>(Jsyr9b%g}Ph22gEv|>fu;;`##8cvLFuOiP8X;L=HZ~dNU(=)v znEo6il}KZyGO0qEAT5;ENOwz*OCL&SrJto=VQk09SeE1g@*vp_hB;nxG`Rkgz#CK@ zyUXQk<=enx*eO3C@0Cx;AIYD{pUJ1?ujI1>9+ zTK}yZa?`o-Zlc>DH#avAH!nA%Te@43TbWyh+XS~sZkM=CcdK=q;WpE4rQ2G!yWF01 zJL2}H+sAHa-M(@A&g}=cpWJoslDnt7x4W;qpL?jg!9CVJ**)96!hMRn&ArKeh5J?R zo$imiKjZ$9`)3}Khu*`@V~EEvj|h(_j}ad69tj>6k3^4TkLeyOJ+^r~=<%e-Qy$NF zJm<0B-mTb)K_48$6plS9z}X-069r=lxzY zz2^8L#F#`{h5tMr@VH_h)7zeYd1-yFYIzqx)3{1*8w@w>rq zi{Ea)eSYuxec*S-?+3r1{C@HK&0piM^B4SO|AGFY{ucjH{$u^8``7x<@So{F%fHdT z+27$m*MGkMZT`FcU-$n!KnMs7hziILC;H z9`I(s+W{v7-V693;G;mFz@WgWz!8Clz}P@zpeZmTurP3JU|C>A;Do^Dzy*P80@npT z7I+}=VBn#^mjmAm{2=g5;MalQ27W(;88TqVpdoHUJca}fi5_AZk~k!JNa~OcL$(fi zV#qT?-Wc-1kS~Xv8S?eew4wP!%Z64CoiTL&P%`xHq4y1aYv`v#&kp@<=pR8Shz+U> zY7Uwkv?%DVp!b8m3dX^jU|ldDEC$QL1B3O!?!lhH5y4TxBZ3XVvBAb*Q?NPM8k`iI z5W{Vhxklfwpv)rGZ&%?+C$b|mbb zuy@1WAC@vKXV}@Ppwe!rusgEBu}C?<3doy; zQO`#mh&mW`DC&)Y45dA{*i_srNe`y$O2r&#ZL>QtB35E*81j8i5 zWW!WLm7&^DW3U;P8Wh82hUJD8hARwL8g4YKHQZ^~VCXPxG;B89Z`f^k(D1O~nBiT+ z`-Tq<9~-_gd}sK<@KcN~hK~_rtff(w#RnH-W|I;_MzBEV;_&*7yESV;n-ub$75fM z{WA8K*x%z&92++v&Mz(?Zb)2EoFOijz9Kd*BQ85GH!eSJXWV0PkH*9B-UtoMNmpPB+?&GmW#2igB6oa^p(lD&y70>x?%TZ#3RwTw}c5_@MDstIDnBcXwrX*8} zX`*S7=?c>|rt3{Nn%0=^Fs(DKH{D};#I)D+g6W9q71L{`H%#xDJ~W*&eP;S1!7Cv@ zVP?Xdgrx~LB;1s+E@5NB)`VRNPb3^oIG*rM!l{IB6MjngHQ^7l#;h|7X36Yk4l;+E z^Ub5pMdlLoICHsqg1OQ>#oT6|Z(d|xV!qT&%*)JIn{PI+G2dan)7)l7{`8V?)7TGe;qPMtPhFU@_VU}>qRhBiD+bwG?>#Z8A zn>E}TWsSDRLNKb?nrKb2rdczsIo3(mDb{J$ORUqaHtS65ENg?+Zk=OwSg*J4v>vm5 zmpC{vJ+UV7vc&ep#}l7Vd?E2r;>(FA65mVwF!5C4XNjj1ze+rt_)X$>NjQm15|aib zxhHug`6l@#jZCUcs!M80nv>L;G%sms5=mN~v@&T`(ypWrleNhMll_xpl8wp9$@$5Z z$y1YOCEJr*lG~COCNECDG?^q{pL}EThU87jcO`F6zBhSS^6umZlb=g|HwC3=QgkUo zikvbq#Vy4%#XBW7B|gQRVoga(Nl6)*l9y7FGA^YeWn#+Yl&LARQW{h2DRWX5r>si3 zI_27w>r-w?=}g&_vL$6}%AS;mQXWZpEagDTizzRq98MjcYE4Z_O-W5lU6Z;g^^w%Q zsZXXpo%&qrfz%gMUrs%mdOY<+>gm)osb8mloBDm~PpQAA{yvf!$&S>H#%pO@c za@EKkBae;zAa?1)hP1Y{`DqK&mZV*pM$(q0U7vPy+M2XG(l(@Z zrfp8UEA3#~Cu!fM{hIbiI!@Q7%jtvC-P66&ebO`1Theb#Uz@%){ju~X()XtyPyZzS z^YkCnf6HJp*bF{H${3I_C}T)Qa7IjqDZ`SHl#!N^k&&H|n^B(8mN7qLVaAdSCF8P; z%QLRXxH6+NV{^vVjO`gaGInO%m+?r(zKmxwp3it8p;q zGJP}sG6OP)WRA#;$&Aa4&%8c!UFQ1C_RNi0IBQT=SXM;V@GO|+%Q9tIvXZh=v(mG& zvL<9zW=+YOmUT&1P1cO8nOU>48nf(KbF!|@+L3i6>ziz!?2*~k*-G~M?8ma7&EB7V zF#AyUtJx>B-_QOi`;+X?vrlJ#m3=n*_Z&7ymm}m1%yG-{%<;}i${C+ilQS!)F{e4l zk+U#oNsf}UEa&o^dve~*MY&?GPwwzsL#`z^J9m8Uq}&;~vvZqr=j6`KU68vdcS-Km zx!2{c&27)!n7bwS?%aEF@5{YE_o>{&xo2~~&HX<2r`%t2f6qgCnmk?J(7cemVR;dG zQF$Zs40)Ekk$D+;*?D<+qw*^9Cgx4fo0>N#&ylC(U6!{zZ$;jXc{k_Xns-~?=De+W z+w*qh^Z8!+KKX<51M=tPFVDX%e{KHy{Eqxh`FG`S&%Y=CzWfLBAIyI-|KJKsKUg;2oS zi*^*b!ihnJMDJdzLSYj)gU$UrVdC3hW8%ws7JW%p*$zvr?lsr@Ne93{5gC%d2yj}8f z$tNY>mHb@tTPahjE#*qZQn}Q>G@*24X+>#eX-nzy(siX9N;^w8m2N5BTDraTfzrLD zPnJGi`dsOO(u1Y{UrlHJ-b8`8aazhHAT0&UvPD_6QmCzTVT<5$${_``lgvzWOxjGY zNhil7nNB9>G?`A0NhTSN6p%x}wF{!6U);)3Ku{=0q2(%|iy}u6D3;Sgxw<@$&-a)2 z{U6@Wj~c&DEpEiq(Cx9 z0!TCxy~HRnNvsmPq*_8tJd(I1ArU1@CCepsl9iH=Bx@w=B+Zg1(tK&Tl$CCiUInwk z(ctUgo8UO`EwBij4K4)BKq&}=GEfhiK>~Du6zBtMz#zzhVK4=51pfo>0gr+w!871F z@F(yRcon<`-T*tm2T&T64)uomK>eU$P!2Q_8U>Ap#y|zo1ZW~u0=)yxg%&{{LJ|mq z5U3JDAsu9ZY>*oYLkVaJv>aLit%Ei|pFs7{CTJ)0J=6-_f^I|ipg*8T&=cr6oCasW z{ot42!Eh#=4Zi|UgiGKl@IT=h@GN)^JP%#~FM>aWB`^fbUJa$^*(n%A?9wyjXg#_a-GXjMccHsA!!=_xd781BfF_|?qFJWt&^*#S(LB@UXh&-c zwME*uwZ+)SFYL{x)YCqHN)_$k`UVBh`Slg^^(VoP0&r#&D71-t=4VQZP9(9@1q~8AFj{Q z6MCP%MjzDwsK2Jaq3@XZOG#L&Vju=iE+6?CnKN;E$o!DQoH?RV% z2rI@WVI|lsY!OzD=`b4eV16us)nZ|c#{?{iEyX^?Hep+^FR`z&Z?JE%o!D;dJ8VDJ zf}OxlVQt0&<2%O1#xkSS2pi=_#8_$681+V@(PRu5YmFge#K;>3qi9@eTy9)pTxDEs z+-^K;d|Z`VHS-0VE>`tf)#0l4s?MsrRS&AVs(SGL_(1$+JPRL&zk!<5k3(w z!KdKw;xgQeNAU!{1YeG?!q?y*;~Vg=@E!P0yb(W)x8kSpHvBw(5x zIP+WPx6OYy&o`Hv7nwgWmzkwz*eo+E%qnxG88tKJb>{u%E0%tiLJMHASwzbhmIliX zOQU6vrODE2IcYg9BNK?pnGm-Ik}8=hnYjr&||VC058Pvns6`tKMp~ znyeP6P&PP|GK5YvfS#0P|wfC)KKL7;?=Fc1_$6CA-40wEG9VkNPf zSWA3P>>!R4Cy3L;S>i|H0&$VJOtcf%i4I#YTW?z*TR++M#%-Ck{X+H34ld(1A_llCR{W%l*kf0ggeAA&y~=9LGpUuA{*5j$?*nwqvg2eaD9mi34)T912IRqrq|3anW(h z(L<(_1IZC&0a--8OU@+UBj=F|$qz_?l#&{fAUQHZ#>fP@gj`OpAU`74lIzJ&$nE4V zayPk`+(-UEHj#(PqvUb2l{`syRu8T&u9jBQ)$6MFSN~ewL*-I=R6bQe6;dVC3~Cnj z9yOPmPc5KeN=a2vC}p6kC^KcH;?!2Ek=jT7Ks8a#R10;II!#@s+Npa~H}#b2ai%*5 zI0re0IEOliIj1=*oJ*V^Isfh4>D=u+=se|YcV2h?;e70TM)#uo(EaIw^k6!d9!F27 zXVG)$`E)70m@cEGG)&8BgtpVww3Bwx9@uDIccyo?ca9hJ2E3noo4hxDnZ8Lrsn6jPeXD$Hd>{KZ_&)P(^ELQ(_!@nCefxaJ zeW!eFzVp7HeZTsy_}cyH{yhKR{geGu{nPxj{d4{A`%C?Dzrk8>G%5s{#t+7 zANB9@|Ch;N1~Vg>LS_Opg_+058HA}~tc;zhX55UAsbPZ55@sE6r3EK8k`oK5wr)F1sj70f+vGlgTDpu1fQ{)Y&JWZ&13V~0(JsB zku720Vdt|TTg94Lf_1PI>teku!veGEU0DoQ$Km zRa`x{h5M5Gnrq;8aE;s^?ilwY_bYdWyT;w%?r`_HF0Pw<5-JSAAvzQYB|;lQ{|bE( z+8H_)Y7JcoT?$;^TP$XHAYQQYm|z*qTVPI4MaCak4B&JefXh# z9-q$_^V4~N2YHk?@KwB-xAWCJ&Aa(1U&pWJ*YO+pdVVwiIsYZUn?J%I<6HStd>em` zZ|86G5BP_%Ua@|$L9yYn5wVf6+}OC-Td|^8acokoBsL>9J2odaFD8vCVyc)rrj6k- zOUxD{V^nNKtR?m^o)PaCe9y1@RB!%6LT_jqBoAyedw{ zeQ_q<7(X0uj<>{5#?Qph3fV%gkSF8|{}4)r#X^}N6<|RwAVQ^}5%hvl@C!8pD{w+s z-~~Ytg=IpWuu51h)C;?XHlZ_-mKc#JOiWHJO6U^KL^N?E(VA#a+)6x5_DZHDdnYrK ze@W&hUrUZj<|T`g#mPy@$;qk7eC4Wg?N?uL=mb{VdNeyTLJI8~OCrr?x3Wk^+}Oet&1o+49JicYOf?N4>o4X=B(ZfxCz Vx`}_jL+R;%_MqE;_Wx&{?0;046(j%v literal 0 HcmV?d00001 diff --git a/interview/interview.xcodeproj/xcuserdata/saadahmed.xcuserdatad/xcschemes/xcschememanagement.plist b/interview/interview.xcodeproj/xcuserdata/saadahmed.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..a90b4e9 --- /dev/null +++ b/interview/interview.xcodeproj/xcuserdata/saadahmed.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + interview.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/interview/interview/AppDelegate.swift b/interview/interview/AppDelegate.swift new file mode 100644 index 0000000..13955ba --- /dev/null +++ b/interview/interview/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/interview/interview/Assets.xcassets/AccentColor.colorset/Contents.json b/interview/interview/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/interview/interview/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/interview/interview/Assets.xcassets/AppIcon.appiconset/Contents.json b/interview/interview/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/interview/interview/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/interview/interview/Assets.xcassets/Contents.json b/interview/interview/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/interview/interview/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/interview/interview/Base.lproj/LaunchScreen.storyboard b/interview/interview/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/interview/interview/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/interview/interview/Base.lproj/Main.storyboard b/interview/interview/Base.lproj/Main.storyboard new file mode 100644 index 0000000..5da8e01 --- /dev/null +++ b/interview/interview/Base.lproj/Main.storyboard @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/interview/interview/Cells/SongTableViewCell.swift b/interview/interview/Cells/SongTableViewCell.swift new file mode 100644 index 0000000..5ffc9cd --- /dev/null +++ b/interview/interview/Cells/SongTableViewCell.swift @@ -0,0 +1,45 @@ +// +// SongTableViewCell.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +import UIKit + +import UIKit + +class SongTableViewCell: UITableViewCell { + @IBOutlet weak var indexLabel: UILabel! + @IBOutlet weak var artworkImageView: UIImageView! + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var artistLabel: UILabel! + @IBOutlet weak var priceLabel: UILabel! + @IBOutlet weak var viewForPrice: UIView! + + func configure(with song: Song, index: Int) { + viewForPrice.layer.cornerRadius = 6 + viewForPrice.layer.borderWidth = 1 + viewForPrice.layer.borderColor = UIColor.blue.cgColor + viewForPrice.clipsToBounds = true + indexLabel.text = "\(index + 1)" + titleLabel.text = song.trackName + artistLabel.text = song.artistName + if let price = song.trackPrice, let currency = song.currency { + priceLabel.text = "$\(price)" + } else { + priceLabel.text = "" + } + + if let urlString = song.artworkUrl100, let url = URL(string: urlString) { + // For now use async image load (better with SDWebImage or Kingfisher) + DispatchQueue.global().async { + if let data = try? Data(contentsOf: url) { + DispatchQueue.main.async { + self.artworkImageView.image = UIImage(data: data) + } + } + } + } + } +} diff --git a/interview/interview/Cells/SongTableViewCell.xib b/interview/interview/Cells/SongTableViewCell.xib new file mode 100644 index 0000000..a007935 --- /dev/null +++ b/interview/interview/Cells/SongTableViewCell.xib @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/interview/interview/Info.plist b/interview/interview/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/interview/interview/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/interview/interview/Model/Song.swift b/interview/interview/Model/Song.swift new file mode 100644 index 0000000..2e0fc2c --- /dev/null +++ b/interview/interview/Model/Song.swift @@ -0,0 +1,19 @@ +// +// Song.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +struct SearchResponse: Codable { + let results: [Song] +} + +struct Song: Codable { + let trackName: String? + let artistName: String? + let artworkUrl100: String? + let collectionName: String? + let trackPrice: Double? + let currency: String? +} diff --git a/interview/interview/Networking/APIService.swift b/interview/interview/Networking/APIService.swift new file mode 100644 index 0000000..7513ad1 --- /dev/null +++ b/interview/interview/Networking/APIService.swift @@ -0,0 +1,31 @@ +// +// APIService.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +import Foundation + +class APIService { + func fetchSongs(completion: @escaping (Result<[Song], Error>) -> Void) { + let urlString = "https://itunes.apple.com/search?term=soft&media=music" + guard let url = URL(string: urlString) else { return } + + URLSession.shared.dataTask(with: url) { data, _, error in + if let error = error { + completion(.failure(error)) + return + } + + guard let data = data else { return } + + do { + let response = try JSONDecoder().decode(SearchResponse.self, from: data) + completion(.success(response.results)) + } catch { + completion(.failure(error)) + } + }.resume() + } +} diff --git a/interview/interview/SceneDelegate.swift b/interview/interview/SceneDelegate.swift new file mode 100644 index 0000000..708b780 --- /dev/null +++ b/interview/interview/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/interview/interview/ViewController.swift b/interview/interview/ViewController.swift new file mode 100644 index 0000000..1604385 --- /dev/null +++ b/interview/interview/ViewController.swift @@ -0,0 +1,42 @@ +// +// ViewController.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +import UIKit + +class SongsViewController: UIViewController { + @IBOutlet weak var tableView: UITableView! + + private let viewModel = SongsViewModel() + + override func viewDidLoad() { + super.viewDidLoad() + title = "Songs" + let nib = UINib(nibName: "SongTableViewCell", bundle: nil) + tableView.register(nib, forCellReuseIdentifier: "SongCell") + tableView.dataSource = self + tableView.rowHeight = 70 + + viewModel.fetchSongs { [weak self] in + self?.tableView.reloadData() + } + } +} + +extension SongsViewController: UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return viewModel.songs.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: "SongCell", for: indexPath) as? SongTableViewCell else { + return UITableViewCell() + } + let song = viewModel.songs[indexPath.row] + cell.configure(with: song, index: indexPath.row) + return cell + } +} diff --git a/interview/interview/ViewModel/SongsViewModel.swift b/interview/interview/ViewModel/SongsViewModel.swift new file mode 100644 index 0000000..d70f793 --- /dev/null +++ b/interview/interview/ViewModel/SongsViewModel.swift @@ -0,0 +1,26 @@ +// +// SongsViewModel.swift +// interview +// +// Created by Saad Ahmed on 11/09/2025. +// + +import Foundation + + +class SongsViewModel { + private let apiService = APIService() + var songs: [Song] = [] + + func fetchSongs(completion: @escaping () -> Void) { + apiService.fetchSongs { [weak self] result in + switch result { + case .success(let songs): + self?.songs = songs + DispatchQueue.main.async { completion() } + case .failure(let error): + print("Error fetching songs:", error) + } + } + } +}