From 238a574645e428dcff17b74ea8e80ada77987aa2 Mon Sep 17 00:00:00 2001 From: Steveice10 <1269164+Steveice10@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:40:53 -0700 Subject: [PATCH] qt: Add support for building for iOS. (#6594) --- CMakeLists.txt | 28 +++++-- CMakeModules/DownloadExternals.cmake | 32 ++++++-- CMakeModules/GenerateBuildInfo.cmake | 54 ++++++++++++++ CMakeModules/GenerateSCMRev.cmake | 54 +------------- .../Info.plist => dist/apple/Info.plist.in | 70 +++++++++--------- dist/apple/LaunchScreen.storyboard | 42 +++++++++++ dist/{ => apple}/citra.icns | Bin dist/apple/launch_logo.png | Bin 0 -> 90441 bytes externals/CMakeLists.txt | 1 + externals/libressl | 2 +- src/CMakeLists.txt | 13 +++- src/citra_qt/CMakeLists.txt | 47 ++++++++++-- src/citra_qt/bootmanager.cpp | 2 +- src/citra_qt/main.cpp | 30 ++++++-- src/citra_qt/main.h | 15 +++- src/common/common_paths.h | 7 +- src/common/file_util.cpp | 2 +- 17 files changed, 277 insertions(+), 122 deletions(-) create mode 100644 CMakeModules/GenerateBuildInfo.cmake rename src/citra_qt/Info.plist => dist/apple/Info.plist.in (65%) create mode 100644 dist/apple/LaunchScreen.storyboard rename dist/{ => apple}/citra.icns (100%) create mode 100644 dist/apple/launch_logo.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 82d99ca7b..12eae712f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,24 +15,35 @@ project(citra LANGUAGES C CXX ASM) if (APPLE) enable_language(OBJC) + if (IOS) + # Enable searching CMAKE_PREFIX_PATH for bundled dependencies. + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) + endif() endif() option(ENABLE_LTO "Enable link time optimization" OFF) -option(ENABLE_SDL2 "Enable the SDL2 frontend" ON) +option(ENABLE_SDL2 "Enable using SDL2" ON) +CMAKE_DEPENDENT_OPTION(ENABLE_SDL2_FRONTEND "Enable the SDL2 frontend" ON "ENABLE_SDL2;NOT ANDROID AND NOT IOS" OFF) option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF) # Set bundled qt as dependent options. option(ENABLE_QT "Enable the Qt frontend" ON) option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF) +CMAKE_DEPENDENT_OPTION(ENABLE_QT_UPDATER "Enable built-in updater for the Qt frontend" ON "NOT IOS" OFF) CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" ON "ENABLE_QT;MSVC OR APPLE" OFF) +CMAKE_DEPENDENT_OPTION(ENABLE_TESTS "Enable generating tests executable" ON "NOT IOS" OFF) +CMAKE_DEPENDENT_OPTION(ENABLE_DEDICATED_ROOM "Enable generating dedicated room executable" ON "NOT ANDROID AND NOT IOS" OFF) + option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) if (MSVC) set(OPENSSL_DLL_DIR "" CACHE PATH "Location of the Openssl dlls") endif() -option(ENABLE_CUBEB "Enables the cubeb audio backend" ON) +CMAKE_DEPENDENT_OPTION(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT IOS" OFF) option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON) CMAKE_DEPENDENT_OPTION(ENABLE_LIBUSB "Enable libusb for GameCube Adapter support" ON "NOT IOS" OFF) @@ -205,8 +216,7 @@ find_package(Threads REQUIRED) if (ENABLE_QT) if (CITRA_USE_BUNDLED_QT) - download_qt_external(6.5.0 QT_PREFIX) - list(APPEND CMAKE_PREFIX_PATH ${QT_PREFIX}) + download_qt_external(6.5.0) endif() find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia Concurrent) @@ -290,10 +300,14 @@ if (APPLE) find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.") - # Umbrella framework for everything GUI-related - find_library(COCOA_LIBRARY Cocoa REQUIRED) + if (NOT IOS) + # Umbrella framework for everything GUI-related + find_library(COCOA_LIBRARY Cocoa REQUIRED) + endif() + find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED) - set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${MOLTENVK_LIBRARY}) + find_library(IOSURFACE_LIBRARY IOSurface REQUIRED) + set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY} ${MOLTENVK_LIBRARY}) elseif (WIN32) set(PLATFORM_LIBRARIES winmm ws2_32) if (MINGW) diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake index 99bce5aeb..ec9a524a7 100644 --- a/CMakeModules/DownloadExternals.cmake +++ b/CMakeModules/DownloadExternals.cmake @@ -36,10 +36,11 @@ endfunction() # Params: # target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool. # prefix_var: Name of a variable which will be set with the path to the extracted contents. -function(download_qt_external target prefix_var) +function(download_qt_external target) # Determine installation parameters for OS, architecture, and compiler if (WIN32) set(host "windows") + set(type "desktop") if (MINGW) set(arch_path "mingw81") elseif ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND "x86_64" IN_LIST ARCHITECTURE) @@ -56,10 +57,19 @@ function(download_qt_external target prefix_var) set(arch "win64_${arch_path}") elseif (APPLE) set(host "mac") - set(arch "clang_64") - set(arch_path "macos") + if (IOS) + set(type "ios") + set(arch "ios") + set(arch_path "ios") + set(host_arch_path "macos") + else() + set(type "desktop") + set(arch "clang_64") + set(arch_path "macos") + endif() else() set(host "linux") + set(type "desktop") set(arch "gcc_64") set(arch_path "linux") endif() @@ -72,7 +82,11 @@ function(download_qt_external target prefix_var) set(install_args install-tool --outputdir ${base_path} ${host} desktop ${target}) else() set(prefix "${base_path}/${target}/${arch_path}") - set(install_args install-qt --outputdir ${base_path} ${host} desktop ${target} ${arch} -m qtmultimedia) + if (host_arch_path) + set(host_flag "--autodesktop") + set(host_prefix "${base_path}/${target}/${host_arch_path}") + endif() + set(install_args install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} ${host_flag} -m qtmultimedia) endif() if (NOT EXISTS "${prefix}") @@ -97,7 +111,15 @@ function(download_qt_external target prefix_var) endif() message(STATUS "Using downloaded Qt binaries at ${prefix}") - set(${prefix_var} "${prefix}" PARENT_SCOPE) + + # Add the Qt prefix path so CMake can locate it. + list(APPEND CMAKE_PREFIX_PATH "${prefix}") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) + + if (DEFINED host_prefix) + message(STATUS "Using downloaded host Qt binaries at ${host_prefix}") + set(QT_HOST_PATH "${host_prefix}" CACHE STRING "") + endif() endfunction() function(download_moltenvk) diff --git a/CMakeModules/GenerateBuildInfo.cmake b/CMakeModules/GenerateBuildInfo.cmake new file mode 100644 index 000000000..4ef472598 --- /dev/null +++ b/CMakeModules/GenerateBuildInfo.cmake @@ -0,0 +1,54 @@ +# Gets a UTC timstamp and sets the provided variable to it +function(get_timestamp _var) + string(TIMESTAMP timestamp UTC) + set(${_var} "${timestamp}" PARENT_SCOPE) +endfunction() + +list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules") + +# Find the package here with the known path so that the GetGit commands can find it as well +find_package(Git QUIET PATHS "${GIT_EXECUTABLE}") + +# generate git/build information +include(GetGitRevisionDescription) +get_git_head_revision(GIT_REF_SPEC GIT_REV) +string(SUBSTRING "${GIT_REV}" 0 7 GIT_SHORT_REV) +git_describe(GIT_DESC --always --long --dirty) +git_branch_name(GIT_BRANCH) +get_timestamp(BUILD_DATE) + +# Generate cpp with Git revision from template +# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well +set(REPO_NAME "") +set(BUILD_VERSION "0") +set(BUILD_FULLNAME "${GIT_SHORT_REV}") +if (DEFINED ENV{CI}) + if (DEFINED ENV{GITHUB_ACTIONS}) + set(BUILD_REPOSITORY $ENV{GITHUB_REPOSITORY}) + set(BUILD_TAG $ENV{GITHUB_REF_NAME}) + endif() + + # regex capture the string nightly or canary into CMAKE_MATCH_1 + string(REGEX MATCH "citra-emu/citra-?(.*)" OUTVAR ${BUILD_REPOSITORY}) + if ("${CMAKE_MATCH_COUNT}" GREATER 0) + # capitalize the first letter of each word in the repo name. + string(REPLACE "-" ";" REPO_NAME_LIST ${CMAKE_MATCH_1}) + foreach(WORD ${REPO_NAME_LIST}) + string(SUBSTRING ${WORD} 0 1 FIRST_LETTER) + string(SUBSTRING ${WORD} 1 -1 REMAINDER) + string(TOUPPER ${FIRST_LETTER} FIRST_LETTER) + set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}") + endforeach() + string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG}) + if (${CMAKE_MATCH_COUNT} GREATER 0) + set(BUILD_VERSION ${CMAKE_MATCH_1}) + endif() + if (BUILD_VERSION) + # This leaves a trailing space on the last word, but we actually want that + # because of how it's styled in the title bar. + set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ") + else() + set(BUILD_FULLNAME "") + endif() + endif() +endif() diff --git a/CMakeModules/GenerateSCMRev.cmake b/CMakeModules/GenerateSCMRev.cmake index 2dc409881..f0c8e7da6 100644 --- a/CMakeModules/GenerateSCMRev.cmake +++ b/CMakeModules/GenerateSCMRev.cmake @@ -1,55 +1,5 @@ -# Gets a UTC timstamp and sets the provided variable to it -function(get_timestamp _var) - string(TIMESTAMP timestamp UTC) - set(${_var} "${timestamp}" PARENT_SCOPE) -endfunction() - -list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules") - -# Find the package here with the known path so that the GetGit commands can find it as well -find_package(Git QUIET PATHS "${GIT_EXECUTABLE}") - -# generate git/build information -include(GetGitRevisionDescription) -get_git_head_revision(GIT_REF_SPEC GIT_REV) -git_describe(GIT_DESC --always --long --dirty) -git_branch_name(GIT_BRANCH) -get_timestamp(BUILD_DATE) - -# Generate cpp with Git revision from template -# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well -set(REPO_NAME "") -set(BUILD_VERSION "0") -if (DEFINED ENV{CI}) - if (DEFINED ENV{GITHUB_ACTIONS}) - set(BUILD_REPOSITORY $ENV{GITHUB_REPOSITORY}) - set(BUILD_TAG $ENV{GITHUB_REF_NAME}) - endif() - - # regex capture the string nightly or canary into CMAKE_MATCH_1 - string(REGEX MATCH "citra-emu/citra-?(.*)" OUTVAR ${BUILD_REPOSITORY}) - if ("${CMAKE_MATCH_COUNT}" GREATER 0) - # capitalize the first letter of each word in the repo name. - string(REPLACE "-" ";" REPO_NAME_LIST ${CMAKE_MATCH_1}) - foreach(WORD ${REPO_NAME_LIST}) - string(SUBSTRING ${WORD} 0 1 FIRST_LETTER) - string(SUBSTRING ${WORD} 1 -1 REMAINDER) - string(TOUPPER ${FIRST_LETTER} FIRST_LETTER) - set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}") - endforeach() - string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG}) - if (${CMAKE_MATCH_COUNT} GREATER 0) - set(BUILD_VERSION ${CMAKE_MATCH_1}) - endif() - if (BUILD_VERSION) - # This leaves a trailing space on the last word, but we actually want that - # because of how it's styled in the title bar. - set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ") - else() - set(BUILD_FULLNAME "") - endif() - endif() -endif() +list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/CMakeModules") +include(GenerateBuildInfo) # The variable SRC_DIR must be passed into the script (since it uses the current build directory for all values of CMAKE_*_DIR) set(VIDEO_CORE "${SRC_DIR}/src/video_core") diff --git a/src/citra_qt/Info.plist b/dist/apple/Info.plist.in similarity index 65% rename from src/citra_qt/Info.plist rename to dist/apple/Info.plist.in index 5ab69f3d0..7eb580925 100644 --- a/src/citra_qt/Info.plist +++ b/dist/apple/Info.plist.in @@ -2,45 +2,49 @@ - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleGetInfoString - - CFBundleIconFile - citra.icns - CFBundleIdentifier - com.citra-emu.citra - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLongVersionString - + CFBundleName - Citra - CFBundlePackageType - APPL - CFBundleShortVersionString - - CFBundleSignature - ???? + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} CFBundleVersion - - CSResourcesFileMapped - - LSRequiresCarbon - + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} NSHumanReadableCopyright - - NSPrincipalClass - NSApplication - NSHighResolutionCapable - True + ${MACOSX_BUNDLE_COPYRIGHT} + + LSApplicationCategoryType + public.app-category.games NSCameraUsageDescription This app requires camera access to emulate the 3DS's cameras. NSMicrophoneUsageDescription This app requires microphone access to emulate the 3DS's microphone. - LSApplicationCategoryType - public.app-category.games + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleDevelopmentRegion + English + CFBundleSignature + ???? + CSResourcesFileMapped + + LSSupportsOpeningDocumentsInPlace + + NSHighResolutionCapable + True + UIFileSharingEnabled + + UILaunchStoryboardName + LaunchScreen diff --git a/dist/apple/LaunchScreen.storyboard b/dist/apple/LaunchScreen.storyboard new file mode 100644 index 000000000..56829a36f --- /dev/null +++ b/dist/apple/LaunchScreen.storyboard @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/citra.icns b/dist/apple/citra.icns similarity index 100% rename from dist/citra.icns rename to dist/apple/citra.icns diff --git a/dist/apple/launch_logo.png b/dist/apple/launch_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5217a1c27b9b877202b4e43ef86c5a274be8fa5b GIT binary patch literal 90441 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 @Tx_F>-=Q+RAsI#+GQn9FE^n|yb4ez7vweupH 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∾mvGex6hkYgTJfQU; zk%rAAulhRN&zXCMBJ|WpAqT_!3O4y!_R9E!GN>U^4uJovy?={Bo zFKeTYULHY8tqeBJ_34k@NdzQ!?oVUs$AE_p8c=Ls)bTDx4~FI8UR!oq`vBlmb?1D+ z#u+sj3~jtK{2PtEev3aymO!|8g?MJ(alS44)L7=m;Vg*X{HOYU^~7_&MLD8$ zM&AYhHgVRSt+=w0n+`5DPYivo7=Up)hAq2nTGGgPJQg~5n*}|04VbO0v9qIO>rqd@=I4C_QWTYrp^4CblIOa(Lg1> zL%zc{CSZOa#*H!Xv<@R@lWmHdlW2Qweg1>mcsW**?u&CP{qb&=>De*+Nh;;C=W<WU&*z%r1DSYn{70Vj?mvt*XX^95qftx0! zDm1n(#`|d#nuVm#gBoBVXWhds782dY#!uU>9uBt@rVpP2B2`KLSTIiQDKy0#1L5AS zTP8^V)r&%RsuN^h{rU6X(h_Q!*#I_wn}}6O(z*%M`;BCxveYh(^_fnWKi+s(sf_2qOnVXkm^I znYS3N&jjZ>mtTFli+B}`(ZW~i-L7Hg@yP&jo}5tr$ICB`1^k~K*GTSa!VJJlkW-Sh znRKS1S>Jnibj|Dttztw-E*_xJ;wX5fs1*-B#W3#|1 z)QX~Wd~TjY_+$!>#=EK#%s+_O&jH!)k2~`bagVVsD<>ss(-o!M)<{Xoy+4>#9{vTF zoj-mxIm@fu1Xq&z%gw%YA|V7c_Vpk^=DQwt{nlcbfqtB)h78C5;#2!!;+2!PR|FZ! z);xQ-b$j_`PR1{bMwfmtdHZ%uN(GBHg%FFw!W%$N|J^F~W6~KTgg7UX@k!eCeMw;! zKo%&J`)I)uL<$DNL(*9BK=J#=`OKa@s6}l;r0<%+(Y;@uOvHNu9b7Fw_X7MZan&Wh zbvFaSH7WcEUQJi`RmNyaKhWSK&d@%7quH*dHsU8sT7TYn&Q{i1~rS*Kn%3VcR@)rHG6@FJbGzq`=(g&15#1=W=QZm4`NAV16eblJ)Dy3kw&ti^Tv3(WJwxhBQc3NmQlu>{rh=`3(faGG;g~Z+d zCyhoijN$NDSYndl3@Z}FhjE8#|2FeMGoOymImwiAq_t&dy_>gzlpJ=|UThi)9*)v% z>3%vdQVLDyVSV*~{ujX3SZ!7_$c!1ezpm1xyiiCWGlegE^e zM0_Yv&rq*V7!tnn_u(=IN;?W97{o8}HO<4qYONMq<;@v317UgHuq^kyOC!4iqDzWj zJ>P4Eu~2$p`)@bmO}+SBlnUtXc1>|mMKeiH#mP7*%^avrOW%LajS9narsEHN%`f22 z*3RM=QjM^qW=SYD#zQ}G45H4hrfAnV!zCfcxvxDrpY9e!IJ*L{?ng}2({JN0GDTQTN78eqJWn*i#o9g}5OQaGXA*#K3#Ok#eqKyi3eL zfh9@yb$Shv-wa^HdM4$0?T_^?^^v;H79$W1#kg?X2jpP#HLr)?XQGhT_bH{9(6Eu4 zJ-x3taoeY#lXcXMLks+HDP%X*m-xhDlD(g1b*eriuPk49rgv^@Y>nMIRdB&MWs)W9 zT=r(*af;D&tReyh%;6qUF!H1KI^CsuEri#b{yRN)zm(%4tF7JFq5$PAc@z~`QC`Oo zf-*uHuH=&{>-tSE`Q`lXx}vr%gcL~XD4<9=#Z_TFR< zA?>XHUjPO{`M$KJp41i*ny&CKoM9Q5Np$3`$I-bmbX(}fR<`ZX$5AgP*Pn^tk7eq# z2~F#M1b^Q7-`r_GMQ0_~wlw-KTG|_vy69qP(m*!w>!to4f`8*~?B@Rn?)dk|hFNSB zWbkKlZ7aJSXo>%urAu>l(5mZ2(@4F8R)7hm(Du6mfaU+zs$1JiLb)t>R@l3ESrM>+ zb|2*KKROm<>R2&AJB+fHm7fL11fp^EAAqPVakd@1aeTZo6TG5a9zfvdDa41P@65$8 z>_jbWd|8PNPODEEyrtoV+i@{ctA)2O+IYOssWReKFww!GLF!U!`n0->i)$0cMA^Ok ztZPx5G`;9$$&`k(1RUDJ( zU?X4+6X5B~&N1VU!$h~bL?>PBs`C>7*CVso#>un*>c4~hl36sPJk_m9+_fBsCCi_d zCo@h`c1c;Kv>f8&QVn~M#(xG(T0iiL-{jw8@V&HK0(Gb^brbXm>5@w&F&*lnOVL-~2Z8^e zkY5d=wEm{Z*m?o3ng77EeQp+$jw`!dd)#)4=q{AY>$bZX6u_l*+lth>Rk~vPMB;>$ zTMqb_AB8*Y9{o)9cw?e@<*9*12+;Qai+Ai|EAG~5d(gyRdw&KHBRdc_zz2WO4pOu# zKwc*HhZ${t7MQ7V^&f3n;h#sw>GBhRIIqkC48fn)56%U9XN$7pVOFv`Ith={M2cGoP#x=gXr)vs+! zs(0|j$kwW*9?5zfmi@6)-E1S6m=dc*Q?J4R`MVfg49IcN#nTe-zyDPhHiY{cit@wzUVccr~qCcX>5F4X5c?PorIav`byAef=*?bKSZ~ zMeuB&Duc;@-Pp&vyxzwX%M#%bg;fiJ)?jYH6E9^I0G|cs_W+vr-ep>wH{j)u%Jz20 zE|d5PK(W(hAk+x{D6plYFwHOAcZJlw%tGFZ(V7?|8Lg7FHq6#bWSl}ECb zUJdJ|P97$)HE6Z}7G42xWNEqm)U^-V)}`3}aNPOxE;eJ3o5pkPM#d@;?dI4zY^i<- zf|w8(EP(U?VUMIu_lDe{}RmYr+i^*81n;~(64sKKOh~e01+;< zJ!Tca;H!XUx@H>J|H+I$;;C7kEDL`S;><#91jMpzJB8a5+5lgx)&n>wyFlZ)$fFVb zr*6k#T#m9#UaiiRt8s2UjW!Q%o5y1EwYMuZ ze|ys^)4CCl#YGq0%eu5fNp?x!MtPZ2fiR@8g;?eU1QpLF?2rio7~NRmL^!YY8>*hif_ z*?^Gce!9e(68VM!KL08JCllNV$ke!cz$>IyOUIvs(ZchkcJdQ|wl6BJA^0B%g=Zu0 zRjJ}ZDcgLhF*jpSoLN064Q;vh!VH^IkIL}Mls3tvUbu8*34ff-ESSc#&J@XuMiT`K zNCLW|&y*oAlCAX=sXKkAAzEf!+rl1#;C~KkyRwy>nx|l*_;$#Ip1c7qSz0`X_A1xL z69JlsZtQ6Y{3oDqPe>G#ikQ3r`(eI-l`(9FyZlD2>uu)?Xv%f1b-}p^3K1? z;Lj^flGKw*(k0;%;bG*6!}kIc9a=Ts zt#Hc6LY58wy9p$|Z2lIT{$2`P7zjD?7D;isi|}XCiai(}#}QYKwhgM_hbb|6E$Pt$EXMnvV4}+Cku!KLr!AJzOjD zw{Q5RX|Bd&7}}=XX#>55g+SKB^OM2bCcp@8r}i?x{kdQugwzt+nMKHB<>AEzP68U3 z1l)LeTg>2VegZIfAE#?T@W=Y7IS09qvo~EwrPwW3;LiWqIGG<9yjr>H+>)9t440jY zlXgTSv}vWf_~ZEEVALbJq||g$w}T1o3~hC3MNS8NJ8~CDY62i!9r6T-vJ39?oupkf z4nOfVENG3Li^}c_8B=XtgFAoTxpnMC3j7g6-Zx0wo?969T#O%!z>jl#(T^}%<9UCP z#835Z{;n~r{stfJ`3FpPe&6Xs%5v>0+D@}4OI8tHP3y|lxFYp5IeBqAzP^aYF52dW zpSO4OcK#h+i?R?U%l$k?+8lc)4_d+k+VC2tbY3g-s|NRJt&&P$3Fj?e4 zETb@Wq$S!Gnwv&e2v^$%f&VqQvwRQyv}Yk!OWeYa{!QP)QvZKqLVQ;@ziV^RwwCDn zDoa)eFB*A$=gQ41Cyh_bu!fMhKpMy1lI@;XfWaYMeGNV|c?mS***&7Vbp__kVuf7= zAPe>a*l=$V;khY(1B_r<6_D=&MBM?MoiK!K_K`q%ZnKEK2k;k64y#KCA_jH53E(FH z6*(V{=WPTx{AKKns>q;z)oi({+Td?5!q8}`N2Oeqz(+8Lmdzww1P|pzZAXR+Pm`%} z92JB&6q(u9biGUfv_4(ea?|RXC#g>U+JkV1d@d?k3tC%o=l=qXnAilDmfXOWMq3t+ zKhQJrX5_b_KN)W=#OZ9@icNi=L-0Qd{o9DFi0Hetwj#}}cFBU^GA2x}+%!YdXsg2Q zcpQ#X(S0%PPPH!ntbMQFUV}U~$nr{`g<&!vs{lmXQ!-=^CI^7xy8y(6%(jSl?5v=T z=OlxB0hnY`P^$+sj^@f6+R6fwLH=dD$85d*)4+ZLFi3ZYvJw0ri7JEt4i%^yyo#;Y z1KA{b-}eFS4AOd6L4s~4R!D#5DSVM~`j z$JQ=909qFDwY?Gi&q5{ZZW*$t-+)2zB65|NXis?9QiUeb)%HWs$4117*MogYs)$(R z^q&#Qw*<^!Az|-u722Y-4SKzYDN=vuWP9($sg} zi;}8Hn6di_KoyR*IuQIHjmnwGJ=|JUW@dgxlh@aHpK4>>w9*%1blp-aAI9Px9?QR9c;~;5 zm5};p=0q%s{~(p513Bnbfcl{b`tQba|I47ZhkKx@3lRAK13y>Hj~s=*3lF*N2mMoK z+X@Z;bjgOIq*Z_}TF0(5xp{G#uID z>ZE#WLTCrUm<)6TdZNM*)a z0O|W+Tb5vqxR59T}l~zi4>TWaj;mNT#;5ow;bU~ zD?4z!@EvS(qJW`jEG`5bHSnB7av5#;i zm(3p|_uO@mJti zzH{v;+D^0Gl~o08n$D_my1zTWL$`|6o71Ls@qb4{g$?kK5Uc{A!hZ3PhKJP#YzqrE z{#m@N6oQ6$JNHulux|kn4lyDpQb-tqA$<*R0#IDzx=SslqCXGPdWu{Dn$OoWJb>VT zBuF?)EXyFB8)&}bck}bH(ur4Rs!DQUNlCp@mog5P8)q-mZkfVgv{V;&WT&>zt;e;y zUjMR5TU9oiZk?v1cyGytN6yfcng%NpI0hG!)QaDY{S=p3*x z5QL8sM3!w+4frizD5r)m0&)`3xB-uns!JU!0Db~60LLTv;}=jyDERY-N^Zq+>14(R zt^xQm3SPW`B-uKzOaY*jx?7UOh1s@Tg`tdCnj~Hqo?#1BhImtW_O{?`W2_-p$W7vIDq zuFYRX{sIPc_0~c^_Pe}pJI%_nXw&2j6E4mdyZ=iZG$#x{z;nT;?di_b&)&VG(zy!I z-U~oi*d!I_>wx@Hpak|n7KCv!z@#S@oD5j7)f!C>>_mXy0zhiqb&D-4`tu;I$4>yX zH%h1@_&*$C_;7GE?)>SKJKl(Ap69VvU6Kn=Ym8vHn4~Uc9G%8V-7U%I!V0yOEpf6m zEUoV1*k&rc0gz0X07#O)NSkFGEDK+MI{2`8D%WX^pg;X$jIQ@-sm1GgR{_``j;~BL z{ItgSn~;0l(LZw)g8rBAeE++Ui8mLrlGaVyqHQfdi#Lr{rll zm|VM-JrzGF$wk#3)Agqqb1%NU7e@YYQ9pGRfSPP9*QT)^oolRzNEB8ynOF}?3gBcx zzRn#XWU|0Xz^09+we~(!Td@xPx3Kd*xDOb8E=aqDqy4XY!d6-~96 z6$7y;Nmd+QV724m_pgIi8`14Q9NW2>@^U_eQ>ncE^kq1p8Ff0|@>Hf`_9=(Ra3rs;Z8jule2ip6c|8Cb@Xn zmb#Sss*7N8bV)E?kx94!)umJPbd>7q*Kl1IJsRfL^PNN-GoVF{ip48WV@BVK;-!yN(+-kPL-|FGk zzc8_l96Z-YNd)iQL%0Q4m@u#m`N_v7%Sd2=Paj7@V*3~XKMj2IU&vHd+DjDqM*!l9 zK1u|C&ZvHayjve)hL80g+!0mriQl-M^Wu{vbtws#x|F$K;YBArZW$-TrLk?uiG?e> z;$&$U>r5giXa#>YY-~S`>A$XJ$4QIuOM}2)<8%C+sfADH&irFe;(o{$;3)?lF^vBc zY~-R_(bT}!1iYQF1?TrPmi#5L?|Kk-+d>yty0mUPjz?fcXoV-POj`v=(~*XY(^C}I zul(IkD5|l8zV*9*$8imw@7uqq%PK%{{o$a?k~~iUAg#&axnS?wDbb=3_`|z=J3$}~ zCkvDxGLha+1_DvR%z(ta^OqF*B=}{(mVFgaP!*JWiVi;k5Kr`2BKXsp=OORYqln>T zYi`8S|H;+c#tTDISDjasAW=$PN}{ALWnNesz2I!AZ0LX&(5-E9>ul>(-(RxEbd$ZbFMnAM^ax`ubb=PjKBMqnN(&||{^a5lq!HVIhAS zT_%oKacEiIlH@|0R*!J1pM=%-<=^;CBHuFl1Znwn9 zD*;r0FakeT7RFx>VM~e&$Q$rz?O?oW6Bh_retTj!pLXhO4sxYcA3>`DwUZ!aI02JM^3oi*}GoWP(RuQ6&eSmQ? z5j+nFWs;Ytmz-kJtb+(7{4PLiGu{N)y4lng^)SH=q!jrZO#tdexIAs(0UY4vsPWGK zppo@SW9{s8&0bWY>Zr~O)`g)hFm0)ZN!`xA9e%+PEOobxa54H_+PHQW%-Y3K0g1Fa zTNswP-Me|hGZXHd`0<hXPXw&4R;W~_Q8v0y!P+dOI_+Isu zEkoqhml?C`@zUz4teyKIdsiNHO?*QDFT3#4i>^BYB4VWyu<)^ez(X3L6FIgW3KY3k zgpw&dDD7%O$Wt4`Bmye~t^4j!N(Wl?j{tggFM|JK@ScMF@Lpxi3BHLvsx?zC4r)!R zi$!txIGB|cUX5}1G*}*-&}5amPnK4V5W*YRx3Px_w0JpjVsKa9T9wXQdo%*>x8d`H z)9GTd7`0~J1xzCrTL@S?0Cv0;laSYfZJR=@5pnZYyubem-1VbB?gxk>qO=N+OL#z7 zsKaEzx~;|ZLz^b244jtHYu)W%uX6J6iLPDWkMp6(V<<=X9T%A9trsECLST4Ut!UPf zqptwkIzWUYktRq8%HXwNoaO@OM8MWNRsq04LL#Cv@C&GAj#_$TPP#M}HJQSuDl2aqPTh-jPe97rG~LCN#iXHx&S2&cBgw?2*`LW=kU;C&?q&Ge^ic%`DDqar@a{i)XiwQpNgMNs zvij9A7aq$OoC(>R0VycRR-BaqfE7+bNPtC$Cb;Pjz}N#o-o`yEZM&jBJ44T^K5qdk zGIf^K;O_rzFyWtP*^KJdk8N+vf#(>r?cWYgx4zhPT{LP~R=oqyt1(Ohmy%$qOW6-h zWOS9G4FY#{xNx?kjO(-hP;v}!sy_`jW(?N#eG%~Ahh=^|Dwwzk^;esogMaIO1pW`; zcPaKm@c$$RO%?pLFQFkdxwLLuGpFG+T^02*Y$-!V-o6&q#f^Wv^FFJObj8WoOm~C5 zo3~OB_#-n=;az?ZsYOQ+d?TVRJm^FKOR4kH?r1yLy3mOlMt*@syaBAnw*Wxby#H>Y zuAuK)?w80Tpk+s>H%e~zz5pNv6#ufaG$E(|SQ!}8RHH;Fb4-^CML zn8FfWxLtIh5Lj2qOWMJ^G=dknZjbTVy+#l@Yzg*_{{*ARt6-SCItUo|6pY~+?!*Pi zH-hHlfE8RV&|T#&{>kGJ`1eQ2z`t2zL+;%)y08OK<8kc6L#--V%>B^`NO4n{5 z#rd*(?-tHrLioFnb@J0z$qcjMWl5r7G7#YH^1r=3Cq^fA9V_1UrK#}3=E{M7>oVad z9?8O3as_~}^*GO~OI!i)djQh>jo|-m;J<}D&nHSaRkz1HXuB5~^T7Y$3xVIoV0=E@ zqSmp{DxBmB(2Nm`7llG3)rF)3A6#G-C2%PTjH^d5r8j~po-~-?!V5go6Tz)T!5@LK zrRze%yX!fTmSYq-8J2zpgX?gFJl~-n0HOCItVBcdai4Nr{sIxlpJ$ zsV+t(;Wa!jt>%%sl-iawSXS_lR0BG5Tf!sZ%s8Hr!+o5n`4Y2NLxZ4cg* zP5*Jsl;pMr9#^K(rs3jb<$ANN_C?=`L8e-<*h z!0lfj37?75@;VQKKkE&&7vMb&6XQ+UlQ_6sc1M>7H*`+k2&Cz}rK+yiJ! zPF|!sCIF2_%`{itZpJE{0QBMU!0=K0i{Q_#$)_PN9mW2Y(kCv}?es2V9(qqdm%7J}JZ=HW49uI8_qN@0Xkv6J}c)-HT)ZzpWba2BTB3TGdN{XVk{-gxUdzAp zC}A+1!CnFz^lvWSZ~9mU*5ceL926=CFojH`%CMyj8QP{{t}lH&UPya;e-_^JXJfAT zmX#r^_O`*LcR4SD_4q&!z}CeA6MxI$j!IO*iRR;StK;T;U;by9uw1R5<1VA|(!JliGry%z?9aS>tWp%-R!D;|k1e(~Gv-$U! z4Ez@R2F^qMk2uSx^SMPX7E9Hc3<>PI+dQAdXRPbM$alq7BH zvGWO82?#~np+am>$0+zTG32ei*NUy+kA24IR{+|c{&!UQ%AZez^Z;l5+deDE)YHK3 z?#&nDx$hrP;zHhX2`)rT67+?aWsj!KQx|y=Ew5GqqKvD@!N?+TDdS**ODct@{uao4 zB3q-ITG%`~eLRl)_s~a-j`WEPi0rl7CQMQqPH4(3tJGJet}=b(%F@Tu#p(8n7vmx8 zt2Lx}eF~dJ&--ATk3M9g4GgaQydIO-WTP)&QCs0GjDJK(Sd~cynjJ~V$Rcb}i3+2C z82l+B`Z;1D2Re%Xq~i(zS=K$!p=N*$zXBl6#nL|?y1q}^zO2v#V|a~h+0j9!T71dN zOkIbGz(wJN0F#25TiOQ6g-1w79T$)!4HuX$H9k*Wcw=c3^a^e6^3izq{|V7Fg5?x~ z{#OwEKZL%;>vP@qH9&Lm2TSkO=~t5iKx4*}M1fyt8dfg1dYm?3{o+NQ$l92>CjY0wWLX;es=D z$Rwdw$GC^o+OXD^75woN0PFBp>nSKPGWj$V9^mu9g$D(B1@;gy&EO*6ibn;L%y{LH zW#gUzm-UwynWUoiynI=51)o?x3`_sNgtjH3akR?jsR;bowP#)*n9~9GUPC1&0I;P6on5 zW?|AMon%y_ATJXHvXR~PkADLpHc(p_{sc&1VjcrvW+0CNqDcdTJti8`rYTkiN^SrY z8|=q`sCzS3M5{?FaO2CPF@F;ra0q(;3*-g!*9&u?=i_@|4*~OY+s4kU3?>3o;lyD2 zYD@}lZR3M$H)yBU!z;SY*{-GXkqo>-BPGGQ&Nh?4I!f^K*ZRh=1K#Xx$wul=3&(~( z7u>v{yIb@_itD=>azM(ES%!=prp{XuzVf%U-)&Ynaejk02O9hVC>$_3W^T!-Ya=em z+B8YE z;JOU3Me8CnjxQ0m5P=_0o$CJr?oqo8*TDbp$Kdx(jA(qo89ISQFwTj`+GVe}wuJOr zn*4Om(Z(hnk3sZ$`SbDZkoWd4`7ihq>22o(OX!rwQ_P-N;dzEW*;?2PQ0yoGQdk=N zkqH7tkY3|S&Nji8o+P-V$8Ed718n=R+|g5x6{TcaDr+lhfLj#hT0+41v%oX>8sOH= z_@-7RtAWc#ZRBYmiIf_GKVSFzDe~SaWF9rwJis3lS$J5Gwe9?*?95Hbx8Sbf=3u3O zW%E{Kz*>_5HLplXNp->7%R6i&(F$BjlGpH7ME#Y>|BU+nk+jjMU?gi|aBg6b=TG%U zNk+H`5LDE0m%Nf zx7XoCC)XbQ5uGZG-l2b@fGs>AvQ;aH3IYM7i;~rgmXxT9oaoM9$>B49enQwz8Ysu| z;ZJBcn*`g>0i)4ccRwZom4v1x^Kt?JUvme_CM}a z??XnNKR4UL9)srHDDOvJ6=btHxKc$1uUbh-b>eHdnEBJb^=BgEE@&hdoe=P6UIRa! zhAd8D-;s4&p;D{8@}&wL0c0<}oULw)t@UkitA)p0-0<6PIu{e?&A2|9RLE8w@IAj~%%X$(@7*20Gv=!AbjlH1P_oL?%O+{dDQDaG6W(=q+_5u=OJY^X zQ0nuw9n6Iw#FLjG7WflQ0>mQVtSI6%E$Xzx$|W;j1w?ADS!Kp-ZQy_A*8~8;{~2)U zCkO7@`d`S?nlg$Ptl1hMA&u#R9hwj!{448dz`2RxSE1?7$?vH5O% z_n_UryoRlZ71@Ky0>9BeFTc~D;Nlh@tu&s3^JsMf!8`{CWBS~1!XRwj8Sm*Ye{ui) zpV?~6nQw+1$4CZFL|nU(PNNW2?JxIHGijK3m(9Y~@iz?oG8tebj$Y3r5r|v(zz?}B zPskji0(RUJLvd46CPPsljhF^0KtDh`1A+Jqy5-} z&$BoE9$(u#2REq~A?PFU&)m^Iop=&66)qRRbJ#b@AN#Qz@GvQ0eM}|@d!fE7s*A-ziKaZo}OkvZP3^Trpfu$I1ae^fA6S@;=D>hB>U;C2|qq%Q@|V7S6fW z6?3`^UB-u}avLruc^fkDT9*w2*VwI~UmF%5hNb_LAh!hn-F=BMmwcw%MuCW}C|RXO z3z9Yf7G~ROwIDPN@xiVZSRRo{2{vj+fItX>xRr%J9l@MBDL~j*50%GKx~yXfeSH65wP1{o7Erf&Kfn&abFdON3dPy$VdZ~tTymY104XkLM{sxS181Ir2#}@{1L{A%pg^mGL z?)+s8Lfe|jHiIu3QJWQe7anfXV-s{-ypO&bXmxRD1JuzMqO3g2X9bfs(7`g07Xqw4 z)R989*8bLJJf5v4&5IR)kHMGEsm7lbXldek{k>l{=DyG2dH$;4?4nwpUA-pZm9mH& zd**^6FK_b!*nKIo!z29m@xnteDPYFNA(mqgM#kd?pN7i=t!oBnPdIpHD#%NhDJX^@ zuk5^ZF)A`agOr`AJR~S$19$rGdm2^&@o2D&bm2#ElXG>pB#s}n6Q#YQm*8yM0CR#M z!C(3lMct4!q@^+&sKdK+E86~P(~-vN(_~nUzq{_+;45V6tvj)p7ANK@Uaa*uw ztD3Z6q*nlNBD@5Cd|x%b9IzJN;otvlWA6Sag6CcKM32?T6O~EIpjGT|8N5Yg2rbLT z${vs)7CfN*-X75s>-YnX(ZKz?N&|W{rj{iflH0Q(Lb9wsGzm^jAr8BsK0C1jp zL^C*Bya32g81a}ONFcVW2;>8?-4sYVCd)6OJ>;`+5Yy*Y5c$x=v|tHk}q; zw(Pv}=Bo|-4Uav)hc{rKrajPmoxA>j^=d4=bEz;p@$lHieH(p);LG7dHtEToIm=)+ z5SA#|wqTT24jL?luH&%+z;+TrJd(%_1b~Gr4g5zLRv3s-u~4)v+=46jpiQEBCafzw*D&k9)rF<9IgV3lY`2$qk*$H;%m8WgUThA*yFI`@}nl7(wO}Fc3@wtl^YAOBIe|vnsrTzc>eX(t1@NqD(E%! zVu$cZnWo$R?mQlq%=`))5<|lJZkP-lfyuz($d5+G#Nhw4_a=av997wH-)*)`CX+pr z1TqOBAtYf7BElyGWC^l~Y|0OWu=s(1h$0{^5djquMCB7d6%b^RO$ZQn5Cr^X2Z1Dn zB$It#XC|}W``+()s_Njn>utVq@5W!*J*=07bwZqQ#)NqDiqChmcRU594Z5;<2Nd2 z@p?aK5SH9^{9K<9GM(PDG61mk(@MtOKW>?`XSQ-$PT<8o==fiPMSkxJEpkMKbFCe* z#Rth|kQnk6Z&MEWh*$X%vv?f_1ehh@k2HM%et2DJ_F)(d;O=GmRIgvzHm`x1zeXFv zBbUx=@!OK{3kN5@8d_wPZGXnueQzr3F0~FntU5m&cj`x+TbEmNJHPdR{_}uuT0j#T zF7#rHD|XsJ3j=NJuw6Hd9=SLO@YDB1lU$4t(fK(g_2JH+82lVQWEgVtclqXf09H>2 zmoMXq5NO&*!VJJpX-Caxr$?Q`IOC)9=Pliv#+m0(^P0y8RW3Zscm7p@+3JQ(!-zS| z7^Sh?>6YGm`G}`cUP}x=;oJEN9vz&UWjjyD56`ssz8bo(!-z)StK_ zje47T9j;^#N8R%2TR0H$A&b*C7i+V!#Za!YS#009l19{bJXGLne>&@5n7ZHcdy`D#JCxxd#cmX!ST zeZlT=&K+?aGR&%QWk2WXsbg2|g1MMp&huhCr#E<~^Em74E=a+)I6s~3x#hrY>d+&z z1K-Y@kdf0HaU>_7(D`#F<9+yTp2)q~`c-uPPr-t!+xsg%+SRhAVU%x>81fabsw`oq zwxYv2FZ{4>VD@7;R}Zc7T(K2u0H@>>zu~}_aeh5m@OZ29ef&5W_!inbc!mLQig-~h zqbi&Aslr*Cm90PJDx1YFcigbb%D)qG3_9xdkFpU5mv7&aWnX;x;Bmrn$nVgR<|(bt zUV7?y7w+^9;14xL*S7~hCf(gU)x?Li(+8c4NgD?UAYzEk_0FlN*Z3iCU(A?3W#PrEY{HN` zTuH;QF|2I;^BA!*k*L!~MinySt@{OZ{_ppn`mTVsHt|)zPdyupb?<2H znsz{8(UTTBVBanKP8LpnK!AI3;4}ze?crt;TixYT!BBYSA7%j@#sj;)#1I-XbTZN; zKNo>5lr)pLf`Ar_lh#`tY#f`(9{}KhVJUL<$K$B2q35w3Q==C?0T(=U{>zovN|!SY zqkOe7a9VaS1CZT}-^#0mLv0THlgTrW^FIY%#7tP{$N1ri-U1#WbS?l#I)9xb0K)}U zZUx@d))ZF=9wnN_7$?pau`1stIR1gJLveS0_-oN`K^`{omA`BMdpJ>fE@OYW%lTb6 zBL_W2$}WjsxllDoc)j-*mLSIB*dWIfh&z6V4>pJA25HyXQy*ppoXvqvtUQ?aq`8}c z*Nu2PH_?v((D@&M3VIKId;~CAwBtwU{2z}-gsJBJja*9~@=gyUrecT}inxH26VJ3) zz9mqom60T-Hex`)*ER9W`y0F(#X$gP2*?*MgnSWxSNbB@i>Z}qwP`EIg?F~(!EYHO z4xC6=mBYdt<4VeHV^MA#FE}3XaQsETw`SSu5xrG?*=Mut+kX?6aI`3P?|h0|obpAmr&XHnB!1PV^%H%t=k) zANg^w`r(=XUOfBU--&0%uxS)AT^SL0>Xc!Zb|v1RH88avg93ik3BLl(V-Ro|1_hUb zIj@8n~(;S+b8eX#4GbxnXW*TZh_zFi53r$8Kpd@w*K5N%d(W66h)1xUHg z#tLzqjUeVhtlI<`>FH6{JM-<*WDWpu_kTL};SJsWm=LLhi_V4k;LI-Eow$}ZA?02v zCeF%7pcb$KdW9yW1~9ql{)*&D<}rdPdgod{7~p_lVG9NbSAgSjLg#95{P?#gNW3_g zQBzw}Tv_GlS*7k2GbkR;XgIYHvR_wkWW02D)AXq{q;Y=XU_j)&?sqtREIv+ zLjY^XRSQM~`t!g{=XdrwK-KJVwkqwyJ;ro*>|q4qaM-voVZ=e11K!{; z%AVZWG>UN6k!~h$0D#Va9jfF*_+d_Pk_boqXV1^FZT~e%g&u8Lc@pSM8CFiCh{*@h zGp`?330LAQhZ^ADir{bV7ZasHBkEl52Lv1pbgqJYMMy*M(l@{lvkW4(JCT*86K`s3 zic{PauZl6V39I@ahK?UMBnO;@^Kgup(@W3Kvj2W#s>H+7;kv@UnAaEG$wPDaxN7t7M({UhURf;cJg(}U z8!;&0Oafk8bTbN+@m!nf1q={6_$>g#wFoI<`)Wc}INpkis&MS^*J7} zDBt(z)PG@lymnx?oYleFaj)?~(m=rJk;rEQsBom^fk?p7;nh(Ggqt-$m!1EaVED>C zzq5xg^QA#~GOa`91}03)kyz)DGit^`ll2w=?*1`c&2Sq%VRXZL@aKI0JY8ruf^hKD zfIhUNh}lOmN?k@#zG1}diGh*$>|f&U|7E4SvSQd@YXEIy`Y8Xy1W_e*ZVQ6}toz}B zz|AgD<^bV(r12blo`VUu{%G&mFLI!-HIPB&g9tweh1;lO9Y+~Ppt-D zhu;DCtwFt@v*9a|e2<^M6)LZR>4Q;U_{}!B>t5W6s^?(fI{Yv&a03Q#E_UQQ_yvyR z!4BX3cnm_1QeKj!wS3{FS$6&R##jd2<-6V;O*-#{LkEmBYl|H-Pk)iS6gY$R@m6AK z;)XbN>hjNR!VyD!pb$1cN?jWzSot4fS1-?z@%f1u0HE{dLlN9YXUkw1+u~sC_$e0s zJq-a1)yT=R z{?EIz>_`7HzA}g2R!ub|(KhivC=0d#=-%nmYTn~V(tZ)p?nvQIo^A@v2r37-1`PD| z(Fq7}D#G6=$mTfM9t-WAhyehq;+6P4Y%EnWtW5Ue9si#^9#eZI(_MKB7*>Wujx)^i z4I|bdG2|;=R#j8SW6Ja`=(wI(hL~*qBA!oo{t9gpGaDHO0j!TY5~h-K76Esx8GegD z@)3LRoHFOaJJj*a-SIow-x2e!cm_H*(@?16#7@TLvY*qGR?MM z=(t1K0^CE8U|QsC!Pn`X?6e*S(W%^RJS9&K>kwUCJ}@vK_h}m#rdN$^0I;y^2LQPH zzbESGT-DP=@I_3Y{`71->)PU5ge^2%L$@7ROaJmPV=lK?{gg*O;#D>4Fud!+7<1LD zfW-9nzDS*aK*x{$TilAhiy9#7fF$lyL*62I2Lli;lH2?BZeFhbS7Bgq5{>}}1vuU3 z?u*}jFfcf7$YodwH})FXj)jpQ$8-OM-DA(18LCP1?w#%44g~lxfI4=@T9fEtP|J@o zbhAe{v4pZ z8^6iADsOppmfiNb(H}y!zG37vj97{x-cPyYE8Y{so+**B)F;9*DeUay@R`%U#TmRA z%6*Y=;hldjI^Xw)3k>TI#Qi6U`;^~GSH>-N7&0G`&Hvc{7C+i8(-fZgaUj3}!72_4 z_`~eM%AaN)My-!N#yr+DeC)}1!h}KJQV`m&Ywh5!DRUEK>QkM)TOoiRJB$}Xhfc@t z-wkjbIzvIN_(oYIF zQ=#uHd6`_ZVJXo3oy-j=FekG!b{#rT5g4q^0kBbr&9u9F54}9GbaO)lfb1-QixYym z(AbbGgCf>hvgtKg+&LavzKZ~H_m49>d(C+2VMw`b|DPsjzp&y}KEj9#%Re-;8dKq`UJlJZ-f8T84(|Nf`TGltE;_1;Jk2_aNjmY^ z-YOmPZ{<@0Uc3{7g8%ZryliuR5WoS!nxDt{`)~%07%(iXq-l(c~-MCWd^(`|-_va5fcB zwcO&*-fprhv6H|Z$(nOL!z|ewh)~#Y#MFyYcg5c=R0b?K?5+jGAAPg8C z($ZbhjSM6NBu3Ye?(XgG`}^H{|AhB*-t(O2Jg0Pd%@IYo#rNW&ucI+d?;?;(d0(On zv)XWc`>k>2jo*-Twe?smDlCrIIpDQ#wso?e=@3(=gP?izl%DChmL*@|iI3AzYOnnM~2$VL|MY zxHEiGCSf~`%bMqdXvbNE?pbqb+C00G1N7A9S{y{o?uoWD;U@@(h)O9}>LOOns$NRO zBn_~5-$qQN^h^+g@5pWlQd{I=jxMOEq;ZTpYrqu={5MOwRY`QZ^{UCqA%3zjSn@5l z0`~W@b~)pz@xNyah?kQ;4sbxn_GxT0VYDbo=$ScB{pI6rT&$BnE=`xgc_ z0PgP4l!?E(PVcAVAGmj!=6fdmzS~O_;%`fTC6|_~t527eb9zY@c6H14XlVORzBN3! z*17R(S|fl>#d(@NFuCqh?;2}l@p`EylfFF?<&R-ScsIRh^8XyE1U=WzUpHN@+5hb=#UcNe=auYlSOwwQyx6 zk!A7MmxqCq?e}X48vJH21}@|n;h@8ZA7n}rAw{7&`6capnb!rZQskVWpK=O=p-;rb z*y4+}TnJ#ynhkWW7EAp1Uu{~Y1j#>+G#BPrws$UWUJB)MpBOHzYU+ zsxDJyQKlozLko^+;HetQ*KvoK6)G%4oR6cN0ty_Cc4V9-*W|F|M=Lp>A}_{I*cl!; zcJPjhPD<`S^BDMQbk-&!MD4zPw8+jZa}HvgQ>$wh4NtGodeyrfB|t8H*;xcB7?gWZ zO&#WD$2NTJ<=H=AW*B7B-H(l~38O!F5Q%~#VA%F`C0+$Hxg;mpFwvk5^GSSQ#gAXS z%=&z4@79NN0y~cb)?FMr*uaY~T}|b*va;E^loT6+`;=SQ7CGd@1?@I6>Pv$62>VeI9y=O zoyrBiX%8l;uLrY>&7{hOCGAKZ<)Ab(&roV+9VkL}`8(58nY z`&e16CZ$nF&NOyn$Aikz*!$YdWN%lO0uhOsmhrpe$h!{6Vg=^zbbY+a6e>U?od}*F zYMfO5qu6k6(!;xn)=xM3+flExhQH(>A02NrCXOg?uHw1Gn>-wUvB87wuAO_1e}$9)PLhPGpB)+lQ9VWB&jxK#WB z15?5Kxt@xsvnmyW3$M<|{lRLc1DU13z$dO3BAhPz7L>$YY@ILswrSPQe2pyn*$BV9 zkEJNsJA1FXi#ZThke$i@Ua%ydPWe1y^c#PW4e7V^t~uZ?9%%I%+z!g#ivtwahi8l0 zS$oYXULc)-9iNkcC)sl`TO#(rwxfqGv9*<$UuSlY3>Xe|8MW&s3_&Ov>;&a|AJLKB zHw8F?lhBO|`u6R^<=lxrlO=JhV%fcYEvKJ_iAQu1Y*+$lCkoiyxING!EHBYhbM2^O zu!#J5@N0ob+lV=-LP$Taj1Nz`lzxqdrIsF*JQm!kr;$Qf*QjiO=1loS2ZH^#A<}b04P2{fg{dW1ulZu7aM87?ALPs*i(KOC|Fr6 zedIEfHx2})<^1N3Rcy?6&E7*CKz|M)1gWI%A7URp1g#Il_>p8nhOcHH$4iS1lONv- zF{*ItaXUFxfm#Z;rpP$?*#@A9M$`#UuTXD7InVxHN%fBQPbAw?Ovf&`Tv4EkCE;uu z7g=BnHpRG~B(+jp()jvM9x7Q{Cw;dw|1+*qu+tSj+d$!x7Lm*>?Ll_~a2+HJDtj*s z=$OX^YudpW#MwQjGcCKZaW-EkV!UKMzWtF62vsPx5Hl1SBzQm&Vh@PYwebLtPJ^5fk1p5f8**SM**!LyLf(R25ZzL{Av1DK|eV zxbI>3_yDmhzUwMArTo*&KAt0DRnz$Md&tAA0dIdWf%V^>c07{dmsAh-aXwg+Cn1z!|og^ek0qJ@C{E5REhS6 zg{=nYZ6W$_xN8VUCVkV6D#s2&uFK%Qvq#z-YPa0Rn{0lKhi4q|WW!$cLJ0O^?xdrw z8zxpFSJOF8zJs^lNwwvLo}*`fCTte`gq4%Yylidw^IqD`A&xh-;Y6*$e+w38n2=l? zY_w?zdDB^evo(!v|LT&B;Y-j1=02**hv18Y_|2UI@l_u9&=i{oQXPKR&NWvkdUYz}J<-DhQ+jJF* z1vunID|v&7thl_m+uhW5rq7D(Y||TxDQ{-Se`&Uzzxp7gZgxW<4S!%yC$Qh6{6&_3 zRd~z7&7vLosWGeaqm$7;^VYL5W2XsUJ(fjnl8{cSa zC%Et>-JDiE!$WR1%We`BcNB~}!x5v$Fk^#6U5_MZ0Evg?C_77FPBOT!E|_4R;f_N| ziVC(?I$LgO_^Mg2(=;=kZI%Cr9LKTgTg|rPEK@}X5#x>^Ys$T)>B~4@D__rH{RR|b zDY$7fwBal}{74qSy<_{%B)u}6ewNgC{Fw@aTgk_u${4ej{=_arS*RM0jOmyG$hB!^ zA~=tI{$R_C&nc|pN&{CAK!5nof$fPHWi!v7y8O%VGpleaM6HnTzoq_D;yi264NnlG zJR#`2{858;5<62}(@hBTPyV@WfMhAfPu`v8^6qgUy)%(838+|`zjS5!sS#-uW}u!z z!|z2M24hOsENt#t-1R%3OvG$$FXU}Nvb^kC0W1<*|F>&0X*FYHrK{#V&Jce15~P27 zN7@h+XVAKp_$_)ere7%{P7C-??rP=lWhUjXPjAGZ+)ak_1-29M+C(_Y`tl%!oj)3O zpSS?W8%w1#CG+_Zj-z^cADL$9;7_hl)}FB_KK=i31d~B%1*S^FsEJ#tlkTiBi%APJ z#I}OmPTn5=R?S5|kbq_LBSk;o;r|M%&Q`H4Uwh4qY#E)|ulCSs!B{t3+ujs;Zr2nM z`XFWLW_nC-Dj^Rp@wV5s{KC(8qrOa;H?P-Y-#vVBd@-U^_uQmZ zN4jpdGd=Q!Q5rTDHQ*s$Aq|RJts>;AYnZH??f2GP;Ggt8@x*<(Rb*n4n7@hRyG1+I$_LuH2A)F34M!dQZ*`2FIl+M zzxyi_kpZjXa^d#;2TD_F*CocBmrl}ayUA)-Baj0nHA8Tml3Ff0JyBZxFKf4bKA(J@ z@*Y3qP*i-8c734%p!fVHbG4Jm3&bM4hs}&?8L|!;$e^pUokq2%^5;9y3WgPEy)CQ6 zymb(I5dr&a47&f!{AUPF>T^IsGN7#MH;41FyL5!bWR8e+Z~K)zdIpq%BjA^Wfhw;F zJ0Oo+cT;lRQE80^o7U@F&3d@-%SsaMu^_Lk()Q2mUY0hmeSXK;#m*u_WE3+|azkaO zA^06h?^abTwd)KGyeEen(3~$OH+99At@xV-PtRxF7Ii$OjqR9&2^g1%thKwI|BKRfPDdSZ^fyw z+Hvbtf?D|KKh4x3W|(Pvpaw*h)K27`J$V9VU;(?)hlPF*f5dI^UQk=2lk^!scmRqo zI8jFhj+MB2ABpmAT?cq%sqLrH0{r(Ut12mnrM%&f*J%kc1;zHi)ZQ8VK_`jtK9f@M z>ig(|YLo3t*^+?Wx=OIV=k=dfWJFj){L~BzJopTvjV&Hly6QEz^jC+S@|Ur^NklIw zsatM)pyYPeoJgMKC0l5+Vuaeb`7-NTxNU&qZDJx6GoL06eAeN;t1G{qT70ICS){h3 zDQc(=gR<3FFCTPhrG^^iHW^M*3my>wj$q`0y+Som4L|3O%u7_wdf+$ZIa3}U#d|#F zM085BUlY_?g6@}r#SiarJpVrREv55LV{k@r6pr@8tKQtFdK=PhzuJ#a836t=#WfqC zvTw1ex;BS%fX=P{e<>fUfC6>qtHR*=+1r7Q8zI-fRdsHgeWEH}nZ=8v6@OPgzbPy> z0O)0WN!7{QQMdJag3mJ3O>GQ(tmzBP-3M34Xds8TR}BpL{Fr1nY5wD^P0xaEsRzK; zYl<7U%w9~{3?hWh@6OXLs-i;KnJV?VKp$o#A#pl>h3YRRfHKRZ%SGUg67WARW~L>4 z@`(C%QW}Es!}*8Ywhq}J_FSHmp<0j<)shw+hUsoTC26-Ao2U*^9ND2C*S}!CCUcwh z#+CGoWoN(T@HLj)BY_q1bq2*$4=$fGAJ`teJW`W=zhiKOT5uORlu6T@H&jPB1BsP` zBC6EJ5HAf#=nuqo6Whm1qVF-R6px}gjMAX*`}7Nr-gEM|A|Cc9R^R8uL$SsogGr+L zWz-w`vyZ=qa{^d}W0{Y#{Qd^YhclKjwPlu^dA|y6x05^gPFWo@99^dZN+xt?o6s zBIJ4*-djEQeC=)cnEpDz@>$CSIk&extHH!-%4{w53+NxWN=ij_RHgI;!lS4NH^<>h zgsf6EXgEp!Hx_?>_d}87)=nY?-}15H?<=hb_7zyA_q_r1&ijMCRY?dxTT^iz5|;2u zfKZLJygQkk(%C(LH?9Bz&X8)mWfUwxfWMM4(PfdpZV{YPFXK+ERQsQZqI39tN}GXy zLuLn>yay-#aTW5NG;{n9_%rRGOAiZ>M6X%)`4%KL(1)n2SQs@Yo$sixTpAVjZ((-XKez#&D)-H5(oO8w_y#PV65YNerHW5KhwfVDJn~Gah%E7m- z-%69C3|mowEOnVMImTBp5jlgw!Gh?;%^(xp2alWfP=iZW`?5d(T7f-e94@bWaV~|a zf?46)N=dMR`nG?+shIPSE4JyJp?@hB@Vin~~jxRK` zg{KV{_XikF*R@ocxlKuPmlyCS3u4rbMt_nf$NsqYEaS6SRi2=F=+~Dd^2G3jePoT} zE@RQgM3WpWq~TP+wf;tHiAuBiJ7yxLMQ=5t@l(g;GxpAcimgdp#6XHd1M? zKuCgul<4V14;?%E<;!IfNG_i|b^OT{0T7W*brL0+DSy6k(-^vOpW{m%?p_JFU9hF= zsL%`PCS5Lw;fi;}I0+q5dt#w(Ap7-M9n!D!T z%(wOabu@Z?=zq&)$!x`|rYG%?X}rFFQ=lPC@cxY#R%YrFUgXD{fHc*%o6)}3*eU!? z4xo}9s#nY4ax5)Tm8iYXIV4?Gy;Z0>iKgoXUE(`HL5%d}Z02+#laMEYqrfE?hIZDH zdLQo$xMbw2{yQ-$u${+CYnQH-v5GKCdcYA9ptc-6%nU>mbVS}LD)2&rL$lPp@`9Fw zOY*_GT$21MR%H1laR%8Td6o`ZWZVu!L=hcYH+MLyxu%Jqu??(h%=7MrPzF4d#?t4U zve;{pTi>1eM1hL}_By!X=6C&nIyk|&B@#r|y3w28w6Kk`p+=EN3t+0~!2DEwLH053 zX>0SP3Wu%#qk-4j->W_1RnTiK2qFG1uDH5T=z=b-cwMcEiDSEar+{w8gq;gs zH_tHr|9n^4wMrvx2=bG*vc0!Oa6nu>w+teek&Y|K3NRQN z6nVkoR=7nBNzcxM&=FM6b(zheDavC|$L~y<$gR{C_f^-zF zzZq~B-13wx%^cIaFe;6F)n46_Mj7Fc)fhZ^#0RjJGCsRozR^d%ho$_oOc~d+S~!Q0 zDR5X2Gwkz-N9p{v##8w*G_FJ0W?HMF<4${MfozHA&P6?3aKIUrJ0vR|7;Ef9d;WW? zZ0p$?nx~#!q?I;$`?b-xB>u$pgBJX4PfZg==A|3%vxhZI|2=jN{KzR+(#ew|D6&#@ z@~}vrA4^tWKg`LmT%4xnK?i~M)Ne{RS{R_dGoZ_>4L0!sFIloq5K~>yAn5tu=J~J- z1+;IAmkh{w^X7QQx&)K$7D~dD_fa8Ip?!)|eVzStr$FdHt$L+A0(Q4UnYiY<3jpvt zH@R5uJo++14&!KXUEd%rq0>oFq*W4kV^YQ!l*J?6<~tiw@t=mm8|xItfXy_fu`Bls{Ws(z!M68G=`UUBGvC%cOQg`=+cbY7+(!2B2o(DwWzarq)oaDvT zQhegR92S+EZ*uq-XDS0=kXO(TvC5=6Yi!%IxqNjoj@+6sx5VlG8IsLzzM-xD138BH zS53)0O5wdzlIce=d(p}(d+mJ+dKBah+c(3n)`ve@eAOj%w3HSdUj^R=zdEPu3O~Q- zShBKEG~r@Y4nw=NgrCboY)VV$T> ze3A;|Zs(|@QIb9qOFf(r1bMR^-jP+@S?7Pmf@9gakeYxydBexu`80MFOKYGtZKEbF z9vCi@SD``DCS}NfDbzvpBl%8&Asd`*1Rqt{}aKdHZiQKIin`uxkOAPYDhH};?B0o zoM^03&BOAsOJ`wt$ALBe(-8k zBP!ofg=LFR>|XNBms*O<(6T)hn$OO?+sJ0@^m;iYuSJ(5H6QdS(Op$pPDMP^zHZl+ zIIAY7y+!v&v3tHFzPwa6cp+}aol2@^8Ip%MH*iDkeoEk93%B%%(3-K*KALHUPTMgQ zQXD(L_m10!e^+M)$R?~{OLVAtq{P#9lKR{n=U(uSGYE)P8|eKov;NI1R+xo+&$N!3 zui;-C+@utqsrr_DHW+es53nDvHc|uEzxGrNQ)XA%%$lzH z+xhg0E(7d={gVKdejVY)TD`n7N@%QqK=GwlF|tS@@Mj^p8@S{p)a6GF1CNM6D*x~N zAEZ~B9q~hn^D}u#>S?}xLP;8=5T{rOJP%rLT1Nv8;FZP=FAL3Up&^1k1lwNnpO`*n z23S=}UKdKp*gi60hD-B~=e_I&{5JXoql%t=X1n_90do)F1wa21p#t9M(>lHKfQH9x z1g{~7q9YIR(OPOaT;sPI)%=;K=}mn^TZf~iEQTxgkDC|*z&jOj%qvgh_V2jTVnf1h zxq~Q|ZOgG&=4QWpQSRcs2Y!<`6%<;E0E?4FA0f_F?5tiOCO1pdX?H^AKN{67|AJ*r zEcwmMf`eCZHg94C2tOwSRZcAj6a%=`>tZTjs+H!a+%<% znZXPw4^Pgj$NRXNC+y&O!m_Zo>^xCQPNx zdod`NBx#bKp z8t3B{xKtnnTxd+q16BQ3eCGC-sgZTYK|pk?&%H5+!!nW8`ZH_LG0p`~SWq79y(R(C z(%966Z&5g6wkHYneB2Ng4ceT+UMmQwU&)M=GrjhBU#+ZH7dw~ZnETUzJ#$G>sgN*s z7LLbF=Q}7L&9WxpN>gROl#Dv@aW6pS@1gcFSrU^W;R<0;sY_g);p{ZsNxp*TReY;@ z!9iEpEFo8VgFkPQ+T4tl5yPRL_n&INs$(F#(plz0fL~(3zc5(dW&0JfDid}jiq3Xz zj`;E(qG*DY(-Qz34s%6o%l9!PzjhTNWIrBqo~sP9QE#FDJOU~82>VmEPoU6njbmYQ zeEKgHDA#6n6jbuIySLGT`X!Ci!}OVKWTz;w$AF2A_4A3=&X73oj-L#6=NCA8rF|ml zt7W`dxI`a^fXtl_&Jk7G@es=hA+A)9h!;k4ThA+SWTu*#C|$AL3kTVAxLN&!ugTd@ zb>$r(y7?;AI_jIH8SWApD}Lq3CjXsp>55-ZE(TT;C4pi46WQ`%=>@ASmsp<_P)SE;n!L z7=o;1Db~+qOqFEKU4W$p%7@lzH&0WI76}1&Q(BsF=}F5Jm4bk3PoaiE!qOZK=b|vD zvwL&9nUPVruNOh&dvsSXyly0FR^Zgq*x7IvgSccjqZJQsrT@SukGepux?#d7#Vd9z z=}3BftjR#LIG+U`N_l%1-z5IPao8#~^M?VxsDx}j@l1o4zC5N6k^bP!c6JOWM$50I z++|1iZca(m&61VW*2ZjC{`bc-b8DbmRVtRSJ$esSrg!}PN<*92v9^0{QWBKBb8c@F z12%YNN12vS9hYA7#{ndX_gpQ0jl}_zC{Ww^Tt3y_JELb89xQ60mx}UourFTwxM2tj zz3kc$?9FedQpbb;c)3sQcl_Heu@mk2y%A*!d@s*poa8dhj)&o_VUyk$DkFhm-j@ntSr_g$t;RU2y?cc)cvhcwcW+DQySi@UxDbqQSk11a`Qbc zH^xG}zv<*mNj*JQVLDB{p`?o8wz`eU;p~vvP52dGC?mjtV)xBb9R)_c&O#*6^D1zM zE7R1LBE$oeZ|HOVZu(0c-`daPhYNO@s35FiHpzPZ(qk<9AeD2o?}6d9%3W3`R#uj$ zr12A^)&`zaKQmbl==_jNg2W%*WKtgAV;t>C2_E8y56cA{EKi?2G^7*`eC!Vh5{8J) zJTJSUto5IjPy)}}>tV!|H-FoX{AK&3zVktLaq$3vuooC!{M>wt3ucqgD!eRRT)MC`GLB#D8@XM!jY8gULd-N~bidUarTENxsNx*}oMLwU zqPZceB9gsyVig97=U*d^MfeZn#*c-nf>T;8|9UQVir{)7?Aw2Sg*PmATRMzeu7vH6 z>b~P*wSQAKS$xbeB+xC`G3RV0`QctQRR(T2!@oUyj=x^2F7UsF1w-JLLE;pK z%QK+|0PTd%;0mScz2~L>fK2V{m@d~3r1Pe|QMjJ^rStO--LtKkCc2M|O}JzGwR?2r zN5u}qgpOWlOy@e-gFT7OgS-8PJmFFU!5^t;dAziJ1cBO)Irtg%`PMsGKM(#r zFR}ezrA@QK%W*z!QTyi~RECgh*R>5fRi^d3xJ=ivHig$^6wdRSuvyr*N zUeoe?vlPUla{b0e!ty$(xD^G{u_azr1e+(y4dmAmiz9TS@B4eR-JD? zA6Lc%${j2M`1(;QYD!I_54<7lsLHlooPW)@hzaE@z`XEWQ|RL_m#&05Ss{c-(!+*u zi=o#sY;B7;71^h0i_rItPbCToSlw8kdMCSQZ@i3{43Y7>+L-!$4#K5U+3U#?rD;gg zZ)D7_{hh}!0sQGI?d>vfV2kjb?m%KdMMN;@&DBsw09!!SgSR%fZwE8-)y@*t7-2SEmRb2F0#~m8|$Y zC6eB1e+Su*9~0myeCYbki&n9=EAj^+lwq=}**|3!888Hxby#PpMj4+SM< zP{B*i{Xf;iEr2*9hLLj3>&G2Zg=3Yj7ty~{`N{7Hk>sZQgryw6dgbaS^5BF(ifv`1 zo2t7E8!8)cVpdZ`9tsORbcR#ePTB*4HgU>NJ7Q&9zL70Rw;ms%`2(a}A1=mh1V#DC z@9Bq%{`n>T=paF`Y`(R11&Q0 z|8yF1W(^QHnQyCRk35op-3eXbQbhVY*iEbk*zQpnJN)l3o*sxK$KP99ubzd+YbX(@5;= zyKjpDCW!%?-m0X@9TkP)VjaKAS4f6*^i=NLwzmBx%5j+KCJFtaL0>V2Enl?VH3ca> zl36}&pZ1gOAna{N5mmo)GT9nH>`})*K0(-dHa8Kh{7_5&F?$lxnYqg&5V(HZ<83`% z+pv<^zThzNotM6?gXrbUfPn-q)U$^7)u$$hZ$l~W$MBtx}kx0Jbhj4`|Yq+ zEms!|gAsFU1FF`{Nz!{HeKY-|<75J$(q}(?L1EtW+Ii|M#h6ND+SXYesc6~3_Jdx#`__q^96FJqu?|)1c z$L&);W1aN~rJuIw7~nfKHz}Tp|2$qFWv?F9U;i$L{o=xyQQp1oBRLHxawQ!?TmeQH zDLFm3HsBZ#6Xkzxn(J6(6d?%Yn~!{}?WfF{X^}dan%b`}aH{<>-WY?*66HS7$lkBg>p-DlVg!S0mns;rN0?T=cd+6bV#pkuaW0hh_$vCz@TnN}Ua# zQzkDIS>x)*BcQ6^170mAq%FxeTPk`&2Lx>dc4+O7HgzQ9UEs#X0TMUjW+R^3JQ-~h zVnz`uA(72H*}c(22#~~b1dh1{;djAO1Tf@sVbwNHD19WO4ya1Lu;3#9dp{VN&?c$x zR$}!%vM`+fOsgZyam6I0_7L*Gsgc5`p5?9~eD9wUsGz*lEP$5J6d`^6V(t>WsWk_U z?O)bGi8?(;l&Ow!upx3l)#4SKJ^D>i8f;pj8@0#bvHi{TDd_P_CHijJcl`oryac%; z_^*lKKenTc=TPRtm*d5}&DSzDJCy|k5Z5*`WN(XQ@j6sfUIeiv;?UE25{uKrxG?f(7v>gO*>Ef7FmU5s9{5(hS;AxCOlXokOslf-TU<`H$;N z-nnL$2Jw~wX<5!vF2?G?n-F@}yAtxh7dP21X~t)wZK>(bF;Tch*U@$ghsin*6W!U^ z>Z;<^JQ%lm3K9g z^TXnR&_^rZtWrV>Qf!tSfu@gmOsshk^mr+wq!Nu*;RsH!dY2nO$J+!aYK`mn-fZ#f6Gl=(pz3&y$?U94C)kK zd7AN<>hROYy9%JdrjDi2pTVZ4!Qc)+&{^YkhRU(_$hl66_+voFA>##0EUBPY)7U~f zbnzPMPmSd~MXkNg2o7W=^UDZ&8?bRQIhVIk!1tO3r{|*33%9GEK)FqAjW-p;cGgEb zvw4;JIeUyj)FuSTn^}rG;w{AB%aRoB-MLR+W0F~>{5}nlzULasPdLiV4{t(AZMtn3?<9a*Rb~6F^6>=)wI)&rd`Y3xnd0*aX3mVq;k?8H z-P1nU=Y4a1`*E&+_{agj3mnI}tg|X%v>Pt#N=}n`-P@a9*3D|16x6l(`IA|zpuHZ* zB*NOk_OIDZs|f6wPe`BRUgw5JV#r8`Z_y@T>1}H{b)iu!*8uCqE^qT5p`qZJ-GjR$ zK0Byhk9;AyU&y0UISRPZp7}-pTtL-l9DBnU@WUIKFq!&P9Lu8h)iaNqqzl>cM>;KP zTvLxydp>-Q6sqIpGSLpblSfPtkyouMzck%Ya;1~{zG9GaY3_>z-n9$i_iSZtHJ?5aT?509Tt0I98~zKxXQOuwEuB93?O zW{@DxyoJ}f-`VrzS(!Bdz+RX`?@XM(FT-qR;PZhYAjx)s{=y-fk|#H@26^4x+K{g0 zH&%c74oQNDKfQeNC->lRUKT{;mvL5}yno)A1{6P*xt+(2FZWuHrHWIx(VV2~=GPJe zK)6McDBIjLPVHV9KmM5&mz^(UXKHMUy|~_ui(jIdEKonYzK-)6W~JM)^FI&|;-9yi~oqflpbres7`S782T;1O?;S1>0l@?PGiLhQy$i4T={PpU#q>a@NM1vfP!(&wl_A@&#EOQf!G^ zh7ho0oI4&F$Ev-4st~vfs!G z_khgnmHK`w0}4PTp}*_lHgt&Ridf8bHmQ0?SaxjT?AH1HzwtO@+h8iGFOi6{vWRts zXQG{WXiL4Ho|FShI$Bksp}eDS8N2xn`5Ig!eWu^y(7FrucRnkP10jwgR`cyJ7}$7B zX@=bzl&j9fBw=onC+J=>IKB9D(iC24w}2++UojXYINR4Wm@1*xg||^V5!PZU0L0x384sSx6Ae8mn^szLb1aIhr{8@xJPe=Uiu) z*64DTrF3THtFGD8(X7z}lxIc>&JKU5%|hI7m_)(&k*Yeb=6M1kV2bT48*5sH=Jw-; z)f%I^)j6wPFkN>o6~i_x1$YW=Bgz~}gZ#&1@(xB(t5!3#o$0F41Zgs215sD9EwJa9f*CQ(fdL zV*-?da1s^P$hq+8#P?XL^a%t1?`6T{KSCA%+R!~={MCKdNL#PMM*Ca=5)m0)T{|I^ z;cw-0_U3_rkmmOyA8Y_gzKV-qnSc>9!g%jdQIVRV`?kXv9rZTEq+i`k=ev9F@NL_ zg!-X#%=^i=>Ob#{-7m`Wt%JuLt`dH7~-0Nc)?^}Ie zFbnoK^pGSV16d#C^?>06s#S~pi$l?NyIY##Xk$}iunEljqEW~&e2Aj8X6)I$%bZVh zD0Vs4AHiQG02@8c@N%Z)?j+ zlbH0A^Bf`ztwa}UGs-&BtypGaa^+^$Rc&FV`?5X848x>e`CK4XPVjVcA}{N9a^1Dl zu1LcQbRFm|Tf6#m1yMM;-pQ)}u4L}SqV4(GtMGwW>3C7u4zZGem(!}>`EbpL3^V^F zcB<4XsQ85XaVCb>nYc~+(f=2Z5Nh<+I@3h0)1RaRQUY#+|6aoH)++@J^(Q}tJ!A|x zuBhHAfm7{jQo6ns`uzBS??vgj?Tzc4nJq<%ml#nkx2*{A%;nOP`Y~noC4KY}ze4p_ z7VK&JW^;PTs+vQQF=^Mf_NuNYkx}EdK!pUWS?N}9SJuE{_r9!e?&HW+Jt3=97rVB% zGYq4>u>Aj;%Q>9bgLC;L3mixDFgmuov3)9o?xZD!66r{TqPZoXMvM|f(bHw@M%%p!b$N*i=?lT#}4g+JSG~G5Q56>#? zvp~#DZ|o2d^k%7CqDaJN zBvvxta5yV3%?l?vQ0~J_te@OiZJT86+fzeOUDcACZ)XKzE6FJ}#P?}j>sFZg4nWu( zw$J&3N{7V&deExX;;uYLH4mYDZnMheCsQ8n?)@&0T{7oZhlKXn*h;oRVe^jaH_yi>dM#o#C5k%1_G~S45QCHb3~s~wi&0c5^HlO zUaDrg$E&sQDWw;lCh-m>$D+19(EKUz>HQ5#OyibfAs1)hB<^v`$N9!T5R7cmpJDBL z^ED$YA5%O3c1b>WsJH7E3XzUIiC@()vfdpHD>$f*8LM9;0MHZYuR0yuJ)J~x*ZkL; zvMoI(bO4}B{;ZEqjMk!n&?y-GHpXq@jv2kVtI&v1^jpoAII~ z?Qv)rv3R33i#P~-sUqi$t`Bx(^rn<*#u|qjH;N#OJf+2;i|cYXz0jW z+EMrUY*UHH2~W+j`f1_$67u>+SZnpCtB5pQwAH7D`)##P@8%rwt6+c?=C(4h%50Mc z|LCJbE;g`xzq3=kQHJz)seB48D*>5+_e;7GT*$eSN-h&>vxp*4&QV#wlrV7bBc}N_ z9KL&;brXt9gMu&k9#}M9_5w&WsicM#ywDLNG?{akplW#-@@gMp+ zyE@)d`^u2MfN^ZAGz}b?;6{YL5=(Tmhzfk0IDdM2Pu5A8QDJ9rC9bUf%{3nj%OyK5#Q1@KOMVeqh`6JWUx_lt;Bi&X0s-o2c@|0+0W zN@Md*Mwmi)=kwzyMl55aIvgmkid|=j|Kw=G1wn2RVe_WG_J9~btsin+(N*AhyG0sU zsGC|RJYX|+`@1GNYSj!Uh>O@)A2dx5rOY?Kq&4y5Ino{n%-jV6tTogoL0ukg+ZT$> z?BPFtX?F~#%;lTFhVDg|R#f(Ld4H;`ghV1l{E*ixWI=`}Eu!5Cn+d}>qtXllfQKz+ z@~Hm~G9bkDZbcwT{tY;?Xrt_Qm)3-kDH5hfW62y!ZDRDnRnD2nQRRjK5}fNuWcJeI z75$xey}8zIB{fHu@GropkuqhfucNoY$x!dWp`4%l5o-8JX%HxznIQL*0<$vA9aS>+ zSG^jRPn+rv5)!ZDksDi|2i}G@5@*?ibop^`6uo_*7@Ug19e+5mg3 z&^un@zMcr^3}1OPMaT_r-oxjztC9jGIgV9Te9!{*T>R3l!_B} zf<_8o9@6uxD0gGD5&^#H)dre4n-95sH~5<6d@}j4HymgAR|6|HARpQrd|W#@ZMoX; zs6d7M3&bT8H})reXxVGQb3+#}03_RSJbIQa?DWd(EbC15@#p#bteu;1bNBqi!^}n! z*&fTp4>~fp!|r+IPbf`(+!1i9lkgWE;Dr0Ke)bwKak31Pk3s-cMRX&=Ku_}*{(YBT z(0B!ULgC}Jtc^kYNj2~FvP|lA>62a^!fd{csEmRfoubGfKPDo0wU>sG?4#c-Eh(AD zw4N(~-n)TA;gODHhPT7rC!3T*`RLNPZS4aM@xGsefR1Che5GVr*ou7cvMBCtdjfQ_ z74Fg8jm{2%`f&GhOff)K{!0X$ixI?{qZF+Ump%MDox}ar5bVRE?_Z^*#+@W`Dow$6mlmQMp5B)sdru`n;sU?8% zCKcGwbo(k=?HpI$Wz4inZj153H6Q#fB4DlQ7W;L6J$zlu+q|j#fzV&OKjJ_KNxfn) zx>7>GN}84|OCv3puA1H;1@gu2liHrt@o^Ie7yaT~=rNc%Bm&{~d+sPK8Kg^f6L1FC z=L`tm!Y!$j@GVLduy^|Z2l_w-zjx(s5_Uo`cYHI;e)McCKHD;y0<-nyttiSuwwOB@ zonVMxYMBw>M*4jw?05kSa%Ap0T}Yj51tG-=jn2 z^ypBKSZC8#W|?i;%CRlO%*e4=!*lE(!cx-~>D!bp!A;d?UzBBg?m$~b=g)SO_Y5ph z_&HtEpewkc)c~6q4nbkj9)t6|tm=wu!$QaEIiJ=CGRjSz>Cvp?((k7)U!24;Te zYCrvtJOA1HJj_FuX4~lQpGAuY0B0;sdB>dV;sX9~&+D>m%NucYA&-*SczmlW@>HG$ ztehfX0n@;i!Z+5j(Gv`+@}d1eEO@yKW>NTRS{3d5UY1>j760)ke(9q;s^pZ7I#w4c z6gN+&bh;zZzB$JdU+XWN@={t{c`Mz7&u(slN@J!QOfmLTCgxV>S7z_gqq2H*iTE+b zrmY;8Ew-&W8F&47HqQlr!y;ZI_&xt`^0VKNZRf8+fH-%Sa)*Q4xNyTN&`O-L8qld( zc>a&Wz#~yuu}`2=q7!#EpQh{-5OO)#^E8{ZOAzcYJxq2u{STTwXB#-!Slly%KM8}GCn)BA39p1M z9c@R}|JgMA_=e%9|NISp?-_@r`iSFNeHo5=>sOYx{=)R=lpzduFktbq z57U;kPgYkYbHFsnBLK#pT8j%61^}k``9-WM?>bxEz9j7^L`vU87h|f@v2FHnbo~Dp zZ=Rri4U?|>w(tD6UxyAI$BG?0J92gO;@oM;jJrz1xA7wbW2e(HyM{) zS0`}#zi!r~E(Y&*7x3mvS-I-`X>a0NiouST*;4vgH%OYk?DS8-+az;GHQCeVmQ3ZOJAfigRJ_8iiSugnTGuls(GJpWMr{w|≥Auk!L2@o&nDJoH?pt)}5 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 literal 0 HcmV?d00001 diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 90ba2f568..e744dac8c 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -148,6 +148,7 @@ target_include_directories(enet INTERFACE ./enet/include) # Cubeb if (ENABLE_CUBEB) set(BUILD_TESTS OFF CACHE BOOL "") + set(BUILD_TOOLS OFF CACHE BOOL "") add_subdirectory(cubeb EXCLUDE_FROM_ALL) endif() diff --git a/externals/libressl b/externals/libressl index 8929f818f..dcf9a84ab 160000 --- a/externals/libressl +++ b/externals/libressl @@ -1 +1 @@ -Subproject commit 8929f818fd748fd31a34fec7c04558399e13014a +Subproject commit dcf9a84aba598f827f65d946d31c3c93af62790a diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9f976eedf..f05f35ff0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -143,9 +143,12 @@ add_subdirectory(video_core) add_subdirectory(audio_core) add_subdirectory(network) add_subdirectory(input_common) -add_subdirectory(tests) -if (ENABLE_SDL2) +if (ENABLE_TESTS) + add_subdirectory(tests) +endif() + +if (ENABLE_SDL2 AND ENABLE_SDL2_FRONTEND) add_subdirectory(citra) endif() @@ -153,11 +156,13 @@ if (ENABLE_QT) add_subdirectory(citra_qt) endif() +if (ENABLE_DEDICATED_ROOM) + add_subdirectory(dedicated_room) +endif() + if (ANDROID) add_subdirectory(android/app/src/main/jni) target_include_directories(citra-android PRIVATE android/app/src/main) -else() - add_subdirectory(dedicated_room) endif() if (ENABLE_WEB_SERVICE) diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index eebcca567..18802c957 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -8,7 +8,6 @@ if (POLICY CMP0071) endif() add_executable(citra-qt - Info.plist aboutdialog.cpp aboutdialog.h aboutdialog.ui @@ -169,9 +168,6 @@ add_executable(citra-qt uisettings.h qt_image_interface.cpp qt_image_interface.h - updater/updater.cpp - updater/updater.h - updater/updater_p.h util/clickable_label.cpp util/clickable_label.h util/sequence_dialog/sequence_dialog.cpp @@ -202,6 +198,15 @@ file(GLOB COMPAT_LIST file(GLOB_RECURSE ICONS ${PROJECT_SOURCE_DIR}/dist/icons/*) file(GLOB_RECURSE THEMES ${PROJECT_SOURCE_DIR}/dist/qt_themes/*) +if (ENABLE_QT_UPDATER) + target_sources(citra-qt PRIVATE + updater/updater.cpp + updater/updater.h + updater/updater_p.h + ) + target_compile_definitions(citra-qt PUBLIC ENABLE_QT_UPDATER) +endif() + if (ENABLE_QT_TRANSLATION) set(CITRA_QT_LANGUAGES "${PROJECT_SOURCE_DIR}/dist/languages" CACHE PATH "Path to the translation bundle for the Qt frontend") option(GENERATE_QT_TRANSLATION "Generate en.ts as the translation source file" OFF) @@ -248,17 +253,43 @@ target_sources(citra-qt ) if (APPLE) - set(MACOSX_ICON "../../dist/citra.icns") - set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + set(DIST_DIR "../../dist/apple") + set(APPLE_RESOURCES + "${DIST_DIR}/citra.icns" + "${DIST_DIR}/LaunchScreen.storyboard" + "${DIST_DIR}/launch_logo.png" + ) + target_sources(citra-qt PRIVATE - ${MACOSX_ICON} + ${APPLE_RESOURCES} macos_authorization.h macos_authorization.mm ) + + # Define app bundle metadata. + include(GenerateBuildInfo) set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE TRUE - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist + MACOSX_BUNDLE_INFO_PLIST "${DIST_DIR}/Info.plist.in" + MACOSX_BUNDLE_BUNDLE_NAME "Citra" + MACOSX_BUNDLE_GUI_IDENTIFIER "com.citra-emu.citra" + MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_VERSION}" + MACOSX_BUNDLE_SHORT_VERSION_STRING "${BUILD_FULLNAME}" + MACOSX_BUNDLE_LONG_VERSION_STRING "${BUILD_FULLNAME}" + MACOSX_BUNDLE_ICON_FILE "citra.icns" + RESOURCE "${APPLE_RESOURCES}" ) + + if (IOS) + set_target_properties(citra-qt PROPERTIES + # Have Xcode copy and sign MoltenVK into app bundle. + XCODE_EMBED_FRAMEWORKS "${MOLTENVK_LIBRARY}" + XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES + XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks" + # Support iPhone and iPad. + XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" + ) + endif() elseif(WIN32) # compile as a win32 gui application instead of a console application target_link_libraries(citra-qt PRIVATE Qt6::EntryPointImplementation) diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index e99bfa42a..e4f1e671b 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp @@ -364,7 +364,7 @@ static Frontend::WindowSystemType GetWindowSystemType() { return Frontend::WindowSystemType::X11; else if (platform_name == QStringLiteral("wayland")) return Frontend::WindowSystemType::Wayland; - else if (platform_name == QStringLiteral("cocoa")) + else if (platform_name == QStringLiteral("cocoa") || platform_name == QStringLiteral("ios")) return Frontend::WindowSystemType::MacOS; LOG_CRITICAL(Frontend, "Unknown Qt platform!"); diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index c9d26ebc3..5b218c6d4 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -223,7 +223,12 @@ GMainWindow::GMainWindow(Core::System& system_) InitializeRecentFileMenuActions(); InitializeSaveStateMenuActions(); InitializeHotkeys(); +#if ENABLE_QT_UPDATER ShowUpdaterWidgets(); +#else + ui->action_Check_For_Updates->setVisible(false); + ui->action_Open_Maintenance_Tool->setVisible(false); +#endif SetDefaultUIGeometry(); RestoreUIState(); @@ -268,9 +273,11 @@ GMainWindow::GMainWindow(Core::System& system_) connect(&mouse_hide_timer, &QTimer::timeout, this, &GMainWindow::HideMouseCursor); connect(ui->menubar, &QMenuBar::hovered, this, &GMainWindow::OnMouseActivity); +#if ENABLE_QT_UPDATER if (UISettings::values.check_for_update_on_start) { CheckForUpdates(); } +#endif QStringList args = QApplication::arguments(); if (args.length() >= 2) { @@ -322,9 +329,11 @@ void GMainWindow::InitializeWidgets() { ui->action_Show_Room); multiplayer_state->setVisible(false); +#if ENABLE_QT_UPDATER // Setup updater updater = new Updater(this); UISettings::values.updater_found = updater->HasUpdater(); +#endif UpdateBootHomeMenuState(); @@ -655,13 +664,6 @@ void GMainWindow::InitializeHotkeys() { }); } -void GMainWindow::ShowUpdaterWidgets() { - ui->action_Check_For_Updates->setVisible(UISettings::values.updater_found); - ui->action_Open_Maintenance_Tool->setVisible(UISettings::values.updater_found); - - connect(updater, &Updater::CheckUpdatesDone, this, &GMainWindow::OnUpdateFound); -} - void GMainWindow::SetDefaultUIGeometry() { // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half const QRect screenRect = screen()->geometry(); @@ -851,8 +853,11 @@ void GMainWindow::ConnectMenuEvents() { QDesktopServices::openUrl(QUrl(QStringLiteral("https://citra-emu.org/wiki/faq/"))); }); connect_menu(ui->action_About, &GMainWindow::OnMenuAboutCitra); + +#if ENABLE_QT_UPDATER connect_menu(ui->action_Check_For_Updates, &GMainWindow::OnCheckForUpdates); connect_menu(ui->action_Open_Maintenance_Tool, &GMainWindow::OnOpenUpdater); +#endif } void GMainWindow::UpdateMenuState() { @@ -904,6 +909,7 @@ void GMainWindow::OnDisplayTitleBars(bool show) { } } +#if ENABLE_QT_UPDATER void GMainWindow::OnCheckForUpdates() { explicit_update_check = true; CheckForUpdates(); @@ -970,6 +976,14 @@ void GMainWindow::OnOpenUpdater() { updater->LaunchUI(); } +void GMainWindow::ShowUpdaterWidgets() { + ui->action_Check_For_Updates->setVisible(UISettings::values.updater_found); + ui->action_Open_Maintenance_Tool->setVisible(UISettings::values.updater_found); + + connect(updater, &Updater::CheckUpdatesDone, this, &GMainWindow::OnUpdateFound); +} +#endif + #if defined(__unix__) && !defined(__APPLE__) static std::optional HoldWakeLockLinux(u32 window_id = 0) { if (!QDBusConnection::sessionBus().isConnected()) { @@ -1327,9 +1341,11 @@ void GMainWindow::ShutdownGame() { emulation_running = false; +#if ENABLE_QT_UDPATER if (defer_update_prompt) { ShowUpdatePrompt(); } +#endif game_title.clear(); UpdateWindowTitle(); diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index ddc242543..03b9f54a7 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -46,7 +46,9 @@ class QProgressBar; class QPushButton; class QSlider; class RegistersWidget; +#if ENABLE_QT_UPDATER class Updater; +#endif class WaitTreeWidget; namespace Camera { @@ -146,12 +148,15 @@ private: void ShutdownGame(); void ShowTelemetryCallout(); + void SetDiscordEnabled(bool state); + void LoadAmiibo(const QString& filename); + +#if ENABLE_QT_UPDATER void ShowUpdaterWidgets(); void ShowUpdatePrompt(); void ShowNoUpdatePrompt(); void CheckForUpdates(); - void SetDiscordEnabled(bool state); - void LoadAmiibo(const QString& filename); +#endif /** * Stores the filename in the recently loaded files list. @@ -244,9 +249,13 @@ private slots: void OnCoreError(Core::System::ResultStatus, std::string); /// Called whenever a user selects Help->About Citra void OnMenuAboutCitra(); + +#if ENABLE_QT_UPDATER void OnUpdateFound(bool found, bool error); void OnCheckForUpdates(); void OnOpenUpdater(); +#endif + void OnLanguageChanged(const QString& locale); void OnMouseActivity(); @@ -326,7 +335,9 @@ private: IPCRecorderWidget* ipcRecorderWidget; LLEServiceModulesWidget* lleServiceModulesWidget; WaitTreeWidget* waitTreeWidget; +#if ENABLE_QT_UPDATER Updater* updater; +#endif bool explicit_update_check = false; bool defer_update_prompt = false; diff --git a/src/common/common_paths.h b/src/common/common_paths.h index 6fe585fad..da9c04f2f 100644 --- a/src/common/common_paths.h +++ b/src/common/common_paths.h @@ -21,7 +21,12 @@ #ifdef _WIN32 #define EMU_DATA_DIR "Citra" #elif defined(__APPLE__) -#define MACOS_EMU_DATA_DIR "Library" DIR_SEP "Application Support" DIR_SEP "Citra" +#include +#if TARGET_OS_IPHONE +#define APPLE_EMU_DATA_DIR "Documents" DIR_SEP "Citra" +#else +#define APPLE_EMU_DATA_DIR "Library" DIR_SEP "Application Support" DIR_SEP "Citra" +#endif // For compatibility with XDG paths. #define EMU_DATA_DIR "citra-emu" #else diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index da4bcd6e0..af88a5e7b 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp @@ -786,7 +786,7 @@ void SetUserPath(const std::string& path) { // paths. if (!FileUtil::Exists(data_dir) && !FileUtil::Exists(config_dir) && !FileUtil::Exists(cache_dir)) { - data_dir = GetHomeDirectory() + DIR_SEP MACOS_EMU_DATA_DIR DIR_SEP; + data_dir = GetHomeDirectory() + DIR_SEP APPLE_EMU_DATA_DIR DIR_SEP; config_dir = data_dir + CONFIG_DIR DIR_SEP; cache_dir = data_dir + CACHE_DIR DIR_SEP; }